<?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>75386</bug_id>
          
          <creation_ts>2011-12-30 06:56:21 -0800</creation_ts>
          <short_desc>Web Inspector: Enable IndexedDB support in resources panel.</short_desc>
          <delta_ts>2012-04-17 06:36:24 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76264</dependson>
    
    <dependson>76705</dependson>
    
    <dependson>76711</dependson>
    
    <dependson>77002</dependson>
    
    <dependson>77439</dependson>
    
    <dependson>78503</dependson>
    
    <dependson>78609</dependson>
    
    <dependson>79098</dependson>
    
    <dependson>79691</dependson>
    
    <dependson>79695</dependson>
    
    <dependson>80022</dependson>
    
    <dependson>82635</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vsevolod Vlasov">vsevik</reporter>
          <assigned_to name="Vsevolod Vlasov">vsevik</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>hans</cc>
    
    <cc>joepeck</cc>
    
    <cc>jorlow</cc>
    
    <cc>jsbell</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>paulirish</cc>
    
    <cc>peter</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>528137</commentid>
    <comment_count>0</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-12-30 06:56:21 -0800</bug_when>
    <thetext>Enable IndexedDB support in resources panel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528140</commentid>
    <comment_count>1</comment_count>
      <attachid>120799</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-12-30 06:58:47 -0800</bug_when>
    <thetext>Created attachment 120799
Patch (first draft)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528141</commentid>
    <comment_count>2</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-12-30 07:01:07 -0800</bug_when>
    <thetext>Here is the first draft for IndexedDB support in inspector.

This patch contains
 - new InspectorIndexedDBAgent backend boilerplate
 - new IndexedDBModel front-end boilerplate
 - proposed implementation of getDatabaseNames for all frames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528171</commentid>
    <comment_count>3</comment_count>
      <attachid>120799</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-12-30 09:18:05 -0800</bug_when>
    <thetext>Comment on attachment 120799
Patch (first draft)

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

&gt; Source/WebCore/inspector/Inspector.json:928
&gt; +                &quot;name&quot;: &quot;requestDatabaseNamesForFrame&quot;,

Are the databases shared between frames if they have the same origin? If so shouldn&apos;t this be origin based not frame based? (I know nothing about IndexedDB…)

&gt; Source/WebCore/inspector/Inspector.json:937
&gt; +                &quot;name&quot;: &quot;databaseNamesForFrameLoaded&quot;,

&quot;databaseNamesForFrameLoaded&quot; is too verbose. I think &quot;databaseNamesLoaded&quot; is enough or even better &quot;databasesAvailable&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530674</commentid>
    <comment_count>4</comment_count>
      <attachid>120799</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-05 15:12:24 -0800</bug_when>
    <thetext>Comment on attachment 120799
Patch (first draft)

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

&gt;&gt; Source/WebCore/inspector/Inspector.json:928
&gt;&gt; +                &quot;name&quot;: &quot;requestDatabaseNamesForFrame&quot;,
&gt; 
&gt; Are the databases shared between frames if they have the same origin? If so shouldn&apos;t this be origin based not frame based? (I know nothing about IndexedDB…)

And I know nothing about the inspector...

On the IDB side, a database is owned by an origin. The backend (browser process) IDBDatabaseBackend would be per-origin. On the renderer side, each IDBDatabase is actually a &quot;connection&quot; to a backend, these are never shared and there may be multiple per process that are connections to the same browser-side IDBDatabaseBackend.

Agreed that &quot;Origin&quot; might be a better term here; obviously if the inspector is coded to refer to Frames then at some point between Inspector-centric code and IDB-centric code the terminology would switch.

&gt; Source/WebCore/inspector/InspectorIndexedDBAgent.cpp:185
&gt; +    IDBFactoryBackendInterface* idbBackend = document-&gt;page()-&gt;group().idbFactory();

Talking to the BackendInterfaces is necessary right now, as most of the IDB logic is implemented in the &quot;backend&quot; (e.g. in Chrome this is a proxy to the browser process where the backing store lives). If we change things to pull the logic to the &quot;frontend&quot; the API would remain fairly similar although the objects would change (e.g. this could could interact directly with an IDBFactory instance).

So: looks good so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530795</commentid>
    <comment_count>5</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-01-05 17:05:38 -0800</bug_when>
    <thetext>My main point was the Inspector UI should not show the same database multiple times if the page has multiple frames with connections to the same database. The connection has nothing inseresting (that I know of) to show.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533872</commentid>
    <comment_count>6</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-01-11 07:09:42 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 120799 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120799&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/Inspector.json:928
&gt; &gt; +                &quot;name&quot;: &quot;requestDatabaseNamesForFrame&quot;,
&gt; 
&gt; Are the databases shared between frames if they have the same origin? If so shouldn&apos;t this be origin based not frame based? (I know nothing about IndexedDB…)

Indeed, as jsbell@ mentioned databases are owned by origin. But IDBFactoryBackendInterface::getDatabaseNames accepts frame and SecurityOrigin objects as parameters, so frameId is a natural way for front-end to access IDB.

This implementation creates some overhead when there are several frames with the same origin though. We can pass security origins for each frame to front-end to make sure we don&apos;t do extra requests from front-end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535575</commentid>
    <comment_count>7</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-01-13 03:45:41 -0800</bug_when>
    <thetext>I filed https://bugs.webkit.org/show_bug.cgi?id=76264 for boilerplate and getDatabaseNames support.
I&apos;ll use this issue as meta-bug for all inspector IndexedDB support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567514</commentid>
    <comment_count>8</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-02-29 01:47:06 -0800</bug_when>
    <thetext>*** Bug 46270 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603984</commentid>
    <comment_count>9</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-04-17 06:36:24 -0700</bug_when>
    <thetext>Now that IndexedDB is out from experiments this bug could be closed as fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120799</attachid>
            <date>2011-12-30 06:58:47 -0800</date>
            <delta_ts>2012-02-27 12:04:36 -0800</delta_ts>
            <desc>Patch (first draft)</desc>
            <filename>bug-75386-20111230185844.patch</filename>
            <type>text/plain</type>
            <size>26923</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzODEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWY2Y2JjZmViMzY1MzM4
YzQ4Y2Q5NjhlM2U4NTk0YzYxZTQ5OGJjOS4uOWUwNTE2MGE3YTIyNDc0NDU0YTQyMDMwMjk2ZTM5
NWQ4NGY0NGI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDExLTEyLTMwICBWc2V2
b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IEVuYWJsZSBJbmRleGVkREIgc3VwcG9ydCBpbiByZXNvdXJjZXMgcGFuZWwuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM4NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJ
bnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuaDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmRleGVk
REJNb2RlbC5qczogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbDoKKwogMjAxMS0xMi0yOSAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTY3JpcHRzIG5hdmlnYXRvciBzaG91bGQg
c3VwcG9ydCBpbmNyZW1lbnRhbCBzZWFyY2ggYnkgdHlwaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IGRkNDhlZDE3MDBlYzE4MTc2ZDcxZTg1OTg5ZWRhZDI2MDdjNGVhMjQuLmQyNTk3NGYwNTI1NGJi
MjFhYzQ3NTJhZjVmNWFkOTI2NDljYzUzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI3NzIsNiAr
Mjc3Miw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oJywK
KyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwJywKKyAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCcsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCcsCkBAIC02NDIzLDYgKzY0MjUsNyBA
QAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90V29ya2VyRGlz
cGF0Y2hlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9IZWxwU2NyZWVu
LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlVmlldy5qcycsCisg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbmRleGVkREJNb2RlbC5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kLmpzJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIu
anMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQppbmRleCBiMTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi5k
MTZkODE1YmQ3Njg1NTBjZjI2OWNiMDdmOTdmMGQ4M2ZmOWVkNzYzIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNDMsNiAr
NDMsNyBAQCBET01BSU5fREVGSU5FX05BTUVfTUFQID0gewogICAgICJEZWJ1Z2dlciI6ICJKQVZB
U0NSSVBUX0RFQlVHR0VSIiwKICAgICAiRE9NRGVidWdnZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dF
UiIsCiAgICAgIkZpbGVTeXN0ZW0iOiAiRklMRV9TWVNURU0iLAorICAgICJJbmRleGVkREIiOiAi
SU5ERVhFRF9EQVRBQkFTRSIsCiAgICAgIlByb2ZpbGVyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIi
LAogICAgICJXb3JrZXIiOiAiV09SS0VSUyIsCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmpzb24KaW5kZXggMTgxN2Q2YmI2NjRmNzk2MzdjOTRlMDRiYjEyYmI1Mzk4MjUzMzhm
ZS4uMmEwNmUxNmZlOWI3OTkyYzcxNjY2YjZmNGI5OWJjMDA3Yzc0YjkxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpAQCAtOTAxLDYgKzkwMSw0NyBAQAogICAgICAg
ICBdCiAgICAgfSwKICAgICB7CisgICAgICAgICJkb21haW4iOiAiSW5kZXhlZERCIiwKKyAgICAg
ICAgImhpZGRlbiI6IHRydWUsCisgICAgICAgICJ0eXBlcyI6IFsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAiaWQiOiAiRnJhbWVXaXRoRGF0YWJhc2VOYW1lcyIsCisgICAgICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
T3JpZ2luIHdpdGggZGF0YWJhc2UgbmFtZXMgYW5kIGZyYW1lIGlkcy4iLAorICAgICAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZyYW1l
SWQiLCAiJHJlZiI6ICJOZXR3b3JrLkZyYW1lSWQiLCAiZGVzY3JpcHRpb24iOiAiRnJhbWUgaWQu
IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9yaWdpblVSTCIsICJ0eXBlIjog
InN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJPcmlnaW4gVVJMLiIgfSwKKyAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIG5hbWVzIGZv
ciB0aGlzIG9yaWdpbi4iIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAg
ICAgIF0sCisgICAgICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAibmFtZSI6ICJlbmFibGUiLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJF
bmFibGVzIGV2ZW50cyBmcm9tIGJhY2tlbmQuIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJkaXNhYmxlIiwKKyAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRGlzYWJsZXMgZXZlbnRzIGZyb20gYmFja2VuZC4iCisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInJlcXVlc3REYXRh
YmFzZU5hbWVzRm9yRnJhbWUiLAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZyYW1lSWQiLCAiJHJlZiI6ICJOZXR3b3JrLkZy
YW1lSWQiIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJSZXF1ZXN0cyBhcnJheSBvZiBvcmlnaW5zIHdpdGggZGF0YWJhc2UgbmFtZXMgYW5kIGZy
YW1lIGlkcy4iCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJldmVudHMiOiBb
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAiZGF0YWJhc2VOYW1lc0Zv
ckZyYW1lTG9hZGVkIiwKKyAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZVdpdGhEYXRhYmFzZU5hbWVzIiwgIiRyZWYiOiAi
RnJhbWVXaXRoRGF0YWJhc2VOYW1lcyIsICJkZXNjcmlwdGlvbiI6ICJGcmFtZSB3aXRoIGRhdGFi
YXNlIG5hbWVzLiIgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
XQorICAgIH0sCisgICAgewogICAgICAgICAiZG9tYWluIjogIkRPTVN0b3JhZ2UiLAogICAgICAg
ICAiaGlkZGVuIjogdHJ1ZSwKICAgICAgICAgInR5cGVzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDk1NWYyZWNmMmNlMGQz
MjljZjFiMWViZTBkYjg2MGM3MDY5MGM4ZDEuLmYwZjM2NDk0YjNkMmQ3M2UyZWRhMWE3ZWJhNmJk
MzNjZjk2ZDkzNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGaWxl
U3lzdGVtQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JNZW1vcnlBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5o
IgpAQCAtOTgsNiArOTksMTAgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2FnZW50
cy5hcHBlbmQoZGF0YWJhc2VBZ2VudFB0ci5yZWxlYXNlKCkpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBtX2FnZW50cy5hcHBlbmQoSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0
KCksIHBhZ2VBZ2VudCkpOworI2VuZGlmCisKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAgICAg
bV9hZ2VudHMuYXBwZW5kKEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6Y3JlYXRlKG1faW5zdHJ1
bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSkpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hYTRhNGQ0NGFlOWIwNWU4ZDNiNWVkOGM1YWFhNWY5MjM1NjQxNzkxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFn
ZW50LmNwcApAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
Ikluc3BlY3RvckluZGV4ZWREQkFnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKSAmJiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNp
bmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkdyb3VwU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRz
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIEluZGV4ZWREQkFnZW50U3RhdGUgeworc3RhdGljIGNv
bnN0IGNoYXIgaW5kZXhlZERCQWdlbnRFbmFibGVkW10gPSAiaW5kZXhlZERCQWdlbnRFbmFibGVk
IjsKK307CisKK2NsYXNzIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpGcm9udGVuZFByb3ZpZGVy
IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OkZyb250ZW5kUHJv
dmlkZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcm9udGVuZFByb3ZpZGVy
PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmQqIGluc3BlY3RvckZyb250ZW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcm9udGVuZFByb3ZpZGVyKGluc3BlY3RvckZyb250
ZW5kKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+RnJvbnRlbmRQcm92aWRlcigpIHsgfQorCisg
ICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkluZGV4ZWREQiogZnJvbnRlbmQoKSB7IHJldHVybiBtX2lu
c3BlY3RvckZyb250ZW5kOyB9CisgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kID0gMDsgfQorcHJpdmF0ZToKKyAgICBGcm9udGVuZFByb3ZpZGVyKEluc3BlY3Rv
ckZyb250ZW5kKiBpbnNwZWN0b3JGcm9udGVuZCkgOiBtX2luc3BlY3RvckZyb250ZW5kKGluc3Bl
Y3RvckZyb250ZW5kLT5pbmRleGVkZGIoKSkgeyB9CisgICAgSW5zcGVjdG9yRnJvbnRlbmQ6Oklu
ZGV4ZWREQiogbV9pbnNwZWN0b3JGcm9udGVuZDsKK307CisKK0luc3BlY3RvckluZGV4ZWREQkFn
ZW50OjpJbnNwZWN0b3JJbmRleGVkREJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogc3RhdGUsIEluc3BlY3RvclBhZ2VBZ2VudCog
cGFnZUFnZW50KQorICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3BlY3RvckluZGV4ZWREQkFn
ZW50PigiSW5kZXhlZERCIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgc3RhdGUpCisgICAgLCBtX3Bh
Z2VBZ2VudChwYWdlQWdlbnQpCisgICAgLCBtX2VuYWJsZWQoZmFsc2UpCit7CisvLyAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckluZGV4ZWREQkFnZW50KHRoaXMpOworfQor
CitJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6fkluc3BlY3RvckluZGV4ZWREQkFnZW50KCkKK3sK
Ky8vICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQo
MCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnNldEZyb250ZW5kKEluc3Bl
Y3RvckZyb250ZW5kKiBmcm9udGVuZCkKK3sKKyAgICBtX2Zyb250ZW5kUHJvdmlkZXIgPSBGcm9u
dGVuZFByb3ZpZGVyOjpjcmVhdGUoZnJvbnRlbmQpOworfQorCit2b2lkIEluc3BlY3RvckluZGV4
ZWREQkFnZW50OjpjbGVhckZyb250ZW5kKCkKK3sKKyAgICBtX2Zyb250ZW5kUHJvdmlkZXItPmNs
ZWFyRnJvbnRlbmQoKTsKKyAgICBtX2Zyb250ZW5kUHJvdmlkZXIuY2xlYXIoKTsKKyAgICBkaXNh
YmxlKDApOworfQorCit2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXN0b3JlKCkKK3sK
KyAgICBtX2VuYWJsZWQgPSAgbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbmRleGVkREJBZ2VudFN0YXRl
OjppbmRleGVkREJBZ2VudEVuYWJsZWQpOworfQorCit2b2lkIEluc3BlY3RvckluZGV4ZWREQkFn
ZW50OjplbmFibGUoRXJyb3JTdHJpbmcqKQoreworICAgIGlmIChtX2VuYWJsZWQpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2VuYWJsZWQgPSB0cnVlOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4o
SW5kZXhlZERCQWdlbnRTdGF0ZTo6aW5kZXhlZERCQWdlbnRFbmFibGVkLCBtX2VuYWJsZWQpOwor
fQorCit2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nKikK
K3sKKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZW5hYmxlZCA9
IGZhbHNlOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5kZXhlZERCQWdlbnRTdGF0ZTo6aW5k
ZXhlZERCQWdlbnRFbmFibGVkLCBtX2VuYWJsZWQpOworfQorCitjbGFzcyBJbnNwZWN0b3JJREJD
YWxsYmFjayA6IHB1YmxpYyBJREJDYWxsYmFja3MgeworcHVibGljOgorICAgIHZpcnR1YWwgfklu
c3BlY3RvcklEQkNhbGxiYWNrKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNz
KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPikgeyB9CisgICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4p
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPikgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3NX
aXRoQ29udGludWF0aW9uKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzc1dpdGhQcmVm
ZXRjaChjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cywgY29uc3QgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+ID4mIHByaW1hcnlLZXlzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gPiYgdmFsdWVzKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2Vk
KCkgeyB9Cit9OworCitjbGFzcyBHZXREYXRhYmFzZU5hbWVzQ2FsbGJhY2sgOiBwdWJsaWMgSW5z
cGVjdG9ySURCQ2FsbGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdldERh
dGFiYXNlTmFtZXNDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQ6OkZyb250ZW5kUHJvdmlkZXI+IGZyb250ZW5kUHJvdmlkZXIsIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBvcmlnaW5VUkwpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEdldERhdGFiYXNlTmFtZXNDYWxsYmFjayhmcm9udGVuZFByb3ZpZGVyLCBm
cmFtZUlkLCBvcmlnaW5VUkwpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5HZXREYXRhYmFzZU5h
bWVzQ2FsbGJhY2soKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzTGlzdCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9mcm9udGVuZFByb3ZpZGVyLT5mcm9udGVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgbV9mcmFtZUlk
KTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpblVSTCIsIG1fb3JpZ2luVVJMKTsK
KworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGFiYXNlTmFtZXMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YWJh
c2VOYW1lc0xpc3QtPmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBkYXRhYmFzZU5hbWVzLT5w
dXNoU3RyaW5nKGRhdGFiYXNlTmFtZXNMaXN0LT5pdGVtKGkpKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheSgiZGF0YWJhc2VOYW1lcyIsIGRhdGFiYXNlTmFtZXMpOworCisgICAgICAgIG1fZnJv
bnRlbmRQcm92aWRlci0+ZnJvbnRlbmQoKS0+ZGF0YWJhc2VOYW1lc0ZvckZyYW1lTG9hZGVkKHJl
c3VsdCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdldERhdGFiYXNlTmFtZXNDYWxsYmFjayhQ
YXNzUmVmUHRyPEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpGcm9udGVuZFByb3ZpZGVyPiBmcm9u
dGVuZFByb3ZpZGVyLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
VVJMKQorICAgICAgICA6IG1fZnJvbnRlbmRQcm92aWRlcihmcm9udGVuZFByb3ZpZGVyKQorICAg
ICAgICAsIG1fZnJhbWVJZChmcmFtZUlkKQorICAgICAgICAsIG1fb3JpZ2luVVJMKG9yaWdpblVS
TCkgeyB9CisgICAgUmVmUHRyPEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpGcm9udGVuZFByb3Zp
ZGVyPiBtX2Zyb250ZW5kUHJvdmlkZXI7CisgICAgU3RyaW5nIG1fZnJhbWVJZDsKKyAgICBTdHJp
bmcgbV9vcmlnaW5VUkw7Cit9OworCit2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1
ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5n
JiBmcmFtZUlkKQoreworICAgIGlmICghbV9lbmFibGVkKSB7CisgICAgICAgICplcnJvciA9ICJJ
bmRleERCIGFnZW50IGlzIG5vdCBlbmFibGVkIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5mcmFtZUZvcklkKGZyYW1lSWQpOworICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKiBpZGJCYWNrZW5kID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5p
ZGJGYWN0b3J5KCk7CisKKyAgICBSZWZQdHI8R2V0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiBjYWxs
YmFjayA9IEdldERhdGFiYXNlTmFtZXNDYWxsYmFjazo6Y3JlYXRlKG1fZnJvbnRlbmRQcm92aWRl
ciwgZnJhbWVJZCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAg
IEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgp
Lmdyb3VwU2V0dGluZ3MoKTsKKyAgICBpZGJCYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKGNhbGxi
YWNrLmdldCgpLCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCks
IGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxZmRhOWI2MGYwYWQ1NTYzYjFjNDE4ZTQ3
NzkxM2M1ODU3OWQ0MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNw
ZWN0b3JJbmRleGVkREJBZ2VudF9oCisjZGVmaW5lIEluc3BlY3RvckluZGV4ZWREQkFnZW50X2gK
KworI2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2VudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCitjbGFzcyBJbnNwZWN0b3JJbmRleGVkREJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JC
YXNlQWdlbnQ8SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ+IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBG
cm9udGVuZFByb3ZpZGVyOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBJbnNwZWN0b3JTdGF0ZSogc3RhdGUsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dChpbnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSwgcGFnZUFnZW50KSk7CisgICAgfQorICAgIH5J
bnNwZWN0b3JJbmRleGVkREJBZ2VudCgpOworCisgICAgdmlydHVhbCB2b2lkIHNldEZyb250ZW5k
KEluc3BlY3RvckZyb250ZW5kKik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJvbnRlbmQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOworCisgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGZy
b250LWVuZC4KKyAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopOworICAgIHZvaWQgZGlzYWJs
ZShFcnJvclN0cmluZyopOworICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXNGb3JGcmFtZShF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7Citwcml2YXRlOgorICAgIEluc3Bl
Y3RvckluZGV4ZWREQkFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSos
IEluc3BlY3RvclBhZ2VBZ2VudCopOworCisgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VB
Z2VudDsKKyAgICBSZWZQdHI8RnJvbnRlbmRQcm92aWRlcj4gbV9mcm9udGVuZFByb3ZpZGVyOwor
ICAgIFN0cmluZyBtX2ZyYW1lSWQ7CisgICAgU3RyaW5nIG1fb3JpZ2luVVJMOworICAgIGJvb2wg
bV9lbmFibGVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIWRl
ZmluZWQoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudF9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmRleGVkREJNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5kZXhlZERCTW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTY0ZTc3
ZDlkNjBhZmRmZDEzMmFiNzAyNGQzMzMxZmNlYzM2MjNkNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5kZXhlZERCTW9kZWwuanMKQEAgLTAs
MCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1dlYkluc3BlY3Rv
ci5PYmplY3R9CisgKi8KK1dlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbCA9IGZ1bmN0aW9uKCkK
K3sKKyAgICBJbmRleGVkREJBZ2VudC5lbmFibGUoKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVySW5kZXhlZERCRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLkluZGV4ZWREQkRpc3Bh
dGNoZXIodGhpcykpOworICAgIAorICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5FdmVudFR5cGVz
LkZyYW1lTmF2aWdhdGVkLCB0aGlzLl9mcmFtZU5hdmlnYXRlZCwgdGhpcyk7CisgICAgV2ViSW5z
cGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJl
c291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuRnJhbWVEZXRhY2hlZCwgdGhpcy5fZnJhbWVEZXRh
Y2hlZCwgdGhpcyk7CisgICAgCisgICAgdGhpcy5fb3JpZ2luVVJMQnlGcmFtZUlkID0ge307Cisg
ICAgdGhpcy5fZnJhbWVJZHNCeU9yaWdpblVSTCA9IHt9OworICAgIHRoaXMuX2RhdGFiYXNlTmFt
ZXNCeU9yaWdpblVSTCA9IHt9OworCisgICAgdGhpcy5yZWZyZXNoRGF0YWJhc2VOYW1lcygpOwor
fQorCitXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRXZlbnRUeXBlcyA9IHsKKyAgICBGcmFt
ZU1hbmlmZXN0U3RhdHVzVXBkYXRlZDogIkZyYW1lTWFuaWZlc3RTdGF0dXNVcGRhdGVkIiwKKyAg
ICBGcmFtZU1hbmlmZXN0QWRkZWQ6ICJGcmFtZU1hbmlmZXN0QWRkZWQiLAorICAgIEZyYW1lTWFu
aWZlc3RSZW1vdmVkOiAiRnJhbWVNYW5pZmVzdFJlbW92ZWQiLAorICAgIE5ldHdvcmtTdGF0ZUNo
YW5nZWQ6ICJOZXR3b3JrU3RhdGVDaGFuZ2VkIgorfQorCitXZWJJbnNwZWN0b3IuSW5kZXhlZERC
TW9kZWwucHJvdG90eXBlID0geworICAgIHJlZnJlc2hEYXRhYmFzZU5hbWVzOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB0aGlzLl9mcmFtZXNOYXZpZ2F0ZWRSZWN1cnNpdmVseShXZWJJbnNw
ZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFpbkZyYW1lKTsKKyAgICB9LAorICAgIAorICAgIC8q
KgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUZyYW1lfSByZXNvdXJj
ZVRyZWVGcmFtZQorICAgICAqLworICAgIF9mcmFtZXNOYXZpZ2F0ZWRSZWN1cnNpdmVseTogZnVu
Y3Rpb24ocmVzb3VyY2VUcmVlRnJhbWUpCisgICAgeworICAgICAgICB0aGlzLl9sb2FkRGF0YWJh
c2VOYW1lc0ZvckZyYW1lKHJlc291cmNlVHJlZUZyYW1lLmlkKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCByZXNvdXJjZVRyZWVGcmFtZS5jaGlsZEZyYW1lcy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIHRoaXMuX2ZyYW1lc05hdmlnYXRlZFJlY3Vyc2l2ZWx5KGNoaWxkRnJhbWVzW2ld
KTsgICAgICAgICAgICAKKyAgICB9LAorICAgIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkV2ZW50fSBldmVudAorICAgICAqLworICAgIF9mcmFtZU5hdmlnYXRlZDogZnVu
Y3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgZnJhbWUgPSAvKiogQHR5cGUge1dlYklu
c3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZX0gKi8gZXZlbnQuZGF0YTsKKyAgICAgICAgdGhpcy5f
bG9hZERhdGFiYXNlTmFtZXNGb3JGcmFtZShmcmFtZS5pZCk7CisgICAgfSwKKyAgICAKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKKyAgICAgKi8KKyAg
ICBfZnJhbWVEZXRhY2hlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgZnJh
bWUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZX0gKi8gZXZlbnQu
ZGF0YTsKKyAgICAgICAgdGhpcy5fb3JpZ2luUmVtb3ZlZEZyb21GcmFtZShmcmFtZS5pZCk7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmcmFtZUlkCisgICAgICog
QHBhcmFtIHtzdHJpbmd9IG9yaWdpblVSTAorICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59
IGRhdGFiYXNlTmFtZXMKKyAgICAgKi8KKyAgICBfb3JpZ2luQWRkZWRUb0ZyYW1lOiBmdW5jdGlv
bihmcmFtZUlkLCBvcmlnaW5VUkwsIGRhdGFiYXNlTmFtZXMpCisgICAgeworICAgICAgICBpZiAo
IXRoaXMuX2ZyYW1lSWRzQnlPcmlnaW5VUkxbb3JpZ2luVVJMXSkgeworICAgICAgICAgICAgdGhp
cy5fZnJhbWVJZHNCeU9yaWdpblVSTFtvcmlnaW5VUkxdID0gW107CisgICAgICAgICAgICB0aGlz
Ll9mcmFtZUlkc0J5T3JpZ2luVVJMW29yaWdpblVSTF0ucHVzaChmcmFtZUlkKTsKKyAgICAgICAg
ICAgIHRoaXMuX2RhdGFiYXNlTmFtZXNCeU9yaWdpblVSTFtvcmlnaW5VUkxdID0gW107CisgICAg
ICAgICAgICAvLyBGSVhNRTogZGlzcGF0Y2ggb3JpZ2luIGFkZGVkIGV2ZW50LgorICAgICAgICB9
CisgICAgICAgIHRoaXMuX29yaWdpblVSTEJ5RnJhbWVJZFtmcmFtZUlkXSA9IG9yaWdpblVSTDsK
KyAgICAgICAgdGhpcy5fdXBkYXRlT3JpZ2luRGF0YWJhc2VOYW1lcyhvcmlnaW5VUkwsIGRhdGFi
YXNlTmFtZXMpOworICAgIH0sCisgICAgCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9
IGZyYW1lSWQKKyAgICAgKi8KKyAgICBfb3JpZ2luUmVtb3ZlZEZyb21GcmFtZTogZnVuY3Rpb24o
ZnJhbWVJZCkKKyAgICB7CisgICAgICAgIHZhciBjdXJyZW50T3JpZ2luVVJMID0gdGhpcy5fb3Jp
Z2luVVJMQnlGcmFtZUlkW2ZyYW1lSWRdOworICAgICAgICBpZiAoIWN1cnJlbnRPcmlnaW5VUkwp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBkZWxldGUgdGhpcy5fb3Jp
Z2luVVJMQnlGcmFtZUlkW2ZyYW1lLmlkXTsKKworICAgICAgICB2YXIgZnJhbWVJZHNGb3JPcmln
aW4gPSB0aGlzLl9mcmFtZUlkc0J5T3JpZ2luVVJMW2N1cnJlbnRPcmlnaW5VUkxdOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lSWRzRm9yT3JpZ2luOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChmcmFtZUlkc0Zvck9yaWdpbltpXSA9PT0gZnJhbWVJZCkgeworICAgICAgICAgICAg
ICAgIGZyYW1lSWRzRm9yT3JpZ2luLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWZyYW1lSWRzRm9yT3Jp
Z2luLmxlbmd0aCkKKyAgICAgICAgICAgIHRoaXMuX29yaWdpblJlbW92ZWQoY3VycmVudE9yaWdp
blVSTCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5V
UkwKKyAgICAgKi8KKyAgICBfb3JpZ2luUmVtb3ZlZDogZnVuY3Rpb24ob3JpZ2luVVJMKQorICAg
IHsKKyAgICAgICAgdmFyIGZyYW1lSWRzRm9yT3JpZ2luID0gdGhpcy5fZnJhbWVJZHNCeU9yaWdp
blVSTFtvcmlnaW5VUkxdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lSWRzRm9y
T3JpZ2luOyArK2kpCisgICAgICAgICAgICBkZWxldGUgdGhpcy5fb3JpZ2luVVJMQnlGcmFtZUlk
W2ZyYW1lSWRzRm9yT3JpZ2luW2ldXQorICAgICAgICBkZWxldGUgdGhpcy5fZnJhbWVJZHNCeU9y
aWdpblVSTFtvcmlnaW5VUkxdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2Rh
dGFiYXNlTmFtZXNCeU9yaWdpblVSTFtvcmlnaW5VUkxdOyArK2kpCisgICAgICAgICAgICB0aGlz
Ll9kYXRhYmFzZVJlbW92ZWQob3JpZ2luVVJMLCBkYXRhYmFzZU5hbWUpOyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFiYXNlTmFtZXNCeU9yaWdpblVSTFtvcmlnaW5V
UkxdOworICAgICAgICAvLyBGSVhNRTogZGlzcGF0Y2ggb3JpZ2luIHJlbW92ZWQgZXZlbnQuCisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5VUkwKKyAgICAg
KiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBkYXRhYmFzZU5hbWVzCisgICAgICovCisgICAgX3Vw
ZGF0ZU9yaWdpbkRhdGFiYXNlTmFtZXM6IGZ1bmN0aW9uKG9yaWdpblVSTCwgZGF0YWJhc2VOYW1l
cykKKyAgICB7CisgICAgICAgIHZhciBuZXdEYXRhYmFzZU5hbWVzID0ge307CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZGF0YWJhc2VOYW1lcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IG5ld0RhdGFiYXNlTmFtZXNbZGF0YWJhc2VOYW1lc1tpXV0gPSB0cnVlOworICAgICAgICB2YXIg
b2xkRGF0YWJhc2VOYW1lcyA9IHt9OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X2RhdGFiYXNlTmFtZXNCeU9yaWdpblVSTFtvcmlnaW5VUkxdLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgb2xkRGF0YWJhc2VOYW1lc1tkYXRhYmFzZU5hbWVzW2ldXSA9IHRydWU7CisgICAgICAg
IAorICAgICAgICB0aGlzLl9kYXRhYmFzZU5hbWVzQnlPcmlnaW5VUkxbb3JpZ2luVVJMXSA9IGRh
dGFiYXNlTmFtZXM7CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciBkYXRhYmFzZU5hbWUgaW4g
b2xkRGF0YWJhc2VOYW1lcykgeworICAgICAgICAgICAgaWYgKCFuZXdEYXRhYmFzZU5hbWVzW2Rh
dGFiYXNlTmFtZV0pCisgICAgICAgICAgICAgICAgdGhpcy5fZGF0YWJhc2VSZW1vdmVkKG9yaWdp
blVSTCwgZGF0YWJhc2VOYW1lKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBkYXRhYmFz
ZU5hbWUgaW4gbmV3RGF0YWJhc2VOYW1lcykgeworICAgICAgICAgICAgaWYgKCFvbGREYXRhYmFz
ZU5hbWVzW2RhdGFiYXNlTmFtZV0pCisgICAgICAgICAgICAgICAgdGhpcy5fZGF0YWJhc2VBZGRl
ZChvcmlnaW5VUkwsIGRhdGFiYXNlTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghdGhpcy5fZGF0YWJhc2VOYW1lc0J5T3JpZ2luVVJMW29yaWdpblVSTF0ubGVuZ3RoKQor
ICAgICAgICAgICAgdGhpcy5fb3JpZ2luUmVtb3ZlZChvcmlnaW5VUkwpOworICAgIH0sCisgICAg
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpblVSTAorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBkYXRhYmFzZU5hbWUKKyAgICAgKi8KKyAgICBfZGF0YWJhc2VBZGRlZDogZnVu
Y3Rpb24ob3JpZ2luVVJMLCBkYXRhYmFzZU5hbWUpCisgICAgeworICAgICAgICAvLyBGSVhNRTog
ZGlzcGF0Y2ggZGF0YWJhc2UgYWRkZWQgZXZlbnQuCisgICAgfSwKKyAgICAKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luVVJMCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGRh
dGFiYXNlTmFtZQorICAgICAqLworICAgIF9kYXRhYmFzZVJlbW92ZWQ6IGZ1bmN0aW9uKG9yaWdp
blVSTCwgZGF0YWJhc2VOYW1lKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGRpc3BhdGNoIGRh
dGFiYXNlIHJlbW92ZWQgZXZlbnQuCisgICAgfSwKKyAgICAKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7RnJhbWVXaXRoRGF0YWJhc2VOYW1lc30gZnJhbWVXaXRoRGF0YWJhc2VOYW1lcworICAg
ICAqLworICAgIF9kYXRhYmFzZU5hbWVzRm9yRnJhbWVMb2FkZWQ6IGZ1bmN0aW9uKGZyYW1lV2l0
aERhdGFiYXNlTmFtZXMpCisgICAgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGltcGxl
bWVudCBldmVudHMgb3JkZXIsIHNvIHRoYXQgd2UgY291bGQgbm90IHVwZGF0ZSBkYXRhYmFzZU5h
bWVzIGZvciBhIGZyYW1lIHRoYXQgd2FzIGFscmVhZHkgZGV0YWNoZWQuCisgICAgICAgIAorICAg
ICAgICB2YXIgZGF0YWJhc2VOYW1lcyA9IGZyYW1lV2l0aERhdGFiYXNlTmFtZXMuZGF0YWJhc2VO
YW1lczsKKyAgICAgICAgdmFyIG9sZE9yaWdpblVSTCA9IHRoaXMuX29yaWdpblVSTEJ5RnJhbWVJ
ZFtmcmFtZVdpdGhEYXRhYmFzZU5hbWVzLmZyYW1lSWRdOworICAgICAgICBpZiAob2xkT3JpZ2lu
VVJMICYmIG9sZE9yaWdpblVSTCA9PT0gZnJhbWVXaXRoRGF0YWJhc2VOYW1lcy5vcmlnaW5VUkwp
CisgICAgICAgICAgICB0aGlzLl91cGRhdGVPcmlnaW5EYXRhYmFzZU5hbWVzKGZyYW1lV2l0aERh
dGFiYXNlTmFtZXMub3JpZ2luVVJMLCBmcmFtZVdpdGhEYXRhYmFzZU5hbWVzLmRhdGFiYXNlTmFt
ZXMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX29yaWdpblJlbW92ZWRGcm9t
RnJhbWUoZnJhbWVXaXRoRGF0YWJhc2VOYW1lcy5mcmFtZUlkKTsKKyAgICAgICAgICAgIHRoaXMu
X29yaWdpbkFkZGVkVG9GcmFtZShmcmFtZVdpdGhEYXRhYmFzZU5hbWVzLmZyYW1lSWQsIGZyYW1l
V2l0aERhdGFiYXNlTmFtZXMub3JpZ2luVVJMLCBmcmFtZVdpdGhEYXRhYmFzZU5hbWVzLmRhdGFi
YXNlTmFtZXMpOworICAgICAgICB9CisgICAgfSwKKworICAgIF9sb2FkRGF0YWJhc2VOYW1lc0Zv
ckZyYW1lOiBmdW5jdGlvbihmcmFtZUlkKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJh
Y2soZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoIkluZGV4ZWREQkFnZW50IGVycm9yOiAiICsgZXJyb3IpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgSW5kZXhlZERCQWdlbnQucmVxdWVzdERhdGFiYXNlTmFtZXNGb3JGcmFtZShm
cmFtZUlkLCBjYWxsYmFjayk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9k
ZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwor
CisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGltcGxlbWVudHMge0RhdGFiYXNlQWdlbnQuRGlz
cGF0Y2hlcn0KKyAqLworV2ViSW5zcGVjdG9yLkluZGV4ZWREQkRpc3BhdGNoZXIgPSBmdW5jdGlv
bihpbmRleGVkREJNb2RlbCkKK3sKKyAgICB0aGlzLl9pbmRleGVkREJNb2RlbCA9IGluZGV4ZWRE
Qk1vZGVsOworfQorCitXZWJJbnNwZWN0b3IuSW5kZXhlZERCRGlzcGF0Y2hlci5fY2FsbGJhY2tz
ID0ge307CisKK1dlYkluc3BlY3Rvci5JbmRleGVkREJEaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsK
KyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0ZyYW1lV2l0aERhdGFiYXNlTmFtZXN9IGZyYW1lV2l0
aERhdGFiYXNlTmFtZXMKKyAgICAgKi8KKyAgICBkYXRhYmFzZU5hbWVzRm9yRnJhbWVMb2FkZWQ6
IGZ1bmN0aW9uKGZyYW1lV2l0aERhdGFiYXNlTmFtZXMpCisgICAgeworICAgICAgICB0aGlzLl9p
bmRleGVkREJNb2RlbC5fZGF0YWJhc2VOYW1lc0ZvckZyYW1lTG9hZGVkKGZyYW1lV2l0aERhdGFi
YXNlTmFtZXMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDUwZTkxOWFkZGI5ZDBlYTY2ZGJhZTU0YzQzYzRm
ZmQ0ZTA1MTZhZmMuLmFkMzg0NjUxZDFlNzlkZjg1YTU5NjkzYzY5ZjNmNDMxZTRkOTQzMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0
bWwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRt
bApAQCAtODEsNiArODEsNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IkNvb2tpZUl0ZW1zVmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQXBwbGljYXRpb25DYWNoZU1vZGVsLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJBcHBsaWNhdGlv
bkNhY2hlSXRlbXNWaWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJJbmRleGVkREJNb2RlbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0LmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTaWRlYmFyUGFuZS5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRWxlbWVudHNUcmVlT3V0
bGluZS5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>