www.nissen.co.jp
Open in
urlscan Pro
184.24.20.12
Public Scan
Submission: On February 27 via api from US
Summary
TLS certificate: Issued by DigiCert ECC Extended Validation Serv... on April 17th 2020. Valid for: 2 years.
This is the only time www.nissen.co.jp was scanned on urlscan.io!
urlscan.io Verdict: No classification
Domain & IP information
ASN16625 (AKAMAI-AS, US)
PTR: a184-24-20-12.deploy.static.akamaitechnologies.com
www.nissen.co.jp |
ASN16509 (AMAZON-02, US)
PTR: server-13-225-81-108.fra2.r.cloudfront.net
www.datadoghq-browser-agent.com |
ASN16509 (AMAZON-02, US)
PTR: server-13-224-195-106.fra2.r.cloudfront.net
j.wovn.io |
ASN15169 (GOOGLE, US)
www.googletagmanager.com |
ASN16509 (AMAZON-02, US)
PTR: ec2-18-180-221-222.ap-northeast-1.compute.amazonaws.com
tr.c-tag.net |
ASN16509 (AMAZON-02, US)
PTR: server-143-204-89-59.fra50.r.cloudfront.net
static.karte.io |
ASN20940 (AKAMAI-ASN1, NL)
s.go-mpulse.net | |
685b3919.akstat.io |
ASN8075 (MICROSOFT-CORP-MSN-AS-BLOCK, US)
brandeliaffi.blob.core.windows.net |
ASN16509 (AMAZON-02, US)
browsing-put.nissen.co.jp |
ASN16509 (AMAZON-02, US)
PTR: server-13-32-24-51.fra56.r.cloudfront.net
checkout-api.worldshopping.jp |
ASN16509 (AMAZON-02, US)
PTR: ec2-3-114-33-71.ap-northeast-1.compute.amazonaws.com
letro.jp |
ASN15169 (GOOGLE, US)
PTR: 168.169.107.34.bc.googleusercontent.com
www.leanplum.com |
ASN15169 (GOOGLE, US)
PTR: 19.31.211.130.bc.googleusercontent.com
t.karte.io |
ASN15169 (GOOGLE, US)
www.google-analytics.com |
ASN15169 (GOOGLE, US)
PTR: fra24s07-in-f2.1e100.net
www.googleadservices.com |
ASN23816 (YAHOO Yahoo Japan Corporation, JP)
PTR: edge1000.img.vip.bbt.yimg.jp
s.yimg.jp |
ASN16625 (AKAMAI-AS, US)
PTR: a104-111-227-41.deploy.static.akamaitechnologies.com
jgl.microad.net | |
i.microad.net |
ASN15169 (GOOGLE, US)
googleads.g.doubleclick.net |
ASN15169 (GOOGLE, US)
googleads.g.doubleclick.net |
ASN16509 (AMAZON-02, US)
PTR: server-13-224-195-93.fra2.r.cloudfront.net
cache.send.microadinc.com |
ASN16509 (AMAZON-02, US)
PTR: ec2-52-68-181-188.ap-northeast-1.compute.amazonaws.com
api.letro.jp |
ASN138552 (RTBHOUSE-AS-AP RTB HOUSE PTE. LTD., SG)
PTR: ip-103-132-192-30.rtbhouse.net
asia.creativecdn.com | |
sin.creativecdn.com |
ASN15169 (GOOGLE, US)
PTR: 160.98.95.34.bc.googleusercontent.com
ad1.candy-network.com |
ASN16509 (AMAZON-02, US)
PTR: ec2-52-199-15-114.ap-northeast-1.compute.amazonaws.com
pv.amanad.adtdp.com |
ASN16625 (AKAMAI-AS, US)
PTR: a23-218-209-87.deploy.static.akamaitechnologies.com
amplify.outbrain.com |
ASN16625 (AKAMAI-AS, US)
PTR: a23-218-209-56.deploy.static.akamaitechnologies.com
sync.teads.tv |
ASN16509 (AMAZON-02, US)
PTR: server-13-32-24-99.fra56.r.cloudfront.net
api.locize.io |
ASN15169 (GOOGLE, US)
PTR: fra16s42-in-f2.1e100.net
cm.g.doubleclick.net |
ASN16509 (AMAZON-02, US)
templates-cf.karte.io |
Domain | Requested by | |
---|---|---|
183 | www.nissen.co.jp |
www.nissen.co.jp
www.datadoghq-browser-agent.com |
15 | www.google.de |
www.nissen.co.jp
|
15 | www.google.com |
5 redirects
www.nissen.co.jp
|
11 | googleads.g.doubleclick.net |
5 redirects
www.googleadservices.com
|
9 | v9999.adv.admeme.net |
s.yjtag.jp
www.nissen.co.jp |
8 | t.karte.io |
www.datadoghq-browser-agent.com
static.karte.io |
7 | ee.wovn.io |
www.datadoghq-browser-agent.com
|
7 | b92.yahoo.co.jp |
s.yimg.jp
|
6 | www.google-analytics.com |
www.googletagmanager.com
www.datadoghq-browser-agent.com www.nissen.co.jp |
6 | static.karte.io |
www.nissen.co.jp
www.datadoghq-browser-agent.com |
5 | letro.jp |
www.nissen.co.jp
letro.jp |
4 | m.mobsmart.net |
s.yjtag.jp
m.mobsmart.net |
4 | img-cf.karte.io |
www.nissen.co.jp
|
4 | b97.yahoo.co.jp |
www.nissen.co.jp
|
4 | ssp.send.microadinc.com |
www.nissen.co.jp
|
4 | s-rtb.send.microadinc.com |
j.microad.net
|
4 | stats.g.doubleclick.net |
www.datadoghq-browser-agent.com
|
4 | checkout-api.worldshopping.jp |
www.nissen.co.jp
www.datadoghq-browser-agent.com |
3 | i.microad.net |
www.nissen.co.jp
|
3 | www.leanplum.com |
www.datadoghq-browser-agent.com
|
3 | brandeliaffi.blob.core.windows.net |
www.nissen.co.jp
|
2 | wap.wovn.io |
j.wovn.io
www.datadoghq-browser-agent.com |
2 | adv.mobsmart.net |
m.mobsmart.net
|
2 | 685b3919.akstat.io |
s.go-mpulse.net
|
2 | mt.mobsmart.net | 2 redirects |
2 | cm.g.doubleclick.net | 2 redirects |
2 | api.locize.io |
www.datadoghq-browser-agent.com
|
2 | tr.outbrain.com |
amplify.outbrain.com
www.nissen.co.jp |
2 | log.letro.jp |
www.datadoghq-browser-agent.com
|
2 | www.facebook.com |
www.nissen.co.jp
connect.facebook.net |
2 | connect.facebook.net |
www.nissen.co.jp
connect.facebook.net |
2 | api.letro.jp |
letro.jp
|
2 | gum.criteo.com |
cache.send.microadinc.com
static.criteo.net |
2 | www.googleadservices.com |
www.googletagmanager.com
|
2 | c.go-mpulse.net |
s.go-mpulse.net
|
2 | yjtag.yahoo.co.jp |
s.yjtag.jp
|
2 | wovn.global.ssl.fastly.net |
www.datadoghq-browser-agent.com
|
2 | s.yjtag.jp |
www.nissen.co.jp
s.yjtag.jp |
2 | browsing-put.nissen.co.jp |
www.nissen.co.jp
|
2 | s.go-mpulse.net |
www.nissen.co.jp
|
2 | www.googletagmanager.com |
www.nissen.co.jp
|
2 | j.wovn.io |
www.nissen.co.jp
j.wovn.io |
1 | templates-cf.karte.io |
www.nissen.co.jp
|
1 | cdn.rollbar.com |
j.wovn.io
|
1 | sslwidget.criteo.com |
static.criteo.net
|
1 | static.criteo.net |
s.yjtag.jp
|
1 | sync.teads.tv |
sin.creativecdn.com
|
1 | i.smartnews-ads.com |
www.nissen.co.jp
|
1 | analytics.twitter.com |
static.ads-twitter.com
|
1 | t.co |
www.nissen.co.jp
|
1 | amplify.outbrain.com |
www.nissen.co.jp
|
1 | pv.amanad.adtdp.com |
s.yjtag.jp
|
1 | cdn.smartnews-ads.com |
www.nissen.co.jp
|
1 | ad1.candy-network.com |
s.yjtag.jp
|
1 | sin.creativecdn.com |
s.yjtag.jp
|
1 | asia.creativecdn.com | 1 redirects |
1 | static.ads-twitter.com |
www.nissen.co.jp
|
1 | checkout-js.worldshopping.jp |
checkout-api.worldshopping.jp
|
1 | cache.send.microadinc.com |
j.microad.net
|
1 | jgl.microad.net |
www.nissen.co.jp
|
1 | j.microad.net | 1 redirects |
1 | s.yimg.jp |
www.googletagmanager.com
|
1 | sync-tag.karte.io |
static.karte.io
|
1 | cdnjs.cloudflare.com |
www.nissen.co.jp
|
1 | tr.c-tag.net |
www.nissen.co.jp
|
1 | www.datadoghq-browser-agent.com |
www.nissen.co.jp
|
361 | 66 |
This site contains links to these domains. Also see Links.
Subject Issuer | Validity | Valid | |
---|---|---|---|
www.nissen.co.jp DigiCert ECC Extended Validation Server CA |
2020-04-17 - 2022-07-17 |
2 years | crt.sh |
*.datadoghq-browser-agent.com Sectigo RSA Domain Validation Secure Server CA |
2019-04-08 - 2021-04-07 |
2 years | crt.sh |
wovn.io Amazon |
2021-02-17 - 2022-03-17 |
a year | crt.sh |
*.google-analytics.com GTS CA 1O1 |
2021-01-26 - 2021-04-20 |
3 months | crt.sh |
c-tag.net Amazon |
2020-09-30 - 2021-10-30 |
a year | crt.sh |
static.karte.io Amazon |
2020-08-25 - 2021-09-24 |
a year | crt.sh |
akstat.io DigiCert Secure Site ECC CA-1 |
2020-05-06 - 2021-08-05 |
a year | crt.sh |
*.blob.core.windows.net Microsoft RSA TLS CA 01 |
2021-02-13 - 2022-02-13 |
a year | crt.sh |
*.nissen.co.jp DigiCert SHA2 Secure Server CA |
2020-08-21 - 2021-10-23 |
a year | crt.sh |
sni.cloudflaressl.com Cloudflare Inc ECC CA-3 |
2020-10-21 - 2021-10-20 |
a year | crt.sh |
*.worldshopping.jp Amazon |
2020-07-03 - 2021-08-03 |
a year | crt.sh |
*.letro.jp Amazon |
2020-04-16 - 2021-05-16 |
a year | crt.sh |
*.tgm.yahoo-net.jp Cybertrust Japan SureServer CA G4 |
2020-03-12 - 2021-04-12 |
a year | crt.sh |
*.freetls.global.fastly.net GlobalSign CloudSSL CA - SHA256 - G3 |
2020-04-21 - 2021-04-22 |
a year | crt.sh |
sync-tag.karte.io Amazon |
2020-05-01 - 2021-06-01 |
a year | crt.sh |
yjtag.yahoo.co.jp Cybertrust Japan SureServer CA G4 |
2020-10-04 - 2021-11-04 |
a year | crt.sh |
*.leanplum.com Sectigo RSA Domain Validation Secure Server CA |
2019-11-04 - 2021-12-01 |
2 years | crt.sh |
*.karte.io GlobalSign GCC R3 DV TLS CA 2020 |
2020-12-17 - 2021-12-22 |
a year | crt.sh |
www.googleadservices.com GTS CA 1O1 |
2021-01-26 - 2021-04-20 |
3 months | crt.sh |
edge01.yahoo.co.jp Cybertrust Japan SureServer CA G4 |
2021-02-10 - 2022-03-09 |
a year | crt.sh |
*.microad.net GeoTrust RSA CA 2018 |
2020-05-28 - 2021-08-27 |
a year | crt.sh |
*.g.doubleclick.net GTS CA 1O1 |
2021-01-26 - 2021-04-20 |
3 months | crt.sh |
www.google.com GTS CA 1O1 |
2021-01-26 - 2021-04-20 |
3 months | crt.sh |
www.google.de GTS CA 1O1 |
2021-01-26 - 2021-04-20 |
3 months | crt.sh |
*.google.de GTS CA 1O1 |
2021-01-26 - 2021-04-20 |
3 months | crt.sh |
*.google.com GTS CA 1O1 |
2021-01-26 - 2021-04-20 |
3 months | crt.sh |
cache.send.microadinc.com Amazon |
2021-02-23 - 2022-03-24 |
a year | crt.sh |
*.send.microadinc.com GlobalSign RSA OV SSL CA 2018 |
2020-10-06 - 2021-11-07 |
a year | crt.sh |
*.criteo.com DigiCert TLS Hybrid ECC SHA384 2020 CA1 |
2021-01-30 - 2021-04-28 |
3 months | crt.sh |
*.adv.admeme.net Sectigo RSA Domain Validation Secure Server CA |
2020-06-19 - 2021-09-26 |
a year | crt.sh |
*.facebook.com DigiCert SHA2 High Assurance Server CA |
2021-02-10 - 2021-05-10 |
3 months | crt.sh |
ads-twitter.com DigiCert SHA2 High Assurance Server CA |
2020-08-14 - 2021-08-19 |
a year | crt.sh |
*.creativecdn.com RapidSSL RSA CA 2018 |
2019-01-11 - 2021-04-11 |
2 years | crt.sh |
*.candy-network.com Cybertrust Japan SureServer CA G4 |
2020-12-04 - 2021-12-22 |
a year | crt.sh |
*.smartnews-ads.com DigiCert SHA2 Secure Server CA |
2020-05-15 - 2021-08-14 |
a year | crt.sh |
*.amanad.adtdp.com Cybertrust Japan SureServer CA G4 |
2020-04-01 - 2021-04-30 |
a year | crt.sh |
*.outbrain.com DigiCert SHA2 Secure Server CA |
2020-03-09 - 2021-06-08 |
a year | crt.sh |
mscedge01.yahoo.co.jp Cybertrust Japan SureServer CA G4 |
2020-08-04 - 2021-09-03 |
a year | crt.sh |
t.co DigiCert TLS RSA SHA256 2020 CA1 |
2021-01-12 - 2022-01-11 |
a year | crt.sh |
*.twitter.com DigiCert TLS RSA SHA256 2020 CA1 |
2020-11-30 - 2021-11-29 |
a year | crt.sh |
img-cf.karte.io Amazon |
2020-09-25 - 2021-10-27 |
a year | crt.sh |
teads.tv R3 |
2021-02-18 - 2021-05-19 |
3 months | crt.sh |
*.locize.app Amazon |
2020-12-09 - 2022-01-07 |
a year | crt.sh |
*.mobsmart.net GeoTrust RSA CA 2018 |
2020-12-16 - 2022-01-02 |
a year | crt.sh |
*.criteo.net DigiCert TLS Hybrid ECC SHA384 2020 CA1 |
2021-01-30 - 2021-04-28 |
3 months | crt.sh |
*.googleadservices.com GTS CA 1O1 |
2021-01-26 - 2021-04-20 |
3 months | crt.sh |
wap.wovn.io GTS CA 1D2 |
2021-01-11 - 2021-04-11 |
3 months | crt.sh |
cdn.rollbar.com Amazon |
2020-06-11 - 2021-07-11 |
a year | crt.sh |
templates-cf.karte.io Amazon |
2020-09-25 - 2021-10-27 |
a year | crt.sh |
This page contains 18 frames:
Primary Page:
https://www.nissen.co.jp/
Frame ID: 705B5288B11DE2226A303E008160A1AC
Requests: 328 HTTP requests in this frame
Frame:
https://s.go-mpulse.net/boomerang/P884V-F5DLU-VT9C7-A9CTT-8C6R7
Frame ID: F13661EF504F96B8C3CC65B3FB624CBC
Requests: 2 HTTP requests in this frame
Frame:
https://www.nissen.co.jp/BtoB/other.html
Frame ID: F2A4AAE1C0C7C811D9B410390A5A34D7
Requests: 15 HTTP requests in this frame
Frame:
https://s.go-mpulse.net/boomerang/P884V-F5DLU-VT9C7-A9CTT-8C6R7
Frame ID: CB1D794891C4808AE19CD47FE89B7A29
Requests: 2 HTTP requests in this frame
Frame:
https://cache.send.microadinc.com/js/cookie_loader.html
Frame ID: F4BA40D2EC7D563F2CC5DD574A5EA3FC
Requests: 2 HTTP requests in this frame
Frame:
https://i.microad.net/images/13810/3143223_1.jpg?20210226103053
Frame ID: A2BE7BDCDC041900DC5F2598EA32D235
Requests: 1 HTTP requests in this frame
Frame:
https://i.microad.net/images/13810/3140373_1.png?20210212110913
Frame ID: 1A48E02A0ABA433DF0B7B3210381F127
Requests: 1 HTTP requests in this frame
Frame:
https://i.microad.net/images/13810/3140377_1.gif?20210212114410
Frame ID: 6543335BE4DE5789E7C816E540C85B10
Requests: 1 HTTP requests in this frame
Frame:
https://brandeliaffi.blob.core.windows.net/images/nol_item_300x250.jpg
Frame ID: A78F92EADEE26D3FF1F07C37FAEF7451
Requests: 1 HTTP requests in this frame
Frame:
https://sin.creativecdn.com/tags?id=pr_JurxZIbu7bHZmROO4VuF_home&id=pr_JurxZIbu7bHZmROO4VuF_custom_usergroup_default&id=pr_JurxZIbu7bHZmROO4VuF_custom_uid_8d0d233e-ac20-4923-9d94-b4227e7ff4b8&id=pr_JurxZIbu7bHZmROO4VuF_custom_newUserFlag_false&tc=1
Frame ID: 1289EFDEEBCE2647D67571E4387CFECC
Requests: 2 HTTP requests in this frame
Frame:
https://m.mobsmart.net/nm?mobsmart_nid=kpismt&pid=nissen_all&cb=14
Frame ID: 727592EC36216FDB76081683DE7CB551
Requests: 1 HTTP requests in this frame
Frame:
https://m.mobsmart.net/nm?mobsmart_nid=kpismt&pid=nissen_all&uid=8d0d233e-ac20-4923-9d94-b4227e7ff4b8&cb=646
Frame ID: 0E79A15045E55B0EE9A352E4EA12AB26
Requests: 1 HTTP requests in this frame
Frame:
https://gum.criteo.com/syncframe?topUrl=www.nissen.co.jp
Frame ID: FA2F20025891D5DB6FCCACDFACAC6287
Requests: 1 HTTP requests in this frame
Frame:
https://m.mobsmart.net/nm/iframe/tag?mobsmart_hm=&mobsmart_nid=kpismt&r=https://www.nissen.co.jp/&pid=nissen_all
Frame ID: 9B3FDF46FBFFA3510B88F63A3C4C7476
Requests: 1 HTTP requests in this frame
Frame:
https://m.mobsmart.net/nm/iframe/tag?mobsmart_hm=&mobsmart_nid=kpismt&r=https://www.nissen.co.jp/&pid=nissen_all
Frame ID: DA5AE640250705D3D4F3FE420F1060DA
Requests: 1 HTTP requests in this frame
Frame:
https://adv.mobsmart.net/ad/tag
Frame ID: 65C6649FBF13A8B2FB9C41B904D9E39E
Requests: 1 HTTP requests in this frame
Frame:
https://adv.mobsmart.net/ad/tag
Frame ID: F08E0EB669BDAF33444D356DBF5D1886
Requests: 1 HTTP requests in this frame
Frame:
https://j.wovn.io/stallion_loader?token=GtqK3M
Frame ID: 82B8F0FB6D439647F4689994B9EA3929
Requests: 2 HTTP requests in this frame
Screenshot
Detected technologies
Criteo (Advertising Networks) ExpandDetected patterns
- script /\/\/static.criteo.net\/js\/ld\/ld.js/i
Google Tag Manager (Tag Managers) Expand
Detected patterns
- html /<!-- (?:End )?Google Tag Manager -->/i
Page Statistics
20 Outgoing links
These are links going to different origins than the main page.
Title: BRANDELI※ We connect to outside site.※ Accounting and payment method are different from Nissen Online.
Search URL Search Domain Scan URL
Title: Information on Magical Club T Card JCB
Search URL Search Domain Scan URL
Title: Powered by
Search URL Search Domain Scan URL
Title: Official Twitter
Search URL Search Domain Scan URL
Title: Brand outlet "BRANDELI"
Search URL Search Domain Scan URL
Title: Alinoma
Search URL Search Domain Scan URL
Title: Shinsei Bank Smart Card Loan Plus for Nissen
Search URL Search Domain Scan URL
Title: Nissen Life WillNavi (external site)Search site to learn insurance / choose / consult You can request various insurance products
Search URL Search Domain Scan URL
Title: Nissen Research (external site)Answer the questionnaire Shop for great deals in Nissen
Search URL Search Domain Scan URL
Title: Magical Club T Card JCB (outside site)With Magical Club T Card JCB, T points are accumulated!
Search URL Search Domain Scan URL
Title: Score deferred payment service (external site)Risk guarantee type convenience store postpay Provide payment service
Search URL Search Domain Scan URL
Title: Nissen Group Services General Information
Search URL Search Domain Scan URL
Title: Company Profile
Search URL Search Domain Scan URL
Title: Mail order support service for corporation
Search URL Search Domain Scan URL
Title: Press Room (Nissen Group PR)
Search URL Search Domain Scan URL
Title: Recruitment
Search URL Search Domain Scan URL
Title:
Search URL Search Domain Scan URL
Title:
Search URL Search Domain Scan URL
Title:
Search URL Search Domain Scan URL
Title:
Search URL Search Domain Scan URL
Redirected requests
There were HTTP redirect chains for the following requests:
Request Chain 155- https://j.microad.net/js/compass.js HTTP 302
- https://jgl.microad.net/js/compass.js
- https://googleads.g.doubleclick.net/pagead/viewthroughconversion/920072297/?random=1614469108486&cv=9&fst=1614469108486&num=1&fmt=3&guid=ON&resp=GooglemKTybQhCsO&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_his=2&u_tz=60&u_java=false&u_nplug=0&u_nmime=0>m=2wg2h0&sendb=1&ig=1&frm=0&url=https%3A%2F%2Fwww.nissen.co.jp%2F&tiba=%E3%80%90%E3%83%8B%E3%83%83%E3%82%BB%E3%83%B3%E3%80%91%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%80%9A%E8%B2%A9%202021%E6%98%A5&hn=www.googleadservices.com&async=1 HTTP 302
- https://www.google.com/pagead/1p-user-list/920072297/?random=1614469108486&cv=9&fst=1614466800000&num=1&fmt=3&guid=ON&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_his=2&u_tz=60&u_java=false&u_nplug=0&u_nmime=0>m=2wg2h0&sendb=1&frm=0&url=https%3A%2F%2Fwww.nissen.co.jp%2F&tiba=%E3%80%90%E3%83%8B%E3%83%83%E3%82%BB%E3%83%B3%E3%80%91%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%80%9A%E8%B2%A9%202021%E6%98%A5&async=1&is_vtc=1&random=4042313600&resp=GooglemKTybQhCsO HTTP 302
- https://www.google.de/pagead/1p-user-list/920072297/?random=1614469108486&cv=9&fst=1614466800000&num=1&fmt=3&guid=ON&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_his=2&u_tz=60&u_java=false&u_nplug=0&u_nmime=0>m=2wg2h0&sendb=1&frm=0&url=https%3A%2F%2Fwww.nissen.co.jp%2F&tiba=%E3%80%90%E3%83%8B%E3%83%83%E3%82%BB%E3%83%B3%E3%80%91%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%80%9A%E8%B2%A9%202021%E6%98%A5&async=1&is_vtc=1&random=4042313600&resp=GooglemKTybQhCsO&ipr=y
- https://googleads.g.doubleclick.net/pagead/viewthroughconversion/1002917854/?random=1614469108487&cv=9&fst=1614469108487&num=1&fmt=3&guid=ON&resp=GooglemKTybQhCsO&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_his=2&u_tz=60&u_java=false&u_nplug=0&u_nmime=0>m=2wg2h0&sendb=1&ig=1&frm=0&url=https%3A%2F%2Fwww.nissen.co.jp%2F&tiba=%E3%80%90%E3%83%8B%E3%83%83%E3%82%BB%E3%83%B3%E3%80%91%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%80%9A%E8%B2%A9%202021%E6%98%A5&hn=www.googleadservices.com&async=1 HTTP 302
- https://www.google.com/pagead/1p-user-list/1002917854/?random=1614469108487&cv=9&fst=1614466800000&num=1&fmt=3&guid=ON&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_his=2&u_tz=60&u_java=false&u_nplug=0&u_nmime=0>m=2wg2h0&sendb=1&frm=0&url=https%3A%2F%2Fwww.nissen.co.jp%2F&tiba=%E3%80%90%E3%83%8B%E3%83%83%E3%82%BB%E3%83%B3%E3%80%91%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%80%9A%E8%B2%A9%202021%E6%98%A5&async=1&is_vtc=1&random=1623604184&resp=GooglemKTybQhCsO HTTP 302
- https://www.google.de/pagead/1p-user-list/1002917854/?random=1614469108487&cv=9&fst=1614466800000&num=1&fmt=3&guid=ON&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_his=2&u_tz=60&u_java=false&u_nplug=0&u_nmime=0>m=2wg2h0&sendb=1&frm=0&url=https%3A%2F%2Fwww.nissen.co.jp%2F&tiba=%E3%80%90%E3%83%8B%E3%83%83%E3%82%BB%E3%83%B3%E3%80%91%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%80%9A%E8%B2%A9%202021%E6%98%A5&async=1&is_vtc=1&random=1623604184&resp=GooglemKTybQhCsO&ipr=y
- https://googleads.g.doubleclick.net/pagead/viewthroughconversion/478655322/?random=1614469108488&cv=9&fst=1614469108488&num=1&fmt=3&guid=ON&resp=GooglemKTybQhCsO&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_his=2&u_tz=60&u_java=false&u_nplug=0&u_nmime=0>m=2wg2h0&sendb=1&ig=1&frm=0&url=https%3A%2F%2Fwww.nissen.co.jp%2F&tiba=%E3%80%90%E3%83%8B%E3%83%83%E3%82%BB%E3%83%B3%E3%80%91%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%80%9A%E8%B2%A9%202021%E6%98%A5&hn=www.googleadservices.com&async=1 HTTP 302
- https://www.google.com/pagead/1p-user-list/478655322/?random=1614469108488&cv=9&fst=1614466800000&num=1&fmt=3&guid=ON&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_his=2&u_tz=60&u_java=false&u_nplug=0&u_nmime=0>m=2wg2h0&sendb=1&frm=0&url=https%3A%2F%2Fwww.nissen.co.jp%2F&tiba=%E3%80%90%E3%83%8B%E3%83%83%E3%82%BB%E3%83%B3%E3%80%91%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%80%9A%E8%B2%A9%202021%E6%98%A5&async=1&is_vtc=1&random=2527054102&resp=GooglemKTybQhCsO HTTP 302
- https://www.google.de/pagead/1p-user-list/478655322/?random=1614469108488&cv=9&fst=1614466800000&num=1&fmt=3&guid=ON&u_h=1200&u_w=1600&u_ah=1200&u_aw=1600&u_cd=24&u_his=2&u_tz=60&u_java=false&u_nplug=0&u_nmime=0>m=2wg2h0&sendb=1&frm=0&url=https%3A%2F%2Fwww.nissen.co.jp%2F&tiba=%E3%80%90%E3%83%8B%E3%83%83%E3%82%BB%E3%83%B3%E3%80%91%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%80%9A%E8%B2%A9%202021%E6%98%A5&async=1&is_vtc=1&random=2527054102&resp=GooglemKTybQhCsO&ipr=y
- https://asia.creativecdn.com/tags?id=pr_JurxZIbu7bHZmROO4VuF_home&id=pr_JurxZIbu7bHZmROO4VuF_custom_usergroup_default&id=pr_JurxZIbu7bHZmROO4VuF_custom_uid_8d0d233e-ac20-4923-9d94-b4227e7ff4b8&id=pr_JurxZIbu7bHZmROO4VuF_custom_newUserFlag_false HTTP 302
- https://sin.creativecdn.com/tags?id=pr_JurxZIbu7bHZmROO4VuF_home&id=pr_JurxZIbu7bHZmROO4VuF_custom_usergroup_default&id=pr_JurxZIbu7bHZmROO4VuF_custom_uid_8d0d233e-ac20-4923-9d94-b4227e7ff4b8&id=pr_JurxZIbu7bHZmROO4VuF_custom_newUserFlag_false&tc=1
- https://cm.g.doubleclick.net/pixel?google_nid=kpis&google_cm HTTP 302
- https://v9999.adv.admeme.net/drtb/n?google_gid=CAESEMjAoujkh3WLTRZia4X9YGk&google_cver=1
- https://cm.g.doubleclick.net/pixel?google_nid=kpis&google_hm=bmlzc2VuX2FsbA&google_redir=https%3A%2F%2Fv9999.adv.admeme.net%2Ftag%2Fpixel HTTP 302
- https://v9999.adv.admeme.net/tag/pixel
- https://googleads.g.doubleclick.net/pagead/viewthroughconversion/1015216306/?guid=ON&script=0 HTTP 302
- https://www.google.com/pagead/1p-user-list/1015216306/?guid=ON&script=0&is_vtc=1&random=2235986021 HTTP 302
- https://www.google.de/pagead/1p-user-list/1015216306/?guid=ON&script=0&is_vtc=1&random=2235986021&ipr=y
- https://mt.mobsmart.net/pixel?mobsmart_nid=kpismt&pid=nissen_all&cb=14 HTTP 302
- https://v9999.adv.admeme.net/drtb/n?mobsmart_uid=571f8ff8806fe55293d2ad6af25901b3
- https://googleads.g.doubleclick.net/pagead/viewthroughconversion/1015216306/?guid=ON&script=0 HTTP 302
- https://www.google.com/pagead/1p-user-list/1015216306/?guid=ON&script=0&is_vtc=1&random=1743135692 HTTP 302
- https://www.google.de/pagead/1p-user-list/1015216306/?guid=ON&script=0&is_vtc=1&random=1743135692&ipr=y
- https://mt.mobsmart.net/pixel?mobsmart_nid=kpismt&pid=nissen_all&uid=8d0d233e-ac20-4923-9d94-b4227e7ff4b8&cb=646 HTTP 302
- https://v9999.adv.admeme.net/drtb/n?mobsmart_uid=c2c1131ffd5e1357d23e3f4f399b3ee5
361 HTTP transactions
Method Protocol |
Resource Path |
Size x-fer |
Type MIME-Type |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GET H2 |
Primary Request
/
www.nissen.co.jp/ |
354 KB 50 KB |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
1_530_40.jpg
www.nissen.co.jp/nol_common_v3/images/pc/all/210218_soryo/ |
25 KB 25 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210226_119_kv.jpg
www.nissen.co.jp/img/ |
55 KB 55 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210218_89_kv.jpg
www.nissen.co.jp/img/ |
62 KB 62 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210226_108_kv.jpg
www.nissen.co.jp/img/ |
56 KB 56 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210205_102_kv.jpg
www.nissen.co.jp/img/ |
53 KB 54 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210222_104_kvside.jpg
www.nissen.co.jp/img/ |
24 KB 25 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210218_soryo0_ev.jpg
www.nissen.co.jp/img/ |
17 KB 18 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210226_sprs_ev.jpg
www.nissen.co.jp/img/ |
28 KB 28 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
200703_tyowsyokoku_ev.jpg
www.nissen.co.jp/img/ |
19 KB 20 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210225_wcptup_ev.jpg
www.nissen.co.jp/img/ |
18 KB 19 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210225_smileday_ev.jpg
www.nissen.co.jp/img/ |
23 KB 23 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
style.css
www.nissen.co.jp/res/p/common/ |
77 KB 11 KB |
Stylesheet
text/css |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
loading.css
www.nissen.co.jp/res/p/catalog/ |
6 KB 845 B |
Stylesheet
text/css |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
style.css
www.nissen.co.jp/res/p/review/ |
20 KB 4 KB |
Stylesheet
text/css |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
style.css
www.nissen.co.jp/res/p/storetop/ |
23 KB 5 KB |
Stylesheet
text/css |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
head-js-bundle1.js
www.nissen.co.jp/res/p/shared/js/ |
160 KB 54 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
common.js
www.nissen.co.jp/res/p/js/ |
28 KB 10 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
head-js-bundle2.js
www.nissen.co.jp/res/p/shared/js/ |
94 KB 34 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
head-js-bundle3.js
www.nissen.co.jp/res/p/shared/js/ |
72 KB 22 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
item-api.js
www.nissen.co.jp/res/efs/item/ |
4 KB 2 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
cart.js
www.nissen.co.jp/res/efs/order/ |
40 KB 4 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
fav.js
www.nissen.co.jp/res/efs/favorite/ |
26 KB 5 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
mail.js
www.nissen.co.jp/res/efs/mail/ |
3 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
cartPage.js
www.nissen.co.jp/res/p/order/ |
19 KB 4 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
fav.js
www.nissen.co.jp/res/p/member/favorite/ |
21 KB 5 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favex.js
www.nissen.co.jp/res/p/member/favorite/ |
15 KB 3 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
util.js
www.nissen.co.jp/res/p/common/ |
7 KB 2 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
modal.js
www.nissen.co.jp/res/p/common/ |
11 KB 3 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
zeta-voice.js
www.nissen.co.jp/res/p/review/ |
37 KB 11 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
item.js
www.nissen.co.jp/res/p/common/ |
61 KB 15 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
all.js
www.nissen.co.jp/res/p/js/ |
3 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
jquery.jsonp-2.4.0.min.js
www.nissen.co.jp/res/_vendor/shared/jquery.plugins/ |
2 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
suggest-nol.js
www.nissen.co.jp/res/p/search/ |
26 KB 8 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
nissen-history.js
www.nissen.co.jp/res/p/member/ |
31 KB 8 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
nissen-recommend.js
www.nissen.co.jp/res/p/recommend/ |
39 KB 8 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
leanPlum.js
www.nissen.co.jp/res/p/custom-event/ |
8 KB 3 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
leanPlum-trigger.js
www.nissen.co.jp/res/p/custom-event/ |
3 KB 2 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
nissen-filterhistory.js
www.nissen.co.jp/res/p/member/ |
4 KB 2 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
probance_tracker-min.js
www.nissen.co.jp/res/p/common/ |
37 KB 10 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
datadog-logs-us.js
www.datadoghq-browser-agent.com/ |
32 KB 12 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
1
j.wovn.io/ |
370 KB 99 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
slider.js
www.nissen.co.jp/res/p/js/ |
26 KB 4 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
slick.min.js
www.nissen.co.jp/res/p/js/ |
42 KB 11 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
jquery.heightLine.js
www.nissen.co.jp/nol_common_v4/js/library/ |
2 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
4445eb9
www.nissen.co.jp/akam/11/ |
32 KB 11 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
nissen-oshirase.js
www.nissen.co.jp/res/p/common/ |
848 B 884 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210218_90_kv.jpg
www.nissen.co.jp/img/ |
53 KB 54 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210212_crmss_ev.jpg
www.nissen.co.jp/img/ |
28 KB 28 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210218_sprpt_ev.jpg
www.nissen.co.jp/img/ |
30 KB 30 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
loading.gif
www.nissen.co.jp/nol_common_v4/images/pc/all/151109/ |
9 KB 10 KB |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
style.css
www.nissen.co.jp/res/p/recommend/ |
27 KB 5 KB |
Stylesheet
text/css |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
style.css
www.nissen.co.jp/res/p/favorite/ |
13 KB 3 KB |
Stylesheet
text/css |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
spacer.gif
www.nissen.co.jp/img/nis/ml/ |
43 B 239 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
gtm.js
www.googletagmanager.com/ |
89 KB 33 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
adv_cv.min.js
tr.c-tag.net/js/ |
2 KB 2 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tracker.js
static.karte.io/libs/ |
267 KB 80 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
P884V-F5DLU-VT9C7-A9CTT-8C6R7
s.go-mpulse.net/boomerang/ Frame F136 |
205 KB 49 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
logo.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
search_arrow_down.png
www.nissen.co.jp/res/p/img/search/ |
134 B 436 B |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ico-hdr-srch-black.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
icon_info.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
wp_top.jpg
www.nissen.co.jp/formation/images/bnr/wp/2021/ |
56 KB 56 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
NTOP_PC.jpg
brandeliaffi.blob.core.windows.net/images/ |
43 KB 44 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
nol_top_pc_992_100.jpg
brandeliaffi.blob.core.windows.net/alinoma/ |
55 KB 55 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
NOL_pc_shinsei.png
www.nissen.co.jp/img/ |
78 KB 78 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
logo-ftr-privacy.png
www.nissen.co.jp/res/p/img/common/ |
4 KB 5 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
logo-ftr-pcidss.png
www.nissen.co.jp/res/p/img/common/ |
7 KB 7 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
logo-ftr-jdma.png
www.nissen.co.jp/res/p/img/common/ |
5 KB 5 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
reb_view_hist_aws-kinecog-sdk-2.412.0.min.js
browsing-put.nissen.co.jp/ |
234 KB 68 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
jquery.cookie.min.js
cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/ |
1 KB 1 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
reb_view_hist_base.js
browsing-put.nissen.co.jp/ |
10 KB 4 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
script
checkout-api.worldshopping.jp/v1/ |
272 KB 99 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
fd8edacb259ti243987fc604892e94ab5
www.nissen.co.jp/staticweb/ |
73 KB 19 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ico-hdr-clock.png
www.nissen.co.jp/res/p/img/common/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ico-hdr-heart.png
www.nissen.co.jp/res/p/img/common/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ico-hdr-book.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ico-hdr-cart.png
www.nissen.co.jp/res/p/img/common/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
arw-rgt-blue-s.png
www.nissen.co.jp/res/p/img/common/ |
1015 B 1 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
sprite.png
www.nissen.co.jp/res/p/img/common/ |
15 KB 15 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
bg_cat-srch01.png
www.nissen.co.jp/res/p/img/storetop/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
bg_cat-srch02.png
www.nissen.co.jp/res/p/img/storetop/ |
2 KB 3 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
bg_cat-srch03.png
www.nissen.co.jp/res/p/img/storetop/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
bg_cat-srch04.png
www.nissen.co.jp/res/p/img/storetop/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
bg_cat-srch05.png
www.nissen.co.jp/res/p/img/storetop/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
bg_cat-srch08.png
www.nissen.co.jp/res/p/img/storetop/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
bg_cat-srch06.png
www.nissen.co.jp/res/p/img/storetop/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
bg_cat-srch07.png
www.nissen.co.jp/res/p/img/storetop/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
letro.js
letro.jp/tags/js/ |
315 B 597 B |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
other.html
www.nissen.co.jp/BtoB/ Frame F2A4 |
6 KB 4 KB |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
m-link-next.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 1 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
m-btn-icon-quickview.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
m-item_list_rank01.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
rank35.png
www.nissen.co.jp/res/p/review/ |
4 KB 5 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
m-item_list_rank02.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
rank40.png
www.nissen.co.jp/res/p/review/ |
3 KB 4 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
m-item_list_rank03.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
m-btn-switch-off.png
www.nissen.co.jp/res/p/img/common/ |
955 B 1 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
rank45.png
www.nissen.co.jp/res/p/review/ |
3 KB 3 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
arw-circle-rgt-white.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 1 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
sprite02.jpg
www.nissen.co.jp/res/p/img/top/ |
10 KB 10 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
sprite03.jpg
www.nissen.co.jp/res/p/img/top/ |
7 KB 8 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ico-exlink.png
www.nissen.co.jp/res/p/img/common/ |
1 KB 1 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
page-top.png
www.nissen.co.jp/res/p/img/common/ |
2 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
gtm.js
www.googletagmanager.com/ |
241 KB 65 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
tag.js
s.yjtag.jp/ |
37 KB 13 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
/
wovn.global.ssl.fastly.net/js_data/json/1/GtqK3M/ |
236 KB 64 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
GtqK3M
wovn.global.ssl.fastly.net/domain/options/ |
11 KB 4 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
custom_4cffe2e439ad4a79b476edbbe8b2bd20.js
sync-tag.karte.io/ |
6 KB 7 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tag
yjtag.yahoo.co.jp/ |
13 KB 4 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
config.json
c.go-mpulse.net/api/ Frame F136 |
5 KB 2 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
fd8edacb259ti243987fc604892e94ab5
www.nissen.co.jp/staticweb/ |
17 B 647 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET DATA |
truncated
/ |
9 KB 0 |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET DATA |
truncated
/ |
157 B 0 |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 688 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
cart
www.nissen.co.jp/order/api/ |
103 B 736 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
api
www.leanplum.com/ |
88 B 231 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210205_wcpt_ev.jpg
www.nissen.co.jp/img/ |
20 KB 20 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210204_teiban50_ev.jpg
www.nissen.co.jp/img/ |
22 KB 22 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
200207_rev1_ev.jpg
www.nissen.co.jp/img/ |
16 KB 16 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210225_sho15s_ev.jpg
www.nissen.co.jp/img/ |
20 KB 21 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210225_spwg10_ev.jpg
www.nissen.co.jp/img/ |
38 KB 38 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210225_ppbsb_ev.jpg
www.nissen.co.jp/img/ |
25 KB 26 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210226_twlwk_ev.jpg
www.nissen.co.jp/img/ |
27 KB 27 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210215_ptinc_ev.jpg
www.nissen.co.jp/img/ |
18 KB 19 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210222_ssbb_ev.jpg
www.nissen.co.jp/img/ |
23 KB 23 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
180817_baseball_matome.jpg
www.nissen.co.jp/img/ |
18 KB 18 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
190417_skalpdb_ev.jpg
www.nissen.co.jp/img/ |
17 KB 17 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
181205_kosui_2ten.jpg
www.nissen.co.jp/img/ |
21 KB 22 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
201214_brandb_ev.jpg
www.nissen.co.jp/img/ |
22 KB 22 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210122_bo_ev.jpg
www.nissen.co.jp/img/ |
13 KB 13 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210129_outzakkab_ev.jpg
www.nissen.co.jp/img/ |
21 KB 21 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210226_bbdllws_ev.jpg
www.nissen.co.jp/img/ |
19 KB 19 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210216_otmss_ev.jpg
www.nissen.co.jp/img/ |
23 KB 23 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210118_aoteiki_ev.jpg
www.nissen.co.jp/img/ |
31 KB 31 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
210118_prkrteiki_ev.jpg
www.nissen.co.jp/img/ |
21 KB 21 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
201006_ppjteiki_ev.jpg
www.nissen.co.jp/img/ |
20 KB 20 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
200624_spsjm_ev.jpg
www.nissen.co.jp/img/ |
28 KB 28 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
180817_secretsale2_ev.jpg
www.nissen.co.jp/img/ |
11 KB 11 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
180817_sale.jpg
www.nissen.co.jp/img/ |
12 KB 13 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
180817_review_10point.jpg
www.nissen.co.jp/img/ |
48 KB 48 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
201022_twcp_ev.jpg
www.nissen.co.jp/img/ |
12 KB 13 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
190522_magical_ev.jpg
www.nissen.co.jp/img/ |
14 KB 14 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
200106_dpt_ev.jpg
www.nissen.co.jp/img/ |
21 KB 22 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-forlateritem
www.nissen.co.jp/member/api/ |
81 B 720 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
api
www.leanplum.com/ |
88 B 152 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
track
t.karte.io/ |
246 KB 32 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
pixel_4445eb9
www.nissen.co.jp/akam/11/ |
0 482 B |
XHR
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
fd8edacb259ti243987fc604892e94ab5
www.nissen.co.jp/staticweb/ |
17 B 646 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
81 B 504 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
api
www.leanplum.com/ |
88 B 152 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
analytics.js
www.google-analytics.com/ |
46 KB 19 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
conversion_async.js
www.googleadservices.com/pagead/ |
31 KB 13 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ytag.js
s.yimg.jp/images/listing/tool/cv/ |
23 KB 7 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
letro-output.js
letro.jp/tags/js/ |
159 KB 53 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
compass.js
jgl.microad.net/js/ Frame F2A4 Redirect Chain
|
82 KB 19 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
4445eb9
www.nissen.co.jp/akam/11/ Frame F2A4 |
0 0 |
Script
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
fd8edacb259ti243987fc604892e94ab5
www.nissen.co.jp/staticweb/ Frame F2A4 |
73 KB 19 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
P884V-F5DLU-VT9C7-A9CTT-8C6R7
s.go-mpulse.net/boomerang/ Frame CB1D |
205 KB 49 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
a4c118e81f90764cdebbb821587d016464d20f31.js
s.yjtag.jp/lib/ |
798 B 1 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
collect
stats.g.doubleclick.net/j/ |
4 B 89 B |
XHR
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
collect
stats.g.doubleclick.net/j/ |
4 B 70 B |
XHR
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H3-Q050 |
collect
www.google-analytics.com/j/ |
2 B 127 B |
XHR
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
collect
www.google-analytics.com/ |
35 B 58 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
collect
www.google-analytics.com/ |
35 B 384 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ga-audiences
www.google.com/ads/ |
42 B 107 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ga-audiences
www.google.de/ads/ |
42 B 107 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ga-audiences
www.google.com/ads/ |
42 B 107 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ga-audiences
www.google.de/ads/ |
42 B 107 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
fd8edacb259ti243987fc604892e94ab5
www.nissen.co.jp/staticweb/ Frame F2A4 |
17 B 644 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
config.json
c.go-mpulse.net/api/ Frame CB1D |
5 KB 2 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
googleads.g.doubleclick.net/pagead/viewthroughconversion/992014352/ |
2 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
googleads.g.doubleclick.net/pagead/viewthroughconversion/1039079888/ |
2 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
googleads.g.doubleclick.net/pagead/viewthroughconversion/1060716187/ |
2 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/920072297/ Redirect Chain
|
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
googleads.g.doubleclick.net/pagead/viewthroughconversion/821550866/ |
2 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/1002917854/ Redirect Chain
|
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
googleads.g.doubleclick.net/pagead/viewthroughconversion/1012044167/ |
2 KB 2 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/478655322/ Redirect Chain
|
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H3-Q050 |
collect
stats.g.doubleclick.net/j/ |
4 B 425 B |
XHR
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
fd8edacb259ti243987fc604892e94ab5
www.nissen.co.jp/staticweb/ |
17 B 629 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
track
t.karte.io/ |
913 B 1011 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.com/pagead/1p-user-list/992014352/ |
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/992014352/ |
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.com/pagead/1p-user-list/1060716187/ |
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/1060716187/ |
42 B 530 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.com/pagead/1p-user-list/1039079888/ |
42 B 530 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/1039079888/ |
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.com/pagead/1p-user-list/821550866/ |
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/821550866/ |
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
ga-audiences
www.google.com/ads/ |
42 B 65 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
ga-audiences
www.google.de/ads/ |
42 B 65 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.com/pagead/1p-user-list/1012044167/ |
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/1012044167/ |
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
cookie_loader.html
cache.send.microadinc.com/js/ Frame F4BA |
2 KB 1 KB |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
ad
s-rtb.send.microadinc.com/ Frame F2A4 |
1 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
ad
s-rtb.send.microadinc.com/ Frame F2A4 |
1 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
ad
s-rtb.send.microadinc.com/ Frame F2A4 |
1 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
ad
s-rtb.send.microadinc.com/ Frame F2A4 |
1 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET DATA |
truncated
/ |
201 KB 0 |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
geolocation
checkout-api.worldshopping.jp/v1/ |
44 B 486 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
sync
gum.criteo.com/ Frame F4BA |
45 B 367 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
fd8edacb259ti243987fc604892e94ab5
www.nissen.co.jp/staticweb/ Frame F2A4 |
17 B 624 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
embedded-settings.json
api.letro.jp/v1/advertisers/357/ |
1 KB 737 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
checkout.js
checkout-js.worldshopping.jp/ |
1 MB 462 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
3143223_1.jpg
i.microad.net/images/13810/ Frame A2BE |
36 KB 35 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
ic
ssp.send.microadinc.com/ Frame F2A4 |
43 B 279 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
3140373_1.png
i.microad.net/images/13810/ Frame 1A48 |
67 KB 67 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
ic
ssp.send.microadinc.com/ Frame F2A4 |
43 B 279 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
3140377_1.gif
i.microad.net/images/13810/ Frame 6543 |
24 KB 25 KB |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
ic
ssp.send.microadinc.com/ Frame F2A4 |
43 B 279 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
nol_item_300x250.jpg
brandeliaffi.blob.core.windows.net/images/ Frame A78F |
28 KB 28 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
ic
ssp.send.microadinc.com/ Frame F2A4 |
43 B 279 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tracker.legacy.js
static.karte.io/libs/ |
366 KB 122 KB |
XHR
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tracker.widget.js
static.karte.io/libs/ |
221 KB 64 KB |
XHR
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tracker.jquery.js
static.karte.io/libs/ |
83 KB 30 KB |
XHR
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tracker.moment.js
static.karte.io/libs/ |
34 KB 13 KB |
XHR
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tracker.lodash.js
static.karte.io/libs/ |
50 KB 19 KB |
XHR
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
b92.yahoo.co.jp/search/ |
0 439 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
b92.yahoo.co.jp/search/ |
0 864 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
b92.yahoo.co.jp/search/ |
0 438 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
b92.yahoo.co.jp/search/ |
0 437 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
js
v9999.adv.admeme.net/tag/ |
1 KB 2 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
js
v9999.adv.admeme.net/tag/ |
1 KB 2 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
fbevents.js
connect.facebook.net/en_US/ |
91 KB 24 KB |
Script
application/x-javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
b92.yahoo.co.jp/search/ |
0 437 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
uwt.js
static.ads-twitter.com/ |
5 KB 2 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
tags
sin.creativecdn.com/ Frame 1289 Redirect Chain
|
120 B 377 B |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
candy_nissen_CVTag.js
ad1.candy-network.com/api/js/static/conversion/ |
47 KB 11 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
pixel.js
cdn.smartnews-ads.com/i/ |
4 KB 2 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
b92.yahoo.co.jp/search/ |
0 437 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
pv.js
pv.amanad.adtdp.com/32OxbniRuGX0BMKDIQMIAQ/ |
0 0 |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
obtp.js
amplify.outbrain.com/cp/ |
7 KB 3 KB |
Script
application/x-javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tag
yjtag.yahoo.co.jp/ |
2 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
/
b97.yahoo.co.jp/pagead/conversion/1000030347/ |
42 B 776 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
/
b97.yahoo.co.jp/pagead/conversion/1000287262/ |
42 B 776 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
/
b97.yahoo.co.jp/pagead/conversion/1000030347/ |
42 B 776 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
/
b97.yahoo.co.jp/pagead/conversion/1000287262/ |
42 B 776 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
233358624155130
connect.facebook.net/signals/config/ |
241 KB 70 KB |
Script
application/x-javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
track
t.karte.io/ |
67 B 164 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
adsct
t.co/i/ |
43 B 447 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
adsct
analytics.twitter.com/i/ |
31 B 651 B |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
www.facebook.com/tr/ |
44 B 409 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OPTIONS H2 |
ugc_set_impression
log.letro.jp/ Frame |
0 0 |
Other
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
media.css
letro.jp/tags/css/template/ |
33 KB 5 KB |
Stylesheet
text/css |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
media.js
letro.jp/tags/js/template/ |
208 B 489 B |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
ugc_set_impression
log.letro.jp/ |
0 92 B |
XHR
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
p
i.smartnews-ads.com/ |
2 B 178 B |
Image
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
collection
t.karte.io/ |
841 B 1002 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
5fa23c7228094e00117e375c::201106_84_karte.jpg
img-cf.karte.io/image/ |
79 KB 79 KB |
Image
image/jpeg |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
5bbc423011a21b0932274d63::icon_9jyousyou.gif
img-cf.karte.io/image/ |
380 B 703 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
5b3601b5ba565a089d54e5da::qjs_txtleft_img.png
img-cf.karte.io/image/ |
334 B 659 B |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
5b3601b8ba565a089d54e5db::qjs_txtright_img.png
img-cf.karte.io/image/ |
328 B 652 B |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
track
t.karte.io/ |
5 KB 2 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
/
www.facebook.com/tr/ |
0 108 B |
Other
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
collect
www.google-analytics.com/ |
35 B 63 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
media.json
api.letro.jp/v1/ugc-sets/2625/ |
31 KB 9 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
fontLetro.ttf
letro.jp/tags/css/fonts/ |
4 KB 4 KB |
Font
application/octet-stream |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
um
sync.teads.tv/ Frame 1289 |
23 B 172 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H3-Q050 |
collect
www.google-analytics.com/j/ |
4 B 52 B |
XHR
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
json
www.nissen.co.jp/api/v1/item/search/ |
93 KB 6 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H3-Q050 |
collect
stats.g.doubleclick.net/j/ |
4 B 51 B |
XHR
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
ga-audiences
www.google.com/ads/ |
42 B 88 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
ga-audiences
www.google.de/ads/ |
42 B 88 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
report
checkout-api.worldshopping.jp/v1/ |
2 B 446 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OPTIONS H2 |
report
checkout-api.worldshopping.jp/v1/ Frame |
0 0 |
Other
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
cachedClickId
tr.outbrain.com/ |
35 B 239 B |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
unifiedPixel
tr.outbrain.com/ |
43 B 256 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
default
api.locize.io/60ff8224-bbcc-4802-8d59-c8983deae8d0/production/en-US/ |
3 B 594 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
default
api.locize.io/60ff8224-bbcc-4802-8d59-c8983deae8d0/production/en/ |
11 KB 3 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET DATA |
truncated
/ |
43 B 0 |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
Cookie set
nm
m.mobsmart.net/ Frame 7275 |
345 B 725 B |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
pixel
v9999.adv.admeme.net/tag/ |
42 B 477 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
pixel
v9999.adv.admeme.net/tag/ |
42 B 403 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
n
v9999.adv.admeme.net/drtb/ Redirect Chain
|
42 B 266 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
pixel
v9999.adv.admeme.net/tag/ Redirect Chain
|
42 B 403 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/1015216306/ Redirect Chain
|
42 B 89 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
n
v9999.adv.admeme.net/drtb/ Redirect Chain
|
42 B 266 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
/
b92.yahoo.co.jp/search/ |
0 300 B |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ld.js
static.criteo.net/js/ld/ |
36 KB 12 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/1015216306/ Redirect Chain
|
42 B 66 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
Cookie set
nm
m.mobsmart.net/ Frame 0E79 |
345 B 725 B |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
pixel
v9999.adv.admeme.net/tag/ |
42 B 477 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
n
v9999.adv.admeme.net/drtb/ Redirect Chain
|
42 B 266 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
Redirect headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ZZY0117F3097_m_a001.jpg
www.nissen.co.jp/img/item/ZZY01/ZZY0117F3097/ |
10 KB 11 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ZZY0117F3099_m_a001.jpg
www.nissen.co.jp/img/item/ZZY01/ZZY0117F3099/ |
11 KB 12 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
BNO0517F0041_m_a002.jpg
www.nissen.co.jp/img/item/BNO05/BNO0517F0041/ |
5 KB 5 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ZZY0117F3100_m_a001.jpg
www.nissen.co.jp/img/item/ZZY01/ZZY0117F3100/ |
12 KB 12 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ZZY0117F3184_m_a001.jpg
www.nissen.co.jp/img/item/ZZY01/ZZY0117F3184/ |
10 KB 11 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ZZY0117F3098_m_a001.jpg
www.nissen.co.jp/img/item/ZZY01/ZZY0117F3098/ |
12 KB 13 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ZZY0117F3186_m_a001.jpg
www.nissen.co.jp/img/item/ZZY01/ZZY0117F3186/ |
11 KB 12 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ZZY0117F3187_m_a001.jpg
www.nissen.co.jp/img/item/ZZY01/ZZY0117F3187/ |
12 KB 12 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
BNO0517S0003_m_a001.jpg
www.nissen.co.jp/img/item/BNO05/BNO0517S0003/ |
7 KB 7 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ZZY0117F3185_m_a001.jpg
www.nissen.co.jp/img/item/ZZY01/ZZY0117F3185/ |
12 KB 13 KB |
Image
image/webp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
ico-plus.png
www.nissen.co.jp/res/p/img/item/ |
1 KB 2 KB |
Image
image/png |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
track
t.karte.io/ |
913 B 1007 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
event
sslwidget.criteo.com/ |
22 B 534 B |
Script
application/x-javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
syncframe
gum.criteo.com/ Frame FA2F |
0 150 B |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
Cookie set
tag
m.mobsmart.net/nm/iframe/ Frame 9B3F |
280 B 660 B |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
Cookie set
tag
m.mobsmart.net/nm/iframe/ Frame DA5A |
280 B 660 B |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
/
685b3919.akstat.io/ Frame F2A4 |
0 203 B |
Other
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tag
adv.mobsmart.net/ad/ Frame 65C6 |
0 143 B |
Document
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
tag
adv.mobsmart.net/ad/ Frame F08E |
0 143 B |
Document
text/plain |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
conversion_async.js
www.googleadservices.com/pagead/ |
31 KB 13 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
1.js
wap.wovn.io/ |
6 KB 3 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
translate
ee.wovn.io/values/ |
110 KB 44 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
stallion_loader
j.wovn.io/ Frame 82B8 |
8 KB 4 KB |
Document
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET DATA |
truncated
/ |
284 B 0 |
Image
image/svg+xml |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
track
t.karte.io/ |
940 B 1 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
translate
ee.wovn.io/values/ |
70 KB 31 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
post
wap.wovn.io/ |
0 140 B |
XHR
text/html |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
googleads.g.doubleclick.net/pagead/viewthroughconversion/1008140011/ |
2 KB 1 KB |
Script
text/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H/1.1 |
rollbar.min.js
cdn.rollbar.com/rollbarjs/refs/tags/v2.15.2/ Frame 82B8 |
70 KB 22 KB |
Script
application/javascript |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.com/pagead/1p-user-list/1008140011/ |
42 B 89 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H3-Q050 |
/
www.google.de/pagead/1p-user-list/1008140011/ |
42 B 89 B |
Image
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
/
685b3919.akstat.io/ |
0 203 B |
Other
image/gif |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
translate
ee.wovn.io/values/ |
19 KB 4 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
close04.woff
templates-cf.karte.io/fonts/ |
1 KB 2 KB |
Font
application/x-woff |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
track
t.karte.io/ |
913 B 1007 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
translate
ee.wovn.io/values/ |
18 KB 4 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
translate
ee.wovn.io/values/ |
50 B 460 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
translate
ee.wovn.io/values/ |
50 B 460 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST H2 |
GtqK3M
ee.wovn.io/report_values/ |
2 B 398 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 470 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 471 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 1 KB |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST |
collect
www.google-analytics.com/j/ |
0 0 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 687 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 687 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 684 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 687 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET H2 |
favorite-item
www.nissen.co.jp/member/api/ |
41 B 689 B |
XHR
application/json |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
Request headers
Response headers
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET |
favorite-item
www.nissen.co.jp/member/api/ |
0 0 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Failed requests
These URLs were requested, but there was no response received. You will also see them in the list above.
- Domain
- www.google-analytics.com
- URL
- https://www.google-analytics.com/j/collect?v=1&_v=j88&a=1647460031&t=event&ni=1&_s=1&dl=https%3A%2F%2Fwww.nissen.co.jp%2F&dp=%2F&ul=en-us&de=UTF-8&dt=%5BNissen%5D%20Fashion%20mail%20order%202021%20Spring&sd=24-bit&sr=1600x1200&vp=1600x1200&je=0&ec=JSError&ea=Uncaught%20TypeError%3A%20Cannot%20read%20property%20%27getItem%27%20of%20null&el=PC%20data%3Atext%2Fjavascript%3Bbase64%2CZnVuY3Rpb24gb25Mb2FkWmlnWmFnKCl7IWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBvPXRbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLG4pLG8ubD0hMCxvLmV4cG9ydHN9bi5tPWUsbi5jPXQsbi5kPWZ1bmN0aW9uKGUsdCxyKXtuLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLnI9ZnVuY3Rpb24oZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1uKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiYib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmInN0cmluZyIhPXR5cGVvZiBlKWZvcih2YXIgbyBpbiBlKW4uZChyLG8sZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxvKSk7cmV0dXJuIHJ9LG4ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU%2FZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gbi5kKHQsImEiLHQpLHR9LG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5wPSIvIixuKG4ucz0yNTYpfShbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMpLG89bigyMikuZixpPW4oNzIpLGE9bigxKSxzPW4oMjMpLHU9big5KSxjPW4oMTApLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24odCxuLHIpe2lmKHRoaXMgaW5zdGFuY2VvZiBlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHQpO2Nhc2UgMjpyZXR1cm4gbmV3IGUodCxuKX1yZXR1cm4gbmV3IGUodCxuLHIpfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIHQucHJvdG90eXBlPWUucHJvdG90eXBlLHR9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGYscCxkLGgsZyx2LHksbT1lLnRhcmdldCxiPWUuZ2xvYmFsLHg9ZS5zdGF0LHc9ZS5wcm90byxrPWI%2Fcjp4P3JbbV06KHJbbV18fHt9KS5wcm90b3R5cGUsUz1iP2E6YVttXXx8KGFbbV09e30pLE89Uy5wcm90b3R5cGU7Zm9yKHAgaW4gdCluPSFpKGI%2FcDptKyh4PyIuIjoiIyIpK3AsZS5mb3JjZWQpJiZrJiZjKGsscCksaD1TW3BdLG4mJihnPWUubm9UYXJnZXRHZXQ%2FKHk9byhrLHApKSYmeS52YWx1ZTprW3BdKSxkPW4mJmc%2FZzp0W3BdLG4mJnR5cGVvZiBoPT10eXBlb2YgZHx8KHY9ZS5iaW5kJiZuP3MoZCxyKTplLndyYXAmJm4%2FbChkKTp3JiYiZnVuY3Rpb24iPT10eXBlb2YgZD9zKEZ1bmN0aW9uLmNhbGwsZCk6ZCwoZS5zaGFtfHxkJiZkLnNoYW18fGgmJmguc2hhbSkmJnUodiwic2hhbSIsITApLFNbcF09dix3JiYoYyhhLGY9bSsiUHJvdG90eXBlIil8fHUoYSxmLHt9KSxhW2ZdW3BdPWQsZS5yZWFsJiZPJiYhT1twXSYmdShPLHAsZCkpKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXt9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPW4oMTApLGk9big2MiksYT1uKDEyKS5mO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yLlN5bWJvbHx8KHIuU3ltYm9sPXt9KTtvKHQsZSl8fGEodCxlLHt2YWx1ZTppLmYoZSl9KX19LGZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24odCl7dmFyIG49Im9iamVjdCIscj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5NYXRoPT1NYXRoJiZlfTtlLmV4cG9ydHM9cih0eXBlb2YgZ2xvYmFsVGhpcz09biYmZ2xvYmFsVGhpcyl8fHIodHlwZW9mIHdpbmRvdz09biYmd2luZG93KXx8cih0eXBlb2Ygc2VsZj09biYmc2VsZil8fHIodHlwZW9mIHQ9PW4mJnQpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSkuY2FsbCh0aGlzLG4oMTE4KSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMpLG89bigzNyksaT1uKDU2KSxhPW4oNzUpLHM9ci5TeW1ib2wsdT1vKCJ3a3MiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHVbZV18fCh1W2VdPWEmJnNbZV18fChhP3M6aSkoIlN5bWJvbC4iK2UpKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU%2FbnVsbCE9PWU6ImZ1bmN0aW9uIj09dHlwZW9mIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big2KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIXIoZSkpdGhyb3cgVHlwZUVycm9yKFN0cmluZyhlKSsiIGlzIG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpO2UuZXhwb3J0cz0hcihmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDgpLG89bigxMiksaT1uKDE3KTtlLmV4cG9ydHM9cj9mdW5jdGlvbihlLHQsbil7cmV0dXJuIG8uZihlLHQsaSgxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30uaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNTQpLG89bigzNSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByKG8oZSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOCksbz1uKDcwKSxpPW4oNyksYT1uKDM4KSxzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9cj9zOmZ1bmN0aW9uKGUsdCxuKXtpZihpKGUpLHQ9YSh0LCEwKSxpKG4pLG8pdHJ5e3JldHVybiBzKGUsdCxuKX1jYXRjaChlKXt9aWYoImdldCJpbiBufHwic2V0ImluIG4pdGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCIpO3JldHVybiJ2YWx1ZSJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKFN0cmluZyhlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzNSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocihlKSl9fSxmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKGUpLnNsaWNlKDgsLTEpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e319LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ITB9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDU4KSxvPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP28ocihlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDMpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU%2FZTp2b2lkIDB9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI%2FaShyW2VdKXx8aShvW2VdKTpyW2VdJiZyW2VdW3RdfHxvW2VdJiZvW2VdW3RdfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTIpLmYsbz1uKDkpLGk9bigxMCksYT1uKDEyMykscz1uKDQpKCJ0b1N0cmluZ1RhZyIpLHU9YSE9PXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixjKXtpZihlKXt2YXIgbD1uP2U6ZS5wcm90b3R5cGU7aShsLHMpfHxyKGwscyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KSxjJiZ1JiZvKGwsInRvU3RyaW5nIixhKX19fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big4KSxvPW4oNTcpLGk9bigxNyksYT1uKDExKSxzPW4oMzgpLHU9bigxMCksYz1uKDcwKSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPXI%2FbDpmdW5jdGlvbihlLHQpe2lmKGU9YShlKSx0PXModCwhMCksYyl0cnl7cmV0dXJuIGwoZSx0KX1jYXRjaChlKXt9aWYodShlLHQpKXJldHVybiBpKCFvLmYuY2FsbChlLHQpLGVbdF0pfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7aWYocihlKSx2b2lkIDA9PT10KXJldHVybiBlO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsbCh0KX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZS5jYWxsKHQsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGUuY2FsbCh0LG4scixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEwKSxvPW4oMTQpLGk9bigzOSksYT1uKDc0KSxzPWkoIklFX1BST1RPIiksdT1PYmplY3QucHJvdG90eXBlO2UuZXhwb3J0cz1hP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZT1vKGUpLHIoZSxzKT9lW3NdOiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P3U6bnVsbH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDcpLG89bigxMjIpLGk9big1OSksYT1uKDQwKSxzPW4oNzkpLHU9big1NSksYz1uKDM5KSgiSUVfUFJPVE8iKSxsPWZ1bmN0aW9uKCl7fSxmPWZ1bmN0aW9uKCl7dmFyIGUsdD11KCJpZnJhbWUiKSxuPWkubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHMuYXBwZW5kQ2hpbGQodCksdC5zcmM9U3RyaW5nKCJqYXZhc2NyaXB0OiIpLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoIjxzY3JpcHQ%2BZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ%2BIiksZS5jbG9zZSgpLGY9ZS5GO24tLTspZGVsZXRlIGYucHJvdG90eXBlW2lbbl1dO3JldHVybiBmKCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8obC5wcm90b3R5cGU9cihlKSxuPW5ldyBsLGwucHJvdG90eXBlPW51bGwsbltjXT1lKTpuPWYoKSx2b2lkIDA9PT10P246byhuLHQpfSxhW2NdPSEwfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sbyl7byYmby5lbnVtZXJhYmxlP2VbdF09bjpyKGUsdCxuKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMjYpLmNoYXJBdCxvPW4oMzYpLGk9big3MSksYT1vLnNldCxzPW8uZ2V0dGVyRm9yKCJTdHJpbmcgSXRlcmF0b3IiKTtpKFN0cmluZywiU3RyaW5nIixmdW5jdGlvbihlKXthKHRoaXMse3R5cGU6IlN0cmluZyBJdGVyYXRvciIsc3RyaW5nOlN0cmluZyhlKSxpbmRleDowfSl9LGZ1bmN0aW9uKCl7dmFyIGUsdD1zKHRoaXMpLG49dC5zdHJpbmcsbz10LmluZGV4O3JldHVybiBvPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9OihlPXIobixvKSx0LmluZGV4Kz1lLmxlbmd0aCx7dmFsdWU6ZSxkb25lOiExfSl9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTUpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iQXJyYXkiPT1yKGUpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2UrIlByb3RvdHlwZSJdfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEzKSxvPWZ1bmN0aW9uKGUpe3ZhciB0LG47dGhpcy5wcm9taXNlPW5ldyBlKGZ1bmN0aW9uKGUscil7aWYodm9pZCAwIT09dHx8dm9pZCAwIT09bil0aHJvdyBUeXBlRXJyb3IoIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yIik7dD1lLG49cn0pLHRoaXMucmVzb2x2ZT1yKHQpLHRoaXMucmVqZWN0PXIobil9O2UuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbyhlKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE3OSksbz1uKDkzKTtmdW5jdGlvbiBpKHQpe3JldHVybiBlLmV4cG9ydHM9aT1vP3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxyKGUpfSxpKHQpfWUuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTU5KX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDIwMyl9LGZ1bmN0aW9uKGUsdCxuKXtuKDExNik7dmFyIHI9bigxMjUpLG89bigzKSxpPW4oOSksYT1uKDE2KSxzPW4oNCkoInRvU3RyaW5nVGFnIik7Zm9yKHZhciB1IGluIHIpe3ZhciBjPW9bdV0sbD1jJiZjLnByb3RvdHlwZTtsJiYhbFtzXSYmaShsLHMsdSksYVt1XT1hLkFycmF5fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrZSk7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpLGE9bigxMTcpLHM9bigzKSx1PW4oNiksYz1uKDkpLGw9bigxMCksZj1uKDM5KSxwPW4oNDApLGQ9cy5XZWFrTWFwO2lmKGEpe3ZhciBoPW5ldyBkLGc9aC5nZXQsdj1oLmhhcyx5PWguc2V0O3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4geS5jYWxsKGgsZSx0KSx0fSxvPWZ1bmN0aW9uKGUpe3JldHVybiBnLmNhbGwoaCxlKXx8e319LGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHYuY2FsbChoLGUpfX1lbHNle3ZhciBtPWYoInN0YXRlIik7cFttXT0hMCxyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMoZSxtLHQpLHR9LG89ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxtKT9lW21dOnt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsbSl9fWUuZXhwb3J0cz17c2V0OnIsZ2V0Om8saGFzOmksZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKT9vKGUpOnIoZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47aWYoIXUodCl8fChuPW8odCkpLnR5cGUhPT1lKXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK2UrIiByZXF1aXJlZCIpO3JldHVybiBufX19fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzKSxvPW4oMTIwKSxpPW4oMTgpLGE9clsiX19jb3JlLWpzX3NoYXJlZF9fIl18fG8oIl9fY29yZS1qc19zaGFyZWRfXyIse30pOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYVtlXXx8KGFbZV09dm9pZCAwIT09dD90Ont9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMi4wIixtb2RlOmk%2FInB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzcpLG89big1NiksaT1yKCJrZXlzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpW2VdfHwoaVtlXT1vKGUpKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXt9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big3Niksbz1uKDU5KTtlLmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiByKGUsbyl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big4MCksbz1uKDE2KSxpPW4oNCkoIml0ZXJhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIGVbaV18fGVbIkBAaXRlcmF0b3IiXXx8b1tyKGUpXX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDcpLG89big5MCksaT1uKDE5KSxhPW4oMjMpLHM9big0MiksdT1uKDg5KSxjPWZ1bmN0aW9uKGUsdCl7dGhpcy5zdG9wcGVkPWUsdGhpcy5yZXN1bHQ9dH07KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixsLGYpe3ZhciBwLGQsaCxnLHYseSxtPWEodCxuLGw%2FMjoxKTtpZihmKXA9ZTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZihkPXMoZSkpKXRocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSIpO2lmKG8oZCkpe2ZvcihoPTAsZz1pKGUubGVuZ3RoKTtnPmg7aCsrKWlmKCh2PWw%2FbShyKHk9ZVtoXSlbMF0seVsxXSk6bShlW2hdKSkmJnYgaW5zdGFuY2VvZiBjKXJldHVybiB2O3JldHVybiBuZXcgYyghMSl9cD1kLmNhbGwoZSl9Zm9yKDshKHk9cC5uZXh0KCkpLmRvbmU7KWlmKCh2PXUocCxtLHkudmFsdWUsbCkpJiZ2IGluc3RhbmNlb2YgYylyZXR1cm4gdjtyZXR1cm4gbmV3IGMoITEpfSkuc3RvcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGMoITAsZSl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJue2Vycm9yOiExLHZhbHVlOmUoKX19Y2F0Y2goZSl7cmV0dXJue2Vycm9yOiEwLHZhbHVlOmV9fX19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxMTUpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTI4KX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDEzMSl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxMzIpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTUxKX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDE1NSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxNjYpO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLHIoZSxvLmtleSxvKX19ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmbyhlLnByb3RvdHlwZSx0KSxuJiZvKGUsbiksZX19LGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImxvY2l6ZSI6eyJwcm9kdWN0SWQiOiI2MGZmODIyNC1iYmNjLTQ4MDItOGQ1OS1jODk4M2RlYWU4ZDAiLCJhcGlLZXkiOiI3Mzk2ZTc3OC0wOTAzLTRlN2UtODI4Mi1lNjcxNTg1OGJiOGMiLCJ2ZXJzaW9uIjoicHJvZHVjdGlvbiJ9LCJpbnRlZ3JhdGlvbnMiOnsiY29sb3JtZUFwcCI6eyJhcGkiOnsicHJvZHVjdCI6Imh0dHBzOi8vY29sb3JtZS53b3JsZHNob3BwaW5nLmpwL3YxL3Byb2R1Y3QifX0sInNob3BpZnlBcHAiOnsiYXBpIjp7InByb2R1Y3QiOiJodHRwczovL2FwcC1zLndvcmxkc2hvcHBpbmcuanAvdjEvcHJvZHVjdCJ9fX0sImxhbWJkYSI6eyJjcmVhdGUiOiJzaG9wLWRhdGEtcHJvZC1jcmVhdGUiLCJjbGVhciI6InNob3AtZGF0YS1wcm9kLWNsZWFyIn0sInNmZGMiOnsiY29ubmVjdGlvblNldHRpbmdzUGF0aCI6Ii9zZmRjL3Byb2QvYXBpIn0sImRlYnVnSG9zdHMiOlsic2hvcC1kYXNoYm9hcmQud29ybGRzaG9wcGluZy5iaXoiLCJzaG9wLWRhc2hib2FyZC1kZXYud29ybGRzaG9wcGluZy5iaXoiLCJzaG9wLWRhc2hib2FyZC1sb2NhbC53b3JsZHNob3BwaW5nLmJpeiJdfScpfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1KSxvPW4oMTUpLGk9IiIuc3BsaXQ7ZS5leHBvcnRzPXIoZnVuY3Rpb24oKXtyZXR1cm4hT2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KT9mdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09byhlKT9pLmNhbGwoZSwiIik6T2JqZWN0KGUpfTpPYmplY3R9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMpLG89big2KSxpPXIuZG9jdW1lbnQsYT1vKGkpJiZvKGkuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhP2kuY3JlYXRlRWxlbWVudChlKTp7fX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIitTdHJpbmcodm9pZCAwPT09ZT8iIjplKSsiKV8iKygrK24rcikudG9TdHJpbmcoMzYpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1vJiYhci5jYWxsKHsxOjJ9LDEpO3QuZj1pP2Z1bmN0aW9uKGUpe3ZhciB0PW8odGhpcyxlKTtyZXR1cm4hIXQmJnQuZW51bWVyYWJsZX06cn0sZnVuY3Rpb24oZSx0KXt2YXIgbj1NYXRoLmNlaWwscj1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk%2FMDooZT4wP3I6bikoZSl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big3KSxvPW4oMTI0KTtlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxuPXt9O3RyeXsoZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCkuY2FsbChuLFtdKSx0PW4gaW5zdGFuY2VvZiBBcnJheX1jYXRjaChlKXt9cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIHIobiksbyhpKSx0P2UuY2FsbChuLGkpOm4uX19wcm90b19fPWksbn19KCk6dm9pZCAwKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM4KSxvPW4oMTIpLGk9bigxNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgYT1yKHQpO2EgaW4gZT9vLmYoZSxhLGkoMCxuKSk6ZVthXT1ufX0sZnVuY3Rpb24oZSx0LG4pe3QuZj1uKDQpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iXHRcblx2XGZcciDCoOGagOKAgOKAgeKAguKAg%2BKAhOKAheKAhuKAh%2BKAiOKAieKAiuKAr%2BKBn%2BOAgFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDIwKTtlLmV4cG9ydHM9cigibmF2aWdhdG9yIiwidXNlckFnZW50Iil8fCIifSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTYyKX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDIwOCl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigyMjgpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMjQ2KX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big4KSxvPW4oNSksaT1uKDU1KTtlLmV4cG9ydHM9IXImJiFvKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDApLG89bigxMjEpLGk9bigyNCksYT1uKDYwKSxzPW4oMjEpLHU9big5KSxjPW4oMjYpLGw9big0KSxmPW4oMTgpLHA9bigxNiksZD1uKDczKSxoPWQuSXRlcmF0b3JQcm90b3R5cGUsZz1kLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsdj1sKCJpdGVyYXRvciIpLHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGwsZCxtLGIpe28obix0LGwpO3ZhciB4LHcsayxTPWZ1bmN0aW9uKGUpe2lmKGU9PT1kJiZMKXJldHVybiBMO2lmKCFnJiZlIGluIFQpcmV0dXJuIFRbZV07c3dpdGNoKGUpe2Nhc2Uia2V5cyI6Y2FzZSJ2YWx1ZXMiOmNhc2UiZW50cmllcyI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LE89dCsiIEl0ZXJhdG9yIixqPSExLFQ9ZS5wcm90b3R5cGUsRT1UW3ZdfHxUWyJAQGl0ZXJhdG9yIl18fGQmJlRbZF0sTD0hZyYmRXx8UyhkKSxDPSJBcnJheSI9PXQmJlQuZW50cmllc3x8RTtpZihDJiYoeD1pKEMuY2FsbChuZXcgZSkpLGghPT1PYmplY3QucHJvdG90eXBlJiZ4Lm5leHQmJihmfHxpKHgpPT09aHx8KGE%2FYSh4LGgpOiJmdW5jdGlvbiIhPXR5cGVvZiB4W3ZdJiZ1KHgsdix5KSkscyh4LE8sITAsITApLGYmJihwW09dPXkpKSksInZhbHVlcyI9PWQmJkUmJiJ2YWx1ZXMiIT09RS5uYW1lJiYoaj0hMCxMPWZ1bmN0aW9uKCl7cmV0dXJuIEUuY2FsbCh0aGlzKX0pLGYmJiFifHxUW3ZdPT09THx8dShULHYsTCkscFt0XT1MLGQpaWYodz17dmFsdWVzOlMoInZhbHVlcyIpLGtleXM6bT9MOlMoImtleXMiKSxlbnRyaWVzOlMoImVudHJpZXMiKX0sYilmb3IoayBpbiB3KSFnJiYhaiYmayBpbiBUfHxjKFQsayx3W2tdKTtlbHNlIHIoe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDpnfHxqfSx3KTtyZXR1cm4gd319LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpLG89LyN8XC5wcm90b3R5cGVcLi8saT1mdW5jdGlvbihlLHQpe3ZhciBuPXNbYShlKV07cmV0dXJuIG49PWN8fG4hPXUmJigiZnVuY3Rpb24iPT10eXBlb2YgdD9yKHQpOiEhdCl9LGE9aS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKG8sIi4iKS50b0xvd2VyQ2FzZSgpfSxzPWkuZGF0YT17fSx1PWkuTkFUSVZFPSJOIixjPWkuUE9MWUZJTEw9IlAiO2UuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saSxhPW4oMjQpLHM9big5KSx1PW4oMTApLGM9big0KSxsPW4oMTgpLGY9YygiaXRlcmF0b3IiKSxwPSExO1tdLmtleXMmJigibmV4dCJpbihpPVtdLmtleXMoKSk%2FKG89YShhKGkpKSkhPT1PYmplY3QucHJvdG90eXBlJiYocj1vKTpwPSEwKSxudWxsPT1yJiYocj17fSksbHx8dShyLGYpfHxzKHIsZixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZS5leHBvcnRzPXtJdGVyYXRvclByb3RvdHlwZTpyLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6cH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpO2UuZXhwb3J0cz0hcihmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBlKSE9PWUucHJvdG90eXBlfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFyKGZ1bmN0aW9uKCl7cmV0dXJuIVN0cmluZyhTeW1ib2woKSl9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTApLG89bigxMSksaT1uKDc3KS5pbmRleE9mLGE9big0MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scz1vKGUpLHU9MCxjPVtdO2ZvcihuIGluIHMpIXIoYSxuKSYmcihzLG4pJiZjLnB1c2gobik7Zm9yKDt0Lmxlbmd0aD51OylyKHMsbj10W3UrK10pJiYofmkoYyxuKXx8Yy5wdXNoKG4pKTtyZXR1cm4gY319LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDExKSxvPW4oMTkpLGk9big3OCksYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGEpe3ZhciBzLHU9cih0KSxjPW8odS5sZW5ndGgpLGw9aShhLGMpO2lmKGUmJm4hPW4pe2Zvcig7Yz5sOylpZigocz11W2wrK10pIT1zKXJldHVybiEwfWVsc2UgZm9yKDtjPmw7bCsrKWlmKChlfHxsIGluIHUpJiZ1W2xdPT09bilyZXR1cm4gZXx8bHx8MDtyZXR1cm4hZSYmLTF9fTtlLmV4cG9ydHM9e2luY2x1ZGVzOmEoITApLGluZGV4T2Y6YSghMSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1OCksbz1NYXRoLm1heCxpPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXIoZSk7cmV0dXJuIG48MD9vKG4rdCwwKTppKG4sdCl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyMCk7ZS5leHBvcnRzPXIoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE1KSxvPW4oNCkoInRvU3RyaW5nVGFnIiksaT0iQXJndW1lbnRzIj09cihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLGE7cmV0dXJuIHZvaWQgMD09PWU%2FIlVuZGVmaW5lZCI6bnVsbD09PWU%2FIk51bGwiOiJzdHJpbmciPT10eXBlb2Yobj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PU9iamVjdChlKSxvKSk%2FbjppP3IodCk6Ik9iamVjdCI9PShhPXIodCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxsZWU%2FIkFyZ3VtZW50cyI6YX19LGZ1bmN0aW9uKGUsdCxuKXtuKDEzMyksbig4NCksbigxMzQpLG4oMTM2KSxuKDEzNyksbigxMzgpLG4oMTM5KSxuKDg4KSxuKDE0MCksbigxNDEpLG4oMTQyKSxuKDE0MyksbigxNDQpLG4oMTQ1KSxuKDE0NiksbigxNDcpLG4oMTQ4KSxuKDE0OSksbigxNTApO3ZhciByPW4oMSk7ZS5leHBvcnRzPXIuU3ltYm9sfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big2KSxvPW4oMjgpLGk9big0KSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBvKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49ZS5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpP3IobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKTpuPXZvaWQgMCksbmV3KHZvaWQgMD09PW4%2FQXJyYXk6bikoMD09PXQ%2FMDp0KX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpLG89big0KSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4hcihmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybih0LmNvbnN0cnVjdG9yPXt9KVtvXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT10W2VdKEJvb2xlYW4pLmZvb30pfX0sZnVuY3Rpb24oZSx0KXt9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDc2KSxvPW4oNTkpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gcihlLG8pfX0sZnVuY3Rpb24oZSx0KXt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjMpLG89big1NCksaT1uKDE0KSxhPW4oMTkpLHM9big4MiksdT1bXS5wdXNoLGM9ZnVuY3Rpb24oZSl7dmFyIHQ9MT09ZSxuPTI9PWUsYz0zPT1lLGw9ND09ZSxmPTY9PWUscD01PT1lfHxmO3JldHVybiBmdW5jdGlvbihkLGgsZyx2KXtmb3IodmFyIHksbSxiPWkoZCkseD1vKGIpLHc9cihoLGcsMyksaz1hKHgubGVuZ3RoKSxTPTAsTz12fHxzLGo9dD9PKGQsayk6bj9PKGQsMCk6dm9pZCAwO2s%2BUztTKyspaWYoKHB8fFMgaW4geCkmJihtPXcoeT14W1NdLFMsYiksZSkpaWYodClqW1NdPW07ZWxzZSBpZihtKXN3aXRjaChlKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiB5O2Nhc2UgNjpyZXR1cm4gUztjYXNlIDI6dS5jYWxsKGoseSl9ZWxzZSBpZihsKXJldHVybiExO3JldHVybiBmPy0xOmN8fGw%2FbDpqfX07ZS5leHBvcnRzPXtmb3JFYWNoOmMoMCksbWFwOmMoMSksZmlsdGVyOmMoMiksc29tZTpjKDMpLGV2ZXJ5OmMoNCksZmluZDpjKDUpLGZpbmRJbmRleDpjKDYpfX0sZnVuY3Rpb24oZSx0LG4pe24oMikoIml0ZXJhdG9yIil9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDcpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixvKXt0cnl7cmV0dXJuIG8%2FdChyKG4pWzBdLG5bMV0pOnQobil9Y2F0Y2godCl7dmFyIGk9ZS5yZXR1cm47dGhyb3cgdm9pZCAwIT09aSYmcihpLmNhbGwoZSkpLHR9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNCksbz1uKDE2KSxpPXIoIml0ZXJhdG9yIiksYT1BcnJheS5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiYoby5BcnJheT09PWV8fGFbaV09PT1lKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQpKCJpdGVyYXRvciIpLG89ITE7dHJ5e3ZhciBpPTAsYT17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhaSsrfX0scmV0dXJuOmZ1bmN0aW9uKCl7bz0hMH19O2Fbcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQXJyYXkuZnJvbShhLGZ1bmN0aW9uKCl7dGhyb3cgMn0pfWNhdGNoKGUpe31lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighdCYmIW8pcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciBpPXt9O2lbcl09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fX19LGUoaSl9Y2F0Y2goZSl7fXJldHVybiBufX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEzKSxvPW4oNiksaT1bXS5zbGljZSxhPXt9LHM9ZnVuY3Rpb24oZSx0LG4pe2lmKCEodCBpbiBhKSl7Zm9yKHZhciByPVtdLG89MDtvPHQ7bysrKXJbb109ImFbIitvKyJdIjthW3RdPUZ1bmN0aW9uKCJDLGEiLCJyZXR1cm4gbmV3IEMoIityLmpvaW4oIiwiKSsiKSIpfXJldHVybiBhW3RdKGUsbil9O2UuZXhwb3J0cz1GdW5jdGlvbi5iaW5kfHxmdW5jdGlvbihlKXt2YXIgdD1yKHRoaXMpLG49aS5jYWxsKGFyZ3VtZW50cywxKSxhPWZ1bmN0aW9uKCl7dmFyIHI9bi5jb25jYXQoaS5jYWxsKGFyZ3VtZW50cykpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgYT9zKHQsci5sZW5ndGgscik6dC5hcHBseShlLHIpfTtyZXR1cm4gbyh0LnByb3RvdHlwZSkmJihhLnByb3RvdHlwZT10LnByb3RvdHlwZSksYX19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxODMpfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzNSksbz0iWyIrbig2MykrIl0iLGk9UmVnRXhwKCJeIitvK28rIioiKSxhPVJlZ0V4cChvK28rIiokIikscz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49U3RyaW5nKHIodCkpO3JldHVybiAxJmUmJihuPW4ucmVwbGFjZShpLCIiKSksMiZlJiYobj1uLnJlcGxhY2UoYSwiIikpLG59fTtlLmV4cG9ydHM9e3N0YXJ0OnMoMSksZW5kOnMoMiksdHJpbTpzKDMpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMCksbz1uKDMpLGk9big2NCksYT1bXS5zbGljZSxzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg%2BMixvPXI%2FYS5jYWxsKGFyZ3VtZW50cywyKTp2b2lkIDA7cmV0dXJuIGUocj9mdW5jdGlvbigpeygiZnVuY3Rpb24iPT10eXBlb2YgdD90OkZ1bmN0aW9uKHQpKS5hcHBseSh0aGlzLG8pfTp0LG4pfX07cih7Z2xvYmFsOiEwLGJpbmQ6ITAsZm9yY2VkOi9NU0lFIC5cLi8udGVzdChpKX0se3NldFRpbWVvdXQ6cyhvLnNldFRpbWVvdXQpLHNldEludGVydmFsOnMoby5zZXRJbnRlcnZhbCl9KX0sZnVuY3Rpb24oZSx0LG4pe24oODQpLG4oMjcpLG4oMzQpLG4oMjM1KSxuKDEwMSksbigyNDEpO3ZhciByPW4oMSk7ZS5leHBvcnRzPXIuUHJvbWlzZX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMyk7ZS5leHBvcnRzPXIuUHJvbWlzZX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNyksbz1uKDEzKSxpPW4oNCkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixhPXIoZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWF8fG51bGw9PShuPXIoYSlbaV0pP3Q6byhuKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGksYT1uKDMpLHM9big1KSx1PW4oMTUpLGM9bigyMyksbD1uKDc5KSxmPW4oNTUpLHA9YS5sb2NhdGlvbixkPWEuc2V0SW1tZWRpYXRlLGg9YS5jbGVhckltbWVkaWF0ZSxnPWEucHJvY2Vzcyx2PWEuTWVzc2FnZUNoYW5uZWwseT1hLkRpc3BhdGNoLG09MCxiPXt9LHg9ZnVuY3Rpb24oZSl7aWYoYi5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHQ9YltlXTtkZWxldGUgYltlXSx0KCl9fSx3PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3goZSl9fSxrPWZ1bmN0aW9uKGUpe3goZS5kYXRhKX0sUz1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUrIiIscC5wcm90b2NvbCsiLy8iK3AuaG9zdCl9O2QmJmh8fChkPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7YXJndW1lbnRzLmxlbmd0aD5uOyl0LnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiBiWysrbV09ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIGU%2FZTpGdW5jdGlvbihlKSkuYXBwbHkodm9pZCAwLHQpfSxyKG0pLG19LGg9ZnVuY3Rpb24oZSl7ZGVsZXRlIGJbZV19LCJwcm9jZXNzIj09dShnKT9yPWZ1bmN0aW9uKGUpe2cubmV4dFRpY2sodyhlKSl9OnkmJnkubm93P3I9ZnVuY3Rpb24oZSl7eS5ub3codyhlKSl9OnY%2FKGk9KG89bmV3IHYpLnBvcnQyLG8ucG9ydDEub25tZXNzYWdlPWsscj1jKGkucG9zdE1lc3NhZ2UsaSwxKSk6IWEuYWRkRXZlbnRMaXN0ZW5lcnx8ImZ1bmN0aW9uIiE9dHlwZW9mIHBvc3RNZXNzYWdlfHxhLmltcG9ydFNjcmlwdHN8fHMoUyk%2Fcj0ib25yZWFkeXN0YXRlY2hhbmdlImluIGYoInNjcmlwdCIpP2Z1bmN0aW9uKGUpe2wuYXBwZW5kQ2hpbGQoZigic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVtb3ZlQ2hpbGQodGhpcykseChlKX19OmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQodyhlKSwwKX06KHI9UyxhLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGssITEpKSksZS5leHBvcnRzPXtzZXQ6ZCxjbGVhcjpofX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNyksbz1uKDYpLGk9bigzMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYocihlKSxvKHQpJiZ0LmNvbnN0cnVjdG9yPT09ZSlyZXR1cm4gdDt2YXIgbj1pLmYoZSk7cmV0dXJuKDAsbi5yZXNvbHZlKSh0KSxuLnByb21pc2V9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMCksbz1uKDEzKSxpPW4oMzApLGE9big0NCkscz1uKDQzKTtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHthbGxTZXR0bGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1pLmYodCkscj1uLnJlc29sdmUsdT1uLnJlamVjdCxjPWEoZnVuY3Rpb24oKXt2YXIgbj1vKHQucmVzb2x2ZSksaT1bXSxhPTAsdT0xO3MoZSxmdW5jdGlvbihlKXt2YXIgbz1hKysscz0hMTtpLnB1c2godm9pZCAwKSx1Kyssbi5jYWxsKHQsZSkudGhlbihmdW5jdGlvbihlKXtzfHwocz0hMCxpW29dPXtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6ZX0sLS11fHxyKGkpKX0sZnVuY3Rpb24oZSl7c3x8KHM9ITAsaVtvXT17c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOmV9LC0tdXx8cihpKSl9KX0pLC0tdXx8cihpKX0pO3JldHVybiBjLmVycm9yJiZ1KGMudmFsdWUpLG4ucHJvbWlzZX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTcwKSxvPW4oMTc0KSxpPW4oMTc4KTtmdW5jdGlvbiBhKHQsbixzKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJm8%2FZS5leHBvcnRzPWE9bzplLmV4cG9ydHM9YT1mdW5jdGlvbihlLHQsbil7dmFyIG89aShlLHQpO2lmKG8pe3ZhciBhPXIobyx0KTtyZXR1cm4gYS5nZXQ%2FYS5nZXQuY2FsbChuKTphLnZhbHVlfX0sYSh0LG4sc3x8dCl9ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE4Niksbz1uKDE5MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9cih0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm8oZSx0KX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE5MSksbz1uKDIwMik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09cih0KSYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ%2FbyhlKTp0fX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDIxMil9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigyMTUpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMjE3KX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDIyMil9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjsKLyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNC4xCiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS8KICoKICogSW5jbHVkZXMgU2l6emxlLmpzCiAqIGh0dHBzOi8vc2l6emxlanMuY29tLwogKgogKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBEYXRlOiAyMDE5LTA1LTAxVDIxOjA0WgogKi8KLyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNC4xCiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS8KICoKICogSW5jbHVkZXMgU2l6emxlLmpzCiAqIGh0dHBzOi8vc2l6emxlanMuY29tLwogKgogKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBEYXRlOiAyMDE5LTA1LTAxVDIxOjA0WgogKi8KIWZ1bmN0aW9uKHQsbil7InVzZSBzdHJpY3QiOyJvYmplY3QiPT10eXBlb2YgZS5leHBvcnRzP2UuZXhwb3J0cz10LmRvY3VtZW50P24odCwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIG4oZSl9Om4odCl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKG4sbyl7InVzZSBzdHJpY3QiO3ZhciBpPVtdLGE9bi5kb2N1bWVudCxzPU9iamVjdC5nZXRQcm90b3R5cGVPZix1PWkuc2xpY2UsYz1pLmNvbmNhdCxsPWkucHVzaCxmPWkuaW5kZXhPZixwPXt9LGQ9cC50b1N0cmluZyxoPXAuaGFzT3duUHJvcGVydHksZz1oLnRvU3RyaW5nLHY9Zy5jYWxsKE9iamVjdCkseT17fSxtPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYibnVtYmVyIiE9dHlwZW9mIGUubm9kZVR5cGV9LGI9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd30seD17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIHcoZSx0LG4pe3ZhciByLG8saT0obj1ufHxhKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihpLnRleHQ9ZSx0KWZvcihyIGluIHgpKG89dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmaS5zZXRBdHRyaWJ1dGUocixvKTtuLmhlYWQuYXBwZW5kQ2hpbGQoaSkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKX1mdW5jdGlvbiBrKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9wW2QuY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBTLmZuLmluaXQoZSx0KX0sTz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2c7ZnVuY3Rpb24gaihlKXt2YXIgdD0hIWUmJiJsZW5ndGgiaW4gZSYmZS5sZW5ndGgsbj1rKGUpO3JldHVybiFtKGUpJiYhYihlKSYmKCJhcnJheSI9PT1ufHwwPT09dHx8Im51bWJlciI9PXR5cGVvZiB0JiZ0PjAmJnQtMSBpbiBlKX1TLmZuPVMucHJvdG90eXBlPXtqcXVlcnk6IjMuNC4xIixjb25zdHJ1Y3RvcjpTLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU%2FdS5jYWxsKHRoaXMpOmU8MD90aGlzW2UrdGhpcy5sZW5ndGhdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD1TLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdH0sZWFjaDpmdW5jdGlvbihlKXtyZXR1cm4gUy5lYWNoKHRoaXMsZSl9LG1hcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5tYXAodGhpcyxmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuLHQpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayh1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKGU8MD90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZuPHQ%2FW3RoaXNbbl1dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcigpfSxwdXNoOmwsc29ydDppLnNvcnQsc3BsaWNlOmkuc3BsaWNlfSxTLmV4dGVuZD1TLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlLHQsbixyLG8saSxhPWFyZ3VtZW50c1swXXx8e30scz0xLHU9YXJndW1lbnRzLmxlbmd0aCxjPSExO2ZvcigiYm9vbGVhbiI9PXR5cGVvZiBhJiYoYz1hLGE9YXJndW1lbnRzW3NdfHx7fSxzKyspLCJvYmplY3QiPT10eXBlb2YgYXx8bShhKXx8KGE9e30pLHM9PT11JiYoYT10aGlzLHMtLSk7czx1O3MrKylpZihudWxsIT0oZT1hcmd1bWVudHNbc10pKWZvcih0IGluIGUpcj1lW3RdLCJfX3Byb3RvX18iIT09dCYmYSE9PXImJihjJiZyJiYoUy5pc1BsYWluT2JqZWN0KHIpfHwobz1BcnJheS5pc0FycmF5KHIpKSk%2FKG49YVt0XSxpPW8mJiFBcnJheS5pc0FycmF5KG4pP1tdOm98fFMuaXNQbGFpbk9iamVjdChuKT9uOnt9LG89ITEsYVt0XT1TLmV4dGVuZChjLGkscikpOnZvaWQgMCE9PXImJihhW3RdPXIpKTtyZXR1cm4gYX0sUy5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKCIzLjQuMSIrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoZSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4hKCFlfHwiW29iamVjdCBPYmplY3RdIiE9PWQuY2FsbChlKSkmJighKHQ9cyhlKSl8fCJmdW5jdGlvbiI9PXR5cGVvZihuPWguY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yKSYmZy5jYWxsKG4pPT09dil9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZ2xvYmFsRXZhbDpmdW5jdGlvbihlLHQpe3coZSx7bm9uY2U6dCYmdC5ub25jZX0pfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2lmKGooZSkpZm9yKG49ZS5sZW5ndGg7cjxuJiYhMSE9PXQuY2FsbChlW3JdLHIsZVtyXSk7cisrKTtlbHNlIGZvcihyIGluIGUpaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKE8sIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKGooT2JqZWN0KGUpKT9TLm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTpsLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ%2FLTE6Zi5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxvPWUubGVuZ3RoO3I8bjtyKyspZVtvKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPW8sZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLG89MCxpPWUubGVuZ3RoLGE9IW47bzxpO28rKykhdChlW29dLG8pIT09YSYmci5wdXNoKGVbb10pO3JldHVybiByfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saT0wLGE9W107aWYoaihlKSlmb3Iocj1lLmxlbmd0aDtpPHI7aSsrKW51bGwhPShvPXQoZVtpXSxpLG4pKSYmYS5wdXNoKG8pO2Vsc2UgZm9yKGkgaW4gZSludWxsIT0obz10KGVbaV0saSxuKSkmJmEucHVzaChvKTtyZXR1cm4gYy5hcHBseShbXSxhKX0sZ3VpZDoxLHN1cHBvcnQ6eX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihTLmZuW1N5bWJvbC5pdGVyYXRvcl09aVtTeW1ib2wuaXRlcmF0b3JdKSxTLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7cFsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTt2YXIgVD0KLyohCiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjMuNAogKiBodHRwczovL3NpenpsZWpzLmNvbS8KICoKICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycwogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uLwogKgogKiBEYXRlOiAyMDE5LTA0LTA4CiAqLwpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGEscyx1LGMsbCxmLHAsZCxoLGcsdix5LG0sYix4PSJzaXp6bGUiKzEqbmV3IERhdGUsdz1lLmRvY3VtZW50LGs9MCxTPTAsTz11ZSgpLGo9dWUoKSxUPXVlKCksRT11ZSgpLEw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQmJihmPSEwKSwwfSxDPXt9Lmhhc093blByb3BlcnR5LEE9W10sUD1BLnBvcCxOPUEucHVzaCxEPUEucHVzaCxSPUEuc2xpY2UsST1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX0scT0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxcblxcZl0iLF89Iig%2FOlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIixGPSJcXFsiK00rIiooIitfKyIpKD86IitNKyIqKFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrXysiKSl8KSIrTSsiKlxcXSIsSD0iOigiK18rIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg%2FOlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK0YrIikqKXwuKilcXCl8KSIsej1uZXcgUmVnRXhwKE0rIisiLCJnIiksVz1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLFU9bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSwkPW5ldyBSZWdFeHAoIl4iK00rIiooWz4rfl18IitNKyIpIitNKyIqIiksQj1uZXcgUmVnRXhwKE0rInw%2BIiksVj1uZXcgUmVnRXhwKEgpLEs9bmV3IFJlZ0V4cCgiXiIrXysiJCIpLEc9e0lEOm5ldyBSZWdFeHAoIl4jKCIrXysiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitfKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitfKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrRiksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0gpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg%2FOlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig%2FOihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK3ErIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk%2FXFxkKikiK00rIipcXCl8KSg%2FPVteLV18JCkiLCJpIil9LFg9L0hUTUwkL2ksSj0vXig%2FOmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFk9L15oXGQkL2ksUT0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig%2FOiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGVlPS9bK35dLyx0ZT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIiksbmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4%2BMTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csb2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8i77%2B9IjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxpZT1mdW5jdGlvbigpe3AoKX0sYWU9eGUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0QuYXBwbHkoQT1SLmNhbGwody5jaGlsZE5vZGVzKSx3LmNoaWxkTm9kZXMpLEFbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7RD17YXBwbHk6QS5sZW5ndGg%2FZnVuY3Rpb24oZSx0KXtOLmFwcGx5KGUsUi5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj0wO2VbbisrXT10W3IrK107KTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBzZShlLHQscixvKXt2YXIgaSxzLGMsbCxmLGgseSxtPXQmJnQub3duZXJEb2N1bWVudCxrPXQ%2FdC5ub2RlVHlwZTo5O2lmKHI9cnx8W10sInN0cmluZyIhPXR5cGVvZiBlfHwhZXx8MSE9PWsmJjkhPT1rJiYxMSE9PWspcmV0dXJuIHI7aWYoIW8mJigodD90Lm93bmVyRG9jdW1lbnR8fHQ6dykhPT1kJiZwKHQpLHQ9dHx8ZCxnKSl7aWYoMTEhPT1rJiYoZj1aLmV4ZWMoZSkpKWlmKGk9ZlsxXSl7aWYoOT09PWspe2lmKCEoYz10LmdldEVsZW1lbnRCeUlkKGkpKSlyZXR1cm4gcjtpZihjLmlkPT09aSlyZXR1cm4gci5wdXNoKGMpLHJ9ZWxzZSBpZihtJiYoYz1tLmdldEVsZW1lbnRCeUlkKGkpKSYmYih0LGMpJiZjLmlkPT09aSlyZXR1cm4gci5wdXNoKGMpLHJ9ZWxzZXtpZihmWzJdKXJldHVybiBELmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSkscjtpZigoaT1mWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEQuYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaSkpLHJ9aWYobi5xc2EmJiFFW2UrIiAiXSYmKCF2fHwhdi50ZXN0KGUpKSYmKDEhPT1rfHwib2JqZWN0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpe2lmKHk9ZSxtPXQsMT09PWsmJkIudGVzdChlKSl7Zm9yKChsPXQuZ2V0QXR0cmlidXRlKCJpZCIpKT9sPWwucmVwbGFjZShyZSxvZSk6dC5zZXRBdHRyaWJ1dGUoImlkIixsPXgpLHM9KGg9YShlKSkubGVuZ3RoO3MtLTspaFtzXT0iIyIrbCsiICIrYmUoaFtzXSk7eT1oLmpvaW4oIiwiKSxtPWVlLnRlc3QoZSkmJnllKHQucGFyZW50Tm9kZSl8fHR9dHJ5e3JldHVybiBELmFwcGx5KHIsbS5xdWVyeVNlbGVjdG9yQWxsKHkpKSxyfWNhdGNoKHQpe0UoZSwhMCl9ZmluYWxseXtsPT09eCYmdC5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gdShlLnJlcGxhY2UoVywiJDEiKSx0LHIsbyl9ZnVuY3Rpb24gdWUoKXt2YXIgZT1bXTtyZXR1cm4gZnVuY3Rpb24gdChuLG8pe3JldHVybiBlLnB1c2gobisiICIpPnIuY2FjaGVMZW5ndGgmJmRlbGV0ZSB0W2Uuc2hpZnQoKV0sdFtuKyIgIl09b319ZnVuY3Rpb24gY2UoZSl7cmV0dXJuIGVbeF09ITAsZX1mdW5jdGlvbiBsZShlKXt2YXIgdD1kLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChlKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gZmUoZSx0KXtmb3IodmFyIG49ZS5zcGxpdCgifCIpLG89bi5sZW5ndGg7by0tOylyLmF0dHJIYW5kbGVbbltvXV09dH1mdW5jdGlvbiBwZShlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleDtpZihyKXJldHVybiByO2lmKG4pZm9yKDtuPW4ubmV4dFNpYmxpbmc7KWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJnQudHlwZT09PWV9fWZ1bmN0aW9uIGhlKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBnZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImZvcm0iaW4gdD90LnBhcmVudE5vZGUmJiExPT09dC5kaXNhYmxlZD8ibGFiZWwiaW4gdD8ibGFiZWwiaW4gdC5wYXJlbnROb2RlP3QucGFyZW50Tm9kZS5kaXNhYmxlZD09PWU6dC5kaXNhYmxlZD09PWU6dC5pc0Rpc2FibGVkPT09ZXx8dC5pc0Rpc2FibGVkIT09IWUmJmFlKHQpPT09ZTp0LmRpc2FibGVkPT09ZToibGFiZWwiaW4gdCYmdC5kaXNhYmxlZD09PWV9fWZ1bmN0aW9uIHZlKGUpe3JldHVybiBjZShmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxjZShmdW5jdGlvbihuLHIpe2Zvcih2YXIgbyxpPWUoW10sbi5sZW5ndGgsdCksYT1pLmxlbmd0aDthLS07KW5bbz1pW2FdXSYmKG5bb109IShyW29dPW5bb10pKX0pfSl9ZnVuY3Rpb24geWUoZSl7cmV0dXJuIGUmJnZvaWQgMCE9PWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmV9Zm9yKHQgaW4gbj1zZS5zdXBwb3J0PXt9LGk9c2UuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lc3BhY2VVUkksbj0oZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIVgudGVzdCh0fHxuJiZuLm5vZGVOYW1lfHwiSFRNTCIpfSxwPXNlLnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LG8sYT1lP2Uub3duZXJEb2N1bWVudHx8ZTp3O3JldHVybiBhIT09ZCYmOT09PWEubm9kZVR5cGUmJmEuZG9jdW1lbnRFbGVtZW50PyhoPShkPWEpLmRvY3VtZW50RWxlbWVudCxnPSFpKGQpLHchPT1kJiYobz1kLmRlZmF1bHRWaWV3KSYmby50b3AhPT1vJiYoby5hZGRFdmVudExpc3RlbmVyP28uYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixpZSwhMSk6by5hdHRhY2hFdmVudCYmby5hdHRhY2hFdmVudCgib251bmxvYWQiLGllKSksbi5hdHRyaWJ1dGVzPWxlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT0iaSIsIWUuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLG4uZ2V0RWxlbWVudHNCeVRhZ05hbWU9bGUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQoZC5jcmVhdGVDb21tZW50KCIiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxuLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9US50ZXN0KGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSksbi5nZXRCeUlkPWxlKGZ1bmN0aW9uKGUpe3JldHVybiBoLmFwcGVuZENoaWxkKGUpLmlkPXgsIWQuZ2V0RWxlbWVudHNCeU5hbWV8fCFkLmdldEVsZW1lbnRzQnlOYW1lKHgpLmxlbmd0aH0pLG4uZ2V0QnlJZD8oci5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19LHIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQuZ2V0RWxlbWVudEJ5SWQmJmcpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4%2FW25dOltdfX0pOihyLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj12b2lkIDAhPT1lLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSxyLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10LmdldEVsZW1lbnRCeUlkJiZnKXt2YXIgbixyLG8saT10LmdldEVsZW1lbnRCeUlkKGUpO2lmKGkpe2lmKChuPWkuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKSkmJm4udmFsdWU9PT1lKXJldHVybltpXTtmb3Iobz10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDtpPW9bcisrXTspaWYoKG49aS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW2ldfXJldHVybltdfX0pLHIuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDAhPT10LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6bi5xc2E%2FdC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLG89MCxpPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09ZSl7Zm9yKDtuPWlbbysrXTspMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gaX0sci5maW5kLkNMQVNTPW4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmcpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0seT1bXSx2PVtdLChuLnFzYT1RLnRlc3QoZC5xdWVyeVNlbGVjdG9yQWxsKSkmJihsZShmdW5jdGlvbihlKXtoLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9JyIreCsiJz48L2E%2BPHNlbGVjdCBpZD0nIit4KyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc%2BPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnYucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitxKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR%2BPSIreCsiLV0iKS5sZW5ndGh8fHYucHVzaCgifj0iKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHx2LnB1c2goIjpjaGVja2VkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIreCsiKyoiKS5sZW5ndGh8fHYucHVzaCgiLiMuK1srfl0iKX0pLGxlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc%2BPC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciB0PWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnYucHVzaCgibmFtZSIrTSsiKlsqXiR8IX5dPz0iKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmdi5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGguYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iiksdi5wdXNoKCIsLio6Iil9KSksKG4ubWF0Y2hlc1NlbGVjdG9yPVEudGVzdChtPWgubWF0Y2hlc3x8aC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGgubW96TWF0Y2hlc1NlbGVjdG9yfHxoLm9NYXRjaGVzU2VsZWN0b3J8fGgubXNNYXRjaGVzU2VsZWN0b3IpKSYmbGUoZnVuY3Rpb24oZSl7bi5kaXNjb25uZWN0ZWRNYXRjaD1tLmNhbGwoZSwiKiIpLG0uY2FsbChlLCJbcyE9JyddOngiKSx5LnB1c2goIiE9IixIKX0pLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKCJ8IikpLHk9eS5sZW5ndGgmJm5ldyBSZWdFeHAoeS5qb2luKCJ8IikpLHQ9US50ZXN0KGguY29tcGFyZURvY3VtZW50UG9zaXRpb24pLGI9dHx8US50ZXN0KGguY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU%2FZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM%2Fbi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodClmb3IoO3Q9dC5wYXJlbnROb2RlOylpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sTD10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGY9ITAsMDt2YXIgcj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gcnx8KDEmKHI9KGUub3duZXJEb2N1bWVudHx8ZSk9PT0odC5vd25lckRvY3VtZW50fHx0KT9lLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpOjEpfHwhbi5zb3J0RGV0YWNoZWQmJnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSk9PT1yP2U9PT1kfHxlLm93bmVyRG9jdW1lbnQ9PT13JiZiKHcsZSk%2FLTE6dD09PWR8fHQub3duZXJEb2N1bWVudD09PXcmJmIodyx0KT8xOmw%2FSShsLGUpLUkobCx0KTowOjQmcj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZj0hMCwwO3ZhciBuLHI9MCxvPWUucGFyZW50Tm9kZSxpPXQucGFyZW50Tm9kZSxhPVtlXSxzPVt0XTtpZighb3x8IWkpcmV0dXJuIGU9PT1kPy0xOnQ9PT1kPzE6bz8tMTppPzE6bD9JKGwsZSktSShsLHQpOjA7aWYobz09PWkpcmV0dXJuIHBlKGUsdCk7Zm9yKG49ZTtuPW4ucGFyZW50Tm9kZTspYS51bnNoaWZ0KG4pO2ZvcihuPXQ7bj1uLnBhcmVudE5vZGU7KXMudW5zaGlmdChuKTtmb3IoO2Fbcl09PT1zW3JdOylyKys7cmV0dXJuIHI%2FcGUoYVtyXSxzW3JdKTphW3JdPT09dz8tMTpzW3JdPT09dz8xOjB9LGQpOmR9LHNlLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2UoZSxudWxsLG51bGwsdCl9LHNlLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09ZCYmcChlKSxuLm1hdGNoZXNTZWxlY3RvciYmZyYmIUVbdCsiICJdJiYoIXl8fCF5LnRlc3QodCkpJiYoIXZ8fCF2LnRlc3QodCkpKXRyeXt2YXIgcj1tLmNhbGwoZSx0KTtpZihyfHxuLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIHJ9Y2F0Y2goZSl7RSh0LCEwKX1yZXR1cm4gc2UodCxkLG51bGwsW2VdKS5sZW5ndGg%2BMH0sc2UuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PWQmJnAoZSksYihlLHQpfSxzZS5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1kJiZwKGUpO3ZhciBvPXIuYXR0ckhhbmRsZVt0LnRvTG93ZXJDYXNlKCldLGk9byYmQy5jYWxsKHIuYXR0ckhhbmRsZSx0LnRvTG93ZXJDYXNlKCkpP28oZSx0LCFnKTp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PWk%2FaTpuLmF0dHJpYnV0ZXN8fCFnP2UuZ2V0QXR0cmlidXRlKHQpOihpPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJmkuc3BlY2lmaWVkP2kudmFsdWU6bnVsbH0sc2UuZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKHJlLG9lKX0sc2UuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2UpfSxzZS51bmlxdWVTb3J0PWZ1bmN0aW9uKGUpe3ZhciB0LHI9W10sbz0wLGk9MDtpZihmPSFuLmRldGVjdER1cGxpY2F0ZXMsbD0hbi5zb3J0U3RhYmxlJiZlLnNsaWNlKDApLGUuc29ydChMKSxmKXtmb3IoO3Q9ZVtpKytdOyl0PT09ZVtpXSYmKG89ci5wdXNoKGkpKTtmb3IoO28tLTspZS5zcGxpY2UocltvXSwxKX1yZXR1cm4gbD1udWxsLGV9LG89c2UuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9byhlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyKytdOyluKz1vKHQpO3JldHVybiBufSwocj1zZS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpjZSxtYXRjaDpHLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UodGUsbmUpLGVbM109KGVbM118fGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKHRlLG5lKSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8c2UuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0%2FZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmc2UuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNl0mJmVbMl07cmV0dXJuIEcuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdP2VbMl09ZVs0XXx8ZVs1XXx8IiI6biYmVi50ZXN0KG4pJiYodD1hKG4sITApKSYmKHQ9bi5pbmRleE9mKCIpIixuLmxlbmd0aC10KS1uLmxlbmd0aCkmJihlWzBdPWVbMF0uc2xpY2UoMCx0KSxlWzJdPW4uc2xpY2UoMCx0KSksZS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9T1tlKyIgIl07cmV0dXJuIHR8fCh0PW5ldyBSZWdFeHAoIihefCIrTSsiKSIrZSsiKCIrTSsifCQpIikpJiZPKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dm9pZCAwIT09ZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBvPXNlLmF0dHIocixlKTtyZXR1cm4gbnVsbD09bz8iIT0iPT09dDohdHx8KG8rPSIiLCI9Ij09PXQ%2Fbz09PW46IiE9Ij09PXQ%2FbyE9PW46Il49Ij09PXQ%2FbiYmMD09PW8uaW5kZXhPZihuKToiKj0iPT09dD9uJiZvLmluZGV4T2Yobik%2BLTE6IiQ9Ij09PXQ%2FbiYmby5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK28ucmVwbGFjZSh6LCIgIikrIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10JiYobz09PW58fG8uc2xpY2UoMCxuLmxlbmd0aCsxKT09PW4rIi0iKSl9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPSJudGgiIT09ZS5zbGljZSgwLDMpLGE9Imxhc3QiIT09ZS5zbGljZSgtNCkscz0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PW8%2FZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgYyxsLGYscCxkLGgsZz1pIT09YT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHY9dC5wYXJlbnROb2RlLHk9cyYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG09IXUmJiFzLGI9ITE7aWYodil7aWYoaSl7Zm9yKDtnOyl7Zm9yKHA9dDtwPXBbZ107KWlmKHM%2FcC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09cC5ub2RlVHlwZSlyZXR1cm4hMTtoPWc9Im9ubHkiPT09ZSYmIWgmJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYoaD1bYT92LmZpcnN0Q2hpbGQ6di5sYXN0Q2hpbGRdLGEmJm0pe2ZvcihiPShkPShjPShsPShmPShwPXYpW3hdfHwocFt4XT17fSkpW3AudW5pcXVlSURdfHwoZltwLnVuaXF1ZUlEXT17fSkpW2VdfHxbXSlbMF09PT1rJiZjWzFdKSYmY1syXSxwPWQmJnYuY2hpbGROb2Rlc1tkXTtwPSsrZCYmcCYmcFtnXXx8KGI9ZD0wKXx8aC5wb3AoKTspaWYoMT09PXAubm9kZVR5cGUmJisrYiYmcD09PXQpe2xbZV09W2ssZCxiXTticmVha319ZWxzZSBpZihtJiYoYj1kPShjPShsPShmPShwPXQpW3hdfHwocFt4XT17fSkpW3AudW5pcXVlSURdfHwoZltwLnVuaXF1ZUlEXT17fSkpW2VdfHxbXSlbMF09PT1rJiZjWzFdKSwhMT09PWIpZm9yKDsocD0rK2QmJnAmJnBbZ118fChiPWQ9MCl8fGgucG9wKCkpJiYoKHM%2FcC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09eToxIT09cC5ub2RlVHlwZSl8fCErK2J8fChtJiYoKGw9KGY9cFt4XXx8KHBbeF09e30pKVtwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pKVtlXT1bayxiXSkscCE9PXQpKTspO3JldHVybihiLT1vKT09PXJ8fGIlcj09MCYmYi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLG89ci5wc2V1ZG9zW2VdfHxyLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8c2UuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gb1t4XT9vKHQpOm8ubGVuZ3RoPjE%2FKG49W2UsZSwiIix0XSxyLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9jZShmdW5jdGlvbihlLG4pe2Zvcih2YXIgcixpPW8oZSx0KSxhPWkubGVuZ3RoO2EtLTspZVtyPUkoZSxpW2FdKV09IShuW3JdPWlbYV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSwwLG4pfSk6b319LHBzZXVkb3M6e25vdDpjZShmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9cyhlLnJlcGxhY2UoVywiJDEiKSk7cmV0dXJuIHJbeF0%2FY2UoZnVuY3Rpb24oZSx0LG4sbyl7Zm9yKHZhciBpLGE9cihlLG51bGwsbyxbXSkscz1lLmxlbmd0aDtzLS07KShpPWFbc10pJiYoZVtzXT0hKHRbc109aSkpfSk6ZnVuY3Rpb24oZSxvLGkpe3JldHVybiB0WzBdPWUscih0LG51bGwsaSxuKSx0WzBdPW51bGwsIW4ucG9wKCl9fSksaGFzOmNlKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gc2UoZSx0KS5sZW5ndGg%2BMH19KSxjb250YWluczpjZShmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UodGUsbmUpLGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHxvKHQpKS5pbmRleE9mKGUpPi0xfX0pLGxhbmc6Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIEsudGVzdChlfHwiIil8fHNlLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2UpLGU9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKHQpe3ZhciBuO2Rve2lmKG49Zz90Lmxhbmc6dC5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fHQuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuKG49bi50b0xvd2VyQ2FzZSgpKT09PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpfXdoaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWh9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZC5hY3RpdmVFbGVtZW50JiYoIWQuaGFzRm9jdXN8fGQuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx%2BZS50YWJJbmRleCl9LGVuYWJsZWQ6Z2UoITEpLGRpc2FibGVkOmdlKCEwKSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4hci5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIFkudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEoudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09dC50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6dmUoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OnZlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTp2ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuW248MD9uK3Q6bl19KSxldmVuOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA%2Fbit0Om4%2BdD90Om47LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDp2ZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjsrK3I8dDspZS5wdXNoKHIpO3JldHVybiBlfSl9fSkucHNldWRvcy5udGg9ci5wc2V1ZG9zLmVxLHtyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlyLnBzZXVkb3NbdF09ZGUodCk7Zm9yKHQgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlyLnBzZXVkb3NbdF09aGUodCk7ZnVuY3Rpb24gbWUoKXt9ZnVuY3Rpb24gYmUoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiB4ZShlLHQsbil7dmFyIHI9dC5kaXIsbz10Lm5leHQsaT1vfHxyLGE9biYmInBhcmVudE5vZGUiPT09aSxzPVMrKztyZXR1cm4gdC5maXJzdD9mdW5jdGlvbih0LG4sbyl7Zm9yKDt0PXRbcl07KWlmKDE9PT10Lm5vZGVUeXBlfHxhKXJldHVybiBlKHQsbixvKTtyZXR1cm4hMX06ZnVuY3Rpb24odCxuLHUpe3ZhciBjLGwsZixwPVtrLHNdO2lmKHUpe2Zvcig7dD10W3JdOylpZigoMT09PXQubm9kZVR5cGV8fGEpJiZlKHQsbix1KSlyZXR1cm4hMH1lbHNlIGZvcig7dD10W3JdOylpZigxPT09dC5ub2RlVHlwZXx8YSlpZihsPShmPXRbeF18fCh0W3hdPXt9KSlbdC51bmlxdWVJRF18fChmW3QudW5pcXVlSURdPXt9KSxvJiZvPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXQ9dFtyXXx8dDtlbHNle2lmKChjPWxbaV0pJiZjWzBdPT09ayYmY1sxXT09PXMpcmV0dXJuIHBbMl09Y1syXTtpZihsW2ldPXAscFsyXT1lKHQsbix1KSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIGUubGVuZ3RoPjE%2FZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz1lLmxlbmd0aDtvLS07KWlmKCFlW29dKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiBrZShlLHQsbixyLG8pe2Zvcih2YXIgaSxhPVtdLHM9MCx1PWUubGVuZ3RoLGM9bnVsbCE9dDtzPHU7cysrKShpPWVbc10pJiYobiYmIW4oaSxyLG8pfHwoYS5wdXNoKGkpLGMmJnQucHVzaChzKSkpO3JldHVybiBhfWZ1bmN0aW9uIFNlKGUsdCxuLHIsbyxpKXtyZXR1cm4gciYmIXJbeF0mJihyPVNlKHIpKSxvJiYhb1t4XSYmKG89U2UobyxpKSksY2UoZnVuY3Rpb24oaSxhLHMsdSl7dmFyIGMsbCxmLHA9W10sZD1bXSxoPWEubGVuZ3RoLGc9aXx8ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wLG89dC5sZW5ndGg7cjxvO3IrKylzZShlLHRbcl0sbik7cmV0dXJuIG59KHR8fCIqIixzLm5vZGVUeXBlP1tzXTpzLFtdKSx2PSFlfHwhaSYmdD9nOmtlKGcscCxlLHMsdSkseT1uP298fChpP2U6aHx8cik%2FW106YTp2O2lmKG4mJm4odix5LHMsdSkscilmb3IoYz1rZSh5LGQpLHIoYyxbXSxzLHUpLGw9Yy5sZW5ndGg7bC0tOykoZj1jW2xdKSYmKHlbZFtsXV09ISh2W2RbbF1dPWYpKTtpZihpKXtpZihvfHxlKXtpZihvKXtmb3IoYz1bXSxsPXkubGVuZ3RoO2wtLTspKGY9eVtsXSkmJmMucHVzaCh2W2xdPWYpO28obnVsbCx5PVtdLGMsdSl9Zm9yKGw9eS5sZW5ndGg7bC0tOykoZj15W2xdKSYmKGM9bz9JKGksZik6cFtsXSk%2BLTEmJihpW2NdPSEoYVtjXT1mKSl9fWVsc2UgeT1rZSh5PT09YT95LnNwbGljZShoLHkubGVuZ3RoKTp5KSxvP28obnVsbCxhLHksdSk6RC5hcHBseShhLHkpfSl9ZnVuY3Rpb24gT2UoZSl7Zm9yKHZhciB0LG4sbyxpPWUubGVuZ3RoLGE9ci5yZWxhdGl2ZVtlWzBdLnR5cGVdLHM9YXx8ci5yZWxhdGl2ZVsiICJdLHU9YT8xOjAsbD14ZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LHMsITApLGY9eGUoZnVuY3Rpb24oZSl7cmV0dXJuIEkodCxlKT4tMX0scywhMCkscD1bZnVuY3Rpb24oZSxuLHIpe3ZhciBvPSFhJiYocnx8biE9PWMpfHwoKHQ9bikubm9kZVR5cGU%2FbChlLG4scik6ZihlLG4scikpO3JldHVybiB0PW51bGwsb31dO3U8aTt1KyspaWYobj1yLnJlbGF0aXZlW2VbdV0udHlwZV0pcD1beGUod2UocCksbildO2Vsc2V7aWYoKG49ci5maWx0ZXJbZVt1XS50eXBlXS5hcHBseShudWxsLGVbdV0ubWF0Y2hlcykpW3hdKXtmb3Iobz0rK3U7bzxpJiYhci5yZWxhdGl2ZVtlW29dLnR5cGVdO28rKyk7cmV0dXJuIFNlKHU%2BMSYmd2UocCksdT4xJiZiZShlLnNsaWNlKDAsdS0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWVbdS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFcsIiQxIiksbix1PG8mJk9lKGUuc2xpY2UodSxvKSksbzxpJiZPZShlPWUuc2xpY2UobykpLG88aSYmYmUoZSkpfXAucHVzaChuKX1yZXR1cm4gd2UocCl9cmV0dXJuIG1lLnByb3RvdHlwZT1yLmZpbHRlcnM9ci5wc2V1ZG9zLHIuc2V0RmlsdGVycz1uZXcgbWUsYT1zZS50b2tlbml6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLG8saSxhLHMsdSxjLGw9altlKyIgIl07aWYobClyZXR1cm4gdD8wOmwuc2xpY2UoMCk7Zm9yKHM9ZSx1PVtdLGM9ci5wcmVGaWx0ZXI7czspe2ZvcihhIGluIG4mJiEobz1VLmV4ZWMocykpfHwobyYmKHM9cy5zbGljZShvWzBdLmxlbmd0aCl8fHMpLHUucHVzaChpPVtdKSksbj0hMSwobz0kLmV4ZWMocykpJiYobj1vLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6b1swXS5yZXBsYWNlKFcsIiAiKX0pLHM9cy5zbGljZShuLmxlbmd0aCkpLHIuZmlsdGVyKSEobz1HW2FdLmV4ZWMocykpfHxjW2FdJiYhKG89Y1thXShvKSl8fChuPW8uc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTphLG1hdGNoZXM6b30pLHM9cy5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P3MubGVuZ3RoOnM%2Fc2UuZXJyb3IoZSk6aihlLHUpLnNsaWNlKDApfSxzPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixvPVtdLGk9W10scz1UW2UrIiAiXTtpZighcyl7Zm9yKHR8fCh0PWEoZSkpLG49dC5sZW5ndGg7bi0tOykocz1PZSh0W25dKSlbeF0%2Fby5wdXNoKHMpOmkucHVzaChzKTsocz1UKGUsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmxlbmd0aD4wLG89ZS5sZW5ndGg%2BMCxpPWZ1bmN0aW9uKGksYSxzLHUsbCl7dmFyIGYsaCx2LHk9MCxtPSIwIixiPWkmJltdLHg9W10sdz1jLFM9aXx8byYmci5maW5kLlRBRygiKiIsbCksTz1rKz1udWxsPT13PzE6TWF0aC5yYW5kb20oKXx8LjEsaj1TLmxlbmd0aDtmb3IobCYmKGM9YT09PWR8fGF8fGwpO20hPT1qJiZudWxsIT0oZj1TW21dKTttKyspe2lmKG8mJmYpe2ZvcihoPTAsYXx8Zi5vd25lckRvY3VtZW50PT09ZHx8KHAoZikscz0hZyk7dj1lW2grK107KWlmKHYoZixhfHxkLHMpKXt1LnB1c2goZik7YnJlYWt9bCYmKGs9Tyl9biYmKChmPSF2JiZmKSYmeS0tLGkmJmIucHVzaChmKSl9aWYoeSs9bSxuJiZtIT09eSl7Zm9yKGg9MDt2PXRbaCsrXTspdihiLHgsYSxzKTtpZihpKXtpZih5PjApZm9yKDttLS07KWJbbV18fHhbbV18fCh4W21dPVAuY2FsbCh1KSk7eD1rZSh4KX1ELmFwcGx5KHUseCksbCYmIWkmJngubGVuZ3RoPjAmJnkrdC5sZW5ndGg%2BMSYmc2UudW5pcXVlU29ydCh1KX1yZXR1cm4gbCYmKGs9TyxjPXcpLGJ9O3JldHVybiBuP2NlKGkpOml9KGksbykpKS5zZWxlY3Rvcj1lfXJldHVybiBzfSx1PXNlLnNlbGVjdD1mdW5jdGlvbihlLHQsbixvKXt2YXIgaSx1LGMsbCxmLHA9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUsZD0hbyYmYShlPXAuc2VsZWN0b3J8fGUpO2lmKG49bnx8W10sMT09PWQubGVuZ3RoKXtpZigodT1kWzBdPWRbMF0uc2xpY2UoMCkpLmxlbmd0aD4yJiYiSUQiPT09KGM9dVswXSkudHlwZSYmOT09PXQubm9kZVR5cGUmJmcmJnIucmVsYXRpdmVbdVsxXS50eXBlXSl7aWYoISh0PShyLmZpbmQuSUQoYy5tYXRjaGVzWzBdLnJlcGxhY2UodGUsbmUpLHQpfHxbXSlbMF0pKXJldHVybiBuO3AmJih0PXQucGFyZW50Tm9kZSksZT1lLnNsaWNlKHUuc2hpZnQoKS52YWx1ZS5sZW5ndGgpfWZvcihpPUcubmVlZHNDb250ZXh0LnRlc3QoZSk%2FMDp1Lmxlbmd0aDtpLS0mJihjPXVbaV0sIXIucmVsYXRpdmVbbD1jLnR5cGVdKTspaWYoKGY9ci5maW5kW2xdKSYmKG89ZihjLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksZWUudGVzdCh1WzBdLnR5cGUpJiZ5ZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKHUuc3BsaWNlKGksMSksIShlPW8ubGVuZ3RoJiZiZSh1KSkpcmV0dXJuIEQuYXBwbHkobixvKSxuO2JyZWFrfX1yZXR1cm4ocHx8cyhlLGQpKShvLHQsIWcsbiwhdHx8ZWUudGVzdChlKSYmeWUodC5wYXJlbnROb2RlKXx8dCksbn0sbi5zb3J0U3RhYmxlPXguc3BsaXQoIiIpLnNvcnQoTCkuam9pbigiIik9PT14LG4uZGV0ZWN0RHVwbGljYXRlcz0hIWYscCgpLG4uc29ydERldGFjaGVkPWxlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGxlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc%2BPC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGZlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxuLmF0dHJpYnV0ZXMmJmxlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGZlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGxlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxmZShxLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0%2FdC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHNlfShuKTtTLmZpbmQ9VCxTLmV4cHI9VC5zZWxlY3RvcnMsUy5leHByWyI6Il09Uy5leHByLnBzZXVkb3MsUy51bmlxdWVTb3J0PVMudW5pcXVlPVQudW5pcXVlU29ydCxTLnRleHQ9VC5nZXRUZXh0LFMuaXNYTUxEb2M9VC5pc1hNTCxTLmNvbnRhaW5zPVQuY29udGFpbnMsUy5lc2NhcGVTZWxlY3Rvcj1ULmVzY2FwZTt2YXIgRT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLG89dm9pZCAwIT09bjsoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGU7KWlmKDE9PT1lLm5vZGVUeXBlKXtpZihvJiZTKGUpLmlzKG4pKWJyZWFrO3IucHVzaChlKX1yZXR1cm4gcn0sTD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXTtlO2U9ZS5uZXh0U2libGluZykxPT09ZS5ub2RlVHlwZSYmZSE9PXQmJm4ucHVzaChlKTtyZXR1cm4gbn0sQz1TLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O2Z1bmN0aW9uIEEoZSx0KXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfXZhciBQPS9ePChbYS16XVteXC9cMD46XHgyMFx0XHJcblxmXSopW1x4MjBcdFxyXG5cZl0qXC8%2FPig%2FOjxcL1wxPnwpJC9pO2Z1bmN0aW9uIE4oZSx0LG4pe3JldHVybiBtKHQpP1MuZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pOnQubm9kZVR5cGU%2FUy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10IT09bn0pOiJzdHJpbmciIT10eXBlb2YgdD9TLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZi5jYWxsKHQsZSk%2BLTEhPT1ufSk6Uy5maWx0ZXIodCxlLG4pfVMuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP1MuZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106Uy5maW5kLm1hdGNoZXMoZSxTLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LFMuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxvPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhTKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihTLmNvbnRhaW5zKG9bdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKVMuZmluZChlLG9bdF0sbik7cmV0dXJuIHI%2BMT9TLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhOKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhOKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFOKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZDLnRlc3QoZSk%2FUyhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBELFI9L14oPzpccyooPFtcd1xXXSs%2BKVtePl0qfCMoW1x3LV0rKSkkLzsoUy5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8RCwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOlIuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2YgUz90WzBdOnQsUy5tZXJnZSh0aGlzLFMucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6YSwhMCkpLFAudGVzdChyWzFdKSYmUy5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbSh0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihvPWEuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1vLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU%2FKHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk%2Fdm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoUyk6Uy5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT1TLmZuLEQ9UyhhKTt2YXIgST0vXig%2FOnBhcmVudHN8cHJldig%2FOlVudGlsfEFsbCkpLyxxPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z1bmN0aW9uIE0oZSx0KXtmb3IoOyhlPWVbdF0pJiYxIT09ZS5ub2RlVHlwZTspO3JldHVybiBlfVMuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9UyhlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihTLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxvPXRoaXMubGVuZ3RoLGk9W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJlMoZSk7aWYoIUMudGVzdChlKSlmb3IoO3I8bztyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT9hLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBlJiZTLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtpLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGkubGVuZ3RoPjE%2FUy51bmlxdWVTb3J0KGkpOmkpfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU%2FZi5jYWxsKFMoZSksdGhpc1swXSk6Zi5jYWxsKHRoaXMsZS5qcXVlcnk%2FZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU%2FdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhTLnVuaXF1ZVNvcnQoUy5tZXJnZSh0aGlzLmdldCgpLFMoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksUy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU%2FdDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBFKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRShlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gTShlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBNKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBFKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIEUoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEUoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBFKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBMKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gTChlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZS5jb250ZW50RG9jdW1lbnQ%2FZS5jb250ZW50RG9jdW1lbnQ6KEEoZSwidGVtcGxhdGUiKSYmKGU9ZS5jb250ZW50fHxlKSxTLm1lcmdlKFtdLGUuY2hpbGROb2RlcykpfX0sZnVuY3Rpb24oZSx0KXtTLmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIG89Uy5tYXAodGhpcyx0LG4pO3JldHVybiJVbnRpbCIhPT1lLnNsaWNlKC01KSYmKHI9biksciYmInN0cmluZyI9PXR5cGVvZiByJiYobz1TLmZpbHRlcihyLG8pKSx0aGlzLmxlbmd0aD4xJiYocVtlXXx8Uy51bmlxdWVTb3J0KG8pLEkudGVzdChlKSYmby5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKG8pfX0pO3ZhciBfPS9bXlx4MjBcdFxyXG5cZl0rL2c7ZnVuY3Rpb24gRihlKXtyZXR1cm4gZX1mdW5jdGlvbiBIKGUpe3Rocm93IGV9ZnVuY3Rpb24geihlLHQsbixyKXt2YXIgbzt0cnl7ZSYmbShvPWUucHJvbWlzZSk%2Fby5jYWxsKGUpLmRvbmUodCkuZmFpbChuKTplJiZtKG89ZS50aGVuKT9vLmNhbGwoZSx0LG4pOnQuYXBwbHkodm9pZCAwLFtlXS5zbGljZShyKSl9Y2F0Y2goZSl7bi5hcHBseSh2b2lkIDAsW2VdKX19Uy5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU%2FZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIFMuZWFjaChlLm1hdGNoKF8pfHxbXSxmdW5jdGlvbihlLG4pe3Rbbl09ITB9KSx0fShlKTpTLmV4dGVuZCh7fSxlKTt2YXIgdCxuLHIsbyxpPVtdLGE9W10scz0tMSx1PWZ1bmN0aW9uKCl7Zm9yKG89b3x8ZS5vbmNlLHI9dD0hMDthLmxlbmd0aDtzPS0xKWZvcihuPWEuc2hpZnQoKTsrK3M8aS5sZW5ndGg7KSExPT09aVtzXS5hcHBseShuWzBdLG5bMV0pJiZlLnN0b3BPbkZhbHNlJiYocz1pLmxlbmd0aCxuPSExKTtlLm1lbW9yeXx8KG49ITEpLHQ9ITEsbyYmKGk9bj9bXToiIil9LGM9e2FkZDpmdW5jdGlvbigpe3JldHVybiBpJiYobiYmIXQmJihzPWkubGVuZ3RoLTEsYS5wdXNoKG4pKSxmdW5jdGlvbiB0KG4pe1MuZWFjaChuLGZ1bmN0aW9uKG4scil7bShyKT9lLnVuaXF1ZSYmYy5oYXMocil8fGkucHVzaChyKTpyJiZyLmxlbmd0aCYmInN0cmluZyIhPT1rKHIpJiZ0KHIpfSl9KGFyZ3VtZW50cyksbiYmIXQmJnUoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIFMuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXtmb3IodmFyIG47KG49Uy5pbkFycmF5KHQsaSxuKSk%2BLTE7KWkuc3BsaWNlKG4sMSksbjw9cyYmcy0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP1MuaW5BcnJheShlLGkpPi0xOmkubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGkmJihpPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG89YT1bXSxpPW49IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haX0sbG9jazpmdW5jdGlvbigpe3JldHVybiBvPWE9W10sbnx8dHx8KGk9bj0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFvfSxmaXJlV2l0aDpmdW5jdGlvbihlLG4pe3JldHVybiBvfHwobj1bZSwobj1ufHxbXSkuc2xpY2U%2Fbi5zbGljZSgpOm5dLGEucHVzaChuKSx0fHx1KCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXJ9fTtyZXR1cm4gY30sUy5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciB0PVtbIm5vdGlmeSIsInByb2dyZXNzIixTLkNhbGxiYWNrcygibWVtb3J5IiksUy5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxyPSJwZW5kaW5nIixvPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiByfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LGNhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBvLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihuKXtTLmVhY2godCxmdW5jdGlvbih0LHIpe3ZhciBvPW0oZVtyWzRdXSkmJmVbcls0XV07aVtyWzFdXShmdW5jdGlvbigpe3ZhciBlPW8mJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJm0oZS5wcm9taXNlKT9lLnByb21pc2UoKS5wcm9ncmVzcyhuLm5vdGlmeSkuZG9uZShuLnJlc29sdmUpLmZhaWwobi5yZWplY3QpOm5bclswXSsiV2l0aCJdKHRoaXMsbz9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKGUscixvKXt2YXIgaT0wO2Z1bmN0aW9uIGEoZSx0LHIsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcyx1PWFyZ3VtZW50cyxjPWZ1bmN0aW9uKCl7dmFyIG4sYztpZighKGU8aSkpe2lmKChuPXIuYXBwbHkocyx1KSk9PT10LnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTtjPW4mJigib2JqZWN0Ij09dHlwZW9mIG58fCJmdW5jdGlvbiI9PXR5cGVvZiBuKSYmbi50aGVuLG0oYyk%2Fbz9jLmNhbGwobixhKGksdCxGLG8pLGEoaSx0LEgsbykpOihpKyssYy5jYWxsKG4sYShpLHQsRixvKSxhKGksdCxILG8pLGEoaSx0LEYsdC5ub3RpZnlXaXRoKSkpOihyIT09RiYmKHM9dm9pZCAwLHU9W25dKSwob3x8dC5yZXNvbHZlV2l0aCkocyx1KSl9fSxsPW8%2FYzpmdW5jdGlvbigpe3RyeXtjKCl9Y2F0Y2gobil7Uy5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sobixsLnN0YWNrVHJhY2UpLGUrMT49aSYmKHIhPT1IJiYocz12b2lkIDAsdT1bbl0pLHQucmVqZWN0V2l0aChzLHUpKX19O2U%2FbCgpOihTLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKGwuc3RhY2tUcmFjZT1TLkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSxuLnNldFRpbWVvdXQobCkpfX1yZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihuKXt0WzBdWzNdLmFkZChhKDAsbixtKG8pP286RixuLm5vdGlmeVdpdGgpKSx0WzFdWzNdLmFkZChhKDAsbixtKGUpP2U6RikpLHRbMl1bM10uYWRkKGEoMCxuLG0ocik%2FcjpIKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU%2FUy5leHRlbmQoZSxvKTpvfX0saT17fTtyZXR1cm4gUy5lYWNoKHQsZnVuY3Rpb24oZSxuKXt2YXIgYT1uWzJdLHM9bls1XTtvW25bMV1dPWEuYWRkLHMmJmEuYWRkKGZ1bmN0aW9uKCl7cj1zfSx0WzMtZV1bMl0uZGlzYWJsZSx0WzMtZV1bM10uZGlzYWJsZSx0WzBdWzJdLmxvY2ssdFswXVszXS5sb2NrKSxhLmFkZChuWzNdLmZpcmUpLGlbblswXV09ZnVuY3Rpb24oKXtyZXR1cm4gaVtuWzBdKyJXaXRoIl0odGhpcz09PWk%2Fdm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxpW25bMF0rIldpdGgiXT1hLmZpcmVXaXRofSksby5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPXQscj1BcnJheShuKSxvPXUuY2FsbChhcmd1bWVudHMpLGk9Uy5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JbZV09dGhpcyxvW2VdPWFyZ3VtZW50cy5sZW5ndGg%2BMT91LmNhbGwoYXJndW1lbnRzKTpuLC0tdHx8aS5yZXNvbHZlV2l0aChyLG8pfX07aWYodDw9MSYmKHooZSxpLmRvbmUoYShuKSkucmVzb2x2ZSxpLnJlamVjdCwhdCksInBlbmRpbmciPT09aS5zdGF0ZSgpfHxtKG9bbl0mJm9bbl0udGhlbikpKXJldHVybiBpLnRoZW4oKTtmb3IoO24tLTspeihvW25dLGEobiksaS5yZWplY3QpO3JldHVybiBpLnByb21pc2UoKX19KTt2YXIgVz0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oZSx0KXtuLmNvbnNvbGUmJm4uY29uc29sZS53YXJuJiZlJiZXLnRlc3QoZS5uYW1lKSYmbi5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrZS5tZXNzYWdlLGUuc3RhY2ssdCl9LFMucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oZSl7bi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgVT1TLkRlZmVycmVkKCk7ZnVuY3Rpb24gJCgpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsJCksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIiwkKSxTLnJlYWR5KCl9Uy5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gVS50aGVuKGUpLmNhdGNoKGZ1bmN0aW9uKGUpe1MucmVhZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxTLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0tUy5yZWFkeVdhaXQ6Uy5pc1JlYWR5KXx8KFMuaXNSZWFkeT0hMCwhMCE9PWUmJi0tUy5yZWFkeVdhaXQ%2BMHx8VS5yZXNvbHZlV2l0aChhLFtTXSkpfX0pLFMucmVhZHkudGhlbj1VLnRoZW4sImNvbXBsZXRlIj09PWEucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09YS5yZWFkeVN0YXRlJiYhYS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw%2Fbi5zZXRUaW1lb3V0KFMucmVhZHkpOihhLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCQpLG4uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsJCkpO3ZhciBCPWZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEpe3ZhciBzPTAsdT1lLmxlbmd0aCxjPW51bGw9PW47aWYoIm9iamVjdCI9PT1rKG4pKWZvcihzIGluIG89ITAsbilCKGUsdCxzLG5bc10sITAsaSxhKTtlbHNlIGlmKHZvaWQgMCE9PXImJihvPSEwLG0ocil8fChhPSEwKSxjJiYoYT8odC5jYWxsKGUsciksdD1udWxsKTooYz10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjLmNhbGwoUyhlKSxuKX0pKSx0KSlmb3IoO3M8dTtzKyspdChlW3NdLG4sYT9yOnIuY2FsbChlW3NdLHMsdChlW3NdLG4pKSk7cmV0dXJuIG8%2FZTpjP3QuY2FsbChlKTp1P3QoZVswXSxuKTppfSxWPS9eLW1zLS8sSz0vLShbYS16XSkvZztmdW5jdGlvbiBHKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBYKGUpe3JldHVybiBlLnJlcGxhY2UoViwibXMtIikucmVwbGFjZShLLEcpfXZhciBKPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX07ZnVuY3Rpb24gWSgpe3RoaXMuZXhwYW5kbz1TLmV4cGFuZG8rWS51aWQrK31ZLnVpZD0xLFkucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LEooZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsbz10aGlzLmNhY2hlKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClvW1godCldPW47ZWxzZSBmb3IociBpbiB0KW9bWChyKV09dFtyXTtyZXR1cm4gb30sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ%2FdGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtYKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uP3RoaXMuZ2V0KGUsdCk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe249KHQ9QXJyYXkuaXNBcnJheSh0KT90Lm1hcChYKToodD1YKHQpKWluIHI%2FW3RdOnQubWF0Y2goXyl8fFtdKS5sZW5ndGg7Zm9yKDtuLS07KWRlbGV0ZSByW3Rbbl1dfSh2b2lkIDA9PT10fHxTLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiFTLmlzRW1wdHlPYmplY3QodCl9fTt2YXIgUT1uZXcgWSxaPW5ldyBZLGVlPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sdGU9L1tBLVpdL2c7ZnVuY3Rpb24gbmUoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJjE9PT1lLm5vZGVUeXBlKWlmKHI9ImRhdGEtIit0LnJlcGxhY2UodGUsIi0kJiIpLnRvTG93ZXJDYXNlKCksInN0cmluZyI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249ZnVuY3Rpb24oZSl7cmV0dXJuInRydWUiPT09ZXx8ImZhbHNlIiE9PWUmJigibnVsbCI9PT1lP251bGw6ZT09PStlKyIiPytlOmVlLnRlc3QoZSk%2FSlNPTi5wYXJzZShlKTplKX0obil9Y2F0Y2goZSl7fVouc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufVMuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBaLmhhc0RhdGEoZSl8fFEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFouYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1oucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9fSksUy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saT10aGlzWzBdLGE9aSYmaS5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWUpe2lmKHRoaXMubGVuZ3RoJiYobz1aLmdldChpKSwxPT09aS5ub2RlVHlwZSYmIVEuZ2V0KGksImhhc0RhdGFBdHRycyIpKSl7Zm9yKG49YS5sZW5ndGg7bi0tOylhW25dJiYwPT09KHI9YVtuXS5uYW1lKS5pbmRleE9mKCJkYXRhLSIpJiYocj1YKHIuc2xpY2UoNSkpLG5lKGkscixvW3JdKSk7US5zZXQoaSwiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIG99cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe1ouc2V0KHRoaXMsZSl9KTpCKHRoaXMsZnVuY3Rpb24odCl7dmFyIG47aWYoaSYmdm9pZCAwPT09dClyZXR1cm4gdm9pZCAwIT09KG49Wi5nZXQoaSxlKSk%2Fbjp2b2lkIDAhPT0obj1uZShpLGUpKT9uOnZvaWQgMDt0aGlzLmVhY2goZnVuY3Rpb24oKXtaLnNldCh0aGlzLGUsdCl9KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg%2BMSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Wi5yZW1vdmUodGhpcyxlKX0pfX0pLFMuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoZSlyZXR1cm4gdD0odHx8ImZ4IikrInF1ZXVlIixyPVEuZ2V0KGUsdCksbiYmKCFyfHxBcnJheS5pc0FycmF5KG4pP3I9US5hY2Nlc3MoZSx0LFMubWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdfSxkZXF1ZXVlOmZ1bmN0aW9uKGUsdCl7dD10fHwiZngiO3ZhciBuPVMucXVldWUoZSx0KSxyPW4ubGVuZ3RoLG89bi5zaGlmdCgpLGk9Uy5fcXVldWVIb29rcyhlLHQpOyJpbnByb2dyZXNzIj09PW8mJihvPW4uc2hpZnQoKSxyLS0pLG8mJigiZngiPT09dCYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIGkuc3RvcCxvLmNhbGwoZSxmdW5jdGlvbigpe1MuZGVxdWV1ZShlLHQpfSxpKSksIXImJmkmJmkuZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihlLHQpe3ZhciBuPXQrInF1ZXVlSG9va3MiO3JldHVybiBRLmdldChlLG4pfHxRLmFjY2VzcyhlLG4se2VtcHR5OlMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe1EucmVtb3ZlKGUsW3QrInF1ZXVlIixuXSl9KX0pfX0pLFMuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPTI7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9ImZ4IixuLS0pLGFyZ3VtZW50cy5sZW5ndGg8bj9TLnF1ZXVlKHRoaXNbMF0sZSk6dm9pZCAwPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPVMucXVldWUodGhpcyxlLHQpO1MuX3F1ZXVlSG9va3ModGhpcyxlKSwiZngiPT09ZSYmImlucHJvZ3Jlc3MiIT09blswXSYmUy5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Uy5kZXF1ZXVlKHRoaXMsZSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MSxvPVMuRGVmZXJyZWQoKSxpPXRoaXMsYT10aGlzLmxlbmd0aCxzPWZ1bmN0aW9uKCl7LS1yfHxvLnJlc29sdmVXaXRoKGksW2ldKX07Zm9yKCJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO2EtLTspKG49US5nZXQoaVthXSxlKyJxdWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLG8ucHJvbWlzZSh0KX19KTt2YXIgcmU9L1srLV0%2FKD86XGQqXC58KVxkKyg%2FOltlRV1bKy1dP1xkK3wpLy5zb3VyY2Usb2U9bmV3IFJlZ0V4cCgiXig%2FOihbKy1dKT18KSgiK3JlKyIpKFthLXolXSopJCIsImkiKSxpZT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLGFlPWEuZG9jdW1lbnRFbGVtZW50LHNlPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX0sdWU9e2NvbXBvc2VkOiEwfTthZS5nZXRSb290Tm9kZSYmKHNlPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8ZS5nZXRSb290Tm9kZSh1ZSk9PT1lLm93bmVyRG9jdW1lbnR9KTt2YXIgY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibm9uZSI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmc2UoZSkmJiJub25lIj09PVMuY3NzKGUsImRpc3BsYXkiKX0sbGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8saSxhPXt9O2ZvcihpIGluIHQpYVtpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtmb3IoaSBpbiBvPW4uYXBwbHkoZSxyfHxbXSksdCllLnN0eWxlW2ldPWFbaV07cmV0dXJuIG99O2Z1bmN0aW9uIGZlKGUsdCxuLHIpe3ZhciBvLGksYT0yMCxzPXI%2FZnVuY3Rpb24oKXtyZXR1cm4gci5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gUy5jc3MoZSx0LCIiKX0sdT1zKCksYz1uJiZuWzNdfHwoUy5jc3NOdW1iZXJbdF0%2FIiI6InB4IiksbD1lLm5vZGVUeXBlJiYoUy5jc3NOdW1iZXJbdF18fCJweCIhPT1jJiYrdSkmJm9lLmV4ZWMoUy5jc3MoZSx0KSk7aWYobCYmbFszXSE9PWMpe2Zvcih1Lz0yLGM9Y3x8bFszXSxsPSt1fHwxO2EtLTspUy5zdHlsZShlLHQsbCtjKSwoMS1pKSooMS0oaT1zKCkvdXx8LjUpKTw9MCYmKGE9MCksbC89aTtsKj0yLFMuc3R5bGUoZSx0LGwrYyksbj1ufHxbXX1yZXR1cm4gbiYmKGw9K2x8fCt1fHwwLG89blsxXT9sKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1jLHIuc3RhcnQ9bCxyLmVuZD1vKSksb312YXIgcGU9e307ZnVuY3Rpb24gZGUoZSl7dmFyIHQsbj1lLm93bmVyRG9jdW1lbnQscj1lLm5vZGVOYW1lLG89cGVbcl07cmV0dXJuIG98fCh0PW4uYm9keS5hcHBlbmRDaGlsZChuLmNyZWF0ZUVsZW1lbnQocikpLG89Uy5jc3ModCwiZGlzcGxheSIpLHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSwibm9uZSI9PT1vJiYobz0iYmxvY2siKSxwZVtyXT1vLG8pfWZ1bmN0aW9uIGhlKGUsdCl7Zm9yKHZhciBuLHIsbz1bXSxpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKShyPWVbaV0pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKG9baV09US5nZXQociwiZGlzcGxheSIpfHxudWxsLG9baV18fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmY2UocikmJihvW2ldPWRlKHIpKSk6Im5vbmUiIT09biYmKG9baV09Im5vbmUiLFEuc2V0KHIsImRpc3BsYXkiLG4pKSk7Zm9yKGk9MDtpPGE7aSsrKW51bGwhPW9baV0mJihlW2ldLnN0eWxlLmRpc3BsYXk9b1tpXSk7cmV0dXJuIGV9Uy5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4gaGUodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gaGUodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlP2U%2FdGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Y2UodGhpcyk%2FUyh0aGlzKS5zaG93KCk6Uyh0aGlzKS5oaWRlKCl9KX19KTt2YXIgZ2U9L14oPzpjaGVja2JveHxyYWRpbykkL2ksdmU9LzwoW2Etel1bXlwvXDA%2BXHgyMFx0XHJcblxmXSopL2kseWU9L14kfF5tb2R1bGUkfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLG1lPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU%2BIl0sY29sOlsyLCI8dGFibGU%2BPGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA%2BPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU%2BIl0sdGQ6WzMsIjx0YWJsZT48dGJvZHk%2BPHRyPiIsIjwvdHI%2BPC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07ZnVuY3Rpb24gYmUoZSx0KXt2YXIgbjtyZXR1cm4gbj12b2lkIDAhPT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKTp2b2lkIDAhPT1lLnF1ZXJ5U2VsZWN0b3JBbGw%2FZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP1MubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geGUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspUS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFEuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9bWUub3B0Z3JvdXA9bWUub3B0aW9uLG1lLnRib2R5PW1lLnRmb290PW1lLmNvbGdyb3VwPW1lLmNhcHRpb249bWUudGhlYWQsbWUudGg9bWUudGQ7dmFyIHdlLGtlLFNlPS88fCYjP1x3KzsvO2Z1bmN0aW9uIE9lKGUsdCxuLHIsbyl7Zm9yKHZhciBpLGEscyx1LGMsbCxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHA9W10sZD0wLGg9ZS5sZW5ndGg7ZDxoO2QrKylpZigoaT1lW2RdKXx8MD09PWkpaWYoIm9iamVjdCI9PT1rKGkpKVMubWVyZ2UocCxpLm5vZGVUeXBlP1tpXTppKTtlbHNlIGlmKFNlLnRlc3QoaSkpe2ZvcihhPWF8fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSkscz0odmUuZXhlYyhpKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSx1PW1lW3NdfHxtZS5fZGVmYXVsdCxhLmlubmVySFRNTD11WzFdK1MuaHRtbFByZWZpbHRlcihpKSt1WzJdLGw9dVswXTtsLS07KWE9YS5sYXN0Q2hpbGQ7Uy5tZXJnZShwLGEuY2hpbGROb2RlcyksKGE9Zi5maXJzdENoaWxkKS50ZXh0Q29udGVudD0iIn1lbHNlIHAucHVzaCh0LmNyZWF0ZVRleHROb2RlKGkpKTtmb3IoZi50ZXh0Q29udGVudD0iIixkPTA7aT1wW2QrK107KWlmKHImJlMuaW5BcnJheShpLHIpPi0xKW8mJm8ucHVzaChpKTtlbHNlIGlmKGM9c2UoaSksYT1iZShmLmFwcGVuZENoaWxkKGkpLCJzY3JpcHQiKSxjJiZ4ZShhKSxuKWZvcihsPTA7aT1hW2wrK107KXllLnRlc3QoaS50eXBlfHwiIikmJm4ucHVzaChpKTtyZXR1cm4gZn13ZT1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwoa2U9YS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGtlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxrZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0Iiksd2UuYXBwZW5kQ2hpbGQoa2UpLHkuY2hlY2tDbG9uZT13ZS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsd2UuaW5uZXJIVE1MPSI8dGV4dGFyZWE%2BeDwvdGV4dGFyZWE%2BIix5Lm5vQ2xvbmVDaGVja2VkPSEhd2UuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO3ZhciBqZT0vXmtleS8sVGU9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLEVlPS9eKFteLl0qKSg%2FOlwuKC4rKXwpLztmdW5jdGlvbiBMZSgpe3JldHVybiEwfWZ1bmN0aW9uIENlKCl7cmV0dXJuITF9ZnVuY3Rpb24gQWUoZSx0KXtyZXR1cm4gZT09PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBhLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZSl7fX0oKT09KCJmb2N1cyI9PT10KX1mdW5jdGlvbiBQZShlLHQsbixyLG8saSl7dmFyIGEscztpZigib2JqZWN0Ij09dHlwZW9mIHQpe2ZvcihzIGluInN0cmluZyIhPXR5cGVvZiBuJiYocj1yfHxuLG49dm9pZCAwKSx0KVBlKGUscyxuLHIsdFtzXSxpKTtyZXR1cm4gZX1pZihudWxsPT1yJiZudWxsPT1vPyhvPW4scj1uPXZvaWQgMCk6bnVsbD09byYmKCJzdHJpbmciPT10eXBlb2Ygbj8obz1yLHI9dm9pZCAwKToobz1yLHI9bixuPXZvaWQgMCkpLCExPT09bylvPUNlO2Vsc2UgaWYoIW8pcmV0dXJuIGU7cmV0dXJuIDE9PT1pJiYoYT1vLChvPWZ1bmN0aW9uKGUpe3JldHVybiBTKCkub2ZmKGUpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9Uy5ndWlkKyspKSxlLmVhY2goZnVuY3Rpb24oKXtTLmV2ZW50LmFkZCh0aGlzLHQsbyxyLG4pfSl9ZnVuY3Rpb24gTmUoZSx0LG4pe24%2FKFEuc2V0KGUsdCwhMSksUy5ldmVudC5hZGQoZSx0LHtuYW1lc3BhY2U6ITEsaGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgcixvLGk9US5nZXQodGhpcyx0KTtpZigxJmUuaXNUcmlnZ2VyJiZ0aGlzW3RdKXtpZihpLmxlbmd0aCkoUy5ldmVudC5zcGVjaWFsW3RdfHx7fSkuZGVsZWdhdGVUeXBlJiZlLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgaWYoaT11LmNhbGwoYXJndW1lbnRzKSxRLnNldCh0aGlzLHQsaSkscj1uKHRoaXMsdCksdGhpc1t0XSgpLGkhPT0obz1RLmdldCh0aGlzLHQpKXx8cj9RLnNldCh0aGlzLHQsITEpOm89e30saSE9PW8pcmV0dXJuIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLG8udmFsdWV9ZWxzZSBpLmxlbmd0aCYmKFEuc2V0KHRoaXMsdCx7dmFsdWU6Uy5ldmVudC50cmlnZ2VyKFMuZXh0ZW5kKGlbMF0sUy5FdmVudC5wcm90b3R5cGUpLGkuc2xpY2UoMSksdGhpcyl9KSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19KSk6dm9pZCAwPT09US5nZXQoZSx0KSYmUy5ldmVudC5hZGQoZSx0LExlKX1TLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGksYSxzLHUsYyxsLGYscCxkLGgsZyx2PVEuZ2V0KGUpO2lmKHYpZm9yKG4uaGFuZGxlciYmKG49KGk9bikuaGFuZGxlcixvPWkuc2VsZWN0b3IpLG8mJlMuZmluZC5tYXRjaGVzU2VsZWN0b3IoYWUsbyksbi5ndWlkfHwobi5ndWlkPVMuZ3VpZCsrKSwodT12LmV2ZW50cyl8fCh1PXYuZXZlbnRzPXt9KSwoYT12LmhhbmRsZSl8fChhPXYuaGFuZGxlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1TJiZTLmV2ZW50LnRyaWdnZXJlZCE9PXQudHlwZT9TLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGUsYXJndW1lbnRzKTp2b2lkIDB9KSxjPSh0PSh0fHwiIikubWF0Y2goXyl8fFsiIl0pLmxlbmd0aDtjLS07KWQ9Zz0ocz1FZS5leGVjKHRbY10pfHxbXSlbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQmJihmPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30sZD0obz9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZCxmPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30sbD1TLmV4dGVuZCh7dHlwZTpkLG9yaWdUeXBlOmcsZGF0YTpyLGhhbmRsZXI6bixndWlkOm4uZ3VpZCxzZWxlY3RvcjpvLG5lZWRzQ29udGV4dDpvJiZTLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QobyksbmFtZXNwYWNlOmguam9pbigiLiIpfSxpKSwocD11W2RdKXx8KChwPXVbZF09W10pLmRlbGVnYXRlQ291bnQ9MCxmLnNldHVwJiYhMSE9PWYuc2V0dXAuY2FsbChlLHIsaCxhKXx8ZS5hZGRFdmVudExpc3RlbmVyJiZlLmFkZEV2ZW50TGlzdGVuZXIoZCxhKSksZi5hZGQmJihmLmFkZC5jYWxsKGUsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1uLmd1aWQpKSxvP3Auc3BsaWNlKHAuZGVsZWdhdGVDb3VudCsrLDAsbCk6cC5wdXNoKGwpLFMuZXZlbnQuZ2xvYmFsW2RdPSEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGksYSxzLHUsYyxsLGYscCxkLGgsZyx2PVEuaGFzRGF0YShlKSYmUS5nZXQoZSk7aWYodiYmKHU9di5ldmVudHMpKXtmb3IoYz0odD0odHx8IiIpLm1hdGNoKF8pfHxbIiJdKS5sZW5ndGg7Yy0tOylpZihkPWc9KHM9RWUuZXhlYyh0W2NdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtmb3IoZj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9dVtkPShyP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkXXx8W10scz1zWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig%2FOi4qXFwufCkiKSsiKFxcLnwkKSIpLGE9aT1wLmxlbmd0aDtpLS07KWw9cFtpXSwhbyYmZyE9PWwub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWwuZ3VpZHx8cyYmIXMudGVzdChsLm5hbWVzcGFjZSl8fHImJnIhPT1sLnNlbGVjdG9yJiYoIioqIiE9PXJ8fCFsLnNlbGVjdG9yKXx8KHAuc3BsaWNlKGksMSksbC5zZWxlY3RvciYmcC5kZWxlZ2F0ZUNvdW50LS0sZi5yZW1vdmUmJmYucmVtb3ZlLmNhbGwoZSxsKSk7YSYmIXAubGVuZ3RoJiYoZi50ZWFyZG93biYmITEhPT1mLnRlYXJkb3duLmNhbGwoZSxoLHYuaGFuZGxlKXx8Uy5yZW1vdmVFdmVudChlLGQsdi5oYW5kbGUpLGRlbGV0ZSB1W2RdKX1lbHNlIGZvcihkIGluIHUpUy5ldmVudC5yZW1vdmUoZSxkK3RbY10sbixyLCEwKTtTLmlzRW1wdHlPYmplY3QodSkmJlEucmVtb3ZlKGUsImhhbmRsZSBldmVudHMiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGksYSxzPVMuZXZlbnQuZml4KGUpLHU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGM9KFEuZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlbcy50eXBlXXx8W10sbD1TLmV2ZW50LnNwZWNpYWxbcy50eXBlXXx8e307Zm9yKHVbMF09cyx0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl1W3RdPWFyZ3VtZW50c1t0XTtpZihzLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWwucHJlRGlzcGF0Y2h8fCExIT09bC5wcmVEaXNwYXRjaC5jYWxsKHRoaXMscykpe2ZvcihhPVMuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHMsYyksdD0wOyhvPWFbdCsrXSkmJiFzLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KWZvcihzLmN1cnJlbnRUYXJnZXQ9by5lbGVtLG49MDsoaT1vLmhhbmRsZXJzW24rK10pJiYhcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOylzLnJuYW1lc3BhY2UmJiExIT09aS5uYW1lc3BhY2UmJiFzLnJuYW1lc3BhY2UudGVzdChpLm5hbWVzcGFjZSl8fChzLmhhbmRsZU9iaj1pLHMuZGF0YT1pLmRhdGEsdm9pZCAwIT09KHI9KChTLmV2ZW50LnNwZWNpYWxbaS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGkuaGFuZGxlcikuYXBwbHkoby5lbGVtLHUpKSYmITE9PT0ocy5yZXN1bHQ9cikmJihzLnByZXZlbnREZWZhdWx0KCkscy5zdG9wUHJvcGFnYXRpb24oKSkpO3JldHVybiBsLnBvc3REaXNwYXRjaCYmbC5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHMpLHMucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saSxhLHM9W10sdT10LmRlbGVnYXRlQ291bnQsYz1lLnRhcmdldDtpZih1JiZjLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJmUuYnV0dG9uPj0xKSlmb3IoO2MhPT10aGlzO2M9Yy5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1jLm5vZGVUeXBlJiYoImNsaWNrIiE9PWUudHlwZXx8ITAhPT1jLmRpc2FibGVkKSl7Zm9yKGk9W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW289KHI9dFtuXSkuc2VsZWN0b3IrIiAiXSYmKGFbb109ci5uZWVkc0NvbnRleHQ%2FUyhvLHRoaXMpLmluZGV4KGMpPi0xOlMuZmluZChvLHRoaXMsbnVsbCxbY10pLmxlbmd0aCksYVtvXSYmaS5wdXNoKHIpO2kubGVuZ3RoJiZzLnB1c2goe2VsZW06YyxoYW5kbGVyczppfSl9cmV0dXJuIGM9dGhpcyx1PHQubGVuZ3RoJiZzLnB1c2goe2VsZW06YyxoYW5kbGVyczp0LnNsaWNlKHUpfSksc30sYWRkUHJvcDpmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLkV2ZW50LnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6bSh0KT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdCh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W2VdfSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbUy5leHBhbmRvXT9lOm5ldyBTLkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sY2xpY2s6e3NldHVwOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIGdlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZOZSh0LCJjbGljayIsTGUpLCExfSx0cmlnZ2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIGdlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZOZSh0LCJjbGljayIpLCEwfSxfZGVmYXVsdDpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtyZXR1cm4gZ2UudGVzdCh0LnR5cGUpJiZ0LmNsaWNrJiZBKHQsImlucHV0IikmJlEuZ2V0KHQsImNsaWNrIil8fEEodCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LFMucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LFMuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBTLkV2ZW50KSlyZXR1cm4gbmV3IFMuRXZlbnQoZSx0KTtlJiZlLnR5cGU%2FKHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT9MZTpDZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZTLmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbUy5leHBhbmRvXT0hMH0sUy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOkNlLGlzUHJvcGFnYXRpb25TdG9wcGVkOkNlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOkNlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPUxlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUxlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1MZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sUy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLGNoYXI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmamUudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU%2FZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJlRlLnRlc3QoZS50eXBlKT8xJnQ%2FMToyJnQ%2FMzo0JnQ%2FMjowOmUud2hpY2h9fSxTLmV2ZW50LmFkZFByb3ApLFMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtTLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIE5lKHRoaXMsZSxBZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gTmUodGhpcyxlKSwhMH0sZGVsZWdhdGVUeXBlOnR9fSksUy5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLHQpe1MuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLG89ZS5yZWxhdGVkVGFyZ2V0LGk9ZS5oYW5kbGVPYmo7cmV0dXJuIG8mJihvPT09cnx8Uy5jb250YWlucyhyLG8pKXx8KGUudHlwZT1pLm9yaWdUeXBlLG49aS5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9dCksbn19fSksUy5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBQZSh0aGlzLGUsdCxuLHIpfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIFBlKHRoaXMsZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLFMoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IobyBpbiBlKXRoaXMub2ZmKG8sdCxlW29dKTtyZXR1cm4gdGhpc31yZXR1cm4hMSE9PXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fHwobj10LHQ9dm9pZCAwKSwhMT09PW4mJihuPUNlKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtTLmV2ZW50LnJlbW92ZSh0aGlzLGUsbix0KX0pfX0pO3ZhciBEZT0vPCg%2FIWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2ksUmU9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksSWU9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2kscWU9L15ccyo8ISg%2FOlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk%2BXHMqJC9nO2Z1bmN0aW9uIE1lKGUsdCl7cmV0dXJuIEEoZSwidGFibGUiKSYmQSgxMSE9PXQubm9kZVR5cGU%2FdDp0LmZpcnN0Q2hpbGQsInRyIikmJlMoZSkuY2hpbGRyZW4oInRib2R5IilbMF18fGV9ZnVuY3Rpb24gX2UoZSl7cmV0dXJuIGUudHlwZT0obnVsbCE9PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIitlLnR5cGUsZX1mdW5jdGlvbiBGZShlKXtyZXR1cm4idHJ1ZS8iPT09KGUudHlwZXx8IiIpLnNsaWNlKDAsNSk%2FZS50eXBlPWUudHlwZS5zbGljZSg1KTplLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gSGUoZSx0KXt2YXIgbixyLG8saSxhLHMsdSxjO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihRLmhhc0RhdGEoZSkmJihpPVEuYWNjZXNzKGUpLGE9US5zZXQodCxpKSxjPWkuZXZlbnRzKSlmb3IobyBpbiBkZWxldGUgYS5oYW5kbGUsYS5ldmVudHM9e30sYylmb3Iobj0wLHI9Y1tvXS5sZW5ndGg7bjxyO24rKylTLmV2ZW50LmFkZCh0LG8sY1tvXVtuXSk7Wi5oYXNEYXRhKGUpJiYocz1aLmFjY2VzcyhlKSx1PVMuZXh0ZW5kKHt9LHMpLFouc2V0KHQsdSkpfX1mdW5jdGlvbiB6ZShlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsiaW5wdXQiPT09biYmZ2UudGVzdChlLnR5cGUpP3QuY2hlY2tlZD1lLmNoZWNrZWQ6ImlucHV0IiE9PW4mJiJ0ZXh0YXJlYSIhPT1ufHwodC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIFdlKGUsdCxuLHIpe3Q9Yy5hcHBseShbXSx0KTt2YXIgbyxpLGEscyx1LGwsZj0wLHA9ZS5sZW5ndGgsZD1wLTEsaD10WzBdLGc9bShoKTtpZihnfHxwPjEmJiJzdHJpbmciPT10eXBlb2YgaCYmIXkuY2hlY2tDbG9uZSYmSWUudGVzdChoKSlyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKG8pe3ZhciBpPWUuZXEobyk7ZyYmKHRbMF09aC5jYWxsKHRoaXMsbyxpLmh0bWwoKSkpLFdlKGksdCxuLHIpfSk7aWYocCYmKGk9KG89T2UodCxlWzBdLm93bmVyRG9jdW1lbnQsITEsZSxyKSkuZmlyc3RDaGlsZCwxPT09by5jaGlsZE5vZGVzLmxlbmd0aCYmKG89aSksaXx8cikpe2ZvcihzPShhPVMubWFwKGJlKG8sInNjcmlwdCIpLF9lKSkubGVuZ3RoO2Y8cDtmKyspdT1vLGYhPT1kJiYodT1TLmNsb25lKHUsITAsITApLHMmJlMubWVyZ2UoYSxiZSh1LCJzY3JpcHQiKSkpLG4uY2FsbChlW2ZdLHUsZik7aWYocylmb3IobD1hW2EubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsUy5tYXAoYSxGZSksZj0wO2Y8cztmKyspdT1hW2ZdLHllLnRlc3QodS50eXBlfHwiIikmJiFRLmFjY2Vzcyh1LCJnbG9iYWxFdmFsIikmJlMuY29udGFpbnMobCx1KSYmKHUuc3JjJiYibW9kdWxlIiE9PSh1LnR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpP1MuX2V2YWxVcmwmJiF1Lm5vTW9kdWxlJiZTLl9ldmFsVXJsKHUuc3JjLHtub25jZTp1Lm5vbmNlfHx1LmdldEF0dHJpYnV0ZSgibm9uY2UiKX0pOncodS50ZXh0Q29udGVudC5yZXBsYWNlKHFlLCIiKSx1LGwpKX1yZXR1cm4gZX1mdW5jdGlvbiBVZShlLHQsbil7Zm9yKHZhciByLG89dD9TLmZpbHRlcih0LGUpOmUsaT0wO251bGwhPShyPW9baV0pO2krKylufHwxIT09ci5ub2RlVHlwZXx8Uy5jbGVhbkRhdGEoYmUocikpLHIucGFyZW50Tm9kZSYmKG4mJnNlKHIpJiZ4ZShiZShyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX1TLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKERlLCI8JDE%2BPC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saSxhLHM9ZS5jbG9uZU5vZGUoITApLHU9c2UoZSk7aWYoISh5Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxTLmlzWE1MRG9jKGUpKSlmb3IoYT1iZShzKSxyPTAsbz0oaT1iZShlKSkubGVuZ3RoO3I8bztyKyspemUoaVtyXSxhW3JdKTtpZih0KWlmKG4pZm9yKGk9aXx8YmUoZSksYT1hfHxiZShzKSxyPTAsbz1pLmxlbmd0aDtyPG87cisrKUhlKGlbcl0sYVtyXSk7ZWxzZSBIZShlLHMpO3JldHVybihhPWJlKHMsInNjcmlwdCIpKS5sZW5ndGg%2BMCYmeGUoYSwhdSYmYmUoZSwic2NyaXB0IikpLHN9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLG89Uy5ldmVudC5zcGVjaWFsLGk9MDt2b2lkIDAhPT0obj1lW2ldKTtpKyspaWYoSihuKSl7aWYodD1uW1EuZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihyIGluIHQuZXZlbnRzKW9bcl0%2FUy5ldmVudC5yZW1vdmUobixyKTpTLnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSk7bltRLmV4cGFuZG9dPXZvaWQgMH1uW1ouZXhwYW5kb10mJihuW1ouZXhwYW5kb109dm9pZCAwKX19fSksUy5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gVWUodGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBVZSh0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBCKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU%2FUy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWUpfSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFdlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxNZSh0aGlzLGUpLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gV2UodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PU1lKHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gV2UodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gV2UodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKGJlKGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsIT1lJiZlLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gUy5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4gQih0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWUmJjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUmJiFSZS50ZXN0KGUpJiYhbWVbKHZlLmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPVMuaHRtbFByZWZpbHRlcihlKTt0cnl7Zm9yKDtuPHI7bisrKTE9PT0odD10aGlzW25dfHx7fSkubm9kZVR5cGUmJihTLmNsZWFuRGF0YShiZSh0LCExKSksdC5pbm5lckhUTUw9ZSk7dD0wfWNhdGNoKGUpe319dCYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBXZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbih0KXt2YXIgbj10aGlzLnBhcmVudE5vZGU7Uy5pbkFycmF5KHRoaXMsZSk8MCYmKFMuY2xlYW5EYXRhKGJlKHRoaXMpKSxuJiZuLnJlcGxhY2VDaGlsZCh0LHRoaXMpKX0sZSl9fSksUy5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXtTLmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPVtdLG89UyhlKSxpPW8ubGVuZ3RoLTEsYT0wO2E8PWk7YSsrKW49YT09PWk%2FdGhpczp0aGlzLmNsb25lKCEwKSxTKG9bYV0pW3RdKG4pLGwuYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSk7dmFyICRlPW5ldyBSZWdFeHAoIl4oIityZSsiKSg%2FIXB4KVthLXolXSskIiwiaSIpLEJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gdCYmdC5vcGVuZXJ8fCh0PW4pLHQuZ2V0Q29tcHV0ZWRTdHlsZShlKX0sVmU9bmV3IFJlZ0V4cChpZS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiBLZShlLHQsbil7dmFyIHIsbyxpLGEscz1lLnN0eWxlO3JldHVybihuPW58fEJlKGUpKSYmKCIiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8c2UoZSl8fChhPVMuc3R5bGUoZSx0KSksIXkucGl4ZWxCb3hTdHlsZXMoKSYmJGUudGVzdChhKSYmVmUudGVzdCh0KSYmKHI9cy53aWR0aCxvPXMubWluV2lkdGgsaT1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPW8scy5tYXhXaWR0aD1pKSksdm9pZCAwIT09YT9hKyIiOmF9ZnVuY3Rpb24gR2UoZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7aWYoIWUoKSlyZXR1cm4odGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSB0aGlzLmdldH19fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihsKXtjLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGwuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIsYWUuYXBwZW5kQ2hpbGQoYykuYXBwZW5kQ2hpbGQobCk7dmFyIGU9bi5nZXRDb21wdXRlZFN0eWxlKGwpO3I9IjElIiE9PWUudG9wLHU9MTI9PT10KGUubWFyZ2luTGVmdCksbC5zdHlsZS5yaWdodD0iNjAlIixzPTM2PT09dChlLnJpZ2h0KSxvPTM2PT09dChlLndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaT0xMj09PXQobC5vZmZzZXRXaWR0aC8zKSxhZS5yZW1vdmVDaGlsZChjKSxsPW51bGx9fWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIHIsbyxpLHMsdSxjPWEuY3JlYXRlRWxlbWVudCgiZGl2IiksbD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuc3R5bGUmJihsLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsbC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHkuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1sLnN0eWxlLmJhY2tncm91bmRDbGlwLFMuZXh0ZW5kKHkse2JveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxvfSxwaXhlbEJveFN0eWxlczpmdW5jdGlvbigpe3JldHVybiBlKCksc30scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBlKCkscn0scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSx1fSxzY3JvbGxib3hTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxpfX0pKX0oKTt2YXIgWGU9WyJXZWJraXQiLCJNb3oiLCJtcyJdLEplPWEuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsWWU9e307ZnVuY3Rpb24gUWUoZSl7dmFyIHQ9Uy5jc3NQcm9wc1tlXXx8WWVbZV07cmV0dXJuIHR8fChlIGluIEplP2U6WWVbZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49WGUubGVuZ3RoO24tLTspaWYoKGU9WGVbbl0rdClpbiBKZSlyZXR1cm4gZX0oZSl8fGUpfXZhciBaZT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sZXQ9L14tLS8sdHQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LG50PXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifTtmdW5jdGlvbiBydChlLHQsbil7dmFyIHI9b2UuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMl0tKG58fDApKSsoclszXXx8InB4Iik6dH1mdW5jdGlvbiBvdChlLHQsbixyLG8saSl7dmFyIGE9IndpZHRoIj09PXQ%2FMTowLHM9MCx1PTA7aWYobj09PShyPyJib3JkZXIiOiJjb250ZW50IikpcmV0dXJuIDA7Zm9yKDthPDQ7YSs9MikibWFyZ2luIj09PW4mJih1Kz1TLmNzcyhlLG4raWVbYV0sITAsbykpLHI%2FKCJjb250ZW50Ij09PW4mJih1LT1TLmNzcyhlLCJwYWRkaW5nIitpZVthXSwhMCxvKSksIm1hcmdpbiIhPT1uJiYodS09Uy5jc3MoZSwiYm9yZGVyIitpZVthXSsiV2lkdGgiLCEwLG8pKSk6KHUrPVMuY3NzKGUsInBhZGRpbmciK2llW2FdLCEwLG8pLCJwYWRkaW5nIiE9PW4%2FdSs9Uy5jc3MoZSwiYm9yZGVyIitpZVthXSsiV2lkdGgiLCEwLG8pOnMrPVMuY3NzKGUsImJvcmRlciIraWVbYV0rIldpZHRoIiwhMCxvKSk7cmV0dXJuIXImJmk%2BPTAmJih1Kz1NYXRoLm1heCgwLE1hdGguY2VpbChlWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXS1pLXUtcy0uNSkpfHwwKSx1fWZ1bmN0aW9uIGl0KGUsdCxuKXt2YXIgcj1CZShlKSxvPSgheS5ib3hTaXppbmdSZWxpYWJsZSgpfHxuKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxyKSxpPW8sYT1LZShlLHQscikscz0ib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtpZigkZS50ZXN0KGEpKXtpZighbilyZXR1cm4gYTthPSJhdXRvIn1yZXR1cm4oIXkuYm94U2l6aW5nUmVsaWFibGUoKSYmb3x8ImF1dG8iPT09YXx8IXBhcnNlRmxvYXQoYSkmJiJpbmxpbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIsITEscikpJiZlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYobz0iYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLHIpLChpPXMgaW4gZSkmJihhPWVbc10pKSwoYT1wYXJzZUZsb2F0KGEpfHwwKStvdChlLHQsbnx8KG8%2FImJvcmRlciI6ImNvbnRlbnQiKSxpLHIsYSkrInB4In1mdW5jdGlvbiBhdChlLHQsbixyLG8pe3JldHVybiBuZXcgYXQucHJvdG90eXBlLmluaXQoZSx0LG4scixvKX1TLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUtlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4%2FIjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGdyaWRBcmVhOiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTdGFydDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIG8saSxhLHM9WCh0KSx1PWV0LnRlc3QodCksYz1lLnN0eWxlO2lmKHV8fCh0PVFlKHMpKSxhPVMuY3NzSG9va3NbdF18fFMuY3NzSG9va3Nbc10sdm9pZCAwPT09bilyZXR1cm4gYSYmImdldCJpbiBhJiZ2b2lkIDAhPT0obz1hLmdldChlLCExLHIpKT9vOmNbdF07InN0cmluZyI9PT0oaT10eXBlb2YgbikmJihvPW9lLmV4ZWMobikpJiZvWzFdJiYobj1mZShlLHQsbyksaT0ibnVtYmVyIiksbnVsbCE9biYmbj09biYmKCJudW1iZXIiIT09aXx8dXx8KG4rPW8mJm9bM118fChTLmNzc051bWJlcltzXT8iIjoicHgiKSkseS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwoY1t0XT0iaW5oZXJpdCIpLGEmJiJzZXQiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU%2FYy5zZXRQcm9wZXJ0eSh0LG4pOmNbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvLGksYSxzPVgodCk7cmV0dXJuIGV0LnRlc3QodCl8fCh0PVFlKHMpKSwoYT1TLmNzc0hvb2tzW3RdfHxTLmNzc0hvb2tzW3NdKSYmImdldCJpbiBhJiYobz1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1vJiYobz1LZShlLHQscikpLCJub3JtYWwiPT09byYmdCBpbiBudCYmKG89bnRbdF0pLCIiPT09bnx8bj8oaT1wYXJzZUZsb2F0KG8pLCEwPT09bnx8aXNGaW5pdGUoaSk%2FaXx8MDpvKTpvfX0pLFMuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx0KXtTLmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuLHIpe2lmKG4pcmV0dXJuIVplLnRlc3QoUy5jc3MoZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9pdChlLHQscik6bGUoZSx0dCxmdW5jdGlvbigpe3JldHVybiBpdChlLHQscil9KX0sc2V0OmZ1bmN0aW9uKGUsbixyKXt2YXIgbyxpPUJlKGUpLGE9IXkuc2Nyb2xsYm94U2l6ZSgpJiYiYWJzb2x1dGUiPT09aS5wb3NpdGlvbixzPShhfHxyKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSx1PXI%2Fb3QoZSx0LHIscyxpKTowO3JldHVybiBzJiZhJiYodS09TWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLXBhcnNlRmxvYXQoaVt0XSktb3QoZSx0LCJib3JkZXIiLCExLGkpLS41KSksdSYmKG89b2UuZXhlYyhuKSkmJiJweCIhPT0ob1szXXx8InB4IikmJihlLnN0eWxlW3RdPW4sbj1TLmNzcyhlLHQpKSxydCgwLG4sdSl9fX0pLFMuY3NzSG9va3MubWFyZ2luTGVmdD1HZSh5LnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoS2UoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LWxlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxTLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe1MuY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0wLG89e30saT0ic3RyaW5nIj09dHlwZW9mIG4%2Fbi5zcGxpdCgiICIpOltuXTtyPDQ7cisrKW9bZStpZVtyXSt0XT1pW3JdfHxpW3ItMl18fGlbMF07cmV0dXJuIG99fSwibWFyZ2luIiE9PWUmJihTLmNzc0hvb2tzW2UrdF0uc2V0PXJ0KX0pLFMuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQih0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGk9e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPUJlKGUpLG89dC5sZW5ndGg7YTxvO2ErKylpW3RbYV1dPVMuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gaX1yZXR1cm4gdm9pZCAwIT09bj9TLnN0eWxlKGUsdCxuKTpTLmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX19KSxTLlR3ZWVuPWF0LGF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6YXQsaW5pdDpmdW5jdGlvbihlLHQsbixyLG8saSl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9b3x8Uy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PWl8fChTLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9YXQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOmF0LnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPWF0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24%2FdGhpcy5wb3M9dD1TLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ%2Fbi5zZXQodGhpcyk6YXQucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sYXQucHJvdG90eXBlLmluaXQucHJvdG90eXBlPWF0LnByb3RvdHlwZSxhdC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGwhPWUuZWxlbVtlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXToodD1TLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PXQ%2FdDowfSxzZXQ6ZnVuY3Rpb24oZSl7Uy5meC5zdGVwW2UucHJvcF0%2FUy5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8IVMuY3NzSG9va3NbZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW1FlKGUucHJvcCldP2UuZWxlbVtlLnByb3BdPWUubm93OlMuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfX19LGF0LnByb3BIb29rcy5zY3JvbGxUb3A9YXQucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0sUy5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfSxfZGVmYXVsdDoic3dpbmcifSxTLmZ4PWF0LnByb3RvdHlwZS5pbml0LFMuZnguc3RlcD17fTt2YXIgc3QsdXQsY3Q9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGx0PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gZnQoKXt1dCYmKCExPT09YS5oaWRkZW4mJm4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lP24ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ0KTpuLnNldFRpbWVvdXQoZnQsUy5meC5pbnRlcnZhbCksUy5meC50aWNrKCkpfWZ1bmN0aW9uIHB0KCl7cmV0dXJuIG4uc2V0VGltZW91dChmdW5jdGlvbigpe3N0PXZvaWQgMH0pLHN0PURhdGUubm93KCl9ZnVuY3Rpb24gZHQoZSx0KXt2YXIgbixyPTAsbz17aGVpZ2h0OmV9O2Zvcih0PXQ%2FMTowO3I8NDtyKz0yLXQpb1sibWFyZ2luIisobj1pZVtyXSldPW9bInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihvLm9wYWNpdHk9by53aWR0aD1lKSxvfWZ1bmN0aW9uIGh0KGUsdCxuKXtmb3IodmFyIHIsbz0oZ3QudHdlZW5lcnNbdF18fFtdKS5jb25jYXQoZ3QudHdlZW5lcnNbIioiXSksaT0wLGE9by5sZW5ndGg7aTxhO2krKylpZihyPW9baV0uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gZ3QoZSx0LG4pe3ZhciByLG8saT0wLGE9Z3QucHJlZmlsdGVycy5sZW5ndGgscz1TLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihvKXJldHVybiExO2Zvcih2YXIgdD1zdHx8cHQoKSxuPU1hdGgubWF4KDAsYy5zdGFydFRpbWUrYy5kdXJhdGlvbi10KSxyPTEtKG4vYy5kdXJhdGlvbnx8MCksaT0wLGE9Yy50d2VlbnMubGVuZ3RoO2k8YTtpKyspYy50d2VlbnNbaV0ucnVuKHIpO3JldHVybiBzLm5vdGlmeVdpdGgoZSxbYyxyLG5dKSxyPDEmJmE%2FbjooYXx8cy5ub3RpZnlXaXRoKGUsW2MsMSwwXSkscy5yZXNvbHZlV2l0aChlLFtjXSksITEpfSxjPXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOlMuZXh0ZW5kKHt9LHQpLG9wdHM6Uy5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOlMuZWFzaW5nLl9kZWZhdWx0fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6c3R8fHB0KCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj1TLlR3ZWVuKGUsYy5vcHRzLHQsbixjLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8Yy5vcHRzLmVhc2luZyk7cmV0dXJuIGMudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9jLnR3ZWVucy5sZW5ndGg6MDtpZihvKXJldHVybiB0aGlzO2ZvcihvPSEwO248cjtuKyspYy50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0PyhzLm5vdGlmeVdpdGgoZSxbYywxLDBdKSxzLnJlc29sdmVXaXRoKGUsW2MsdF0pKTpzLnJlamVjdFdpdGgoZSxbYyx0XSksdGhpc319KSxsPWMucHJvcHM7Zm9yKCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpLGE7Zm9yKG4gaW4gZSlpZihvPXRbcj1YKG4pXSxpPWVbbl0sQXJyYXkuaXNBcnJheShpKSYmKG89aVsxXSxpPWVbbl09aVswXSksbiE9PXImJihlW3JdPWksZGVsZXRlIGVbbl0pLChhPVMuY3NzSG9va3Nbcl0pJiYiZXhwYW5kImluIGEpZm9yKG4gaW4gaT1hLmV4cGFuZChpKSxkZWxldGUgZVtyXSxpKW4gaW4gZXx8KGVbbl09aVtuXSx0W25dPW8pO2Vsc2UgdFtyXT1vfShsLGMub3B0cy5zcGVjaWFsRWFzaW5nKTtpPGE7aSsrKWlmKHI9Z3QucHJlZmlsdGVyc1tpXS5jYWxsKGMsZSxsLGMub3B0cykpcmV0dXJuIG0oci5zdG9wKSYmKFMuX3F1ZXVlSG9va3MoYy5lbGVtLGMub3B0cy5xdWV1ZSkuc3RvcD1yLnN0b3AuYmluZChyKSkscjtyZXR1cm4gUy5tYXAobCxodCxjKSxtKGMub3B0cy5zdGFydCkmJmMub3B0cy5zdGFydC5jYWxsKGUsYyksYy5wcm9ncmVzcyhjLm9wdHMucHJvZ3Jlc3MpLmRvbmUoYy5vcHRzLmRvbmUsYy5vcHRzLmNvbXBsZXRlKS5mYWlsKGMub3B0cy5mYWlsKS5hbHdheXMoYy5vcHRzLmFsd2F5cyksUy5meC50aW1lcihTLmV4dGVuZCh1LHtlbGVtOmUsYW5pbTpjLHF1ZXVlOmMub3B0cy5xdWV1ZX0pKSxjfVMuQW5pbWF0aW9uPVMuZXh0ZW5kKGd0LHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KTtyZXR1cm4gZmUobi5lbGVtLGUsb2UuZXhlYyh0KSxuKSxufV19LHR3ZWVuZXI6ZnVuY3Rpb24oZSx0KXttKGUpPyh0PWUsZT1bIioiXSk6ZT1lLm1hdGNoKF8pO2Zvcih2YXIgbixyPTAsbz1lLmxlbmd0aDtyPG87cisrKW49ZVtyXSxndC50d2VlbmVyc1tuXT1ndC50d2VlbmVyc1tuXXx8W10sZ3QudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saSxhLHMsdSxjLGwsZj0id2lkdGgiaW4gdHx8ImhlaWdodCJpbiB0LHA9dGhpcyxkPXt9LGg9ZS5zdHlsZSxnPWUubm9kZVR5cGUmJmNlKGUpLHY9US5nZXQoZSwiZnhzaG93Iik7Zm9yKHIgaW4gbi5xdWV1ZXx8KG51bGw9PShhPVMuX3F1ZXVlSG9va3MoZSwiZngiKSkudW5xdWV1ZWQmJihhLnVucXVldWVkPTAscz1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVlZHx8cygpfSksYS51bnF1ZXVlZCsrLHAuYWx3YXlzKGZ1bmN0aW9uKCl7cC5hbHdheXMoZnVuY3Rpb24oKXthLnVucXVldWVkLS0sUy5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8YS5lbXB0eS5maXJlKCl9KX0pKSx0KWlmKG89dFtyXSxjdC50ZXN0KG8pKXtpZihkZWxldGUgdFtyXSxpPWl8fCJ0b2dnbGUiPT09byxvPT09KGc%2FImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PW98fCF2fHx2b2lkIDA9PT12W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT12JiZ2W3JdfHxTLnN0eWxlKGUscil9aWYoKHU9IVMuaXNFbXB0eU9iamVjdCh0KSl8fCFTLmlzRW1wdHlPYmplY3QoZCkpZm9yKHIgaW4gZiYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtoLm92ZXJmbG93LGgub3ZlcmZsb3dYLGgub3ZlcmZsb3dZXSxudWxsPT0oYz12JiZ2LmRpc3BsYXkpJiYoYz1RLmdldChlLCJkaXNwbGF5IikpLCJub25lIj09PShsPVMuY3NzKGUsImRpc3BsYXkiKSkmJihjP2w9YzooaGUoW2VdLCEwKSxjPWUuc3R5bGUuZGlzcGxheXx8YyxsPVMuY3NzKGUsImRpc3BsYXkiKSxoZShbZV0pKSksKCJpbmxpbmUiPT09bHx8ImlubGluZS1ibG9jayI9PT1sJiZudWxsIT1jKSYmIm5vbmUiPT09Uy5jc3MoZSwiZmxvYXQiKSYmKHV8fChwLmRvbmUoZnVuY3Rpb24oKXtoLmRpc3BsYXk9Y30pLG51bGw9PWMmJihsPWguZGlzcGxheSxjPSJub25lIj09PWw%2FIiI6bCkpLGguZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PSJoaWRkZW4iLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExLGQpdXx8KHY%2FImhpZGRlbiJpbiB2JiYoZz12LmhpZGRlbik6dj1RLmFjY2VzcyhlLCJmeHNob3ciLHtkaXNwbGF5OmN9KSxpJiYodi5oaWRkZW49IWcpLGcmJmhlKFtlXSwhMCkscC5kb25lKGZ1bmN0aW9uKCl7Zm9yKHIgaW4gZ3x8aGUoW2VdKSxRLnJlbW92ZShlLCJmeHNob3ciKSxkKVMuc3R5bGUoZSxyLGRbcl0pfSkpLHU9aHQoZz92W3JdOjAscixwKSxyIGluIHZ8fCh2W3JdPXUuc3RhcnQsZyYmKHUuZW5kPXUuc3RhcnQsdS5zdGFydD0wKSl9XSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P2d0LnByZWZpbHRlcnMudW5zaGlmdChlKTpndC5wcmVmaWx0ZXJzLnB1c2goZSl9fSksUy5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP1MuZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8bShlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYhbSh0KSYmdH07cmV0dXJuIFMuZngub2ZmP3IuZHVyYXRpb249MDoibnVtYmVyIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIFMuZnguc3BlZWRzP3IuZHVyYXRpb249Uy5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj1TLmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXttKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZTLmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0sUy5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoY2UpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPVMuaXNFbXB0eU9iamVjdChlKSxpPVMuc3BlZWQodCxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgdD1ndCh0aGlzLFMuZXh0ZW5kKHt9LGUpLGkpOyhvfHxRLmdldCh0aGlzLCJmaW5pc2giKSkmJnQuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLG98fCExPT09aS5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShpLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG4pfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJihuPXQsdD1lLGU9dm9pZCAwKSx0JiYhMSE9PWUmJnRoaXMucXVldWUoZXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ITAsbz1udWxsIT1lJiZlKyJxdWV1ZUhvb2tzIixpPVMudGltZXJzLGE9US5nZXQodGhpcyk7aWYobylhW29dJiZhW29dLnN0b3AmJnIoYVtvXSk7ZWxzZSBmb3IobyBpbiBhKWFbb10mJmFbb10uc3RvcCYmbHQudGVzdChvKSYmcihhW29dKTtmb3Iobz1pLmxlbmd0aDtvLS07KWlbb10uZWxlbSE9PXRoaXN8fG51bGwhPWUmJmlbb10ucXVldWUhPT1lfHwoaVtvXS5hbmltLnN0b3AobiksdD0hMSxpLnNwbGljZShvLDEpKTshdCYmbnx8Uy5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiExIT09ZSYmKGU9ZXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsbj1RLmdldCh0aGlzKSxyPW5bZSsicXVldWUiXSxvPW5bZSsicXVldWVIb29rcyJdLGk9Uy50aW1lcnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLFMucXVldWUodGhpcyxlLFtdKSxvJiZvLnN0b3AmJm8uc3RvcC5jYWxsKHRoaXMsITApLHQ9aS5sZW5ndGg7dC0tOylpW3RdLmVsZW09PT10aGlzJiZpW3RdLnF1ZXVlPT09ZSYmKGlbdF0uYW5pbS5zdG9wKCEwKSxpLnNwbGljZSh0LDEpKTtmb3IodD0wO3Q8YTt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSksUy5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPVMuZm5bdF07Uy5mblt0XT1mdW5jdGlvbihlLHIsbyl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU%2Fbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGR0KHQsITApLGUscixvKX19KSxTLmVhY2goe3NsaWRlRG93bjpkdCgic2hvdyIpLHNsaWRlVXA6ZHQoImhpZGUiKSxzbGlkZVRvZ2dsZTpkdCgidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe1MuZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSksUy50aW1lcnM9W10sUy5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49Uy50aW1lcnM7Zm9yKHN0PURhdGUubm93KCk7dDxuLmxlbmd0aDt0KyspKGU9blt0XSkoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0aHx8Uy5meC5zdG9wKCksc3Q9dm9pZCAwfSxTLmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe1MudGltZXJzLnB1c2goZSksUy5meC5zdGFydCgpfSxTLmZ4LmludGVydmFsPTEzLFMuZnguc3RhcnQ9ZnVuY3Rpb24oKXt1dHx8KHV0PSEwLGZ0KCkpfSxTLmZ4LnN0b3A9ZnVuY3Rpb24oKXt1dD1udWxsfSxTLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxTLmZuLmRlbGF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9Uy5meCYmUy5meC5zcGVlZHNbZV18fGUsdD10fHwiZngiLHRoaXMucXVldWUodCxmdW5jdGlvbih0LHIpe3ZhciBvPW4uc2V0VGltZW91dCh0LGUpO3Iuc3RvcD1mdW5jdGlvbigpe24uY2xlYXJUaW1lb3V0KG8pfX0pfSxmdW5jdGlvbigpe3ZhciBlPWEuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSx0PWEuY3JlYXRlRWxlbWVudCgic2VsZWN0IikuYXBwZW5kQ2hpbGQoYS5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7ZS50eXBlPSJjaGVja2JveCIseS5jaGVja09uPSIiIT09ZS52YWx1ZSx5Lm9wdFNlbGVjdGVkPXQuc2VsZWN0ZWQsKGU9YS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS52YWx1ZT0idCIsZS50eXBlPSJyYWRpbyIseS5yYWRpb1ZhbHVlPSJ0Ij09PWUudmFsdWV9KCk7dmFyIHZ0LHl0PVMuZXhwci5hdHRySGFuZGxlO1MuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIodGhpcyxTLmF0dHIsZSx0LGFyZ3VtZW50cy5sZW5ndGg%2BMSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MucmVtb3ZlQXR0cih0aGlzLGUpfSl9fSksUy5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saT1lLm5vZGVUeXBlO2lmKDMhPT1pJiY4IT09aSYmMiE9PWkpcmV0dXJuIHZvaWQgMD09PWUuZ2V0QXR0cmlidXRlP1MucHJvcChlLHQsbik6KDE9PT1pJiZTLmlzWE1MRG9jKGUpfHwobz1TLmF0dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwoUy5leHByLm1hdGNoLmJvb2wudGVzdCh0KT92dDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgUy5yZW1vdmVBdHRyKGUsdCk6byYmInNldCJpbiBvJiZ2b2lkIDAhPT0ocj1vLnNldChlLG4sdCkpP3I6KGUuc2V0QXR0cmlidXRlKHQsbisiIiksbik6byYmImdldCJpbiBvJiZudWxsIT09KHI9by5nZXQoZSx0KSk%2FcjpudWxsPT0ocj1TLmZpbmQuYXR0cihlLHQpKT92b2lkIDA6cil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXkucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJkEoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsbz10JiZ0Lm1hdGNoKF8pO2lmKG8mJjE9PT1lLm5vZGVUeXBlKWZvcig7bj1vW3IrK107KWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLHZ0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD9TLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSxTLmVhY2goUy5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj15dFt0XXx8Uy5maW5kLmF0dHI7eXRbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLGksYT10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHJ8fChpPXl0W2FdLHl0W2FdPW8sbz1udWxsIT1uKGUsdCxyKT9hOm51bGwseXRbYV09aSksb319KTt2YXIgbXQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxidD0vXig%2FOmF8YXJlYSkkL2k7ZnVuY3Rpb24geHQoZSl7cmV0dXJuKGUubWF0Y2goXyl8fFtdKS5qb2luKCIgIil9ZnVuY3Rpb24gd3QoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiJ9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk%2FZToic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goXyl8fFtdfVMuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIodGhpcyxTLnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg%2BMSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW1MucHJvcEZpeFtlXXx8ZV19KX19KSxTLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpPWUubm9kZVR5cGU7aWYoMyE9PWkmJjghPT1pJiYyIT09aSlyZXR1cm4gMT09PWkmJlMuaXNYTUxEb2MoZSl8fCh0PVMucHJvcEZpeFt0XXx8dCxvPVMucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP28mJiJzZXQiaW4gbyYmdm9pZCAwIT09KHI9by5zZXQoZSxuLHQpKT9yOmVbdF09bjpvJiYiZ2V0ImluIG8mJm51bGwhPT0ocj1vLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1TLmZpbmQuYXR0cihlLCJ0YWJpbmRleCIpO3JldHVybiB0P3BhcnNlSW50KHQsMTApOm10LnRlc3QoZS5ub2RlTmFtZSl8fGJ0LnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19LHByb3BGaXg6e2ZvcjoiaHRtbEZvciIsY2xhc3M6ImNsYXNzTmFtZSJ9fSkseS5vcHRTZWxlY3RlZHx8KFMucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxTLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe1MucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxTLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saSxhLHMsdT0wO2lmKG0oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtTKHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsd3QodGhpcykpKX0pO2lmKCh0PWt0KGUpKS5sZW5ndGgpZm9yKDtuPXRoaXNbdSsrXTspaWYobz13dChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIreHQobykrIiAiKXtmb3IoYT0wO2k9dFthKytdOylyLmluZGV4T2YoIiAiK2krIiAiKTwwJiYocis9aSsiICIpO28hPT0ocz14dChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGksYSxzLHU9MDtpZihtKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7Uyh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LHd0KHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFzcyIsIiIpO2lmKCh0PWt0KGUpKS5sZW5ndGgpZm9yKDtuPXRoaXNbdSsrXTspaWYobz13dChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIreHQobykrIiAiKXtmb3IoYT0wO2k9dFthKytdOylmb3IoO3IuaW5kZXhPZigiICIraSsiICIpPi0xOylyPXIucmVwbGFjZSgiICIraSsiICIsIiAiKTtvIT09KHM9eHQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlLHI9InN0cmluZyI9PT1ufHxBcnJheS5pc0FycmF5KGUpO3JldHVybiJib29sZWFuIj09dHlwZW9mIHQmJnI%2FdD90aGlzLmFkZENsYXNzKGUpOnRoaXMucmVtb3ZlQ2xhc3MoZSk6bShlKT90aGlzLmVhY2goZnVuY3Rpb24obil7Uyh0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHd0KHRoaXMpLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsbyxpLGE7aWYocilmb3Iobz0wLGk9Uyh0aGlzKSxhPWt0KGUpO3Q9YVtvKytdOylpLmhhc0NsYXNzKHQpP2kucmVtb3ZlQ2xhc3ModCk6aS5hZGRDbGFzcyh0KTtlbHNlIHZvaWQgMCE9PWUmJiJib29sZWFuIiE9PW58fCgodD13dCh0aGlzKSkmJlEuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLHQpLHRoaXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHR8fCExPT09ZT8iIjpRLmdldCh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPTA7Zm9yKHQ9IiAiK2UrIiAiO249dGhpc1tyKytdOylpZigxPT09bi5ub2RlVHlwZSYmKCIgIit4dCh3dChuKSkrIiAiKS5pbmRleE9mKHQpPi0xKXJldHVybiEwO3JldHVybiExfX0pO3ZhciBTdD0vXHIvZztTLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvPXRoaXNbMF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg%2FKHI9bShlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIG87MT09PXRoaXMubm9kZVR5cGUmJihudWxsPT0obz1yP2UuY2FsbCh0aGlzLG4sUyh0aGlzKS52YWwoKSk6ZSk%2Fbz0iIjoibnVtYmVyIj09dHlwZW9mIG8%2Fbys9IiI6QXJyYXkuaXNBcnJheShvKSYmKG89Uy5tYXAobyxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLCh0PVMudmFsSG9va3NbdGhpcy50eXBlXXx8Uy52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmInNldCJpbiB0JiZ2b2lkIDAhPT10LnNldCh0aGlzLG8sInZhbHVlIil8fCh0aGlzLnZhbHVlPW8pKX0pKTpvPyh0PVMudmFsSG9va3Nbby50eXBlXXx8Uy52YWxIb29rc1tvLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmImdldCJpbiB0JiZ2b2lkIDAhPT0obj10LmdldChvLCJ2YWx1ZSIpKT9uOiJzdHJpbmciPT10eXBlb2Yobj1vLnZhbHVlKT9uLnJlcGxhY2UoU3QsIiIpOm51bGw9PW4%2FIiI6bjp2b2lkIDB9fSksUy5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD1TLmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6eHQoUy50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvPWUub3B0aW9ucyxpPWUuc2VsZWN0ZWRJbmRleCxhPSJzZWxlY3Qtb25lIj09PWUudHlwZSxzPWE%2FbnVsbDpbXSx1PWE%2FaSsxOm8ubGVuZ3RoO2ZvcihyPWk8MD91OmE%2FaTowO3I8dTtyKyspaWYoKChuPW9bcl0pLnNlbGVjdGVkfHxyPT09aSkmJiFuLmRpc2FibGVkJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IUEobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD1TKG4pLnZhbCgpLGEpcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixvPWUub3B0aW9ucyxpPVMubWFrZUFycmF5KHQpLGE9by5sZW5ndGg7YS0tOykoKHI9b1thXSkuc2VsZWN0ZWQ9Uy5pbkFycmF5KFMudmFsSG9va3Mub3B0aW9uLmdldChyKSxpKT4tMSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksaX19fX0pLFMuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe1MudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD1TLmluQXJyYXkoUyhlKS52YWwoKSx0KT4tMX19LHkuY2hlY2tPbnx8KFMudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik%2FIm9uIjplLnZhbHVlfSl9KSx5LmZvY3VzaW49Im9uZm9jdXNpbiJpbiBuO3ZhciBPdD0vXig%2FOmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sanQ9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Uy5leHRlbmQoUy5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQscixvKXt2YXIgaSxzLHUsYyxsLGYscCxkLGc9W3J8fGFdLHY9aC5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSx5PWguY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKHM9ZD11PXI9cnx8YSwzIT09ci5ub2RlVHlwZSYmOCE9PXIubm9kZVR5cGUmJiFPdC50ZXN0KHYrUy5ldmVudC50cmlnZ2VyZWQpJiYodi5pbmRleE9mKCIuIik%2BLTEmJih5PXYuc3BsaXQoIi4iKSx2PXkuc2hpZnQoKSx5LnNvcnQoKSksbD12LmluZGV4T2YoIjoiKTwwJiYib24iK3YsKGU9ZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQodiwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9bz8yOjMsZS5uYW1lc3BhY2U9eS5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3kuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1yKSx0PW51bGw9PXQ%2FW2VdOlMubWFrZUFycmF5KHQsW2VdKSxwPVMuZXZlbnQuc3BlY2lhbFt2XXx8e30sb3x8IXAudHJpZ2dlcnx8ITEhPT1wLnRyaWdnZXIuYXBwbHkocix0KSkpe2lmKCFvJiYhcC5ub0J1YmJsZSYmIWIocikpe2ZvcihjPXAuZGVsZWdhdGVUeXBlfHx2LE90LnRlc3QoYyt2KXx8KHM9cy5wYXJlbnROb2RlKTtzO3M9cy5wYXJlbnROb2RlKWcucHVzaChzKSx1PXM7dT09PShyLm93bmVyRG9jdW1lbnR8fGEpJiZnLnB1c2godS5kZWZhdWx0Vmlld3x8dS5wYXJlbnRXaW5kb3d8fG4pfWZvcihpPTA7KHM9Z1tpKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZD1zLGUudHlwZT1pPjE%2FYzpwLmJpbmRUeXBlfHx2LChmPShRLmdldChzLCJldmVudHMiKXx8e30pW2UudHlwZV0mJlEuZ2V0KHMsImhhbmRsZSIpKSYmZi5hcHBseShzLHQpLChmPWwmJnNbbF0pJiZmLmFwcGx5JiZKKHMpJiYoZS5yZXN1bHQ9Zi5hcHBseShzLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT12LG98fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fHAuX2RlZmF1bHQmJiExIT09cC5fZGVmYXVsdC5hcHBseShnLnBvcCgpLHQpfHwhSihyKXx8bCYmbShyW3ZdKSYmIWIocikmJigodT1yW2xdKSYmKHJbbF09bnVsbCksUy5ldmVudC50cmlnZ2VyZWQ9dixlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmQuYWRkRXZlbnRMaXN0ZW5lcih2LGp0KSxyW3ZdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZkLnJlbW92ZUV2ZW50TGlzdGVuZXIodixqdCksUy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLHUmJihyW2xdPXUpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1TLmV4dGVuZChuZXcgUy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtTLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLFMuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIFMuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSkseS5mb2N1c2lufHxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7Uy5ldmVudC5zaW11bGF0ZSh0LGUudGFyZ2V0LFMuZXZlbnQuZml4KGUpKX07Uy5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxvPVEuYWNjZXNzKHIsdCk7b3x8ci5hZGRFdmVudExpc3RlbmVyKGUsbiwhMCksUS5hY2Nlc3Mocix0LChvfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsbz1RLmFjY2VzcyhyLHQpLTE7bz9RLmFjY2VzcyhyLHQsbyk6KHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4sITApLFEucmVtb3ZlKHIsdCkpfX19KTt2YXIgVHQ9bi5sb2NhdGlvbixFdD1EYXRlLm5vdygpLEx0PS9cPy87Uy5wYXJzZVhNTD1mdW5jdGlvbihlKXt2YXIgdDtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXt0PShuZXcgbi5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKGUpe3Q9dm9pZCAwfXJldHVybiB0JiYhdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGh8fFMuZXJyb3IoIkludmFsaWQgWE1MOiAiK2UpLHR9O3ZhciBDdD0vXFtcXSQvLEF0PS9ccj9cbi9nLFB0PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxOdD0vXig%2FOmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnVuY3Rpb24gRHQoZSx0LG4scil7dmFyIG87aWYoQXJyYXkuaXNBcnJheSh0KSlTLmVhY2godCxmdW5jdGlvbih0LG8pe258fEN0LnRlc3QoZSk%2FcihlLG8pOkR0KGUrIlsiKygib2JqZWN0Ij09dHlwZW9mIG8mJm51bGwhPW8%2FdDoiIikrIl0iLG8sbixyKX0pO2Vsc2UgaWYobnx8Im9iamVjdCIhPT1rKHQpKXIoZSx0KTtlbHNlIGZvcihvIGluIHQpRHQoZSsiWyIrbysiXSIsdFtvXSxuLHIpfVMucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLG89ZnVuY3Rpb24oZSx0KXt2YXIgbj1tKHQpP3QoKTp0O3Jbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG51bGw9PW4%2FIiI6bil9O2lmKG51bGw9PWUpcmV0dXJuIiI7aWYoQXJyYXkuaXNBcnJheShlKXx8ZS5qcXVlcnkmJiFTLmlzUGxhaW5PYmplY3QoZSkpUy5lYWNoKGUsZnVuY3Rpb24oKXtvKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKG4gaW4gZSlEdChuLGVbbl0sdCxvKTtyZXR1cm4gci5qb2luKCImIil9LFMuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gUy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPVMucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBlP1MubWFrZUFycmF5KGUpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgZT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIVModGhpcykuaXMoIjpkaXNhYmxlZCIpJiZOdC50ZXN0KHRoaXMubm9kZU5hbWUpJiYhUHQudGVzdChlKSYmKHRoaXMuY2hlY2tlZHx8IWdlLnRlc3QoZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49Uyh0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09bj9udWxsOkFycmF5LmlzQXJyYXkobik%2FUy5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKEF0LCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShBdCwiXHJcbiIpfX0pLmdldCgpfX0pO3ZhciBSdD0vJTIwL2csSXQ9LyMuKiQvLHF0PS8oWz8mXSlfPVteJl0qLyxNdD0vXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL2dtLF90PS9eKD86R0VUfEhFQUQpJC8sRnQ9L15cL1wvLyxIdD17fSx6dD17fSxXdD0iKi8iLmNvbmNhdCgiKiIpLFV0PWEuY3JlYXRlRWxlbWVudCgiYSIpO2Z1bmN0aW9uICR0KGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsbz0wLGk9dC50b0xvd2VyQ2FzZSgpLm1hdGNoKF8pfHxbXTtpZihtKG4pKWZvcig7cj1pW28rK107KSIrIj09PXJbMF0%2FKHI9ci5zbGljZSgxKXx8IioiLChlW3JdPWVbcl18fFtdKS51bnNoaWZ0KG4pKTooZVtyXT1lW3JdfHxbXSkucHVzaChuKX19ZnVuY3Rpb24gQnQoZSx0LG4scil7dmFyIG89e30saT1lPT09enQ7ZnVuY3Rpb24gYShzKXt2YXIgdTtyZXR1cm4gb1tzXT0hMCxTLmVhY2goZVtzXXx8W10sZnVuY3Rpb24oZSxzKXt2YXIgYz1zKHQsbixyKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGN8fGl8fG9bY10%2FaT8hKHU9Yyk6dm9pZCAwOih0LmRhdGFUeXBlcy51bnNoaWZ0KGMpLGEoYyksITEpfSksdX1yZXR1cm4gYSh0LmRhdGFUeXBlc1swXSl8fCFvWyIqIl0mJmEoIioiKX1mdW5jdGlvbiBWdChlLHQpe3ZhciBuLHIsbz1TLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKG4gaW4gdCl2b2lkIDAhPT10W25dJiYoKG9bbl0%2FZTpyfHwocj17fSkpW25dPXRbbl0pO3JldHVybiByJiZTLmV4dGVuZCghMCxlLHIpLGV9VXQuaHJlZj1UdC5ocmVmLFMuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpUdC5ocmVmLHR5cGU6IkdFVCIsaXNMb2NhbDovXig%2FOmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLy50ZXN0KFR0LnByb3RvY29sKSxnbG9iYWw6ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7IioiOld0LHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1sOi9cYnhtbFxiLyxodG1sOi9cYmh0bWwvLGpzb246L1xianNvblxiL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOkpTT04ucGFyc2UsInRleHQgeG1sIjpTLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9WdChWdChlLFMuYWpheFNldHRpbmdzKSx0KTpWdChTLmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRlcjokdChIdCksYWpheFRyYW5zcG9ydDokdCh6dCksYWpheDpmdW5jdGlvbihlLHQpeyJvYmplY3QiPT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksdD10fHx7fTt2YXIgcixvLGkscyx1LGMsbCxmLHAsZCxoPVMuYWpheFNldHVwKHt9LHQpLGc9aC5jb250ZXh0fHxoLHY9aC5jb250ZXh0JiYoZy5ub2RlVHlwZXx8Zy5qcXVlcnkpP1MoZyk6Uy5ldmVudCx5PVMuRGVmZXJyZWQoKSxtPVMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGI9aC5zdGF0dXNDb2RlfHx7fSx4PXt9LHc9e30saz0iY2FuY2VsZWQiLE89e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZihsKXtpZighcylmb3Iocz17fTt0PU10LmV4ZWMoaSk7KXNbdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KHNbdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSk7dD1zW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbD9pOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09bCYmKGU9d1tlLnRvTG93ZXJDYXNlKCldPXdbZS50b0xvd2VyQ2FzZSgpXXx8ZSx4W2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWwmJihoLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihsKU8uYWx3YXlzKGVbTy5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpYlt0XT1bYlt0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8aztyZXR1cm4gciYmci5hYm9ydCh0KSxqKDAsdCksdGhpc319O2lmKHkucHJvbWlzZShPKSxoLnVybD0oKGV8fGgudXJsfHxUdC5ocmVmKSsiIikucmVwbGFjZShGdCxUdC5wcm90b2NvbCsiLy8iKSxoLnR5cGU9dC5tZXRob2R8fHQudHlwZXx8aC5tZXRob2R8fGgudHlwZSxoLmRhdGFUeXBlcz0oaC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKF8pfHxbIiJdLG51bGw9PWguY3Jvc3NEb21haW4pe2M9YS5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e2MuaHJlZj1oLnVybCxjLmhyZWY9Yy5ocmVmLGguY3Jvc3NEb21haW49VXQucHJvdG9jb2wrIi8vIitVdC5ob3N0IT1jLnByb3RvY29sKyIvLyIrYy5ob3N0fWNhdGNoKGUpe2guY3Jvc3NEb21haW49ITB9fWlmKGguZGF0YSYmaC5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBoLmRhdGEmJihoLmRhdGE9Uy5wYXJhbShoLmRhdGEsaC50cmFkaXRpb25hbCkpLEJ0KEh0LGgsdCxPKSxsKXJldHVybiBPO2ZvcihwIGluKGY9Uy5ldmVudCYmaC5nbG9iYWwpJiYwPT1TLmFjdGl2ZSsrJiZTLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGgudHlwZT1oLnR5cGUudG9VcHBlckNhc2UoKSxoLmhhc0NvbnRlbnQ9IV90LnRlc3QoaC50eXBlKSxvPWgudXJsLnJlcGxhY2UoSXQsIiIpLGguaGFzQ29udGVudD9oLmRhdGEmJmgucHJvY2Vzc0RhdGEmJjA9PT0oaC5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYoaC5kYXRhPWguZGF0YS5yZXBsYWNlKFJ0LCIrIikpOihkPWgudXJsLnNsaWNlKG8ubGVuZ3RoKSxoLmRhdGEmJihoLnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIGguZGF0YSkmJihvKz0oTHQudGVzdChvKT8iJiI6Ij8iKStoLmRhdGEsZGVsZXRlIGguZGF0YSksITE9PT1oLmNhY2hlJiYobz1vLnJlcGxhY2UocXQsIiQxIiksZD0oTHQudGVzdChvKT8iJiI6Ij8iKSsiXz0iK0V0KysrZCksaC51cmw9bytkKSxoLmlmTW9kaWZpZWQmJihTLmxhc3RNb2RpZmllZFtvXSYmTy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsUy5sYXN0TW9kaWZpZWRbb10pLFMuZXRhZ1tvXSYmTy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixTLmV0YWdbb10pKSwoaC5kYXRhJiZoLmhhc0NvbnRlbnQmJiExIT09aC5jb250ZW50VHlwZXx8dC5jb250ZW50VHlwZSkmJk8uc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixoLmNvbnRlbnRUeXBlKSxPLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsaC5kYXRhVHlwZXNbMF0mJmguYWNjZXB0c1toLmRhdGFUeXBlc1swXV0%2FaC5hY2NlcHRzW2guZGF0YVR5cGVzWzBdXSsoIioiIT09aC5kYXRhVHlwZXNbMF0%2FIiwgIitXdCsiOyBxPTAuMDEiOiIiKTpoLmFjY2VwdHNbIioiXSksaC5oZWFkZXJzKU8uc2V0UmVxdWVzdEhlYWRlcihwLGguaGVhZGVyc1twXSk7aWYoaC5iZWZvcmVTZW5kJiYoITE9PT1oLmJlZm9yZVNlbmQuY2FsbChnLE8saCl8fGwpKXJldHVybiBPLmFib3J0KCk7aWYoaz0iYWJvcnQiLG0uYWRkKGguY29tcGxldGUpLE8uZG9uZShoLnN1Y2Nlc3MpLE8uZmFpbChoLmVycm9yKSxyPUJ0KHp0LGgsdCxPKSl7aWYoTy5yZWFkeVN0YXRlPTEsZiYmdi50cmlnZ2VyKCJhamF4U2VuZCIsW08saF0pLGwpcmV0dXJuIE87aC5hc3luYyYmaC50aW1lb3V0PjAmJih1PW4uc2V0VGltZW91dChmdW5jdGlvbigpe08uYWJvcnQoInRpbWVvdXQiKX0saC50aW1lb3V0KSk7dHJ5e2w9ITEsci5zZW5kKHgsail9Y2F0Y2goZSl7aWYobCl0aHJvdyBlO2ooLTEsZSl9fWVsc2UgaigtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24gaihlLHQsYSxzKXt2YXIgYyxwLGQseCx3LGs9dDtsfHwobD0hMCx1JiZuLmNsZWFyVGltZW91dCh1KSxyPXZvaWQgMCxpPXN8fCIiLE8ucmVhZHlTdGF0ZT1lPjA%2FNDowLGM9ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSxhJiYoeD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLG8saSxhLHM9ZS5jb250ZW50cyx1PWUuZGF0YVR5cGVzOyIqIj09PXVbMF07KXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IobyBpbiBzKWlmKHNbb10mJnNbb10udGVzdChyKSl7dS51bnNoaWZ0KG8pO2JyZWFrfWlmKHVbMF1pbiBuKWk9dVswXTtlbHNle2ZvcihvIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbbysiICIrdVswXV0pe2k9bzticmVha31hfHwoYT1vKX1pPWl8fGF9aWYoaSlyZXR1cm4gaSE9PXVbMF0mJnUudW5zaGlmdChpKSxuW2ldfShoLE8sYSkpLHg9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG8saSxhLHMsdSxjPXt9LGw9ZS5kYXRhVHlwZXMuc2xpY2UoKTtpZihsWzFdKWZvcihhIGluIGUuY29udmVydGVycyljW2EudG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW2FdO2ZvcihpPWwuc2hpZnQoKTtpOylpZihlLnJlc3BvbnNlRmllbGRzW2ldJiYobltlLnJlc3BvbnNlRmllbGRzW2ldXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1pLGk9bC5zaGlmdCgpKWlmKCIqIj09PWkpaT11O2Vsc2UgaWYoIioiIT09dSYmdSE9PWkpe2lmKCEoYT1jW3UrIiAiK2ldfHxjWyIqICIraV0pKWZvcihvIGluIGMpaWYoKHM9by5zcGxpdCgiICIpKVsxXT09PWkmJihhPWNbdSsiICIrc1swXV18fGNbIiogIitzWzBdXSkpeyEwPT09YT9hPWNbb106ITAhPT1jW29dJiYoaT1zWzBdLGwudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmUudGhyb3dzKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitpfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fShoLHgsTyxjKSxjPyhoLmlmTW9kaWZpZWQmJigodz1PLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoUy5sYXN0TW9kaWZpZWRbb109dyksKHc9Ty5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKFMuZXRhZ1tvXT13KSksMjA0PT09ZXx8IkhFQUQiPT09aC50eXBlP2s9Im5vY29udGVudCI6MzA0PT09ZT9rPSJub3Rtb2RpZmllZCI6KGs9eC5zdGF0ZSxwPXguZGF0YSxjPSEoZD14LmVycm9yKSkpOihkPWssIWUmJmt8fChrPSJlcnJvciIsZTwwJiYoZT0wKSkpLE8uc3RhdHVzPWUsTy5zdGF0dXNUZXh0PSh0fHxrKSsiIixjP3kucmVzb2x2ZVdpdGgoZyxbcCxrLE9dKTp5LnJlamVjdFdpdGgoZyxbTyxrLGRdKSxPLnN0YXR1c0NvZGUoYiksYj12b2lkIDAsZiYmdi50cmlnZ2VyKGM%2FImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbTyxoLGM%2FcDpkXSksbS5maXJlV2l0aChnLFtPLGtdKSxmJiYodi50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtPLGhdKSwtLVMuYWN0aXZlfHxTLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gT30sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFMuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBTLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxTLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSx0KXtTW3RdPWZ1bmN0aW9uKGUsbixyLG8pe3JldHVybiBtKG4pJiYobz1vfHxyLHI9bixuPXZvaWQgMCksUy5hamF4KFMuZXh0ZW5kKHt1cmw6ZSx0eXBlOnQsZGF0YVR5cGU6byxkYXRhOm4sc3VjY2VzczpyfSxTLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxTLl9ldmFsVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFMuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbigpe319LGRhdGFGaWx0ZXI6ZnVuY3Rpb24oZSl7Uy5nbG9iYWxFdmFsKGUsdCl9fSl9LFMuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PVMoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXM7ZS5maXJzdEVsZW1lbnRDaGlsZDspZT1lLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpKSx0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG0oZSk%2FdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe1ModGhpcykud3JhcElubmVyKGUuY2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PVModGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg%2Fbi53cmFwQWxsKGUpOnQuYXBwZW5kKGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9bShlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe1ModGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoZSkubm90KCJib2R5IikuZWFjaChmdW5jdGlvbigpe1ModGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLHRoaXN9fSksUy5leHByLnBzZXVkb3MuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiFTLmV4cHIucHNldWRvcy52aXNpYmxlKGUpfSxTLmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiEhKGUub2Zmc2V0V2lkdGh8fGUub2Zmc2V0SGVpZ2h0fHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0sUy5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgbi5YTUxIdHRwUmVxdWVzdH1jYXRjaChlKXt9fTt2YXIgS3Q9ezA6MjAwLDEyMjM6MjA0fSxHdD1TLmFqYXhTZXR0aW5ncy54aHIoKTt5LmNvcnM9ISFHdCYmIndpdGhDcmVkZW50aWFscyJpbiBHdCx5LmFqYXg9R3Q9ISFHdCxTLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oZSl7dmFyIHQscjtpZih5LmNvcnN8fEd0JiYhZS5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihvLGkpe3ZhciBhLHM9ZS54aHIoKTtpZihzLm9wZW4oZS50eXBlLGUudXJsLGUuYXN5bmMsZS51c2VybmFtZSxlLnBhc3N3b3JkKSxlLnhockZpZWxkcylmb3IoYSBpbiBlLnhockZpZWxkcylzW2FdPWUueGhyRmllbGRzW2FdO2ZvcihhIGluIGUubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKGUubWltZVR5cGUpLGUuY3Jvc3NEb21haW58fG9bIlgtUmVxdWVzdGVkLVdpdGgiXXx8KG9bIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKSxvKXMuc2V0UmVxdWVzdEhlYWRlcihhLG9bYV0pO3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dCYmKHQ9cj1zLm9ubG9hZD1zLm9uZXJyb3I9cy5vbmFib3J0PXMub250aW1lb3V0PXMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsImFib3J0Ij09PWU%2Fcy5hYm9ydCgpOiJlcnJvciI9PT1lPyJudW1iZXIiIT10eXBlb2Ygcy5zdGF0dXM%2FaSgwLCJlcnJvciIpOmkocy5zdGF0dXMscy5zdGF0dXNUZXh0KTppKEt0W3Muc3RhdHVzXXx8cy5zdGF0dXMscy5zdGF0dXNUZXh0LCJ0ZXh0IiE9PShzLnJlc3BvbnNlVHlwZXx8InRleHQiKXx8InN0cmluZyIhPXR5cGVvZiBzLnJlc3BvbnNlVGV4dD97YmluYXJ5OnMucmVzcG9uc2V9Ont0ZXh0OnMucmVzcG9uc2VUZXh0fSxzLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxzLm9ubG9hZD10KCkscj1zLm9uZXJyb3I9cy5vbnRpbWVvdXQ9dCgiZXJyb3IiKSx2b2lkIDAhPT1zLm9uYWJvcnQ%2Fcy5vbmFib3J0PXI6cy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT09cy5yZWFkeVN0YXRlJiZuLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0JiZyKCl9KX0sdD10KCJhYm9ydCIpO3RyeXtzLnNlbmQoZS5oYXNDb250ZW50JiZlLmRhdGF8fG51bGwpfWNhdGNoKGUpe2lmKHQpdGhyb3cgZX19LGFib3J0OmZ1bmN0aW9uKCl7dCYmdCgpfX19KSxTLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7ZS5jcm9zc0RvbWFpbiYmKGUuY29udGVudHMuc2NyaXB0PSExKX0pLFMuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe3JldHVybiBTLmdsb2JhbEV2YWwoZSksZX19fSksUy5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUuY2FjaGUmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiKX0pLFMuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXt2YXIgdCxuO2lmKGUuY3Jvc3NEb21haW58fGUuc2NyaXB0QXR0cnMpcmV0dXJue3NlbmQ6ZnVuY3Rpb24ocixvKXt0PVMoIjxzY3JpcHQ%2BIikuYXR0cihlLnNjcmlwdEF0dHJzfHx7fSkucHJvcCh7Y2hhcnNldDplLnNjcmlwdENoYXJzZXQsc3JjOmUudXJsfSkub24oImxvYWQgZXJyb3IiLG49ZnVuY3Rpb24oZSl7dC5yZW1vdmUoKSxuPW51bGwsZSYmbygiZXJyb3IiPT09ZS50eXBlPzQwNDoyMDAsZS50eXBlKX0pLGEuaGVhZC5hcHBlbmRDaGlsZCh0WzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuKCl9fX0pO3ZhciBYdCxKdD1bXSxZdD0vKD0pXD8oPz0mfCQpfFw%2FXD8vO1MuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1KdC5wb3AoKXx8Uy5leHBhbmRvKyJfIitFdCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksUy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihlLHQscil7dmFyIG8saSxhLHM9ITEhPT1lLmpzb25wJiYoWXQudGVzdChlLnVybCk%2FInVybCI6InN0cmluZyI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZZdC50ZXN0KGUuZGF0YSkmJiJkYXRhIik7aWYoc3x8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiBvPWUuanNvbnBDYWxsYmFjaz1tKGUuanNvbnBDYWxsYmFjayk%2FZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLHM%2FZVtzXT1lW3NdLnJlcGxhY2UoWXQsIiQxIitvKTohMSE9PWUuanNvbnAmJihlLnVybCs9KEx0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK28pLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBhfHxTLmVycm9yKG8rIiB3YXMgbm90IGNhbGxlZCIpLGFbMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPW5bb10sbltvXT1mdW5jdGlvbigpe2E9YXJndW1lbnRzfSxyLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWk%2FUyhuKS5yZW1vdmVQcm9wKG8pOm5bb109aSxlW29dJiYoZS5qc29ucENhbGxiYWNrPXQuanNvbnBDYWxsYmFjayxKdC5wdXNoKG8pKSxhJiZtKGkpJiZpKGFbMF0pLGE9aT12b2lkIDB9KSwic2NyaXB0In0pLHkuY3JlYXRlSFRNTERvY3VtZW50PSgoWHQ9YS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0%2BPC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1YdC5jaGlsZE5vZGVzLmxlbmd0aCksUy5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9bXTooImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0fHwoeS5jcmVhdGVIVE1MRG9jdW1lbnQ%2FKChyPSh0PWEuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPWEubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9YSksaT0hbiYmW10sKG89UC5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KG9bMV0pXToobz1PZShbZV0sdCxpKSxpJiZpLmxlbmd0aCYmUyhpKS5yZW1vdmUoKSxTLm1lcmdlKFtdLG8uY2hpbGROb2RlcykpKTt2YXIgcixvLGl9LFMuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpLGE9dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybiBzPi0xJiYocj14dChlLnNsaWNlKHMpKSxlPWUuc2xpY2UoMCxzKSksbSh0KT8obj10LHQ9dm9pZCAwKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihvPSJQT1NUIiksYS5sZW5ndGg%2BMCYmUy5hamF4KHt1cmw6ZSx0eXBlOm98fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe2k9YXJndW1lbnRzLGEuaHRtbChyP1MoIjxkaXY%2BIikuYXBwZW5kKFMucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuYWx3YXlzKG4mJmZ1bmN0aW9uKGUsdCl7YS5lYWNoKGZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLGl8fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pfSksdGhpc30sUy5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oZSx0KXtTLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSksUy5leHByLnBzZXVkb3MuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFMuZ3JlcChTLnRpbWVycyxmdW5jdGlvbih0KXtyZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0sUy5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpLGEscyx1LGM9Uy5jc3MoZSwicG9zaXRpb24iKSxsPVMoZSksZj17fTsic3RhdGljIj09PWMmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHM9bC5vZmZzZXQoKSxpPVMuY3NzKGUsInRvcCIpLHU9Uy5jc3MoZSwibGVmdCIpLCgiYWJzb2x1dGUiPT09Y3x8ImZpeGVkIj09PWMpJiYoaSt1KS5pbmRleE9mKCJhdXRvIik%2BLTE%2FKGE9KHI9bC5wb3NpdGlvbigpKS50b3Asbz1yLmxlZnQpOihhPXBhcnNlRmxvYXQoaSl8fDAsbz1wYXJzZUZsb2F0KHUpfHwwKSxtKHQpJiYodD10LmNhbGwoZSxuLFMuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LXMubGVmdCtvKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTpsLmNzcyhmKX19LFMuZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09ZT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbih0KXtTLm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSk7dmFyIHQsbixyPXRoaXNbMF07cmV0dXJuIHI%2Fci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD8odD1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LHt0b3A6dC50b3Arbi5wYWdlWU9mZnNldCxsZWZ0OnQubGVmdCtuLnBhZ2VYT2Zmc2V0fSk6e3RvcDowLGxlZnQ6MH06dm9pZCAwfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbixyPXRoaXNbMF0sbz17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09Uy5jc3MociwicG9zaXRpb24iKSl0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXtmb3IodD10aGlzLm9mZnNldCgpLG49ci5vd25lckRvY3VtZW50LGU9ci5vZmZzZXRQYXJlbnR8fG4uZG9jdW1lbnRFbGVtZW50O2UmJihlPT09bi5ib2R5fHxlPT09bi5kb2N1bWVudEVsZW1lbnQpJiYic3RhdGljIj09PVMuY3NzKGUsInBvc2l0aW9uIik7KWU9ZS5wYXJlbnROb2RlO2UmJmUhPT1yJiYxPT09ZS5ub2RlVHlwZSYmKChvPVMoZSkub2Zmc2V0KCkpLnRvcCs9Uy5jc3MoZSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxvLmxlZnQrPVMuY3NzKGUsImJvcmRlckxlZnRXaWR0aCIsITApKX1yZXR1cm57dG9wOnQudG9wLW8udG9wLVMuY3NzKHIsIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LW8ubGVmdC1TLmNzcyhyLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMub2Zmc2V0UGFyZW50O2UmJiJzdGF0aWMiPT09Uy5jc3MoZSwicG9zaXRpb24iKTspZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8YWV9KX19KSxTLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oZSx0KXt2YXIgbj0icGFnZVlPZmZzZXQiPT09dDtTLmZuW2VdPWZ1bmN0aW9uKHIpe3JldHVybiBCKHRoaXMsZnVuY3Rpb24oZSxyLG8pe3ZhciBpO2lmKGIoZSk%2FaT1lOjk9PT1lLm5vZGVUeXBlJiYoaT1lLmRlZmF1bHRWaWV3KSx2b2lkIDA9PT1vKXJldHVybiBpP2lbdF06ZVtyXTtpP2kuc2Nyb2xsVG8obj9pLnBhZ2VYT2Zmc2V0Om8sbj9vOmkucGFnZVlPZmZzZXQpOmVbcl09b30sZSxyLGFyZ3VtZW50cy5sZW5ndGgpfX0pLFMuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe1MuY3NzSG9va3NbdF09R2UoeS5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGUsbil7aWYobilyZXR1cm4gbj1LZShlLHQpLCRlLnRlc3Qobik%2FUyhlKS5wb3NpdGlvbigpW3RdKyJweCI6bn0pfSksUy5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSx0KXtTLmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6dCwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKG4scil7Uy5mbltyXT1mdW5jdGlvbihvLGkpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgmJihufHwiYm9vbGVhbiIhPXR5cGVvZiBvKSxzPW58fCghMD09PW98fCEwPT09aT8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIEIodGhpcyxmdW5jdGlvbih0LG4sbyl7dmFyIGk7cmV0dXJuIGIodCk%2FMD09PXIuaW5kZXhPZigib3V0ZXIiKT90WyJpbm5lciIrZV06dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrZV06OT09PXQubm9kZVR5cGU%2FKGk9dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5WyJzY3JvbGwiK2VdLGlbInNjcm9sbCIrZV0sdC5ib2R5WyJvZmZzZXQiK2VdLGlbIm9mZnNldCIrZV0saVsiY2xpZW50IitlXSkpOnZvaWQgMD09PW8%2FUy5jc3ModCxuLHMpOlMuc3R5bGUodCxuLG8scyl9LHQsYT9vOnZvaWQgMCxhKX19KX0pLFMuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe1MuZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfX0pLFMuZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX19KSxTLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg%2FdGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9fSksUy5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbztpZigic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9biksbShlKSlyZXR1cm4gcj11LmNhbGwoYXJndW1lbnRzLDIpLChvPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8dGhpcyxyLmNvbmNhdCh1LmNhbGwoYXJndW1lbnRzKSkpfSkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHxTLmd1aWQrKyxvfSxTLmhvbGRSZWFkeT1mdW5jdGlvbihlKXtlP1MucmVhZHlXYWl0Kys6Uy5yZWFkeSghMCl9LFMuaXNBcnJheT1BcnJheS5pc0FycmF5LFMucGFyc2VKU09OPUpTT04ucGFyc2UsUy5ub2RlTmFtZT1BLFMuaXNGdW5jdGlvbj1tLFMuaXNXaW5kb3c9YixTLmNhbWVsQ2FzZT1YLFMudHlwZT1rLFMubm93PURhdGUubm93LFMuaXNOdW1lcmljPWZ1bmN0aW9uKGUpe3ZhciB0PVMudHlwZShlKTtyZXR1cm4oIm51bWJlciI9PT10fHwic3RyaW5nIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sdm9pZCAwPT09KHI9ZnVuY3Rpb24oKXtyZXR1cm4gU30uYXBwbHkodCxbXSkpfHwoZS5leHBvcnRzPXIpO3ZhciBRdD1uLmpRdWVyeSxadD1uLiQ7cmV0dXJuIFMubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gbi4kPT09UyYmKG4uJD1adCksZSYmbi5qUXVlcnk9PT1TJiYobi5qUXVlcnk9UXQpLFN9LG98fChuLmpRdWVyeT1uLiQ9UyksU30pfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMjI2KX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDIyNyl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigyMjkpfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyMzMpO2Z1bmN0aW9uIG8oZSx0LG4sbyxpLGEscyl7dHJ5e3ZhciB1PWVbYV0ocyksYz11LnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIG4oZSl9dS5kb25lP3QoYyk6ci5yZXNvbHZlKGMpLnRoZW4obyxpKX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IHIoZnVuY3Rpb24ocixpKXt2YXIgYT1lLmFwcGx5KHQsbik7ZnVuY3Rpb24gcyhlKXtvKGEscixpLHMsdSwibmV4dCIsZSl9ZnVuY3Rpb24gdShlKXtvKGEscixpLHMsdSwidGhyb3ciLGUpfXModm9pZCAwKX0pfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI0NykuZGVmYXVsdDtlLmV4cG9ydHM9cixlLmV4cG9ydHMuZGVmYXVsdD1yfSxmdW5jdGlvbihlLHQsbil7bigzNCksbigyNyksZS5leHBvcnRzPW4oMTI3KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDExKSxvPW4oNjkpLGk9bigxNiksYT1uKDM2KSxzPW4oNzEpLHU9YS5zZXQsYz1hLmdldHRlckZvcigiQXJyYXkgSXRlcmF0b3IiKTtlLmV4cG9ydHM9cyhBcnJheSwiQXJyYXkiLGZ1bmN0aW9uKGUsdCl7dSh0aGlzLHt0eXBlOiJBcnJheSBJdGVyYXRvciIsdGFyZ2V0OnIoZSksaW5kZXg6MCxraW5kOnR9KX0sZnVuY3Rpb24oKXt2YXIgZT1jKHRoaXMpLHQ9ZS50YXJnZXQsbj1lLmtpbmQscj1lLmluZGV4Kys7cmV0dXJuIXR8fHI%2BPXQubGVuZ3RoPyhlLnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk6ImtleXMiPT1uP3t2YWx1ZTpyLGRvbmU6ITF9OiJ2YWx1ZXMiPT1uP3t2YWx1ZTp0W3JdLGRvbmU6ITF9Ont2YWx1ZTpbcix0W3JdXSxkb25lOiExfX0sInZhbHVlcyIpLGkuQXJndW1lbnRzPWkuQXJyYXksbygia2V5cyIpLG8oInZhbHVlcyIpLG8oImVudHJpZXMiKX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMyksbz1uKDExOSksaT1yLldlYWtNYXA7ZS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBpJiYvbmF0aXZlIGNvZGUvLnRlc3Qoby5jYWxsKGkpKX0sZnVuY3Rpb24oZSx0KXt2YXIgbjtuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e249bnx8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihuPXdpbmRvdyl9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDM3KTtlLmV4cG9ydHM9cigibmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZyIsRnVuY3Rpb24udG9TdHJpbmcpfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzKSxvPW4oOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e28ocixlLHQpfWNhdGNoKG4pe3JbZV09dH1yZXR1cm4gdH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MykuSXRlcmF0b3JQcm90b3R5cGUsbz1uKDI1KSxpPW4oMTcpLGE9bigyMSkscz1uKDE2KSx1PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIGM9dCsiIEl0ZXJhdG9yIjtyZXR1cm4gZS5wcm90b3R5cGU9byhyLHtuZXh0OmkoMSxuKX0pLGEoZSxjLCExLCEwKSxzW2NdPXUsZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDgpLG89bigxMiksaT1uKDcpLGE9big0MSk7ZS5leHBvcnRzPXI%2FT2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtpKGUpO2Zvcih2YXIgbixyPWEodCkscz1yLmxlbmd0aCx1PTA7cz51OylvLmYoZSxuPXJbdSsrXSx0W25dKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4MCksbz17fTtvW24oNCkoInRvU3RyaW5nVGFnIildPSJ6IixlLmV4cG9ydHM9IltvYmplY3Qgel0iIT09U3RyaW5nKG8pP2Z1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIityKHRoaXMpKyJdIn06by50b1N0cmluZ30sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFyKGUpJiZudWxsIT09ZSl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IHNldCAiK1N0cmluZyhlKSsiIGFzIGEgcHJvdG90eXBlIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDU4KSxvPW4oMzUpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIGksYSxzPVN0cmluZyhvKHQpKSx1PXIobiksYz1zLmxlbmd0aDtyZXR1cm4gdTwwfHx1Pj1jP2U%2FIiI6dm9pZCAwOihpPXMuY2hhckNvZGVBdCh1KSk8NTUyOTZ8fGk%2BNTYzMTl8fHUrMT09PWN8fChhPXMuY2hhckNvZGVBdCh1KzEpKTw1NjMyMHx8YT41NzM0Mz9lP3MuY2hhckF0KHUpOmk6ZT9zLnNsaWNlKHUsdSsyKTphLTU2MzIwKyhpLTU1Mjk2PDwxMCkrNjU1MzZ9fTtlLmV4cG9ydHM9e2NvZGVBdDppKCExKSxjaGFyQXQ6aSghMCl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big3KSxvPW4oNDIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1vKGUpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcihTdHJpbmcoZSkrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gcih0LmNhbGwoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDEyOSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDEzMCk7dmFyIHI9bigxKTtlLmV4cG9ydHM9ci5BcnJheS5pc0FycmF5fSxmdW5jdGlvbihlLHQsbil7bigwKSh7dGFyZ2V0OiJBcnJheSIsc3RhdDohMH0se2lzQXJyYXk6bigyOCl9KX0sZnVuY3Rpb24oZSx0LG4pe24oMzQpLG4oMjcpLGUuZXhwb3J0cz1uKDQyKX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDgxKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDApLG89big1KSxpPW4oMjgpLGE9big2KSxzPW4oMTQpLHU9bigxOSksYz1uKDYxKSxsPW4oODIpLGY9big4MykscD1uKDQpKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxkPSFvKGZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGVbcF09ITEsZS5jb25jYXQoKVswXSE9PWV9KSxoPWYoImNvbmNhdCIpLGc9ZnVuY3Rpb24oZSl7aWYoIWEoZSkpcmV0dXJuITE7dmFyIHQ9ZVtwXTtyZXR1cm4gdm9pZCAwIT09dD8hIXQ6aShlKX07cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFkfHwhaH0se2NvbmNhdDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGE9cyh0aGlzKSxmPWwoYSwwKSxwPTA7Zm9yKHQ9LTEscj1hcmd1bWVudHMubGVuZ3RoO3Q8cjt0KyspaWYoaT0tMT09PXQ%2FYTphcmd1bWVudHNbdF0sZyhpKSl7aWYocCsobz11KGkubGVuZ3RoKSk%2BOTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBUeXBlRXJyb3IoIk1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIpO2ZvcihuPTA7bjxvO24rKyxwKyspbiBpbiBpJiZjKGYscCxpW25dKX1lbHNle2lmKHA%2BPTkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgVHlwZUVycm9yKCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiKTtjKGYscCsrLGkpfXJldHVybiBmLmxlbmd0aD1wLGZ9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigwKSxvPW4oMyksaT1uKDE4KSxhPW4oOCkscz1uKDc1KSx1PW4oNSksYz1uKDEwKSxsPW4oMjgpLGY9big2KSxwPW4oNyksZD1uKDE0KSxoPW4oMTEpLGc9bigzOCksdj1uKDE3KSx5PW4oMjUpLG09big0MSksYj1uKDg1KSx4PW4oMTM1KSx3PW4oODYpLGs9bigyMiksUz1uKDEyKSxPPW4oNTcpLGo9big5KSxUPW4oMjYpLEU9bigzNyksTD1uKDM5KSxDPW4oNDApLEE9big1NiksUD1uKDQpLE49big2MiksRD1uKDIpLFI9bigyMSksST1uKDM2KSxxPW4oODcpLmZvckVhY2gsTT1MKCJoaWRkZW4iKSxfPVAoInRvUHJpbWl0aXZlIiksRj1JLnNldCxIPUkuZ2V0dGVyRm9yKCJTeW1ib2wiKSx6PU9iamVjdC5wcm90b3R5cGUsVz1vLlN5bWJvbCxVPW8uSlNPTiwkPVUmJlUuc3RyaW5naWZ5LEI9ay5mLFY9Uy5mLEs9eC5mLEc9Ty5mLFg9RSgic3ltYm9scyIpLEo9RSgib3Atc3ltYm9scyIpLFk9RSgic3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeSIpLFE9RSgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpLFo9RSgid2tzIiksZWU9by5RT2JqZWN0LHRlPSFlZXx8IWVlLnByb3RvdHlwZXx8IWVlLnByb3RvdHlwZS5maW5kQ2hpbGQsbmU9YSYmdShmdW5jdGlvbigpe3JldHVybiA3IT15KFYoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVih0aGlzLCJhIix7dmFsdWU6N30pLmF9fSkpLmF9KT9mdW5jdGlvbihlLHQsbil7dmFyIHI9Qih6LHQpO3ImJmRlbGV0ZSB6W3RdLFYoZSx0LG4pLHImJmUhPT16JiZWKHosdCxyKX06VixyZT1mdW5jdGlvbihlLHQpe3ZhciBuPVhbZV09eShXLnByb3RvdHlwZSk7cmV0dXJuIEYobix7dHlwZToiU3ltYm9sIix0YWc6ZSxkZXNjcmlwdGlvbjp0fSksYXx8KG4uZGVzY3JpcHRpb249dCksbn0sb2U9cyYmInN5bWJvbCI9PXR5cGVvZiBXLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChlKWluc3RhbmNlb2YgV30saWU9ZnVuY3Rpb24oZSx0LG4pe2U9PT16JiZpZShKLHQsbikscChlKTt2YXIgcj1nKHQsITApO3JldHVybiBwKG4pLGMoWCxyKT8obi5lbnVtZXJhYmxlPyhjKGUsTSkmJmVbTV1bcl0mJihlW01dW3JdPSExKSxuPXkobix7ZW51bWVyYWJsZTp2KDAsITEpfSkpOihjKGUsTSl8fFYoZSxNLHYoMSx7fSkpLGVbTV1bcl09ITApLG5lKGUscixuKSk6VihlLHIsbil9LGFlPWZ1bmN0aW9uKGUsdCl7cChlKTt2YXIgbj1oKHQpLHI9bShuKS5jb25jYXQobGUobikpO3JldHVybiBxKHIsZnVuY3Rpb24odCl7YSYmIXNlLmNhbGwobix0KXx8aWUoZSx0LG5bdF0pfSksZX0sc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZyhlLCEwKSxuPUcuY2FsbCh0aGlzLHQpO3JldHVybiEodGhpcz09PXomJmMoWCx0KSYmIWMoSix0KSkmJighKG58fCFjKHRoaXMsdCl8fCFjKFgsdCl8fGModGhpcyxNKSYmdGhpc1tNXVt0XSl8fG4pfSx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPWgoZSkscj1nKHQsITApO2lmKG4hPT16fHwhYyhYLHIpfHxjKEoscikpe3ZhciBvPUIobixyKTtyZXR1cm4hb3x8IWMoWCxyKXx8YyhuLE0pJiZuW01dW3JdfHwoby5lbnVtZXJhYmxlPSEwKSxvfX0sY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9SyhoKGUpKSxuPVtdO3JldHVybiBxKHQsZnVuY3Rpb24oZSl7YyhYLGUpfHxjKEMsZSl8fG4ucHVzaChlKX0pLG59LGxlPWZ1bmN0aW9uKGUpe3ZhciB0PWU9PT16LG49Syh0P0o6aChlKSkscj1bXTtyZXR1cm4gcShuLGZ1bmN0aW9uKGUpeyFjKFgsZSl8fHQmJiFjKHosZSl8fHIucHVzaChYW2VdKX0pLHJ9O3N8fChUKChXPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFcpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTt2YXIgZT1hcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0%2FU3RyaW5nKGFyZ3VtZW50c1swXSk6dm9pZCAwLHQ9QShlKSxuPWZ1bmN0aW9uKGUpe3RoaXM9PT16JiZuLmNhbGwoSixlKSxjKHRoaXMsTSkmJmModGhpc1tNXSx0KSYmKHRoaXNbTV1bdF09ITEpLG5lKHRoaXMsdCx2KDEsZSkpfTtyZXR1cm4gYSYmdGUmJm5lKHosdCx7Y29uZmlndXJhYmxlOiEwLHNldDpufSkscmUodCxlKX0pLnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcykudGFnfSksTy5mPXNlLFMuZj1pZSxrLmY9dWUsYi5mPXguZj1jZSx3LmY9bGUsYSYmKFYoVy5wcm90b3R5cGUsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBIKHRoaXMpLmRlc2NyaXB0aW9ufX0pLGl8fFQoeiwicHJvcGVydHlJc0VudW1lcmFibGUiLHNlLHt1bnNhZmU6ITB9KSksTi5mPWZ1bmN0aW9uKGUpe3JldHVybiByZShQKGUpLGUpfSkscih7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOiFzLHNoYW06IXN9LHtTeW1ib2w6V30pLHEobShaKSxmdW5jdGlvbihlKXtEKGUpfSkscih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Zm9yOmZ1bmN0aW9uKGUpe3ZhciB0PVN0cmluZyhlKTtpZihjKFksdCkpcmV0dXJuIFlbdF07dmFyIG49Vyh0KTtyZXR1cm4gWVt0XT1uLFFbbl09dCxufSxrZXlGb3I6ZnVuY3Rpb24oZSl7aWYoIW9lKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGEgc3ltYm9sIik7aWYoYyhRLGUpKXJldHVybiBRW2VdfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXt0ZT0hMH0sdXNlU2ltcGxlOmZ1bmN0aW9uKCl7dGU9ITF9fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzLHNoYW06IWF9LHtjcmVhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD95KGUpOmFlKHkoZSksdCl9LGRlZmluZVByb3BlcnR5OmllLGRlZmluZVByb3BlcnRpZXM6YWUsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOnVlfSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Z2V0T3duUHJvcGVydHlOYW1lczpjZSxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6bGV9KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6dShmdW5jdGlvbigpe3cuZigxKX0pfSx7Z2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKGUpe3JldHVybiB3LmYoZChlKSl9fSksVSYmcih7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGZvcmNlZDohc3x8dShmdW5jdGlvbigpe3ZhciBlPVcoKTtyZXR1cm4iW251bGxdIiE9JChbZV0pfHwie30iIT0kKHthOmV9KXx8Int9IiE9JChPYmplY3QoZSkpfSl9LHtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scj1bZV0sbz0xO2FyZ3VtZW50cy5sZW5ndGg%2Bbzspci5wdXNoKGFyZ3VtZW50c1tvKytdKTtpZihuPXQ9clsxXSwoZih0KXx8dm9pZCAwIT09ZSkmJiFvZShlKSlyZXR1cm4gbCh0KXx8KHQ9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHQ9bi5jYWxsKHRoaXMsZSx0KSksIW9lKHQpKXJldHVybiB0fSksclsxXT10LCQuYXBwbHkoVSxyKX19KSxXLnByb3RvdHlwZVtfXXx8aihXLnByb3RvdHlwZSxfLFcucHJvdG90eXBlLnZhbHVlT2YpLFIoVywiU3ltYm9sIiksQ1tNXT0hMH0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTEpLG89big4NSkuZixpPXt9LnRvU3RyaW5nLGE9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM%2FT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gYSYmIltvYmplY3QgV2luZG93XSI9PWkuY2FsbChlKT9mdW5jdGlvbihlKXt0cnl7cmV0dXJuIG8oZSl9Y2F0Y2goZSl7cmV0dXJuIGEuc2xpY2UoKX19KGUpOm8ocihlKSl9fSxmdW5jdGlvbihlLHQsbil7bigyKSgiYXN5bmNJdGVyYXRvciIpfSxmdW5jdGlvbihlLHQpe30sZnVuY3Rpb24oZSx0LG4pe24oMikoImhhc0luc3RhbmNlIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDIpKCJpc0NvbmNhdFNwcmVhZGFibGUiKX0sZnVuY3Rpb24oZSx0LG4pe24oMikoIm1hdGNoIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDIpKCJtYXRjaEFsbCIpfSxmdW5jdGlvbihlLHQsbil7bigyKSgicmVwbGFjZSIpfSxmdW5jdGlvbihlLHQsbil7bigyKSgic2VhcmNoIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDIpKCJzcGVjaWVzIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDIpKCJzcGxpdCIpfSxmdW5jdGlvbihlLHQsbil7bigyKSgidG9QcmltaXRpdmUiKX0sZnVuY3Rpb24oZSx0LG4pe24oMikoInRvU3RyaW5nVGFnIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDIpKCJ1bnNjb3BhYmxlcyIpfSxmdW5jdGlvbihlLHQsbil7bigyMSkoTWF0aCwiTWF0aCIsITApfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzKTtuKDIxKShyLkpTT04sIkpTT04iLCEwKX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDE1Mil9LGZ1bmN0aW9uKGUsdCxuKXtuKDI3KSxuKDE1Myk7dmFyIHI9bigxKTtlLmV4cG9ydHM9ci5BcnJheS5mcm9tfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigwKSxvPW4oMTU0KTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDohbig5MSkoZnVuY3Rpb24oZSl7QXJyYXkuZnJvbShlKX0pfSx7ZnJvbTpvfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMyksbz1uKDE0KSxpPW4oODkpLGE9big5MCkscz1uKDE5KSx1PW4oNjEpLGM9big0Mik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbCxmLHA9byhlKSxkPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXksaD1hcmd1bWVudHMubGVuZ3RoLGc9aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdj12b2lkIDAhPT1nLHk9MCxtPWMocCk7aWYodiYmKGc9cihnLGg%2BMj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT1tfHxkPT1BcnJheSYmYShtKSlmb3Iobj1uZXcgZCh0PXMocC5sZW5ndGgpKTt0Pnk7eSsrKXUobix5LHY%2FZyhwW3ldLHkpOnBbeV0pO2Vsc2UgZm9yKGY9bS5jYWxsKHApLG49bmV3IGQ7IShsPWYubmV4dCgpKS5kb25lO3krKyl1KG4seSx2P2koZixnLFtsLnZhbHVlLHldLCEwKTpsLnZhbHVlKTtyZXR1cm4gbi5sZW5ndGg9eSxufX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDE1Nil9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE1Nyksbz1BcnJheS5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2xpY2U7cmV0dXJuIGU9PT1vfHxlIGluc3RhbmNlb2YgQXJyYXkmJnQ9PT1vLnNsaWNlP3I6dH19LGZ1bmN0aW9uKGUsdCxuKXtuKDE1OCk7dmFyIHI9bigyOSk7ZS5leHBvcnRzPXIoIkFycmF5Iikuc2xpY2V9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigwKSxvPW4oNiksaT1uKDI4KSxhPW4oNzgpLHM9bigxOSksdT1uKDExKSxjPW4oNjEpLGw9big4MyksZj1uKDQpKCJzcGVjaWVzIikscD1bXS5zbGljZSxkPU1hdGgubWF4O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohbCgic2xpY2UiKX0se3NsaWNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixsLGg9dSh0aGlzKSxnPXMoaC5sZW5ndGgpLHY9YShlLGcpLHk9YSh2b2lkIDA9PT10P2c6dCxnKTtpZihpKGgpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49aC5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIWkobi5wcm90b3R5cGUpP28obikmJm51bGw9PT0obj1uW2ZdKSYmKG49dm9pZCAwKTpuPXZvaWQgMCxuPT09QXJyYXl8fHZvaWQgMD09PW4pKXJldHVybiBwLmNhbGwoaCx2LHkpO2ZvcihyPW5ldyh2b2lkIDA9PT1uP0FycmF5Om4pKGQoeS12LDApKSxsPTA7djx5O3YrKyxsKyspdiBpbiBoJiZjKHIsbCxoW3ZdKTtyZXR1cm4gci5sZW5ndGg9bCxyfX0pfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTYwKX0sZnVuY3Rpb24oZSx0LG4pe24oMTYxKTt2YXIgcj1uKDEpO2UuZXhwb3J0cz1yLlJlZmxlY3QuY29uc3RydWN0fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigwKSxvPW4oMjApLGk9bigxMyksYT1uKDcpLHM9big2KSx1PW4oMjUpLGM9big5MiksbD1uKDUpLGY9bygiUmVmbGVjdCIsImNvbnN0cnVjdCIpLHA9bChmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIShmKGZ1bmN0aW9uKCl7fSxbXSxlKWluc3RhbmNlb2YgZSl9KSxkPSFsKGZ1bmN0aW9uKCl7ZihmdW5jdGlvbigpe30pfSksaD1wfHxkO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6aCxzaGFtOmh9LHtjb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0KXtpKGUpLGEodCk7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP2U6aShhcmd1bWVudHNbMl0pO2lmKGQmJiFwKXJldHVybiBmKGUsdCxuKTtpZihlPT1uKXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZSh0WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdKX12YXIgcj1bbnVsbF07cmV0dXJuIHIucHVzaC5hcHBseShyLHQpLG5ldyhjLmFwcGx5KGUscikpfXZhciBvPW4ucHJvdG90eXBlLGw9dShzKG8pP286T2JqZWN0LnByb3RvdHlwZSksaD1GdW5jdGlvbi5hcHBseS5jYWxsKGUsbCx0KTtyZXR1cm4gcyhoKT9oOmx9fSl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxNjMpfSxmdW5jdGlvbihlLHQsbil7bigxNjQpO3ZhciByPW4oMSk7ZS5leHBvcnRzPXIuT2JqZWN0LmFzc2lnbn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMCksbz1uKDE2NSk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5hc3NpZ24hPT1vfSx7YXNzaWduOm99KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgpLG89big1KSxpPW4oNDEpLGE9big4Nikscz1uKDU3KSx1PW4oMTQpLGM9big1NCksbD1PYmplY3QuYXNzaWduO2UuZXhwb3J0cz0hbHx8byhmdW5jdGlvbigpe3ZhciBlPXt9LHQ9e30sbj1TeW1ib2woKTtyZXR1cm4gZVtuXT03LCJhYmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1lfSksNyE9bCh7fSxlKVtuXXx8ImFiY2RlZmdoaWprbG1ub3BxcnN0IiE9aShsKHt9LHQpKS5qb2luKCIiKX0pP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXUoZSksbz1hcmd1bWVudHMubGVuZ3RoLGw9MSxmPWEuZixwPXMuZjtvPmw7KWZvcih2YXIgZCxoPWMoYXJndW1lbnRzW2wrK10pLGc9Zj9pKGgpLmNvbmNhdChmKGgpKTppKGgpLHY9Zy5sZW5ndGgseT0wO3Y%2BeTspZD1nW3krK10sciYmIXAuY2FsbChoLGQpfHwobltkXT1oW2RdKTtyZXR1cm4gbn06bH0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDE2Nyl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxNjgpfSxmdW5jdGlvbihlLHQsbil7bigxNjkpO3ZhciByPW4oMSkuT2JqZWN0LG89ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5kZWZpbmVQcm9wZXJ0eShlLHQsbil9O3IuZGVmaW5lUHJvcGVydHkuc2hhbSYmKG8uc2hhbT0hMCl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDApLG89big4KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IW8sc2hhbTohb30se2RlZmluZVByb3BlcnR5Om4oMTIpLmZ9KX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDE3MSl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxNzIpfSxmdW5jdGlvbihlLHQsbil7bigxNzMpO3ZhciByPW4oMSkuT2JqZWN0LG89ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCl9O3IuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0mJihvLnNoYW09ITApfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigwKSxvPW4oNSksaT1uKDExKSxhPW4oMjIpLmYscz1uKDgpLHU9byhmdW5jdGlvbigpe2EoMSl9KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXN8fHUsc2hhbTohc30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbihlLHQpe3JldHVybiBhKGkoZSksdCl9fSl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxNzUpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTc2KX0sZnVuY3Rpb24oZSx0LG4pe24oMTc3KTt2YXIgcj1uKDEpO2UuZXhwb3J0cz1yLlJlZmxlY3QuZ2V0fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigwKSxvPW4oNiksaT1uKDcpLGE9bigxMCkscz1uKDIyKSx1PW4oMjQpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldDpmdW5jdGlvbiBlKHQsbil7dmFyIHIsYyxsPWFyZ3VtZW50cy5sZW5ndGg8Mz90OmFyZ3VtZW50c1syXTtyZXR1cm4gaSh0KT09PWw%2FdFtuXToocj1zLmYodCxuKSk%2FYShyLCJ2YWx1ZSIpP3IudmFsdWU6dm9pZCAwPT09ci5nZXQ%2Fdm9pZCAwOnIuZ2V0LmNhbGwobCk6byhjPXUodCkpP2UoYyxuLGwpOnZvaWQgMH19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzEpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9cihlKSk7KTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxODApfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTgxKX0sZnVuY3Rpb24oZSx0LG4pe24oMTgyKTt2YXIgcj1uKDEpO2UuZXhwb3J0cz1yLk9iamVjdC5nZXRQcm90b3R5cGVPZn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMCksbz1uKDUpLGk9bigxNCksYT1uKDI0KSxzPW4oNzQpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKGZ1bmN0aW9uKCl7YSgxKX0pLHNoYW06IXN9LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gYShpKGUpKX19KX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDE4NCl9LGZ1bmN0aW9uKGUsdCxuKXtuKDE4NSk7dmFyIHI9bigxKTtlLmV4cG9ydHM9ci5PYmplY3Quc2V0UHJvdG90eXBlT2Z9LGZ1bmN0aW9uKGUsdCxuKXtuKDApKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOm4oNjApfSl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxODcpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTg4KX0sZnVuY3Rpb24oZSx0LG4pe24oMTg5KTt2YXIgcj1uKDEpLk9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5jcmVhdGUoZSx0KX19LGZ1bmN0aW9uKGUsdCxuKXtuKDApKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFuKDgpfSx7Y3JlYXRlOm4oMjUpfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDkzKTtmdW5jdGlvbiBvKHQsbil7cmV0dXJuIGUuZXhwb3J0cz1vPXJ8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sbyh0LG4pfWUuZXhwb3J0cz1vfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxOTIpLG89bigxOTUpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUuZXhwb3J0cz1pPSJmdW5jdGlvbiI9PXR5cGVvZiBvJiYic3ltYm9sIj09dHlwZW9mIHI%2FZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIG8mJmUuY29uc3RydWN0b3I9PT1vJiZlIT09by5wcm90b3R5cGU%2FInN5bWJvbCI6dHlwZW9mIGV9LGkodCl9ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxOTMpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMTk0KX0sZnVuY3Rpb24oZSx0LG4pe24oODgpLG4oMjcpLG4oMzQpO3ZhciByPW4oNjIpO2UuZXhwb3J0cz1yLmYoIml0ZXJhdG9yIil9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxOTYpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oODEpLG4oMTk3KSxuKDE5OCksbigxOTkpLG4oMjAwKSxuKDIwMSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDIpKCJhc3luY0Rpc3Bvc2UiKX0sZnVuY3Rpb24oZSx0LG4pe24oMikoImRpc3Bvc2UiKX0sZnVuY3Rpb24oZSx0LG4pe24oMikoIm9ic2VydmFibGUiKX0sZnVuY3Rpb24oZSx0LG4pe24oMikoInBhdHRlcm5NYXRjaCIpfSxmdW5jdGlvbihlLHQsbil7bigyKSgicmVwbGFjZUFsbCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMjA0KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjA1KSxvPVN0cmluZy5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUudHJpbTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fGU9PT1vfHxlIGluc3RhbmNlb2YgU3RyaW5nJiZ0PT09by50cmltP3I6dH19LGZ1bmN0aW9uKGUsdCxuKXtuKDIwNik7dmFyIHI9bigyOSk7ZS5leHBvcnRzPXIoIlN0cmluZyIpLnRyaW19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigwKSxvPW4oOTQpLnRyaW07cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDIwNykoInRyaW0iKX0se3RyaW06ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNSksbz1uKDYzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZnVuY3Rpb24oKXtyZXR1cm4hIW9bZV0oKXx8IuKAi8KF4aCOIiE9IuKAi8KF4aCOIltlXSgpfHxvW2VdLm5hbWUhPT1lfSl9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMjA5KX0sZnVuY3Rpb24oZSx0LG4pe24oMjEwKTt2YXIgcj1uKDEpO2UuZXhwb3J0cz1yLnBhcnNlSW50fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigwKSxvPW4oMjExKTtyKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlSW50IT1vfSx7cGFyc2VJbnQ6b30pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzKSxvPW4oOTQpLnRyaW0saT1uKDYzKSxhPXIucGFyc2VJbnQscz0vXlsrLV0%2FMFtYeF0vLHU9OCE9PWEoaSsiMDgiKXx8MjIhPT1hKGkrIjB4MTYiKTtlLmV4cG9ydHM9dT9mdW5jdGlvbihlLHQpe3ZhciBuPW8oU3RyaW5nKGUpKTtyZXR1cm4gYShuLHQ%2BPj4wfHwocy50ZXN0KG4pPzE2OjEwKSl9OmF9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigyMTMpfSxmdW5jdGlvbihlLHQsbil7bigyMTQpO3ZhciByPW4oMSk7ZS5leHBvcnRzPXIuT2JqZWN0LmtleXN9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDApLG89bigxNCksaT1uKDQxKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6big1KShmdW5jdGlvbigpe2koMSl9KX0se2tleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGkobyhlKSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigyMTYpfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPXIuSlNPTnx8KHIuSlNPTj17c3RyaW5naWZ5OkpTT04uc3RyaW5naWZ5fSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvLnN0cmluZ2lmeS5hcHBseShvLGFyZ3VtZW50cyl9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMjE4KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjE5KSxvPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mO3JldHVybiBlPT09b3x8ZSBpbnN0YW5jZW9mIEFycmF5JiZ0PT09by5pbmRleE9mP3I6dH19LGZ1bmN0aW9uKGUsdCxuKXtuKDIyMCk7dmFyIHI9bigyOSk7ZS5leHBvcnRzPXIoIkFycmF5IikuaW5kZXhPZn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDApLG89big3NykuaW5kZXhPZixpPW4oMjIxKSxhPVtdLmluZGV4T2Yscz0hIWEmJjEvWzFdLmluZGV4T2YoMSwtMCk8MCx1PWkoImluZGV4T2YiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6c3x8dX0se2luZGV4T2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIHM%2FYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA6byh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49W11bZV07cmV0dXJuIW58fCFyKGZ1bmN0aW9uKCl7bi5jYWxsKG51bGwsdHx8ZnVuY3Rpb24oKXt0aHJvdyAxfSwxKX0pfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDIyMyl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDIyNCksbz1BcnJheS5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZmluZDtyZXR1cm4gZT09PW98fGUgaW5zdGFuY2VvZiBBcnJheSYmdD09PW8uZmluZD9yOnR9fSxmdW5jdGlvbihlLHQsbil7bigyMjUpO3ZhciByPW4oMjkpO2UuZXhwb3J0cz1yKCJBcnJheSIpLmZpbmR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigwKSxvPW4oODcpLmZpbmQsaT1uKDY5KSxhPSEwOyJmaW5kImluW10mJkFycmF5KDEpLmZpbmQoZnVuY3Rpb24oKXthPSExfSkscih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmF9LHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiBvKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE%2FYXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaSgiZmluZCIpfSxmdW5jdGlvbihlLHQsbil7big5NSksZS5leHBvcnRzPW4oMSkuc2V0VGltZW91dH0sZnVuY3Rpb24oZSx0LG4pe24oOTUpLGUuZXhwb3J0cz1uKDEpLnNldEludGVydmFsfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0LG49T2JqZWN0LnByb3RvdHlwZSxyPW4uaGFzT3duUHJvcGVydHksbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPW8uaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixhPW8uYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIscz1vLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gdShlLHQsbil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxlW3RdfXRyeXt1KHt9LCIiKX1jYXRjaChlKXt1PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1ufX1mdW5jdGlvbiBjKGUsdCxuLHIpe3ZhciBvPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2Ygdj90OnYsaT1PYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSxhPW5ldyBMKHJ8fFtdKTtyZXR1cm4gaS5faW52b2tlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mO3JldHVybiBmdW5jdGlvbihvLGkpe2lmKHI9PT1kKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKHI9PT1oKXtpZigidGhyb3ciPT09byl0aHJvdyBpO3JldHVybiBBKCl9Zm9yKG4ubWV0aG9kPW8sbi5hcmc9aTs7KXt2YXIgYT1uLmRlbGVnYXRlO2lmKGEpe3ZhciBzPWooYSxuKTtpZihzKXtpZihzPT09Zyljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZigidGhyb3ciPT09bi5tZXRob2Qpe2lmKHI9PT1mKXRocm93IHI9aCxuLmFyZztuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5hYnJ1cHQoInJldHVybiIsbi5hcmcpO3I9ZDt2YXIgdT1sKGUsdCxuKTtpZigibm9ybWFsIj09PXUudHlwZSl7aWYocj1uLmRvbmU%2FaDpwLHUuYXJnPT09Zyljb250aW51ZTtyZXR1cm57dmFsdWU6dS5hcmcsZG9uZTpuLmRvbmV9fSJ0aHJvdyI9PT11LnR5cGUmJihyPWgsbi5tZXRob2Q9InRocm93IixuLmFyZz11LmFyZyl9fX0oZSxuLGEpLGl9ZnVuY3Rpb24gbChlLHQsbil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzplLmNhbGwodCxuKX19Y2F0Y2goZSl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6ZX19fWUud3JhcD1jO3ZhciBmPSJzdXNwZW5kZWRTdGFydCIscD0ic3VzcGVuZGVkWWllbGQiLGQ9ImV4ZWN1dGluZyIsaD0iY29tcGxldGVkIixnPXt9O2Z1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geSgpe31mdW5jdGlvbiBtKCl7fXZhciBiPXt9O2JbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dmFyIHg9T2JqZWN0LmdldFByb3RvdHlwZU9mLHc9eCYmeCh4KEMoW10pKSk7dyYmdyE9PW4mJnIuY2FsbCh3LGkpJiYoYj13KTt2YXIgaz1tLnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpO2Z1bmN0aW9uIFMoZSl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3UoZSx0LGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UodCxlKX0pfSl9ZnVuY3Rpb24gTyhlLHQpe3ZhciBuO3RoaXMuX2ludm9rZT1mdW5jdGlvbihvLGkpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gbmV3IHQoZnVuY3Rpb24obixhKXshZnVuY3Rpb24gbihvLGksYSxzKXt2YXIgdT1sKGVbb10sZSxpKTtpZigidGhyb3ciIT09dS50eXBlKXt2YXIgYz11LmFyZyxmPWMudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT10eXBlb2YgZiYmci5jYWxsKGYsIl9fYXdhaXQiKT90LnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKGUpe24oIm5leHQiLGUsYSxzKX0sZnVuY3Rpb24oZSl7bigidGhyb3ciLGUsYSxzKX0pOnQucmVzb2x2ZShmKS50aGVuKGZ1bmN0aW9uKGUpe2MudmFsdWU9ZSxhKGMpfSxmdW5jdGlvbihlKXtyZXR1cm4gbigidGhyb3ciLGUsYSxzKX0pfXModS5hcmcpfShvLGksbixhKX0pfXJldHVybiBuPW4%2Fbi50aGVuKGEsYSk6YSgpfX1mdW5jdGlvbiBqKGUsbil7dmFyIHI9ZS5pdGVyYXRvcltuLm1ldGhvZF07aWYocj09PXQpe2lmKG4uZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09bi5tZXRob2Qpe2lmKGUuaXRlcmF0b3IucmV0dXJuJiYobi5tZXRob2Q9InJldHVybiIsbi5hcmc9dCxqKGUsbiksInRocm93Ij09PW4ubWV0aG9kKSlyZXR1cm4gZztuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2QiKX1yZXR1cm4gZ312YXIgbz1sKHIsZS5pdGVyYXRvcixuLmFyZyk7aWYoInRocm93Ij09PW8udHlwZSlyZXR1cm4gbi5tZXRob2Q9InRocm93IixuLmFyZz1vLmFyZyxuLmRlbGVnYXRlPW51bGwsZzt2YXIgaT1vLmFyZztyZXR1cm4gaT9pLmRvbmU%2FKG5bZS5yZXN1bHROYW1lXT1pLnZhbHVlLG4ubmV4dD1lLm5leHRMb2MsInJldHVybiIhPT1uLm1ldGhvZCYmKG4ubWV0aG9kPSJuZXh0IixuLmFyZz10KSxuLmRlbGVnYXRlPW51bGwsZyk6aToobi5tZXRob2Q9InRocm93IixuLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLG4uZGVsZWdhdGU9bnVsbCxnKX1mdW5jdGlvbiBUKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEwoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChULHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIEMoZSl7aWYoZSl7dmFyIG49ZVtpXTtpZihuKXJldHVybiBuLmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgbz0tMSxhPWZ1bmN0aW9uIG4oKXtmb3IoOysrbzxlLmxlbmd0aDspaWYoci5jYWxsKGUsbykpcmV0dXJuIG4udmFsdWU9ZVtvXSxuLmRvbmU9ITEsbjtyZXR1cm4gbi52YWx1ZT10LG4uZG9uZT0hMCxufTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OkF9fWZ1bmN0aW9uIEEoKXtyZXR1cm57dmFsdWU6dCxkb25lOiEwfX1yZXR1cm4geS5wcm90b3R5cGU9ay5jb25zdHJ1Y3Rvcj1tLG0uY29uc3RydWN0b3I9eSx5LmRpc3BsYXlOYW1lPXUobSxzLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09eXx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y%2FT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsbSk6KGUuX19wcm90b19fPW0sdShlLHMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoayksZX0sZS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sUyhPLnByb3RvdHlwZSksTy5wcm90b3R5cGVbYV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5Bc3luY0l0ZXJhdG9yPU8sZS5hc3luYz1mdW5jdGlvbih0LG4scixvLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBhPW5ldyBPKGModCxuLHIsbyksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihuKT9hOmEubmV4dCgpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOmEubmV4dCgpfSl9LFMoayksdShrLHMsIkdlbmVyYXRvciIpLGtbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30say50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSxlLmtleXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKG4pO3JldHVybiB0LnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciByPXQucG9wKCk7aWYociBpbiBlKXJldHVybiBuLnZhbHVlPXIsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sZS52YWx1ZXM9QyxMLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TCxyZXNldDpmdW5jdGlvbihlKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD10LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXQsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goRSksIWUpZm9yKHZhciBuIGluIHRoaXMpInQiPT09bi5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLG4pJiYhaXNOYU4oK24uc2xpY2UoMSkpJiYodGhpc1tuXT10KX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgZT10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZG9uZSl0aHJvdyBlO3ZhciBuPXRoaXM7ZnVuY3Rpb24gbyhyLG8pe3JldHVybiBzLnR5cGU9InRocm93IixzLmFyZz1lLG4ubmV4dD1yLG8mJihuLm1ldGhvZD0ibmV4dCIsbi5hcmc9dCksISFvfWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxzPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbygiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHU9ci5jYWxsKGEsImNhdGNoTG9jIiksYz1yLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHUmJmMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHUpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIG89dGhpcy50cnlFbnRyaWVzW25dO2lmKG8udHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChvLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgYT1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gYS50eXBlPWUsYS5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxnKTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU%2FKHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGd9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q%2BPTA7LS10KXt2YXIgbj10aGlzLnRyeUVudHJpZXNbdF07aWYobi5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShuLmNvbXBsZXRpb24sbi5hZnRlckxvYyksRShuKSxnfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIG49dGhpcy50cnlFbnRyaWVzW3RdO2lmKG4udHJ5TG9jPT09ZSl7dmFyIHI9bi5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1yLnR5cGUpe3ZhciBvPXIuYXJnO0Uobil9cmV0dXJuIG99fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpDKGUpLHJlc3VsdE5hbWU6bixuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dCksZ319LGV9KGUuZXhwb3J0cyk7dHJ5e3JlZ2VuZXJhdG9yUnVudGltZT1yfWNhdGNoKGUpe0Z1bmN0aW9uKCJyIiwicmVnZW5lcmF0b3JSdW50aW1lID0gciIpKHIpfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDIzMCl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDIzMSksbz1GdW5jdGlvbi5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYmluZDtyZXR1cm4gZT09PW98fGUgaW5zdGFuY2VvZiBGdW5jdGlvbiYmdD09PW8uYmluZD9yOnR9fSxmdW5jdGlvbihlLHQsbil7bigyMzIpO3ZhciByPW4oMjkpO2UuZXhwb3J0cz1yKCJGdW5jdGlvbiIpLmJpbmR9LGZ1bmN0aW9uKGUsdCxuKXtuKDApKHt0YXJnZXQ6IkZ1bmN0aW9uIixwcm90bzohMH0se2JpbmQ6big5Mil9KX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDIzNCl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9big5NiksbigyNDIpLG4oMjQzKSxuKDI0NCksbigyNDUpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saSxhLHM9bigwKSx1PW4oMTgpLGM9bigzKSxsPW4oMSksZj1uKDk3KSxwPW4oMjYpLGQ9bigyMzYpLGg9bigyMSksZz1uKDIzNyksdj1uKDYpLHk9bigxMyksbT1uKDIzOCksYj1uKDE1KSx4PW4oNDMpLHc9big5MSksaz1uKDk4KSxTPW4oOTkpLnNldCxPPW4oMjM5KSxqPW4oMTAwKSxUPW4oMjQwKSxFPW4oMzApLEw9big0NCksQz1uKDY0KSxBPW4oMzYpLFA9big3MiksTj1uKDQpKCJzcGVjaWVzIiksRD0iUHJvbWlzZSIsUj1BLmdldCxJPUEuc2V0LHE9QS5nZXR0ZXJGb3IoRCksTT1mLF89Yy5UeXBlRXJyb3IsRj1jLmRvY3VtZW50LEg9Yy5wcm9jZXNzLHo9Yy5mZXRjaCxXPUgmJkgudmVyc2lvbnMsVT1XJiZXLnY4fHwiIiwkPUUuZixCPSQsVj0icHJvY2VzcyI9PWIoSCksSz0hIShGJiZGLmNyZWF0ZUV2ZW50JiZjLmRpc3BhdGNoRXZlbnQpLEc9UChELGZ1bmN0aW9uKCl7dmFyIGU9TS5yZXNvbHZlKDEpLHQ9ZnVuY3Rpb24oKXt9LG49KGUuY29uc3RydWN0b3I9e30pW05dPWZ1bmN0aW9uKGUpe2UodCx0KX07cmV0dXJuISgoVnx8ImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCkmJighdXx8ZS5maW5hbGx5KSYmZS50aGVuKHQpaW5zdGFuY2VvZiBuJiYwIT09VS5pbmRleE9mKCI2LjYiKSYmLTE9PT1DLmluZGV4T2YoIkNocm9tZS82NiIpKX0pLFg9R3x8IXcoZnVuY3Rpb24oZSl7TS5hbGwoZSkuY2F0Y2goZnVuY3Rpb24oKXt9KX0pLEo9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuISghdihlKXx8ImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS50aGVuKSkmJnR9LFk9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0Lm5vdGlmaWVkKXt0Lm5vdGlmaWVkPSEwO3ZhciByPXQucmVhY3Rpb25zO08oZnVuY3Rpb24oKXtmb3IodmFyIG89dC52YWx1ZSxpPTE9PXQuc3RhdGUsYT0wO3IubGVuZ3RoPmE7KXt2YXIgcyx1LGMsbD1yW2ErK10sZj1pP2wub2s6bC5mYWlsLHA9bC5yZXNvbHZlLGQ9bC5yZWplY3QsaD1sLmRvbWFpbjt0cnl7Zj8oaXx8KDI9PT10LnJlamVjdGlvbiYmdGUoZSx0KSx0LnJlamVjdGlvbj0xKSwhMD09PWY%2Fcz1vOihoJiZoLmVudGVyKCkscz1mKG8pLGgmJihoLmV4aXQoKSxjPSEwKSkscz09PWwucHJvbWlzZT9kKF8oIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KHU9SihzKSk%2FdS5jYWxsKHMscCxkKTpwKHMpKTpkKG8pfWNhdGNoKGUpe2gmJiFjJiZoLmV4aXQoKSxkKGUpfX10LnJlYWN0aW9ucz1bXSx0Lm5vdGlmaWVkPSExLG4mJiF0LnJlamVjdGlvbiYmWihlLHQpfSl9fSxRPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvO0s%2FKChyPUYuY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9dCxyLnJlYXNvbj1uLHIuaW5pdEV2ZW50KGUsITEsITApLGMuZGlzcGF0Y2hFdmVudChyKSk6cj17cHJvbWlzZTp0LHJlYXNvbjpufSwobz1jWyJvbiIrZV0pP28ocik6InVuaGFuZGxlZHJlamVjdGlvbiI9PT1lJiZUKCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iLG4pfSxaPWZ1bmN0aW9uKGUsdCl7Uy5jYWxsKGMsZnVuY3Rpb24oKXt2YXIgbixyPXQudmFsdWU7aWYoZWUodCkmJihuPUwoZnVuY3Rpb24oKXtWP0guZW1pdCgidW5oYW5kbGVkUmVqZWN0aW9uIixyLGUpOlEoInVuaGFuZGxlZHJlamVjdGlvbiIsZSxyKX0pLHQucmVqZWN0aW9uPVZ8fGVlKHQpPzI6MSxuLmVycm9yKSl0aHJvdyBuLnZhbHVlfSl9LGVlPWZ1bmN0aW9uKGUpe3JldHVybiAxIT09ZS5yZWplY3Rpb24mJiFlLnBhcmVudH0sdGU9ZnVuY3Rpb24oZSx0KXtTLmNhbGwoYyxmdW5jdGlvbigpe1Y%2FSC5lbWl0KCJyZWplY3Rpb25IYW5kbGVkIixlKTpRKCJyZWplY3Rpb25oYW5kbGVkIixlLHQudmFsdWUpfSl9LG5lPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBmdW5jdGlvbihvKXtlKHQsbixvLHIpfX0scmU9ZnVuY3Rpb24oZSx0LG4scil7dC5kb25lfHwodC5kb25lPSEwLHImJih0PXIpLHQudmFsdWU9bix0LnN0YXRlPTIsWShlLHQsITApKX0sb2U9ZnVuY3Rpb24oZSx0LG4scil7aWYoIXQuZG9uZSl7dC5kb25lPSEwLHImJih0PXIpO3RyeXtpZihlPT09bil0aHJvdyBfKCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpO3ZhciBvPUoobik7bz9PKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXtvLmNhbGwobixuZShvZSxlLHIsdCksbmUocmUsZSxyLHQpKX1jYXRjaChuKXtyZShlLHIsbix0KX19KToodC52YWx1ZT1uLHQuc3RhdGU9MSxZKGUsdCwhMSkpfWNhdGNoKG4pe3JlKGUse2RvbmU6ITF9LG4sdCl9fX07RyYmKE09ZnVuY3Rpb24oZSl7bSh0aGlzLE0sRCkseShlKSxyLmNhbGwodGhpcyk7dmFyIHQ9Uih0aGlzKTt0cnl7ZShuZShvZSx0aGlzLHQpLG5lKHJlLHRoaXMsdCkpfWNhdGNoKGUpe3JlKHRoaXMsdCxlKX19LChyPWZ1bmN0aW9uKGUpe0kodGhpcyx7dHlwZTpELGRvbmU6ITEsbm90aWZpZWQ6ITEscGFyZW50OiExLHJlYWN0aW9uczpbXSxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTp2b2lkIDB9KX0pLnByb3RvdHlwZT1kKE0ucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49cSh0aGlzKSxyPSQoayh0aGlzLE0pKTtyZXR1cm4gci5vaz0iZnVuY3Rpb24iIT10eXBlb2YgZXx8ZSxyLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQsci5kb21haW49Vj9ILmRvbWFpbjp2b2lkIDAsbi5wYXJlbnQ9ITAsbi5yZWFjdGlvbnMucHVzaChyKSwwIT1uLnN0YXRlJiZZKHRoaXMsbiwhMSksci5wcm9taXNlfSxjYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCxlKX19KSxvPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHIsdD1SKGUpO3RoaXMucHJvbWlzZT1lLHRoaXMucmVzb2x2ZT1uZShvZSxlLHQpLHRoaXMucmVqZWN0PW5lKHJlLGUsdCl9LEUuZj0kPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09TXx8ZT09PWk%2FbmV3IG8oZSk6QihlKX0sdXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGZ8fChhPWYucHJvdG90eXBlLnRoZW4scChmLnByb3RvdHlwZSwidGhlbiIsZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgTShmdW5jdGlvbihlLHQpe2EuY2FsbChuLGUsdCl9KS50aGVuKGUsdCl9KSwiZnVuY3Rpb24iPT10eXBlb2YgeiYmcyh7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiEwfSx7ZmV0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGooTSx6LmFwcGx5KGMsYXJndW1lbnRzKSl9fSkpKSxzKHtnbG9iYWw6ITAsd3JhcDohMCxmb3JjZWQ6R30se1Byb21pc2U6TX0pLGgoTSxELCExLCEwKSxnKEQpLGk9bC5Qcm9taXNlLHMoe3RhcmdldDpELHN0YXQ6ITAsZm9yY2VkOkd9LHtyZWplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9JCh0aGlzKTtyZXR1cm4gdC5yZWplY3QuY2FsbCh2b2lkIDAsZSksdC5wcm9taXNlfX0pLHMoe3RhcmdldDpELHN0YXQ6ITAsZm9yY2VkOnV8fEd9LHtyZXNvbHZlOmZ1bmN0aW9uKGUpe3JldHVybiBqKHUmJnRoaXM9PT1pP006dGhpcyxlKX19KSxzKHt0YXJnZXQ6RCxzdGF0OiEwLGZvcmNlZDpYfSx7YWxsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj0kKHQpLHI9bi5yZXNvbHZlLG89bi5yZWplY3QsaT1MKGZ1bmN0aW9uKCl7dmFyIG49eSh0LnJlc29sdmUpLGk9W10sYT0wLHM9MTt4KGUsZnVuY3Rpb24oZSl7dmFyIHU9YSsrLGM9ITE7aS5wdXNoKHZvaWQgMCkscysrLG4uY2FsbCh0LGUpLnRoZW4oZnVuY3Rpb24oZSl7Y3x8KGM9ITAsaVt1XT1lLC0tc3x8cihpKSl9LG8pfSksLS1zfHxyKGkpfSk7cmV0dXJuIGkuZXJyb3ImJm8oaS52YWx1ZSksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj0kKHQpLHI9bi5yZWplY3Qsbz1MKGZ1bmN0aW9uKCl7dmFyIG89eSh0LnJlc29sdmUpO3goZSxmdW5jdGlvbihlKXtvLmNhbGwodCxlKS50aGVuKG4ucmVzb2x2ZSxyKX0pfSk7cmV0dXJuIG8uZXJyb3ImJnIoby52YWx1ZSksbi5wcm9taXNlfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIG8gaW4gdCluJiZuLnVuc2FmZSYmZVtvXT9lW29dPXRbb106cihlLG8sdFtvXSxuKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMCksbz1uKDEyKSxpPW4oNCksYT1uKDgpLHM9aSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yKGUpLG49by5mO2EmJnQmJiF0W3NdJiZuKHQscyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0ICIrKG4%2FbisiICI6IiIpKyJpbnZvY2F0aW9uIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpLGEscyx1LGMsbD1uKDMpLGY9bigyMikuZixwPW4oMTUpLGQ9big5OSkuc2V0LGg9big2NCksZz1sLk11dGF0aW9uT2JzZXJ2ZXJ8fGwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcix2PWwucHJvY2Vzcyx5PWwuUHJvbWlzZSxtPSJwcm9jZXNzIj09cCh2KSxiPWYobCwicXVldWVNaWNyb3Rhc2siKSx4PWImJmIudmFsdWU7eHx8KHI9ZnVuY3Rpb24oKXt2YXIgZSx0O2ZvcihtJiYoZT12LmRvbWFpbikmJmUuZXhpdCgpO287KXt0PW8uZm4sbz1vLm5leHQ7dHJ5e3QoKX1jYXRjaChlKXt0aHJvdyBvP2EoKTppPXZvaWQgMCxlfX1pPXZvaWQgMCxlJiZlLmVudGVyKCl9LG0%2FYT1mdW5jdGlvbigpe3YubmV4dFRpY2socil9OmcmJiEvKGlwaG9uZXxpcG9kfGlwYWQpLiphcHBsZXdlYmtpdC9pLnRlc3QoaCk%2FKHM9ITAsdT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIiksbmV3IGcocikub2JzZXJ2ZSh1LHtjaGFyYWN0ZXJEYXRhOiEwfSksYT1mdW5jdGlvbigpe3UuZGF0YT1zPSFzfSk6eSYmeS5yZXNvbHZlPyhjPXkucmVzb2x2ZSh2b2lkIDApLGE9ZnVuY3Rpb24oKXtjLnRoZW4ocil9KTphPWZ1bmN0aW9uKCl7ZC5jYWxsKGwscil9KSxlLmV4cG9ydHM9eHx8ZnVuY3Rpb24oZSl7dmFyIHQ9e2ZuOmUsbmV4dDp2b2lkIDB9O2kmJihpLm5leHQ9dCksb3x8KG89dCxhKCkpLGk9dH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXIuY29uc29sZTtuJiZuLmVycm9yJiYoMT09PWFyZ3VtZW50cy5sZW5ndGg%2Fbi5lcnJvcihlKTpuLmVycm9yKGUsdCkpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDApLG89bigxOCksaT1uKDk3KSxhPW4oMjApLHM9big5OCksdT1uKDEwMCksYz1uKDI2KTtyKHt0YXJnZXQ6IlByb21pc2UiLHByb3RvOiEwLHJlYWw6ITB9LHtmaW5hbGx5OmZ1bmN0aW9uKGUpe3ZhciB0PXModGhpcyxhKCJQcm9taXNlIikpLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU7cmV0dXJuIHRoaXMudGhlbihuP2Z1bmN0aW9uKG4pe3JldHVybiB1KHQsZSgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG59KX06ZSxuP2Z1bmN0aW9uKG4pe3JldHVybiB1KHQsZSgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgbn0pfTplKX19KSxvfHwiZnVuY3Rpb24iIT10eXBlb2YgaXx8aS5wcm90b3R5cGUuZmluYWxseXx8YyhpLnByb3RvdHlwZSwiZmluYWxseSIsYSgiUHJvbWlzZSIpLnByb3RvdHlwZS5maW5hbGx5KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMCksbz1uKDI0KSxpPW4oNjApLGE9bigyNSkscz1uKDE3KSx1PW4oNDMpLGM9big5KSxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZighKG4gaW5zdGFuY2VvZiBsKSlyZXR1cm4gbmV3IGwoZSx0KTtpJiYobj1pKG5ldyBFcnJvcih0KSxvKG4pKSk7dmFyIHI9W107cmV0dXJuIHUoZSxyLnB1c2gsciksYyhuLCJlcnJvcnMiLHIpLHZvaWQgMCE9PXQmJmMobiwibWVzc2FnZSIsU3RyaW5nKHQpKSxufTtsLnByb3RvdHlwZT1hKEVycm9yLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6cyg1LGwpLG5hbWU6cyg1LCJBZ2dyZWdhdGVFcnJvciIpfSkscih7Z2xvYmFsOiEwfSx7QWdncmVnYXRlRXJyb3I6bH0pfSxmdW5jdGlvbihlLHQsbil7bigxMDEpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMCksbz1uKDMwKSxpPW4oNDQpO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se3RyeTpmdW5jdGlvbihlKXt2YXIgdD1vLmYodGhpcyksbj1pKGUpO3JldHVybihuLmVycm9yP3QucmVqZWN0OnQucmVzb2x2ZSkobi52YWx1ZSksdC5wcm9taXNlfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMCksbz1uKDEzKSxpPW4oMjApLGE9bigzMCkscz1uKDQ0KSx1PW4oNDMpO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se2FueTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49YS5mKHQpLHI9bi5yZXNvbHZlLGM9bi5yZWplY3QsbD1zKGZ1bmN0aW9uKCl7dmFyIG49byh0LnJlc29sdmUpLGE9W10scz0wLGw9MSxmPSExO3UoZSxmdW5jdGlvbihlKXt2YXIgbz1zKyssdT0hMTthLnB1c2godm9pZCAwKSxsKyssbi5jYWxsKHQsZSkudGhlbihmdW5jdGlvbihlKXt1fHxmfHwoZj0hMCxyKGUpKX0sZnVuY3Rpb24oZSl7dXx8Znx8KHU9ITAsYVtvXT1lLC0tbHx8YyhuZXcoaSgiQWdncmVnYXRlRXJyb3IiKSkoYSwiTm8gb25lIHByb21pc2UgcmVzb2x2ZWQiKSkpfSl9KSwtLWx8fGMobmV3KGkoIkFnZ3JlZ2F0ZUVycm9yIikpKGEsIk5vIG9uZSBwcm9taXNlIHJlc29sdmVkIikpfSk7cmV0dXJuIGwuZXJyb3ImJmMobC52YWx1ZSksbi5wcm9taXNlfX0pfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oOTYpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0oKSxvPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH0obigyNDgpKSxpPXAobigyNDkpKSxhPXAobigyNTApKSxzPXAobigyNTEpKSx1PXAobigyNTIpKSxjPXAobigyNTMpKSxsPXAobigyNTQpKSxmPXAobigyNTUpKTtmdW5jdGlvbiBwKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU%2FZTp7ZGVmYXVsdDplfX12YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0%2FYXJndW1lbnRzWzFdOnt9OyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMudHlwZT0ibGFuZ3VhZ2VEZXRlY3RvciIsdGhpcy5kZXRlY3RvcnM9e30sdGhpcy5pbml0KHQsbil9cmV0dXJuIHIoZSxbe2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0%2FYXJndW1lbnRzWzFdOnt9LG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0%2FYXJndW1lbnRzWzJdOnt9O3RoaXMuc2VydmljZXM9ZSx0aGlzLm9wdGlvbnM9by5kZWZhdWx0cyh0LHRoaXMub3B0aW9uc3x8e30se29yZGVyOlsicXVlcnlzdHJpbmciLCJjb29raWUiLCJsb2NhbFN0b3JhZ2UiLCJuYXZpZ2F0b3IiLCJodG1sVGFnIl0sbG9va3VwUXVlcnlzdHJpbmc6ImxuZyIsbG9va3VwQ29va2llOiJpMThuZXh0Iixsb29rdXBMb2NhbFN0b3JhZ2U6ImkxOG5leHRMbmciLGNhY2hlczpbImxvY2FsU3RvcmFnZSJdLGV4Y2x1ZGVDYWNoZUZvcjpbImNpbW9kZSJdfSksdGhpcy5vcHRpb25zLmxvb2t1cEZyb21VcmxJbmRleCYmKHRoaXMub3B0aW9ucy5sb29rdXBGcm9tUGF0aEluZGV4PXRoaXMub3B0aW9ucy5sb29rdXBGcm9tVXJsSW5kZXgpLHRoaXMuaTE4bk9wdGlvbnM9bix0aGlzLmFkZERldGVjdG9yKGkuZGVmYXVsdCksdGhpcy5hZGREZXRlY3RvcihhLmRlZmF1bHQpLHRoaXMuYWRkRGV0ZWN0b3Iocy5kZWZhdWx0KSx0aGlzLmFkZERldGVjdG9yKHUuZGVmYXVsdCksdGhpcy5hZGREZXRlY3RvcihjLmRlZmF1bHQpLHRoaXMuYWRkRGV0ZWN0b3IobC5kZWZhdWx0KSx0aGlzLmFkZERldGVjdG9yKGYuZGVmYXVsdCl9fSx7a2V5OiJhZGREZXRlY3RvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5kZXRlY3RvcnNbZS5uYW1lXT1lfX0se2tleToiZGV0ZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2V8fChlPXRoaXMub3B0aW9ucy5vcmRlcik7dmFyIG49W107ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKHQuZGV0ZWN0b3JzW2VdKXt2YXIgcj10LmRldGVjdG9yc1tlXS5sb29rdXAodC5vcHRpb25zKTtyJiYic3RyaW5nIj09dHlwZW9mIHImJihyPVtyXSksciYmKG49bi5jb25jYXQocikpfX0pO3ZhciByPXZvaWQgMDtpZihuLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIXIpe3ZhciBuPXQuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5mb3JtYXRMYW5ndWFnZUNvZGUoZSk7dC5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmlzV2hpdGVsaXN0ZWQobikmJihyPW4pfX0pLCFyKXt2YXIgbz10aGlzLmkxOG5PcHRpb25zLmZhbGxiYWNrTG5nOyJzdHJpbmciPT10eXBlb2YgbyYmKG89W29dKSxvfHwobz1bXSkscj0iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShvKT9vWzBdOm9bMF18fG8uZGVmYXVsdCYmby5kZWZhdWx0WzBdfXJldHVybiByfX0se2tleToiY2FjaGVVc2VyTGFuZ3VhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt0fHwodD10aGlzLm9wdGlvbnMuY2FjaGVzKSx0JiYodGhpcy5vcHRpb25zLmV4Y2x1ZGVDYWNoZUZvciYmdGhpcy5vcHRpb25zLmV4Y2x1ZGVDYWNoZUZvci5pbmRleE9mKGUpPi0xfHx0LmZvckVhY2goZnVuY3Rpb24odCl7bi5kZXRlY3RvcnNbdF0mJm4uZGV0ZWN0b3JzW3RdLmNhY2hlVXNlckxhbmd1YWdlKGUsbi5vcHRpb25zKX0pKX19XSksZX0oKTtkLnR5cGU9Imxhbmd1YWdlRGV0ZWN0b3IiLHQuZGVmYXVsdD1kfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHRzPWZ1bmN0aW9uKGUpe3JldHVybiBvLmNhbGwoaS5jYWxsKGFyZ3VtZW50cywxKSxmdW5jdGlvbih0KXtpZih0KWZvcih2YXIgbiBpbiB0KXZvaWQgMD09PWVbbl0mJihlW25dPXRbbl0pfSksZX0sdC5leHRlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY2FsbChpLmNhbGwoYXJndW1lbnRzLDEpLGZ1bmN0aW9uKHQpe2lmKHQpZm9yKHZhciBuIGluIHQpZVtuXT10W25dfSksZX07dmFyIHI9W10sbz1yLmZvckVhY2gsaT1yLnNsaWNlfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz12b2lkIDA7aWYobil7dmFyIGk9bmV3IERhdGU7aS5zZXRUaW1lKGkuZ2V0VGltZSgpKzYwKm4qMWUzKSxvPSI7IGV4cGlyZXM9IitpLnRvR01UU3RyaW5nKCl9ZWxzZSBvPSIiO3I9cj8iZG9tYWluPSIrcisiOyI6IiIsZG9jdW1lbnQuY29va2llPWUrIj0iK3QrbysiOyIrcisicGF0aD0vIn0sbz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZSsiPSIsbj1kb2N1bWVudC5jb29raWUuc3BsaXQoIjsiKSxyPTA7cjxuLmxlbmd0aDtyKyspe2Zvcih2YXIgbz1uW3JdOyIgIj09PW8uY2hhckF0KDApOylvPW8uc3Vic3RyaW5nKDEsby5sZW5ndGgpO2lmKDA9PT1vLmluZGV4T2YodCkpcmV0dXJuIG8uc3Vic3RyaW5nKHQubGVuZ3RoLG8ubGVuZ3RoKX1yZXR1cm4gbnVsbH07dC5kZWZhdWx0PXtuYW1lOiJjb29raWUiLGxvb2t1cDpmdW5jdGlvbihlKXt2YXIgdD12b2lkIDA7aWYoZS5sb29rdXBDb29raWUmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBuPW8oZS5sb29rdXBDb29raWUpO24mJih0PW4pfXJldHVybiB0fSxjYWNoZVVzZXJMYW5ndWFnZTpmdW5jdGlvbihlLHQpe3QubG9va3VwQ29va2llJiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZyKHQubG9va3VwQ29va2llLGUsdC5jb29raWVNaW51dGVzLHQuY29va2llRG9tYWluKX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9e25hbWU6InF1ZXJ5c3RyaW5nIixsb29rdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwO2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KWZvcih2YXIgbj13aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdCgiJiIpLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXS5pbmRleE9mKCI9Iik7aWYobz4wKW5bcl0uc3Vic3RyaW5nKDAsbyk9PT1lLmxvb2t1cFF1ZXJ5c3RyaW5nJiYodD1uW3JdLnN1YnN0cmluZyhvKzEpKX1yZXR1cm4gdH19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj12b2lkIDA7dHJ5e3I9InVuZGVmaW5lZCIhPT13aW5kb3cmJm51bGwhPT13aW5kb3cubG9jYWxTdG9yYWdlO3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiaTE4bmV4dC50cmFuc2xhdGUuYm9vIiwiZm9vIiksd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJpMThuZXh0LnRyYW5zbGF0ZS5ib28iKX1jYXRjaChlKXtyPSExfXQuZGVmYXVsdD17bmFtZToibG9jYWxTdG9yYWdlIixsb29rdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwO2lmKGUubG9va3VwTG9jYWxTdG9yYWdlJiZyKXt2YXIgbj13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZS5sb29rdXBMb2NhbFN0b3JhZ2UpO24mJih0PW4pfXJldHVybiB0fSxjYWNoZVVzZXJMYW5ndWFnZTpmdW5jdGlvbihlLHQpe3QubG9va3VwTG9jYWxTdG9yYWdlJiZyJiZ3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0odC5sb29rdXBMb2NhbFN0b3JhZ2UsZSl9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXtuYW1lOiJuYXZpZ2F0b3IiLGxvb2t1cDpmdW5jdGlvbihlKXt2YXIgdD1bXTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvcil7aWYobmF2aWdhdG9yLmxhbmd1YWdlcylmb3IodmFyIG49MDtuPG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoO24rKyl0LnB1c2gobmF2aWdhdG9yLmxhbmd1YWdlc1tuXSk7bmF2aWdhdG9yLnVzZXJMYW5ndWFnZSYmdC5wdXNoKG5hdmlnYXRvci51c2VyTGFuZ3VhZ2UpLG5hdmlnYXRvci5sYW5ndWFnZSYmdC5wdXNoKG5hdmlnYXRvci5sYW5ndWFnZSl9cmV0dXJuIHQubGVuZ3RoPjA%2FdDp2b2lkIDB9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXtuYW1lOiJodG1sVGFnIixsb29rdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwLG49ZS5odG1sVGFnfHwoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ6bnVsbCk7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldEF0dHJpYnV0ZSYmKHQ9bi5nZXRBdHRyaWJ1dGUoImxhbmciKSksdH19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9e25hbWU6InBhdGgiLGxvb2t1cDpmdW5jdGlvbihlKXt2YXIgdD12b2lkIDA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpe3ZhciBuPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvXC8oW2EtekEtWi1dKikvZyk7aWYobiBpbnN0YW5jZW9mIEFycmF5KWlmKCJudW1iZXIiPT10eXBlb2YgZS5sb29rdXBGcm9tUGF0aEluZGV4KXtpZigic3RyaW5nIiE9dHlwZW9mIG5bZS5sb29rdXBGcm9tUGF0aEluZGV4XSlyZXR1cm47dD1uW2UubG9va3VwRnJvbVBhdGhJbmRleF0ucmVwbGFjZSgiLyIsIiIpfWVsc2UgdD1uWzBdLnJlcGxhY2UoIi8iLCIiKX1yZXR1cm4gdH19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9e25hbWU6InN1YmRvbWFpbiIsbG9va3VwOmZ1bmN0aW9uKGUpe3ZhciB0PXZvaWQgMDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl7dmFyIG49d2luZG93LmxvY2F0aW9uLmhyZWYubWF0Y2goLyg%2FOmh0dHBbc10qXDpcL1wvKSooLio%2FKVwuKD89W15cL10qXC4uezIsNX0pL2dpKTtuIGluc3RhbmNlb2YgQXJyYXkmJih0PSJudW1iZXIiPT10eXBlb2YgZS5sb29rdXBGcm9tU3ViZG9tYWluSW5kZXg%2FbltlLmxvb2t1cEZyb21TdWJkb21haW5JbmRleF0ucmVwbGFjZSgiaHR0cDovLyIsIiIpLnJlcGxhY2UoImh0dHBzOi8vIiwiIikucmVwbGFjZSgiLiIsIiIpOm5bMF0ucmVwbGFjZSgiaHR0cDovLyIsIiIpLnJlcGxhY2UoImh0dHBzOi8vIiwiIikucmVwbGFjZSgiLiIsIiIpKX1yZXR1cm4gdH19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KTt2YXIgcj1uKDQ1KSxvPW4ubihyKSxpPW4oNDYpLGE9bi5uKGkpLHM9big0NyksdT1uLm4ocyksYz1uKDQ4KSxsPW4ubihjKSxmPW4oNDkpLHA9bi5uKGYpLGQ9big1MCksaD1uLm4oZCksZz1uKDMyKSx2PW4ubihnKSx5PW4oNjUpLG09bi5uKHkpLGI9big1MSkseD1uLm4oYiksdz1uKDUyKSxrPW4ubih3KSxTPW4oMTAyKSxPPW4ubihTKSxqPW4oMTAzKSxUPW4ubihqKSxFPW4oMTA0KSxMPW4ubihFKSxDPW4oMzEpLEE9bi5uKEMpLFA9KG4oMzMpLG4oNjYpKSxOPW4ubihQKTtmdW5jdGlvbiBEKGUpe3ZhciB0PSIiLG49ZS5jb250ZW50cygpO2lmKG4ubGVuZ3RoPjApZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKz0xKXt2YXIgbz1uLmdldChyKTszPT09by5ub2RlVHlwZSYmby5kYXRhJiYodCs9by5kYXRhKX1yZXR1cm4gdH1mdW5jdGlvbiBSKGUsdCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJzZWxlY3RvciByZXF1aXJlZCIpO3JldHVybiBlKHQpLmxlbmd0aD4wJiYiaW1nIj09PWUodCkucHJvcCgidGFnTmFtZSIpLnRvTG93ZXJDYXNlKCk%2FZSh0KS5hdHRyKCJhbHQiKXx8IiI6ZSh0KS50ZXh0KCkucmVwbGFjZSgvXG4vLCIiKX1mdW5jdGlvbiBJKGUsdCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJzZWxlY3RvciByZXF1aXJlZCIpO3ZhciBuPSIiO2lmKGUodCkubGVuZ3RoPjApe3ZhciByPWUodCkucHJvcCgidGFnTmFtZSIpLnRvTG93ZXJDYXNlKCk7bj0iaW5wdXQiPT09cj9lKHQpLnZhbCgpOiJtZXRhIj09PXI%2FZSh0KS5hdHRyKCJjb250ZW50Iil8fCIiOkQoZSh0KSl9cmV0dXJuIG49bi5yZXBsYWNlKC9bXjAtOV0vZywiIiksTigpKG4sMTApfXZhciBxPW4oMTA1KSxNPW4ubihxKTtmdW5jdGlvbiBfKGUsdCl7dmFyIG47aWYodm9pZCAwPT09bC5hfHxudWxsPT11KCkoZSkpe2lmKGEoKShlKXx8KG49ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZighZSlyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBGKGUsdCk7dmFyIHI9aCgpKG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKS5jYWxsKG4sOCwtMSk7Ik9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09cnx8IlNldCI9PT1yKXJldHVybiBwKCkoZSk7aWYoIkFyZ3VtZW50cyI9PT1yfHwvXig%2FOlVpfEkpbnQoPzo4fDE2fDMyKSg%2FOkNsYW1wZWQpP0FycmF5JC8udGVzdChyKSlyZXR1cm4gRihlLHQpfShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe24mJihlPW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI%2BPWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW3IrK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBzLGM9ITAsZj0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bygpKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9bi5uZXh0KCk7cmV0dXJuIGM9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7Zj0hMCxzPWV9LGY6ZnVuY3Rpb24oKXt0cnl7Y3x8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihmKXRocm93IHN9fX19ZnVuY3Rpb24gRihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIEgoZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJTS1XjgYzkuI3mraPjgafjgZkiKTtpZigwPT09TSgpKGUpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNLVemgheebruaVsOOBjOS4jeato%2BOBp%2BOBmSIpfXZhciB6PW4oMTA2KSxXPW4ubih6KTtmdW5jdGlvbiBVKGUpe3ZhciB0PXdpbmRvdy56aWd6YWc7dCYmdC51dGlscy5kZWJ1Z0xvZ2dlcigpKFcoKShlKSl9dmFyICQ9e2RlYnVnOlUsZXJyb3I6ZnVuY3Rpb24oZSl7dmFyIHQ9d2luZG93LnppZ3phZzt0JiZ0LnV0aWxzJiZ0LnV0aWxzLmVycm9yTG9nZ2VyJiZ0LnV0aWxzLmVycm9yTG9nZ2VyKCkoZSksVShlKX19LEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciBuPXQuJCxyPXQubmFtZSxvPXQucHJpY2U7eCgpKHRoaXMsZSksdGhpcy4kPW4sdGhpcy5uYW1lU2VsZWN0b3I9cnx8IiIsdGhpcy5wcmljZVNlbGVjdG9yPW98fCIifXJldHVybiBrKCkoZSxbe2tleToiZXhlY3V0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQsbjt0cnl7aWYoIXRoaXMuaXNPcmRlclRhcmdldCh3aW5kb3cubG9jYXRpb24uaHJlZikpcmV0dXJuICQuZGVidWcoIuOCquODvOODgOODvOOBruWvvuixoeOBp%2BOBr%2BOBquOBhOOBn%2BOCgemZpOWkliIpLGUoKTtpZih0aGlzLmV4Y2x1ZGUoKSlyZXR1cm4gZSgpOyhmdW5jdGlvbihlKXt2YXIgdD1lLml0ZW0sbj1lLnNrdVJvd3M7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCLjgqLjgqTjg4bjg6DjgYzkuI3mraPjgafjgZkiKTtpZighdC5uYW1lKXRocm93IG5ldyBFcnJvcigi44Ki44Kk44OG44Og5ZCN5YmN44GM5LiN5q2j44Gn44GZIik7aWYoIShuJiYwIT09bi5sZW5ndGh8fHQucHJpY2UpKXRocm93IG5ldyBFcnJvcigi44Ki44Kk44OG44Og6YeR6aGN44GM5LiN5q2j44Gn44GZIik7aWYobil7dmFyIHIsbz1fKG4pO3RyeXtmb3Ioby5zKCk7IShyPW8ubigpKS5kb25lOyl7SChyLnZhbHVlKX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9fX0pKHtpdGVtOnQ9dGhpcy5nZXRJdGVtKCksc2t1Um93czpuPXRoaXMuZ2V0U2t1Um93cyh0KX0pLG4ubGVuZ3RoPjA%2FZShudWxsLHtpdGVtOnQsc2t1Um93czpufSk6ZShudWxsLHtpdGVtOnR9KX1jYXRjaCh0KXtlKHQpfX19LHtrZXk6ImdldEl0ZW0iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e25hbWU6IiIscHJpY2U6MH07cmV0dXJuIHRoaXMubmFtZVNlbGVjdG9yP2UubmFtZT10aGlzLmdldEl0ZW1OYW1lKFIodGhpcy4kLHRoaXMubmFtZVNlbGVjdG9yKSk6ZS5uYW1lPXRoaXMuZ2V0SXRlbU5hbWUoKSx0aGlzLnByaWNlU2VsZWN0b3I%2FZS5wcmljZT10aGlzLmdldEl0ZW1QcmljZShJKHRoaXMuJCx0aGlzLnByaWNlU2VsZWN0b3IpKTplLnByaWNlPXRoaXMuZ2V0SXRlbVByaWNlKCksZX19LHtrZXk6ImdldEl0ZW1OYW1lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg%2BMCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtyZXR1cm4gdGhpcy5uYW1lU2VsZWN0b3I%2FUih0aGlzLiQsdGhpcy5uYW1lU2VsZWN0b3IpOmV9fSx7a2V5OiJnZXRJdGVtUHJpY2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0%2FYXJndW1lbnRzWzBdOjA7cmV0dXJuIHRoaXMucHJpY2VTZWxlY3Rvcj9JKHRoaXMuJCx0aGlzLnByaWNlU2VsZWN0b3IpOmV9fSx7a2V5OiJnZXRTa3VSb3dzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm5bXX19LHtrZXk6ImV4Y2x1ZGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITF9fV0pLGV9KCksVj1uKDEwNyksSz1uLm4oViksRz1uKDEwOCksWD1uLm4oRyksSj1uKDEwOSk7ZnVuY3Rpb24gWSgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlcyYmd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V8fHdpbmRvdy5uYXZpZ2F0b3IudXNlckxhbmd1YWdlfHx3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZX12YXIgUT1uKDExMCksWj1uLm4oUSksZWU9bigxMTEpLHRlPW4ubihlZSksbmU9InppZ3phZyI7dmFyIHJlPSJ1c2FnZSIsb2U9InppZ3phZy1mbG93LWNvbnRyb2xsZWQiO2Z1bmN0aW9uIGllKGUsdCl7d2luZG93LiQmJmZ1bmN0aW9uKG4pe3ZhciByPW4oZSk7aWYociYmci5sZW5ndGg%2BMClmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rPTEpe3ZhciBpPXIuZ2V0KG8pO2kuaGFzQXR0cmlidXRlKG9lKXx8KCJjbGljayI9PT10P2kub25jbGljaz1udWxsOiJzdWJtaXQiPT09dCYmKGkub25zdWJtaXQ9bnVsbCksIm9mZiJpbiBuKGkpP24oaSkub2ZmKHQpOiJ1bmJpbmQiaW4gbihpKSYmbihpKS51bmJpbmQodCkpfX0od2luZG93LiQpfXZhciBhZT17cHJlc2VydmVPcmlnaW5hbEV2ZW50OiExLGRpc2FibGVQb2ludGVyRXZlbnQ6ITF9O2Z1bmN0aW9uIHNlKGUpe3ZhciB0PXRlKCkoZnVuY3Rpb24oKXt2YXIgbixyLG89d2luZG93LnppZ3phZzsiZGVhY3RpdmF0ZWQiPT09KG49cmUscj13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0obmUpLEpTT04ucGFyc2Uocj9kZWNvZGVVUklDb21wb25lbnQoYXRvYihyKSk6Int9Iilbbl0pfHxvLmlzRGVuaWVkfHwoZSgpLGNsZWFySW50ZXJ2YWwodCkpfSw1MDApfWZ1bmN0aW9uIHVlKGUsdCl7dmFyIG49d2luZG93LnppZ3phZztaKCkoZnVuY3Rpb24oKXsvQ2hyb21lLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSYmMD09PWUodCkubGVuZ3RoJiZuJiYiaXRlbSI9PT1uLmRpc2NvdmVyeVN0YXR1cyYmJC5lcnJvcigiIi5jb25jYXQodCwiOiDjgqLjgqTjg4bjg6Djg5rjg7zjgrjjgafoqbLlvZPjgZnjgovjg5Xjg63jg7zliLblvqHnlKjjga7opoHntKDjgYzopovjgaTjgYvjgorjgb7jgZvjgpMiKSl9LDVlMyl9dmFyIGNlPXtvbkNoYW5nZXNSZWFkeTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WyJqYSJdO0Jvb2xlYW4oWCgpKHQpLmNhbGwodCxmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4tMSE9PUsoKSh0PVkoKSkuY2FsbCh0LGUpfSkpfHxzZShmdW5jdGlvbigpe2UoSil9KX0sb3ZlcnJpZGVDbGlja0V2ZW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106YWU7aWYodWUoZSx0KSxyLmRpc2FibGVQb2ludGVyRXZlbnQpe2lmKHdpbmRvdy5kb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZShvZSkpcmV0dXJuO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7by5pbm5lckhUTUw9IlxuICAgICIuY29uY2F0KHQsIiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9Iik7dmFyIGk9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0Iik7cmV0dXJuIGkmJmkucGFyZW50Tm9kZSYmaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLGkpLGUoZG9jdW1lbnQpLm9uKCJjbGljayIsZnVuY3Rpb24ocil7ci50YXJnZXQmJmUoci50YXJnZXQpLmNsb3Nlc3QoZSh0KS5wYXJlbnQoKSkubGVuZ3RoPjAmJm4ocil9KSx2b2lkIHdpbmRvdy5kb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShvZSwiMSIpfXIucHJlc2VydmVPcmlnaW5hbEV2ZW50fHxpZSh0LCJjbGljayIpO2Zvcih2YXIgYT1lKHQpLHM9MDtzPGEubGVuZ3RoO3MrPTEpe3ZhciB1PWEuZ2V0KHMpO3UuaGFzQXR0cmlidXRlKG9lKXx8KHUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe3IucHJlc2VydmVPcmlnaW5hbEV2ZW50fHwoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpLG4oZSl9LCEwKSx1LnNldEF0dHJpYnV0ZShvZSwiMSIpKX19LG92ZXJyaWRlU3VibWl0RXZlbnQ6ZnVuY3Rpb24oZSx0LG4pe3VlKGUsdCksaWUodCwic3VibWl0Iik7dmFyIHI9ZSh0KTtpZihyJiZyLmxlbmd0aD4wKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bys9MSl7dmFyIGk9ci5nZXQobyk7aS5oYXNBdHRyaWJ1dGUob2UpfHwoZShpKS5vbigic3VibWl0IixuKSxpLnNldEF0dHJpYnV0ZShvZSwiMSIpKX19LHVuYmluZE9yaWdpbmFsSlF1ZXJ5RXZlbnRzOmllfSxsZT1uKDY3KSxmZT1uLm4obGUpLHBlPW4oMTEyKSxkZT1uLm4ocGUpLGhlPW4oMTEzKSxnZT1uLm4oaGUpLHZlPW4oNjgpLHllPW4ubih2ZSk7ZnVuY3Rpb24gbWUoZSl7cmV0dXJuKG1lPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gYmUoZSx0LG4pe3JldHVybiB0IGluIGU%2FT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9PYmplY3QoYXJndW1lbnRzW3RdKTp7fSxyPU9iamVjdC5rZXlzKG4pOyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbih0KXtiZShlLHQsblt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiB3ZShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGtlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gU2UoZSx0LG4pe3JldHVybiB0JiZrZShlLnByb3RvdHlwZSx0KSxuJiZrZShlLG4pLGV9ZnVuY3Rpb24gT2UoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIGplKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09bWUodCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P09lKGUpOnR9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuKFRlPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBFZShlLHQpe3JldHVybihFZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24gTGUoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmRWUoZSx0KX12YXIgQ2U9e3R5cGU6ImxvZ2dlciIsbG9nOmZ1bmN0aW9uKGUpe3RoaXMub3V0cHV0KCJsb2ciLGUpfSx3YXJuOmZ1bmN0aW9uKGUpe3RoaXMub3V0cHV0KCJ3YXJuIixlKX0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhpcy5vdXRwdXQoImVycm9yIixlKX0sb3V0cHV0OmZ1bmN0aW9uKGUsdCl7Y29uc29sZSYmY29uc29sZVtlXSYmY29uc29sZVtlXS5hcHBseShjb25zb2xlLHQpfX0sQWU9bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307d2UodGhpcyxlKSx0aGlzLmluaXQodCxuKX1yZXR1cm4gU2UoZSxbe2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0%2FYXJndW1lbnRzWzFdOnt9O3RoaXMucHJlZml4PXQucHJlZml4fHwiaTE4bmV4dDoiLHRoaXMubG9nZ2VyPWV8fENlLHRoaXMub3B0aW9ucz10LHRoaXMuZGVidWc9dC5kZWJ1Z319LHtrZXk6InNldERlYnVnIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRlYnVnPWV9fSx7a2V5OiJsb2ciLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LCJsb2ciLCIiLCEwKX19LHtrZXk6Indhcm4iLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LCJ3YXJuIiwiIiwhMCl9fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsImVycm9yIiwiIil9fSx7a2V5OiJkZXByZWNhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LCJ3YXJuIiwiV0FSTklORyBERVBSRUNBVEVEOiAiLCEwKX19LHtrZXk6ImZvcndhcmQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByJiYhdGhpcy5kZWJ1Zz9udWxsOigic3RyaW5nIj09dHlwZW9mIGVbMF0mJihlWzBdPSIiLmNvbmNhdChuKS5jb25jYXQodGhpcy5wcmVmaXgsIiAiKS5jb25jYXQoZVswXSkpLHRoaXMubG9nZ2VyW3RdKGUpKX19LHtrZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKHRoaXMubG9nZ2VyLHhlKHt9LHtwcmVmaXg6IiIuY29uY2F0KHRoaXMucHJlZml4LCI6IikuY29uY2F0KHQsIjoiKX0sdGhpcy5vcHRpb25zKSl9fV0pLGV9KCkpLFBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3dlKHRoaXMsZSksdGhpcy5vYnNlcnZlcnM9e319cmV0dXJuIFNlKGUsW3trZXk6Im9uIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIGUuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24ub2JzZXJ2ZXJzW2VdPW4ub2JzZXJ2ZXJzW2VdfHxbXSxuLm9ic2VydmVyc1tlXS5wdXNoKHQpfSksdGhpc319LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLm9ic2VydmVyc1tlXSYmKHQ%2FdGhpcy5vYnNlcnZlcnNbZV09dGhpcy5vYnNlcnZlcnNbZV0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pOmRlbGV0ZSB0aGlzLm9ic2VydmVyc1tlXSl9fSx7a2V5OiJlbWl0Iix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE%2FdC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07aWYodGhpcy5vYnNlcnZlcnNbZV0pe3ZhciBvPVtdLmNvbmNhdCh0aGlzLm9ic2VydmVyc1tlXSk7by5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYXBwbHkodm9pZCAwLG4pfSl9aWYodGhpcy5vYnNlcnZlcnNbIioiXSl7dmFyIGk9W10uY29uY2F0KHRoaXMub2JzZXJ2ZXJzWyIqIl0pO2kuZm9yRWFjaChmdW5jdGlvbih0KXt0LmFwcGx5KHQsW2VdLmNvbmNhdChuKSl9KX19fV0pLGV9KCk7ZnVuY3Rpb24gTmUoKXt2YXIgZSx0LG49bmV3IFByb21pc2UoZnVuY3Rpb24obixyKXtlPW4sdD1yfSk7cmV0dXJuIG4ucmVzb2x2ZT1lLG4ucmVqZWN0PXQsbn1mdW5jdGlvbiBEZShlKXtyZXR1cm4gbnVsbD09ZT8iIjoiIitlfWZ1bmN0aW9uIFJlKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLmluZGV4T2YoIiMjIyIpPi0xP2UucmVwbGFjZSgvIyMjL2csIi4iKTplfWZ1bmN0aW9uIG8oKXtyZXR1cm4hZXx8InN0cmluZyI9PXR5cGVvZiBlfWZvcih2YXIgaT0ic3RyaW5nIiE9dHlwZW9mIHQ%2FW10uY29uY2F0KHQpOnQuc3BsaXQoIi4iKTtpLmxlbmd0aD4xOyl7aWYobygpKXJldHVybnt9O3ZhciBhPXIoaS5zaGlmdCgpKTshZVthXSYmbiYmKGVbYV09bmV3IG4pLGU9ZVthXX1yZXR1cm4gbygpP3t9OntvYmo6ZSxrOnIoaS5zaGlmdCgpKX19ZnVuY3Rpb24gSWUoZSx0LG4pe3ZhciByPVJlKGUsdCxPYmplY3QpO3Iub2JqW3Iua109bn1mdW5jdGlvbiBxZShlLHQpe3ZhciBuPVJlKGUsdCkscj1uLm9iaixvPW4uaztpZihyKXJldHVybiByW29dfWZ1bmN0aW9uIE1lKGUsdCxuKXt2YXIgcj1xZShlLG4pO3JldHVybiB2b2lkIDAhPT1yP3I6cWUodCxuKX1mdW5jdGlvbiBfZShlLHQsbil7Zm9yKHZhciByIGluIHQpIl9fcHJvdG9fXyIhPT1yJiYiY29uc3RydWN0b3IiIT09ciYmKHIgaW4gZT8ic3RyaW5nIj09dHlwZW9mIGVbcl18fGVbcl1pbnN0YW5jZW9mIFN0cmluZ3x8InN0cmluZyI9PXR5cGVvZiB0W3JdfHx0W3JdaW5zdGFuY2VvZiBTdHJpbmc%2FbiYmKGVbcl09dFtyXSk6X2UoZVtyXSx0W3JdLG4pOmVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gRmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCJcXCQmIil9dmFyIEhlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI%2BIjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsiLCIvIjoiJiN4MkY7In07ZnVuY3Rpb24gemUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2UucmVwbGFjZSgvWyY8PiInXC9dL2csZnVuY3Rpb24oZSl7cmV0dXJuIEhlW2VdfSk6ZX12YXIgV2U9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5uYXZpZ2F0b3ImJndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50JiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIik%2BLTEsVWU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgbixyPWFyZ3VtZW50cy5sZW5ndGg%2BMSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7bnM6WyJ0cmFuc2xhdGlvbiJdLGRlZmF1bHROUzoidHJhbnNsYXRpb24ifTtyZXR1cm4gd2UodGhpcyx0KSxuPWplKHRoaXMsVGUodCkuY2FsbCh0aGlzKSksV2UmJlBlLmNhbGwoT2UobikpLG4uZGF0YT1lfHx7fSxuLm9wdGlvbnM9cix2b2lkIDA9PT1uLm9wdGlvbnMua2V5U2VwYXJhdG9yJiYobi5vcHRpb25zLmtleVNlcGFyYXRvcj0iLiIpLG59cmV0dXJuIExlKHQsUGUpLFNlKHQsW3trZXk6ImFkZE5hbWVzcGFjZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy5ucy5pbmRleE9mKGUpPDAmJnRoaXMub3B0aW9ucy5ucy5wdXNoKGUpfX0se2tleToicmVtb3ZlTmFtZXNwYWNlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk7dD4tMSYmdGhpcy5vcHRpb25zLm5zLnNwbGljZSh0LDEpfX0se2tleToiZ2V0UmVzb3VyY2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e30sbz12b2lkIDAhPT1yLmtleVNlcGFyYXRvcj9yLmtleVNlcGFyYXRvcjp0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yLGk9W2UsdF07cmV0dXJuIG4mJiJzdHJpbmciIT10eXBlb2YgbiYmKGk9aS5jb25jYXQobikpLG4mJiJzdHJpbmciPT10eXBlb2YgbiYmKGk9aS5jb25jYXQobz9uLnNwbGl0KG8pOm4pKSxlLmluZGV4T2YoIi4iKT4tMSYmKGk9ZS5zcGxpdCgiLiIpKSxxZSh0aGlzLmRhdGEsaSl9fSx7a2V5OiJhZGRSZXNvdXJjZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0%2FYXJndW1lbnRzWzRdOntzaWxlbnQ6ITF9LGk9dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjt2b2lkIDA9PT1pJiYoaT0iLiIpO3ZhciBhPVtlLHRdO24mJihhPWEuY29uY2F0KGk%2Fbi5zcGxpdChpKTpuKSksZS5pbmRleE9mKCIuIik%2BLTEmJihyPXQsdD0oYT1lLnNwbGl0KCIuIikpWzFdKSx0aGlzLmFkZE5hbWVzcGFjZXModCksSWUodGhpcy5kYXRhLGEsciksby5zaWxlbnR8fHRoaXMuZW1pdCgiYWRkZWQiLGUsdCxuLHIpfX0se2tleToiYWRkUmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10%2FYXJndW1lbnRzWzNdOntzaWxlbnQ6ITF9O2Zvcih2YXIgbyBpbiBuKSJzdHJpbmciIT10eXBlb2YgbltvXSYmIltvYmplY3QgQXJyYXldIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkobltvXSl8fHRoaXMuYWRkUmVzb3VyY2UoZSx0LG8sbltvXSx7c2lsZW50OiEwfSk7ci5zaWxlbnR8fHRoaXMuZW1pdCgiYWRkZWQiLGUsdCxuKX19LHtrZXk6ImFkZFJlc291cmNlQnVuZGxlIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg%2BNSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7c2lsZW50OiExfSxhPVtlLHRdO2UuaW5kZXhPZigiLiIpPi0xJiYocj1uLG49dCx0PShhPWUuc3BsaXQoIi4iKSlbMV0pLHRoaXMuYWRkTmFtZXNwYWNlcyh0KTt2YXIgcz1xZSh0aGlzLmRhdGEsYSl8fHt9O3I%2FX2UocyxuLG8pOnM9eGUoe30scyxuKSxJZSh0aGlzLmRhdGEsYSxzKSxpLnNpbGVudHx8dGhpcy5lbWl0KCJhZGRlZCIsZSx0LG4pfX0se2tleToicmVtb3ZlUmVzb3VyY2VCdW5kbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5oYXNSZXNvdXJjZUJ1bmRsZShlLHQpJiZkZWxldGUgdGhpcy5kYXRhW2VdW3RdLHRoaXMucmVtb3ZlTmFtZXNwYWNlcyh0KSx0aGlzLmVtaXQoInJlbW92ZWQiLGUsdCl9fSx7a2V5OiJoYXNSZXNvdXJjZUJ1bmRsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nZXRSZXNvdXJjZShlLHQpfX0se2tleToiZ2V0UmVzb3VyY2VCdW5kbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fCh0PXRoaXMub3B0aW9ucy5kZWZhdWx0TlMpLCJ2MSI9PT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQST94ZSh7fSx7fSx0aGlzLmdldFJlc291cmNlKGUsdCkpOnRoaXMuZ2V0UmVzb3VyY2UoZSx0KX19LHtrZXk6ImdldERhdGFCeUxhbmd1YWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXRhW2VdfX0se2tleToidG9KU09OIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fV0pLHR9KCksJGU9e3Byb2Nlc3NvcnM6e30sYWRkUG9zdFByb2Nlc3NvcjpmdW5jdGlvbihlKXt0aGlzLnByb2Nlc3NvcnNbZS5uYW1lXT1lfSxoYW5kbGU6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT10aGlzO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7aS5wcm9jZXNzb3JzW2VdJiYodD1pLnByb2Nlc3NvcnNbZV0ucHJvY2Vzcyh0LG4scixvKSl9KSx0fX0sQmU9e30sVmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgbixyLG8saSxhPWFyZ3VtZW50cy5sZW5ndGg%2BMSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm4gd2UodGhpcyx0KSxuPWplKHRoaXMsVGUodCkuY2FsbCh0aGlzKSksV2UmJlBlLmNhbGwoT2UobikpLHI9WyJyZXNvdXJjZVN0b3JlIiwibGFuZ3VhZ2VVdGlscyIsInBsdXJhbFJlc29sdmVyIiwiaW50ZXJwb2xhdG9yIiwiYmFja2VuZENvbm5lY3RvciIsImkxOG5Gb3JtYXQiLCJ1dGlscyJdLG89ZSxpPU9lKG4pLHIuZm9yRWFjaChmdW5jdGlvbihlKXtvW2VdJiYoaVtlXT1vW2VdKX0pLG4ub3B0aW9ucz1hLHZvaWQgMD09PW4ub3B0aW9ucy5rZXlTZXBhcmF0b3ImJihuLm9wdGlvbnMua2V5U2VwYXJhdG9yPSIuIiksbi5sb2dnZXI9QWUuY3JlYXRlKCJ0cmFuc2xhdG9yIiksbn1yZXR1cm4gTGUodCxQZSksU2UodCxbe2tleToiY2hhbmdlTGFuZ3VhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe2UmJih0aGlzLmxhbmd1YWdlPWUpfX0se2tleToiZXhpc3RzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2ludGVycG9sYXRpb246e319LG49dGhpcy5yZXNvbHZlKGUsdCk7cmV0dXJuIG4mJnZvaWQgMCE9PW4ucmVzfX0se2tleToiZXh0cmFjdEZyb21LZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dm9pZCAwIT09dC5uc1NlcGFyYXRvcj90Lm5zU2VwYXJhdG9yOnRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjt2b2lkIDA9PT1uJiYobj0iOiIpO3ZhciByPXZvaWQgMCE9PXQua2V5U2VwYXJhdG9yP3Qua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3Isbz10Lm5zfHx0aGlzLm9wdGlvbnMuZGVmYXVsdE5TO2lmKG4mJmUuaW5kZXhPZihuKT4tMSl7dmFyIGk9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtpZihpJiZpLmxlbmd0aD4wKXJldHVybntrZXk6ZSxuYW1lc3BhY2VzOm99O3ZhciBhPWUuc3BsaXQobik7KG4hPT1yfHxuPT09ciYmdGhpcy5vcHRpb25zLm5zLmluZGV4T2YoYVswXSk%2BLTEpJiYobz1hLnNoaWZ0KCkpLGU9YS5qb2luKHIpfXJldHVybiJzdHJpbmciPT10eXBlb2YgbyYmKG89W29dKSx7a2V5OmUsbmFtZXNwYWNlczpvfX19LHtrZXk6InRyYW5zbGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7aWYoIm9iamVjdCIhPT1tZSh0KSYmdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyJiYodD10aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoYXJndW1lbnRzKSksdHx8KHQ9e30pLG51bGw9PWUpcmV0dXJuIiI7QXJyYXkuaXNBcnJheShlKXx8KGU9W1N0cmluZyhlKV0pO3ZhciBvPXZvaWQgMCE9PXQua2V5U2VwYXJhdG9yP3Qua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IsaT10aGlzLmV4dHJhY3RGcm9tS2V5KGVbZS5sZW5ndGgtMV0sdCksYT1pLmtleSxzPWkubmFtZXNwYWNlcyx1PXNbcy5sZW5ndGgtMV0sYz10LmxuZ3x8dGhpcy5sYW5ndWFnZSxsPXQuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGV8fHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZTtpZihjJiYiY2ltb2RlIj09PWMudG9Mb3dlckNhc2UoKSl7aWYobCl7dmFyIGY9dC5uc1NlcGFyYXRvcnx8dGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO3JldHVybiB1K2YrYX1yZXR1cm4gYX12YXIgcD10aGlzLnJlc29sdmUoZSx0KSxkPXAmJnAucmVzLGg9cCYmcC51c2VkS2V5fHxhLGc9cCYmcC5leGFjdFVzZWRLZXl8fGEsdj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGQpLHk9WyJbb2JqZWN0IE51bWJlcl0iLCJbb2JqZWN0IEZ1bmN0aW9uXSIsIltvYmplY3QgUmVnRXhwXSJdLG09dm9pZCAwIT09dC5qb2luQXJyYXlzP3Quam9pbkFycmF5czp0aGlzLm9wdGlvbnMuam9pbkFycmF5cyxiPSF0aGlzLmkxOG5Gb3JtYXR8fHRoaXMuaTE4bkZvcm1hdC5oYW5kbGVBc09iamVjdCx4PSJzdHJpbmciIT10eXBlb2YgZCYmImJvb2xlYW4iIT10eXBlb2YgZCYmIm51bWJlciIhPXR5cGVvZiBkO2lmKGImJmQmJngmJnkuaW5kZXhPZih2KTwwJiYoInN0cmluZyIhPXR5cGVvZiBtfHwiW29iamVjdCBBcnJheV0iIT09dikpe2lmKCF0LnJldHVybk9iamVjdHMmJiF0aGlzLm9wdGlvbnMucmV0dXJuT2JqZWN0cylyZXR1cm4gdGhpcy5sb2dnZXIud2FybigiYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhIiksdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcj90aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyKGgsZCx0KToia2V5ICciLmNvbmNhdChhLCIgKCIpLmNvbmNhdCh0aGlzLmxhbmd1YWdlLCIpJyByZXR1cm5lZCBhbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuIik7aWYobyl7dmFyIHc9IltvYmplY3QgQXJyYXldIj09PXYsaz13P1tdOnt9LFM9dz9nOmg7Zm9yKHZhciBPIGluIGQpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsTykpe3ZhciBqPSIiLmNvbmNhdChTKS5jb25jYXQobykuY29uY2F0KE8pO2tbT109dGhpcy50cmFuc2xhdGUoaix4ZSh7fSx0LHtqb2luQXJyYXlzOiExLG5zOnN9KSksa1tPXT09PWomJihrW09dPWRbT10pfWQ9a319ZWxzZSBpZihiJiYic3RyaW5nIj09dHlwZW9mIG0mJiJbb2JqZWN0IEFycmF5XSI9PT12KShkPWQuam9pbihtKSkmJihkPXRoaXMuZXh0ZW5kVHJhbnNsYXRpb24oZCxlLHQsbikpO2Vsc2V7dmFyIFQ9ITEsRT0hMTtpZighdGhpcy5pc1ZhbGlkTG9va3VwKGQpJiZ2b2lkIDAhPT10LmRlZmF1bHRWYWx1ZSl7aWYoVD0hMCx2b2lkIDAhPT10LmNvdW50KXt2YXIgTD10aGlzLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChjLHQuY291bnQpO2Q9dFsiZGVmYXVsdFZhbHVlIi5jb25jYXQoTCldfWR8fChkPXQuZGVmYXVsdFZhbHVlKX10aGlzLmlzVmFsaWRMb29rdXAoZCl8fChFPSEwLGQ9YSk7dmFyIEM9dC5kZWZhdWx0VmFsdWUmJnQuZGVmYXVsdFZhbHVlIT09ZCYmdGhpcy5vcHRpb25zLnVwZGF0ZU1pc3Npbmc7aWYoRXx8VHx8Qyl7aWYodGhpcy5sb2dnZXIubG9nKEM%2FInVwZGF0ZUtleSI6Im1pc3NpbmdLZXkiLGMsdSxhLEM%2FdC5kZWZhdWx0VmFsdWU6ZCksbyl7dmFyIEE9dGhpcy5yZXNvbHZlKGEseGUoe30sdCx7a2V5U2VwYXJhdG9yOiExfSkpO0EmJkEucmVzJiZ0aGlzLmxvZ2dlci53YXJuKCJTZWVtcyB0aGUgbG9hZGVkIHRyYW5zbGF0aW9ucyB3ZXJlIGluIGZsYXQgSlNPTiBmb3JtYXQgaW5zdGVhZCBvZiBuZXN0ZWQuIEVpdGhlciBzZXQga2V5U2VwYXJhdG9yOiBmYWxzZSBvbiBpbml0IG9yIG1ha2Ugc3VyZSB5b3VyIHRyYW5zbGF0aW9ucyBhcmUgcHVibGlzaGVkIGluIG5lc3RlZCBmb3JtYXQuIil9dmFyIFA9W10sTj10aGlzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcsdC5sbmd8fHRoaXMubGFuZ3VhZ2UpO2lmKCJmYWxsYmFjayI9PT10aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyYmTiYmTlswXSlmb3IodmFyIEQ9MDtEPE4ubGVuZ3RoO0QrKylQLnB1c2goTltEXSk7ZWxzZSJhbGwiPT09dGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8%2FUD10aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KHQubG5nfHx0aGlzLmxhbmd1YWdlKTpQLnB1c2godC5sbmd8fHRoaXMubGFuZ3VhZ2UpO3ZhciBSPWZ1bmN0aW9uKGUsbil7ci5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyP3Iub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcihlLHUsbixDP3QuZGVmYXVsdFZhbHVlOmQsQyx0KTpyLmJhY2tlbmRDb25uZWN0b3ImJnIuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyYmci5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKGUsdSxuLEM%2FdC5kZWZhdWx0VmFsdWU6ZCxDLHQpLHIuZW1pdCgibWlzc2luZ0tleSIsZSx1LG4sZCl9O2lmKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZyl7dmFyIEk9dm9pZCAwIT09dC5jb3VudCYmInN0cmluZyIhPXR5cGVvZiB0LmNvdW50O3RoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1BsdXJhbHMmJkk%2FUC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IucGx1cmFsUmVzb2x2ZXIuZ2V0UGx1cmFsRm9ybXNPZktleShlLGEpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFIoW2VdLHQpfSl9KTpSKFAsYSl9fWQ9dGhpcy5leHRlbmRUcmFuc2xhdGlvbihkLGUsdCxwLG4pLEUmJmQ9PT1hJiZ0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5JiYoZD0iIi5jb25jYXQodSwiOiIpLmNvbmNhdChhKSksRSYmdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXImJihkPXRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKGQpKX1yZXR1cm4gZH19LHtrZXk6ImV4dGVuZFRyYW5zbGF0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPXRoaXM7aWYodGhpcy5pMThuRm9ybWF0JiZ0aGlzLmkxOG5Gb3JtYXQucGFyc2UpZT10aGlzLmkxOG5Gb3JtYXQucGFyc2UoZSxuLHIudXNlZExuZyxyLnVzZWROUyxyLnVzZWRLZXkse3Jlc29sdmVkOnJ9KTtlbHNlIGlmKCFuLnNraXBJbnRlcnBvbGF0aW9uKXtuLmludGVycG9sYXRpb24mJnRoaXMuaW50ZXJwb2xhdG9yLmluaXQoeGUoe30sbix7aW50ZXJwb2xhdGlvbjp4ZSh7fSx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbixuLmludGVycG9sYXRpb24pfSkpO3ZhciBhLHM9bi5pbnRlcnBvbGF0aW9uJiZuLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzfHx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM7aWYocyl7dmFyIHU9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTthPXUmJnUubGVuZ3RofXZhciBjPW4ucmVwbGFjZSYmInN0cmluZyIhPXR5cGVvZiBuLnJlcGxhY2U%2Fbi5yZXBsYWNlOm47aWYodGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyYmKGM9eGUoe30sdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyxjKSksZT10aGlzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShlLGMsbi5sbmd8fHRoaXMubGFuZ3VhZ2Usbikscyl7dmFyIGw9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTthPChsJiZsLmxlbmd0aCkmJihuLm5lc3Q9ITEpfSExIT09bi5uZXN0JiYoZT10aGlzLmludGVycG9sYXRvci5uZXN0KGUsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxhPTA7YTxlO2ErKylyW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbyYmb1swXT09PXJbMF0mJiFuLmNvbnRleHQ%2FKGkubG9nZ2VyLndhcm4oIkl0IHNlZW1zIHlvdSBhcmUgbmVzdGluZyByZWN1cnNpdmVseSBrZXk6ICIuY29uY2F0KHJbMF0sIiBpbiBrZXk6ICIpLmNvbmNhdCh0WzBdKSksbnVsbCk6aS50cmFuc2xhdGUuYXBwbHkoaSxyLmNvbmNhdChbdF0pKX0sbikpLG4uaW50ZXJwb2xhdGlvbiYmdGhpcy5pbnRlcnBvbGF0b3IucmVzZXQoKX12YXIgZj1uLnBvc3RQcm9jZXNzfHx0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3MscD0ic3RyaW5nIj09dHlwZW9mIGY%2FW2ZdOmY7cmV0dXJuIG51bGwhPWUmJnAmJnAubGVuZ3RoJiYhMSE9PW4uYXBwbHlQb3N0UHJvY2Vzc29yJiYoZT0kZS5oYW5kbGUocCxlLHQsdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ%2FeGUoe2kxOG5SZXNvbHZlZDpyfSxuKTpuLHRoaXMpKSxlfX0se2tleToicmVzb2x2ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saSxhPXRoaXMscz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoZT1bZV0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZighYS5pc1ZhbGlkTG9va3VwKHQpKXt2YXIgdT1hLmV4dHJhY3RGcm9tS2V5KGUscyksYz11LmtleTtuPWM7dmFyIGw9dS5uYW1lc3BhY2VzO2Eub3B0aW9ucy5mYWxsYmFja05TJiYobD1sLmNvbmNhdChhLm9wdGlvbnMuZmFsbGJhY2tOUykpO3ZhciBmPXZvaWQgMCE9PXMuY291bnQmJiJzdHJpbmciIT10eXBlb2Ygcy5jb3VudCxwPXZvaWQgMCE9PXMuY29udGV4dCYmInN0cmluZyI9PXR5cGVvZiBzLmNvbnRleHQmJiIiIT09cy5jb250ZXh0LGQ9cy5sbmdzP3MubG5nczphLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KHMubG5nfHxhLmxhbmd1YWdlLHMuZmFsbGJhY2tMbmcpO2wuZm9yRWFjaChmdW5jdGlvbihlKXthLmlzVmFsaWRMb29rdXAodCl8fChpPWUsIUJlWyIiLmNvbmNhdChkWzBdLCItIikuY29uY2F0KGUpXSYmYS51dGlscyYmYS51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UmJiFhLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZShpKSYmKEJlWyIiLmNvbmNhdChkWzBdLCItIikuY29uY2F0KGUpXT0hMCxhLmxvZ2dlci53YXJuKCdrZXkgIicuY29uY2F0KG4sJyIgZm9yIGxhbmd1YWdlcyAiJykuY29uY2F0KGQuam9pbigiLCAiKSwnIiB3b25cJ3QgZ2V0IHJlc29sdmVkIGFzIG5hbWVzcGFjZSAiJykuY29uY2F0KGksJyIgd2FzIG5vdCB5ZXQgbG9hZGVkJyksIlRoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhISIpKSxkLmZvckVhY2goZnVuY3Rpb24obil7aWYoIWEuaXNWYWxpZExvb2t1cCh0KSl7bz1uO3ZhciBpLHUsbD1jLGQ9W2xdO2lmKGEuaTE4bkZvcm1hdCYmYS5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMpYS5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMoZCxjLG4sZSxzKTtlbHNlIGYmJihpPWEucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KG4scy5jb3VudCkpLGYmJnAmJmQucHVzaChsK2kpLHAmJmQucHVzaChsKz0iIi5jb25jYXQoYS5vcHRpb25zLmNvbnRleHRTZXBhcmF0b3IpLmNvbmNhdChzLmNvbnRleHQpKSxmJiZkLnB1c2gobCs9aSk7Zm9yKDt1PWQucG9wKCk7KWEuaXNWYWxpZExvb2t1cCh0KXx8KHI9dSx0PWEuZ2V0UmVzb3VyY2UobixlLHUscykpfX0pKX0pfX0pLHtyZXM6dCx1c2VkS2V5Om4sZXhhY3RVc2VkS2V5OnIsdXNlZExuZzpvLHVzZWROUzppfX19LHtrZXk6ImlzVmFsaWRMb29rdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEodm9pZCAwPT09ZXx8IXRoaXMub3B0aW9ucy5yZXR1cm5OdWxsJiZudWxsPT09ZXx8IXRoaXMub3B0aW9ucy5yZXR1cm5FbXB0eVN0cmluZyYmIiI9PT1lKX19LHtrZXk6ImdldFJlc291cmNlIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10%2FYXJndW1lbnRzWzNdOnt9O3JldHVybiB0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZT90aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2UoZSx0LG4scik6dGhpcy5yZXNvdXJjZVN0b3JlLmdldFJlc291cmNlKGUsdCxuLHIpfX1dKSx0fSgpO2Z1bmN0aW9uIEtlKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9dmFyIEdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt3ZSh0aGlzLGUpLHRoaXMub3B0aW9ucz10LHRoaXMud2hpdGVsaXN0PXRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzfHwhMSx0aGlzLnN1cHBvcnRlZExuZ3M9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3N8fCExLHRoaXMubG9nZ2VyPUFlLmNyZWF0ZSgibGFuZ3VhZ2VVdGlscyIpfXJldHVybiBTZShlLFt7a2V5OiJnZXRTY3JpcHRQYXJ0RnJvbUNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHxlLmluZGV4T2YoIi0iKTwwKXJldHVybiBudWxsO3ZhciB0PWUuc3BsaXQoIi0iKTtyZXR1cm4gMj09PXQubGVuZ3RoP251bGw6KHQucG9wKCksIngiPT09dFt0Lmxlbmd0aC0xXS50b0xvd2VyQ2FzZSgpP251bGw6dGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUodC5qb2luKCItIikpKX19LHtrZXk6ImdldExhbmd1YWdlUGFydEZyb21Db2RlIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8ZS5pbmRleE9mKCItIik8MClyZXR1cm4gZTt2YXIgdD1lLnNwbGl0KCItIik7cmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHRbMF0pfX0se2tleToiZm9ybWF0TGFuZ3VhZ2VDb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmUuaW5kZXhPZigiLSIpPi0xKXt2YXIgdD1bImhhbnMiLCJoYW50IiwibGF0biIsImN5cmwiLCJjYW5zIiwibW9uZyIsImFyYWIiXSxuPWUuc3BsaXQoIi0iKTtyZXR1cm4gdGhpcy5vcHRpb25zLmxvd2VyQ2FzZUxuZz9uPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCl9KToyPT09bi5sZW5ndGg%2FKG5bMF09blswXS50b0xvd2VyQ2FzZSgpLG5bMV09blsxXS50b1VwcGVyQ2FzZSgpLHQuaW5kZXhPZihuWzFdLnRvTG93ZXJDYXNlKCkpPi0xJiYoblsxXT1LZShuWzFdLnRvTG93ZXJDYXNlKCkpKSk6Mz09PW4ubGVuZ3RoJiYoblswXT1uWzBdLnRvTG93ZXJDYXNlKCksMj09PW5bMV0ubGVuZ3RoJiYoblsxXT1uWzFdLnRvVXBwZXJDYXNlKCkpLCJzZ24iIT09blswXSYmMj09PW5bMl0ubGVuZ3RoJiYoblsyXT1uWzJdLnRvVXBwZXJDYXNlKCkpLHQuaW5kZXhPZihuWzFdLnRvTG93ZXJDYXNlKCkpPi0xJiYoblsxXT1LZShuWzFdLnRvTG93ZXJDYXNlKCkpKSx0LmluZGV4T2YoblsyXS50b0xvd2VyQ2FzZSgpKT4tMSYmKG5bMl09S2UoblsyXS50b0xvd2VyQ2FzZSgpKSkpLG4uam9pbigiLSIpfXJldHVybiB0aGlzLm9wdGlvbnMuY2xlYW5Db2RlfHx0aGlzLm9wdGlvbnMubG93ZXJDYXNlTG5nP2UudG9Mb3dlckNhc2UoKTplfX0se2tleToiaXNXaGl0ZWxpc3RlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubG9nZ2VyLmRlcHJlY2F0ZSgibGFuZ3VhZ2VVdGlscy5pc1doaXRlbGlzdGVkIiwnZnVuY3Rpb24gImlzV2hpdGVsaXN0ZWQiIHdpbGwgYmUgcmVuYW1lZCB0byAiaXNTdXBwb3J0ZWRDb2RlIiBpbiB0aGUgbmV4dCBtYWpvciAtIHBsZWFzZSBtYWtlIHN1cmUgdG8gcmVuYW1lIGl0XCdzIHVzYWdlIGFzYXAuJyksdGhpcy5pc1N1cHBvcnRlZENvZGUoZSl9fSx7a2V5OiJpc1N1cHBvcnRlZENvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybigibGFuZ3VhZ2VPbmx5Ij09PXRoaXMub3B0aW9ucy5sb2FkfHx0aGlzLm9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzKSYmKGU9dGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKSksIXRoaXMuc3VwcG9ydGVkTG5nc3x8IXRoaXMuc3VwcG9ydGVkTG5ncy5sZW5ndGh8fHRoaXMuc3VwcG9ydGVkTG5ncy5pbmRleE9mKGUpPi0xfX0se2tleToiZ2V0QmVzdE1hdGNoRnJvbUNvZGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuPXRoaXM7cmV0dXJuIGU%2FKGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZighdCl7dmFyIHI9bi5mb3JtYXRMYW5ndWFnZUNvZGUoZSk7bi5vcHRpb25zLnN1cHBvcnRlZExuZ3MmJiFuLmlzU3VwcG9ydGVkQ29kZShyKXx8KHQ9cil9fSksIXQmJnRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzJiZlLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIXQpe3ZhciByPW4uZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSk7aWYobi5pc1N1cHBvcnRlZENvZGUocikpcmV0dXJuIHQ9cjt0PW4ub3B0aW9ucy5zdXBwb3J0ZWRMbmdzLmZpbmQoZnVuY3Rpb24oZSl7aWYoMD09PWUuaW5kZXhPZihyKSlyZXR1cm4gZX0pfX0pLHR8fCh0PXRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpWzBdKSx0KTpudWxsfX0se2tleToiZ2V0RmFsbGJhY2tDb2RlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm5bXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSYmKGU9ZSh0KSksInN0cmluZyI9PXR5cGVvZiBlJiYoZT1bZV0pLCJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGUpKXJldHVybiBlO2lmKCF0KXJldHVybiBlLmRlZmF1bHR8fFtdO3ZhciBuPWVbdF07cmV0dXJuIG58fChuPWVbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lW3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHQpXSksbnx8KG49ZVt0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKHQpXSksbnx8KG49ZS5kZWZhdWx0KSxufHxbXX19LHtrZXk6InRvUmVzb2x2ZUhpZXJhcmNoeSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5nZXRGYWxsYmFja0NvZGVzKHR8fHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZ3x8W10sZSksbz1bXSxpPWZ1bmN0aW9uKGUpe2UmJihuLmlzU3VwcG9ydGVkQ29kZShlKT9vLnB1c2goZSk6bi5sb2dnZXIud2FybigicmVqZWN0aW5nIGxhbmd1YWdlIGNvZGUgbm90IGZvdW5kIGluIHN1cHBvcnRlZExuZ3M6ICIuY29uY2F0KGUpKSl9O3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5pbmRleE9mKCItIik%2BLTE%2FKCJsYW5ndWFnZU9ubHkiIT09dGhpcy5vcHRpb25zLmxvYWQmJmkodGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLCJsYW5ndWFnZU9ubHkiIT09dGhpcy5vcHRpb25zLmxvYWQmJiJjdXJyZW50T25seSIhPT10aGlzLm9wdGlvbnMubG9hZCYmaSh0aGlzLmdldFNjcmlwdFBhcnRGcm9tQ29kZShlKSksImN1cnJlbnRPbmx5IiE9PXRoaXMub3B0aW9ucy5sb2FkJiZpKHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSkpKToic3RyaW5nIj09dHlwZW9mIGUmJmkodGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLHIuZm9yRWFjaChmdW5jdGlvbihlKXtvLmluZGV4T2YoZSk8MCYmaShuLmZvcm1hdExhbmd1YWdlQ29kZShlKSl9KSxvfX1dKSxlfSgpLFhlPVt7bG5nczpbImFjaCIsImFrIiwiYW0iLCJhcm4iLCJiciIsImZpbCIsImd1biIsImxuIiwibWZlIiwibWciLCJtaSIsIm9jIiwicHQiLCJwdC1CUiIsInRnIiwidGkiLCJ0ciIsInV6Iiwid2EiXSxucjpbMSwyXSxmYzoxfSx7bG5nczpbImFmIiwiYW4iLCJhc3QiLCJheiIsImJnIiwiYm4iLCJjYSIsImRhIiwiZGUiLCJkZXYiLCJlbCIsImVuIiwiZW8iLCJlcyIsImV0IiwiZXUiLCJmaSIsImZvIiwiZnVyIiwiZnkiLCJnbCIsImd1IiwiaGEiLCJoaSIsImh1IiwiaHkiLCJpYSIsIml0Iiwia24iLCJrdSIsImxiIiwibWFpIiwibWwiLCJtbiIsIm1yIiwibmFoIiwibmFwIiwibmIiLCJuZSIsIm5sIiwibm4iLCJubyIsIm5zbyIsInBhIiwicGFwIiwicG1zIiwicHMiLCJwdC1QVCIsInJtIiwic2NvIiwic2UiLCJzaSIsInNvIiwic29uIiwic3EiLCJzdiIsInN3IiwidGEiLCJ0ZSIsInRrIiwidXIiLCJ5byJdLG5yOlsxLDJdLGZjOjJ9LHtsbmdzOlsiYXkiLCJibyIsImNnZyIsImZhIiwiaHQiLCJpZCIsImphIiwiamJvIiwia2EiLCJrayIsImttIiwia28iLCJreSIsImxvIiwibXMiLCJzYWgiLCJzdSIsInRoIiwidHQiLCJ1ZyIsInZpIiwid28iLCJ6aCJdLG5yOlsxXSxmYzozfSx7bG5nczpbImJlIiwiYnMiLCJjbnIiLCJkeiIsImhyIiwicnUiLCJzciIsInVrIl0sbnI6WzEsMiw1XSxmYzo0fSx7bG5nczpbImFyIl0sbnI6WzAsMSwyLDMsMTEsMTAwXSxmYzo1fSx7bG5nczpbImNzIiwic2siXSxucjpbMSwyLDVdLGZjOjZ9LHtsbmdzOlsiY3NiIiwicGwiXSxucjpbMSwyLDVdLGZjOjd9LHtsbmdzOlsiY3kiXSxucjpbMSwyLDMsOF0sZmM6OH0se2xuZ3M6WyJmciJdLG5yOlsxLDJdLGZjOjl9LHtsbmdzOlsiZ2EiXSxucjpbMSwyLDMsNywxMV0sZmM6MTB9LHtsbmdzOlsiZ2QiXSxucjpbMSwyLDMsMjBdLGZjOjExfSx7bG5nczpbImlzIl0sbnI6WzEsMl0sZmM6MTJ9LHtsbmdzOlsianYiXSxucjpbMCwxXSxmYzoxM30se2xuZ3M6WyJrdyJdLG5yOlsxLDIsMyw0XSxmYzoxNH0se2xuZ3M6WyJsdCJdLG5yOlsxLDIsMTBdLGZjOjE1fSx7bG5nczpbImx2Il0sbnI6WzEsMiwwXSxmYzoxNn0se2xuZ3M6WyJtayJdLG5yOlsxLDJdLGZjOjE3fSx7bG5nczpbIm1uayJdLG5yOlswLDEsMl0sZmM6MTh9LHtsbmdzOlsibXQiXSxucjpbMSwyLDExLDIwXSxmYzoxOX0se2xuZ3M6WyJvciJdLG5yOlsyLDFdLGZjOjJ9LHtsbmdzOlsicm8iXSxucjpbMSwyLDIwXSxmYzoyMH0se2xuZ3M6WyJzbCJdLG5yOls1LDEsMiwzXSxmYzoyMX0se2xuZ3M6WyJoZSIsIml3Il0sbnI6WzEsMiwyMCwyMV0sZmM6MjJ9XSxKZT17MTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGU%2BMSl9LDI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxIT1lKX0sMzpmdW5jdGlvbihlKXtyZXR1cm4gMH0sNDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTA9PTEmJmUlMTAwIT0xMT8wOmUlMTA%2BPTImJmUlMTA8PTQmJihlJTEwMDwxMHx8ZSUxMDA%2BPTIwKT8xOjIpfSw1OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMD09ZT8wOjE9PWU%2FMToyPT1lPzI6ZSUxMDA%2BPTMmJmUlMTAwPD0xMD8zOmUlMTAwPj0xMT80OjUpfSw2OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOmU%2BPTImJmU8PTQ%2FMToyKX0sNzpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU%2FMDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk%2FMToyKX0sODpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU%2FMDoyPT1lPzE6OCE9ZSYmMTEhPWU%2FMjozKX0sOTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGU%2BPTIpfSwxMDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU%2FMDoyPT1lPzE6ZTw3PzI6ZTwxMT8zOjQpfSwxMTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWV8fDExPT1lPzA6Mj09ZXx8MTI9PWU%2FMTplPjImJmU8MjA%2FMjozKX0sMTI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwIT0xfHxlJTEwMD09MTEpfSwxMzpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDAhPT1lKX0sMTQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOjM9PWU%2FMjozKX0sMTU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE%2FMDplJTEwPj0yJiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk%2FMToyKX0sMTY6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE%2FMDowIT09ZT8xOjIpfSwxNzpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWV8fGUlMTA9PTEmJmUlMTAwIT0xMT8wOjEpfSwxODpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDA9PWU%2FMDoxPT1lPzE6Mil9LDE5OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjA9PWV8fGUlMTAwPjEmJmUlMTAwPDExPzE6ZSUxMDA%2BMTAmJmUlMTAwPDIwPzI6Myl9LDIwOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjA9PWV8fGUlMTAwPjAmJmUlMTAwPDIwPzE6Mil9LDIxOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMDA9PTE%2FMTplJTEwMD09Mj8yOmUlMTAwPT0zfHxlJTEwMD09ND8zOjApfSwyMjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU%2FMDoyPT1lPzE6KGU8MHx8ZT4xMCkmJmUlMTA9PTA%2FMjozKX19O3ZhciBZZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG4scj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307d2UodGhpcyxlKSx0aGlzLmxhbmd1YWdlVXRpbHM9dCx0aGlzLm9wdGlvbnM9cix0aGlzLmxvZ2dlcj1BZS5jcmVhdGUoInBsdXJhbFJlc29sdmVyIiksdGhpcy5ydWxlcz0obj17fSxYZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UubG5ncy5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09e251bWJlcnM6ZS5ucixwbHVyYWxzOkplW2UuZmNdfX0pfSksbil9cmV0dXJuIFNlKGUsW3trZXk6ImFkZFJ1bGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5ydWxlc1tlXT10fX0se2tleToiZ2V0UnVsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucnVsZXNbZV18fHRoaXMucnVsZXNbdGhpcy5sYW5ndWFnZVV0aWxzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpXX19LHtrZXk6Im5lZWRzUGx1cmFsIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFJ1bGUoZSk7cmV0dXJuIHQmJnQubnVtYmVycy5sZW5ndGg%2BMX19LHtrZXk6ImdldFBsdXJhbEZvcm1zT2ZLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPVtdLG89dGhpcy5nZXRSdWxlKGUpO3JldHVybiBvPyhvLm51bWJlcnMuZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgaT1uLmdldFN1ZmZpeChlLG8pO3IucHVzaCgiIi5jb25jYXQodCkuY29uY2F0KGkpKX0pLHIpOnJ9fSx7a2V5OiJnZXRTdWZmaXgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuZ2V0UnVsZShlKTtpZihyKXt2YXIgbz1yLm5vQWJzP3IucGx1cmFscyh0KTpyLnBsdXJhbHMoTWF0aC5hYnModCkpLGk9ci5udW1iZXJzW29dO3RoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCYmMj09PXIubnVtYmVycy5sZW5ndGgmJjE9PT1yLm51bWJlcnNbMF0mJigyPT09aT9pPSJwbHVyYWwiOjE9PT1pJiYoaT0iIikpO3ZhciBhPWZ1bmN0aW9uKCl7cmV0dXJuIG4ub3B0aW9ucy5wcmVwZW5kJiZpLnRvU3RyaW5nKCk%2Fbi5vcHRpb25zLnByZXBlbmQraS50b1N0cmluZygpOmkudG9TdHJpbmcoKX07cmV0dXJuInYxIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj8xPT09aT8iIjoibnVtYmVyIj09dHlwZW9mIGk%2FIl9wbHVyYWxfIi5jb25jYXQoaS50b1N0cmluZygpKTphKCk6InYyIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj9hKCk6dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4JiYyPT09ci5udW1iZXJzLmxlbmd0aCYmMT09PXIubnVtYmVyc1swXT9hKCk6dGhpcy5vcHRpb25zLnByZXBlbmQmJm8udG9TdHJpbmcoKT90aGlzLm9wdGlvbnMucHJlcGVuZCtvLnRvU3RyaW5nKCk6by50b1N0cmluZygpfXJldHVybiB0aGlzLmxvZ2dlci53YXJuKCJubyBwbHVyYWwgcnVsZSBmb3VuZCBmb3I6ICIuY29uY2F0KGUpKSwiIn19XSksZX0oKSxRZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307d2UodGhpcyxlKSx0aGlzLmxvZ2dlcj1BZS5jcmVhdGUoImludGVycG9sYXRvciIpLHRoaXMub3B0aW9ucz10LHRoaXMuZm9ybWF0PXQuaW50ZXJwb2xhdGlvbiYmdC5pbnRlcnBvbGF0aW9uLmZvcm1hdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHRoaXMuaW5pdCh0KX1yZXR1cm4gU2UoZSxbe2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZS5pbnRlcnBvbGF0aW9ufHwoZS5pbnRlcnBvbGF0aW9uPXtlc2NhcGVWYWx1ZTohMH0pO3ZhciB0PWUuaW50ZXJwb2xhdGlvbjt0aGlzLmVzY2FwZT12b2lkIDAhPT10LmVzY2FwZT90LmVzY2FwZTp6ZSx0aGlzLmVzY2FwZVZhbHVlPXZvaWQgMD09PXQuZXNjYXBlVmFsdWV8fHQuZXNjYXBlVmFsdWUsdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlPXZvaWQgMCE9PXQudXNlUmF3VmFsdWVUb0VzY2FwZSYmdC51c2VSYXdWYWx1ZVRvRXNjYXBlLHRoaXMucHJlZml4PXQucHJlZml4P0ZlKHQucHJlZml4KTp0LnByZWZpeEVzY2FwZWR8fCJ7eyIsdGhpcy5zdWZmaXg9dC5zdWZmaXg%2FRmUodC5zdWZmaXgpOnQuc3VmZml4RXNjYXBlZHx8In19Iix0aGlzLmZvcm1hdFNlcGFyYXRvcj10LmZvcm1hdFNlcGFyYXRvcj90LmZvcm1hdFNlcGFyYXRvcjp0LmZvcm1hdFNlcGFyYXRvcnx8IiwiLHRoaXMudW5lc2NhcGVQcmVmaXg9dC51bmVzY2FwZVN1ZmZpeD8iIjp0LnVuZXNjYXBlUHJlZml4fHwiLSIsdGhpcy51bmVzY2FwZVN1ZmZpeD10aGlzLnVuZXNjYXBlUHJlZml4PyIiOnQudW5lc2NhcGVTdWZmaXh8fCIiLHRoaXMubmVzdGluZ1ByZWZpeD10Lm5lc3RpbmdQcmVmaXg%2FRmUodC5uZXN0aW5nUHJlZml4KTp0Lm5lc3RpbmdQcmVmaXhFc2NhcGVkfHxGZSgiJHQoIiksdGhpcy5uZXN0aW5nU3VmZml4PXQubmVzdGluZ1N1ZmZpeD9GZSh0Lm5lc3RpbmdTdWZmaXgpOnQubmVzdGluZ1N1ZmZpeEVzY2FwZWR8fEZlKCIpIiksdGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcj10Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yP3QubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I6dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcnx8IiwiLHRoaXMubWF4UmVwbGFjZXM9dC5tYXhSZXBsYWNlcz90Lm1heFJlcGxhY2VzOjFlMyx0aGlzLmFsd2F5c0Zvcm1hdD12b2lkIDAhPT10LmFsd2F5c0Zvcm1hdCYmdC5hbHdheXNGb3JtYXQsdGhpcy5yZXNldFJlZ0V4cCgpfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zJiZ0aGlzLmluaXQodGhpcy5vcHRpb25zKX19LHtrZXk6InJlc2V0UmVnRXhwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSIiLmNvbmNhdCh0aGlzLnByZWZpeCwiKC4rPykiKS5jb25jYXQodGhpcy5zdWZmaXgpO3RoaXMucmVnZXhwPW5ldyBSZWdFeHAoZSwiZyIpO3ZhciB0PSIiLmNvbmNhdCh0aGlzLnByZWZpeCkuY29uY2F0KHRoaXMudW5lc2NhcGVQcmVmaXgsIiguKz8pIikuY29uY2F0KHRoaXMudW5lc2NhcGVTdWZmaXgpLmNvbmNhdCh0aGlzLnN1ZmZpeCk7dGhpcy5yZWdleHBVbmVzY2FwZT1uZXcgUmVnRXhwKHQsImciKTt2YXIgbj0iIi5jb25jYXQodGhpcy5uZXN0aW5nUHJlZml4LCIoLis%2FKSIpLmNvbmNhdCh0aGlzLm5lc3RpbmdTdWZmaXgpO3RoaXMubmVzdGluZ1JlZ2V4cD1uZXcgUmVnRXhwKG4sImciKX19LHtrZXk6ImludGVycG9sYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgbyxpLGEscz10aGlzLHU9dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiYmdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlc3x8e307ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9cJC9nLCIkJCQkIil9dmFyIGw9ZnVuY3Rpb24oZSl7aWYoZS5pbmRleE9mKHMuZm9ybWF0U2VwYXJhdG9yKTwwKXt2YXIgbz1NZSh0LHUsZSk7cmV0dXJuIHMuYWx3YXlzRm9ybWF0P3MuZm9ybWF0KG8sdm9pZCAwLG4pOm99dmFyIGk9ZS5zcGxpdChzLmZvcm1hdFNlcGFyYXRvciksYT1pLnNoaWZ0KCkudHJpbSgpLGM9aS5qb2luKHMuZm9ybWF0U2VwYXJhdG9yKS50cmltKCk7cmV0dXJuIHMuZm9ybWF0KE1lKHQsdSxhKSxjLG4scil9O3RoaXMucmVzZXRSZWdFeHAoKTt2YXIgZj1yJiZyLm1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcnx8dGhpcy5vcHRpb25zLm1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcixwPXImJnIuaW50ZXJwb2xhdGlvbiYmci5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlc3x8dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzO3JldHVyblt7cmVnZXg6dGhpcy5yZWdleHBVbmVzY2FwZSxzYWZlVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9fSx7cmVnZXg6dGhpcy5yZWdleHAsc2FmZVZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBzLmVzY2FwZVZhbHVlP2Mocy5lc2NhcGUoZSkpOmMoZSl9fV0uZm9yRWFjaChmdW5jdGlvbih0KXtmb3IoYT0wO289dC5yZWdleC5leGVjKGUpOyl7aWYodm9pZCAwPT09KGk9bChvWzFdLnRyaW0oKSkpKWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXt2YXIgbj1mKGUsbyxyKTtpPSJzdHJpbmciPT10eXBlb2Ygbj9uOiIifWVsc2V7aWYocCl7aT1vWzBdO2NvbnRpbnVlfXMubG9nZ2VyLndhcm4oIm1pc3NlZCB0byBwYXNzIGluIHZhcmlhYmxlICIuY29uY2F0KG9bMV0sIiBmb3IgaW50ZXJwb2xhdGluZyAiKS5jb25jYXQoZSkpLGk9IiJ9ZWxzZSJzdHJpbmciPT10eXBlb2YgaXx8cy51c2VSYXdWYWx1ZVRvRXNjYXBlfHwoaT1EZShpKSk7aWYoZT1lLnJlcGxhY2Uob1swXSx0LnNhZmVWYWx1ZShpKSksdC5yZWdleC5sYXN0SW5kZXg9MCwrK2E%2BPXMubWF4UmVwbGFjZXMpYnJlYWt9fSksZX19LHtrZXk6Im5lc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPXRoaXMsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30sYT14ZSh7fSxpKTtmdW5jdGlvbiBzKGUsdCl7dmFyIG49dGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjtpZihlLmluZGV4T2Yobik8MClyZXR1cm4gZTt2YXIgcj1lLnNwbGl0KG5ldyBSZWdFeHAoIiIuY29uY2F0KG4sIlsgXSp7IikpKSxvPSJ7Ii5jb25jYXQoclsxXSk7ZT1yWzBdLG89KG89dGhpcy5pbnRlcnBvbGF0ZShvLGEpKS5yZXBsYWNlKC8nL2csJyInKTt0cnl7YT1KU09OLnBhcnNlKG8pLHQmJihhPXhlKHt9LHQsYSkpfWNhdGNoKHQpe3JldHVybiB0aGlzLmxvZ2dlci53YXJuKCJmYWlsZWQgcGFyc2luZyBvcHRpb25zIHN0cmluZyBpbiBuZXN0aW5nIGZvciBrZXkgIi5jb25jYXQoZSksdCksIiIuY29uY2F0KGUpLmNvbmNhdChuKS5jb25jYXQobyl9cmV0dXJuIGRlbGV0ZSBhLmRlZmF1bHRWYWx1ZSxlfWZvcihhLmFwcGx5UG9zdFByb2Nlc3Nvcj0hMSxkZWxldGUgYS5kZWZhdWx0VmFsdWU7bj10aGlzLm5lc3RpbmdSZWdleHAuZXhlYyhlKTspe3ZhciB1PVtdLGM9ITE7aWYoblswXS5pbmNsdWRlcyh0aGlzLmZvcm1hdFNlcGFyYXRvcikmJiEvey4qfS8udGVzdChuWzFdKSl7dmFyIGw9blsxXS5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pO25bMV09bC5zaGlmdCgpLHU9bCxjPSEwfWlmKChyPXQocy5jYWxsKHRoaXMsblsxXS50cmltKCksYSksYSkpJiZuWzBdPT09ZSYmInN0cmluZyIhPXR5cGVvZiByKXJldHVybiByOyJzdHJpbmciIT10eXBlb2YgciYmKHI9RGUocikpLHJ8fCh0aGlzLmxvZ2dlci53YXJuKCJtaXNzZWQgdG8gcmVzb2x2ZSAiLmNvbmNhdChuWzFdLCIgZm9yIG5lc3RpbmcgIikuY29uY2F0KGUpKSxyPSIiKSxjJiYocj11LnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBvLmZvcm1hdChlLHQsaS5sbmcsaSl9LHIudHJpbSgpKSksZT1lLnJlcGxhY2UoblswXSxyKSx0aGlzLnJlZ2V4cC5sYXN0SW5kZXg9MH1yZXR1cm4gZX19XSksZX0oKTt2YXIgWmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4scil7dmFyIG8saT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307cmV0dXJuIHdlKHRoaXMsdCksbz1qZSh0aGlzLFRlKHQpLmNhbGwodGhpcykpLFdlJiZQZS5jYWxsKE9lKG8pKSxvLmJhY2tlbmQ9ZSxvLnN0b3JlPW4sby5zZXJ2aWNlcz1yLG8ubGFuZ3VhZ2VVdGlscz1yLmxhbmd1YWdlVXRpbHMsby5vcHRpb25zPWksby5sb2dnZXI9QWUuY3JlYXRlKCJiYWNrZW5kQ29ubmVjdG9yIiksby5zdGF0ZT17fSxvLnF1ZXVlPVtdLG8uYmFja2VuZCYmby5iYWNrZW5kLmluaXQmJm8uYmFja2VuZC5pbml0KHIsaS5iYWNrZW5kLGkpLG99cmV0dXJuIExlKHQsUGUpLFNlKHQsW3trZXk6InF1ZXVlTG9hZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcyxpPVtdLGE9W10scz1bXSx1PVtdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ITA7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBzPSIiLmNvbmNhdChlLCJ8IikuY29uY2F0KHQpOyFuLnJlbG9hZCYmby5zdG9yZS5oYXNSZXNvdXJjZUJ1bmRsZShlLHQpP28uc3RhdGVbc109MjpvLnN0YXRlW3NdPDB8fCgxPT09by5zdGF0ZVtzXT9hLmluZGV4T2Yocyk8MCYmYS5wdXNoKHMpOihvLnN0YXRlW3NdPTEscj0hMSxhLmluZGV4T2Yocyk8MCYmYS5wdXNoKHMpLGkuaW5kZXhPZihzKTwwJiZpLnB1c2gocyksdS5pbmRleE9mKHQpPDAmJnUucHVzaCh0KSkpfSkscnx8cy5wdXNoKGUpfSksKGkubGVuZ3RofHxhLmxlbmd0aCkmJnRoaXMucXVldWUucHVzaCh7cGVuZGluZzphLGxvYWRlZDp7fSxlcnJvcnM6W10sY2FsbGJhY2s6cn0pLHt0b0xvYWQ6aSxwZW5kaW5nOmEsdG9Mb2FkTGFuZ3VhZ2VzOnMsdG9Mb2FkTmFtZXNwYWNlczp1fX19LHtrZXk6ImxvYWRlZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuc3BsaXQoInwiKSxvPXJbMF0saT1yWzFdO3QmJnRoaXMuZW1pdCgiZmFpbGVkTG9hZGluZyIsbyxpLHQpLG4mJnRoaXMuc3RvcmUuYWRkUmVzb3VyY2VCdW5kbGUobyxpLG4pLHRoaXMuc3RhdGVbZV09dD8tMToyO3ZhciBhPXt9O3RoaXMucXVldWUuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixzLHUsYyxsLGY7cj1uLmxvYWRlZCxzPWksYz1SZShyLFtvXSxPYmplY3QpLGw9Yy5vYmosZj1jLmssbFtmXT1sW2ZdfHxbXSx1JiYobFtmXT1sW2ZdLmNvbmNhdChzKSksdXx8bFtmXS5wdXNoKHMpLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUuaW5kZXhPZih0KTstMSE9PW47KWUuc3BsaWNlKG4sMSksbj1lLmluZGV4T2YodCl9KG4ucGVuZGluZyxlKSx0JiZuLmVycm9ycy5wdXNoKHQpLDAhPT1uLnBlbmRpbmcubGVuZ3RofHxuLmRvbmV8fChPYmplY3Qua2V5cyhuLmxvYWRlZCkuZm9yRWFjaChmdW5jdGlvbihlKXthW2VdfHwoYVtlXT1bXSksbi5sb2FkZWRbZV0ubGVuZ3RoJiZuLmxvYWRlZFtlXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbZV0uaW5kZXhPZih0KTwwJiZhW2VdLnB1c2godCl9KX0pLG4uZG9uZT0hMCxuLmVycm9ycy5sZW5ndGg%2Fbi5jYWxsYmFjayhuLmVycm9ycyk6bi5jYWxsYmFjaygpKX0pLHRoaXMuZW1pdCgibG9hZGVkIixhKSx0aGlzLnF1ZXVlPXRoaXMucXVldWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRvbmV9KX19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10%2FYXJndW1lbnRzWzNdOjAsaT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06MzUwLGE9YXJndW1lbnRzLmxlbmd0aD41P2FyZ3VtZW50c1s1XTp2b2lkIDA7cmV0dXJuIGUubGVuZ3RoP3RoaXMuYmFja2VuZFtuXShlLHQsZnVuY3Rpb24ocyx1KXtzJiZ1JiZvPDU%2Fc2V0VGltZW91dChmdW5jdGlvbigpe3IucmVhZC5jYWxsKHIsZSx0LG4sbysxLDIqaSxhKX0saSk6YShzLHUpfSk6YShudWxsLHt9KX19LHtrZXk6InByZXBhcmVMb2FkaW5nIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30sbz1hcmd1bWVudHMubGVuZ3RoPjM%2FYXJndW1lbnRzWzNdOnZvaWQgMDtpZighdGhpcy5iYWNrZW5kKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKCJObyBiYWNrZW5kIHdhcyBhZGRlZCB2aWEgaTE4bmV4dC51c2UuIFdpbGwgbm90IGxvYWQgcmVzb3VyY2VzLiIpLG8mJm8oKTsic3RyaW5nIj09dHlwZW9mIGUmJihlPXRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkoZSkpLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W3RdKTt2YXIgaT10aGlzLnF1ZXVlTG9hZChlLHQscixvKTtpZighaS50b0xvYWQubGVuZ3RoKXJldHVybiBpLnBlbmRpbmcubGVuZ3RofHxvKCksbnVsbDtpLnRvTG9hZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe24ubG9hZE9uZShlKX0pfX0se2tleToibG9hZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3RoaXMucHJlcGFyZUxvYWRpbmcoZSx0LHt9LG4pfX0se2tleToicmVsb2FkIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dGhpcy5wcmVwYXJlTG9hZGluZyhlLHQse3JlbG9hZDohMH0sbil9fSx7a2V5OiJsb2FkT25lIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0%2FYXJndW1lbnRzWzFdOiIiLHI9ZS5zcGxpdCgifCIpLG89clswXSxpPXJbMV07dGhpcy5yZWFkKG8saSwicmVhZCIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbihyLGEpe3ImJnQubG9nZ2VyLndhcm4oIiIuY29uY2F0KG4sImxvYWRpbmcgbmFtZXNwYWNlICIpLmNvbmNhdChpLCIgZm9yIGxhbmd1YWdlICIpLmNvbmNhdChvLCIgZmFpbGVkIiksciksIXImJmEmJnQubG9nZ2VyLmxvZygiIi5jb25jYXQobiwibG9hZGVkIG5hbWVzcGFjZSAiKS5jb25jYXQoaSwiIGZvciBsYW5ndWFnZSAiKS5jb25jYXQobyksYSksdC5sb2FkZWQoZSxyLGEpfSl9fSx7a2V5OiJzYXZlTWlzc2luZyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06e307dGhpcy5zZXJ2aWNlcy51dGlscyYmdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UmJiF0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSh0KT90aGlzLmxvZ2dlci53YXJuKCdkaWQgbm90IHNhdmUga2V5ICInLmNvbmNhdChuLCciIGFzIHRoZSBuYW1lc3BhY2UgIicpLmNvbmNhdCh0LCciIHdhcyBub3QgeWV0IGxvYWRlZCcpLCJUaGlzIG1lYW5zIHNvbWV0aGluZyBJUyBXUk9ORyBpbiB5b3VyIHNldHVwLiBZb3UgYWNjZXNzIHRoZSB0IGZ1bmN0aW9uIGJlZm9yZSBpMThuZXh0LmluaXQgLyBpMThuZXh0LmxvYWROYW1lc3BhY2UgLyBpMThuZXh0LmNoYW5nZUxhbmd1YWdlIHdhcyBkb25lLiBXYWl0IGZvciB0aGUgY2FsbGJhY2sgb3IgUHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBhY2Nlc3NpbmcgaXQhISEiKTpudWxsIT1uJiYiIiE9PW4mJih0aGlzLmJhY2tlbmQmJnRoaXMuYmFja2VuZC5jcmVhdGUmJnRoaXMuYmFja2VuZC5jcmVhdGUoZSx0LG4scixudWxsLHhlKHt9LGkse2lzVXBkYXRlOm99KSksZSYmZVswXSYmdGhpcy5zdG9yZS5hZGRSZXNvdXJjZShlWzBdLHQsbixyKSl9fV0pLHR9KCk7ZnVuY3Rpb24gZXQoKXtyZXR1cm57ZGVidWc6ITEsaW5pdEltbWVkaWF0ZTohMCxuczpbInRyYW5zbGF0aW9uIl0sZGVmYXVsdE5TOlsidHJhbnNsYXRpb24iXSxmYWxsYmFja0xuZzpbImRldiJdLGZhbGxiYWNrTlM6ITEsd2hpdGVsaXN0OiExLG5vbkV4cGxpY2l0V2hpdGVsaXN0OiExLHN1cHBvcnRlZExuZ3M6ITEsbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiExLGxvYWQ6ImFsbCIscHJlbG9hZDohMSxzaW1wbGlmeVBsdXJhbFN1ZmZpeDohMCxrZXlTZXBhcmF0b3I6Ii4iLG5zU2VwYXJhdG9yOiI6IixwbHVyYWxTZXBhcmF0b3I6Il8iLGNvbnRleHRTZXBhcmF0b3I6Il8iLHBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzOiExLHNhdmVNaXNzaW5nOiExLHVwZGF0ZU1pc3Npbmc6ITEsc2F2ZU1pc3NpbmdUbzoiZmFsbGJhY2siLHNhdmVNaXNzaW5nUGx1cmFsczohMCxtaXNzaW5nS2V5SGFuZGxlcjohMSxtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6ITEscG9zdFByb2Nlc3M6ITEscG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQ6ITEscmV0dXJuTnVsbDohMCxyZXR1cm5FbXB0eVN0cmluZzohMCxyZXR1cm5PYmplY3RzOiExLGpvaW5BcnJheXM6ITEscmV0dXJuZWRPYmplY3RIYW5kbGVyOiExLHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6ITEsYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiExLGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlOiExLG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O2lmKCJvYmplY3QiPT09bWUoZVsxXSkmJih0PWVbMV0pLCJzdHJpbmciPT10eXBlb2YgZVsxXSYmKHQuZGVmYXVsdFZhbHVlPWVbMV0pLCJzdHJpbmciPT10eXBlb2YgZVsyXSYmKHQudERlc2NyaXB0aW9uPWVbMl0pLCJvYmplY3QiPT09bWUoZVsyXSl8fCJvYmplY3QiPT09bWUoZVszXSkpe3ZhciBuPWVbM118fGVbMl07T2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPW5bZV19KX1yZXR1cm4gdH0saW50ZXJwb2xhdGlvbjp7ZXNjYXBlVmFsdWU6ITAsZm9ybWF0OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlfSxwcmVmaXg6Int7IixzdWZmaXg6In19Iixmb3JtYXRTZXBhcmF0b3I6IiwiLHVuZXNjYXBlUHJlZml4OiItIixuZXN0aW5nUHJlZml4OiIkdCgiLG5lc3RpbmdTdWZmaXg6IikiLG5lc3RpbmdPcHRpb25zU2VwYXJhdG9yOiIsIixtYXhSZXBsYWNlczoxZTMsc2tpcE9uVmFyaWFibGVzOiExfX19ZnVuY3Rpb24gdHQoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlLm5zJiYoZS5ucz1bZS5uc10pLCJzdHJpbmciPT10eXBlb2YgZS5mYWxsYmFja0xuZyYmKGUuZmFsbGJhY2tMbmc9W2UuZmFsbGJhY2tMbmddKSwic3RyaW5nIj09dHlwZW9mIGUuZmFsbGJhY2tOUyYmKGUuZmFsbGJhY2tOUz1bZS5mYWxsYmFja05TXSksZS53aGl0ZWxpc3QmJihlLndoaXRlbGlzdCYmZS53aGl0ZWxpc3QuaW5kZXhPZigiY2ltb2RlIik8MCYmKGUud2hpdGVsaXN0PWUud2hpdGVsaXN0LmNvbmNhdChbImNpbW9kZSJdKSksZS5zdXBwb3J0ZWRMbmdzPWUud2hpdGVsaXN0KSxlLm5vbkV4cGxpY2l0V2hpdGVsaXN0JiYoZS5ub25FeHBsaWNpdFN1cHBvcnRlZExuZ3M9ZS5ub25FeHBsaWNpdFdoaXRlbGlzdCksZS5zdXBwb3J0ZWRMbmdzJiZlLnN1cHBvcnRlZExuZ3MuaW5kZXhPZigiY2ltb2RlIik8MCYmKGUuc3VwcG9ydGVkTG5ncz1lLnN1cHBvcnRlZExuZ3MuY29uY2F0KFsiY2ltb2RlIl0pKSxlfWZ1bmN0aW9uIG50KCl7fXZhciBydD1uZXcoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0%2FYXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7aWYod2UodGhpcyx0KSxlPWplKHRoaXMsVGUodCkuY2FsbCh0aGlzKSksV2UmJlBlLmNhbGwoT2UoZSkpLGUub3B0aW9ucz10dChuKSxlLnNlcnZpY2VzPXt9LGUubG9nZ2VyPUFlLGUubW9kdWxlcz17ZXh0ZXJuYWw6W119LHImJiFlLmlzSW5pdGlhbGl6ZWQmJiFuLmlzQ2xvbmUpe2lmKCFlLm9wdGlvbnMuaW5pdEltbWVkaWF0ZSlyZXR1cm4gZS5pbml0KG4sciksamUoZSxPZShlKSk7c2V0VGltZW91dChmdW5jdGlvbigpe2UuaW5pdChuLHIpfSwwKX1yZXR1cm4gZX1yZXR1cm4gTGUodCxQZSksU2UodCxbe2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0%2FYXJndW1lbnRzWzBdOnt9LG49YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZT8iZnVuY3Rpb24iPT10eXBlb2YgZT9uZXcgZTplOm51bGx9aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJihuPXQsdD17fSksdC53aGl0ZWxpc3QmJiF0LnN1cHBvcnRlZExuZ3MmJnRoaXMubG9nZ2VyLmRlcHJlY2F0ZSgid2hpdGVsaXN0Iiwnb3B0aW9uICJ3aGl0ZWxpc3QiIHdpbGwgYmUgcmVuYW1lZCB0byAic3VwcG9ydGVkTG5ncyIgaW4gdGhlIG5leHQgbWFqb3IgLSBwbGVhc2UgbWFrZSBzdXJlIHRvIHJlbmFtZSB0aGlzIG9wdGlvbiBhc2FwLicpLHQubm9uRXhwbGljaXRXaGl0ZWxpc3QmJiF0Lm5vbkV4cGxpY2l0U3VwcG9ydGVkTG5ncyYmdGhpcy5sb2dnZXIuZGVwcmVjYXRlKCJ3aGl0ZWxpc3QiLCdvcHRpb25zICJub25FeHBsaWNpdFdoaXRlbGlzdCIgd2lsbCBiZSByZW5hbWVkIHRvICJub25FeHBsaWNpdFN1cHBvcnRlZExuZ3MiIGluIHRoZSBuZXh0IG1ham9yIC0gcGxlYXNlIG1ha2Ugc3VyZSB0byByZW5hbWUgdGhpcyBvcHRpb24gYXNhcC4nKSx0aGlzLm9wdGlvbnM9eGUoe30sZXQoKSx0aGlzLm9wdGlvbnMsdHQodCkpLHRoaXMuZm9ybWF0PXRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCxufHwobj1udCksIXRoaXMub3B0aW9ucy5pc0Nsb25lKXt0aGlzLm1vZHVsZXMubG9nZ2VyP0FlLmluaXQocih0aGlzLm1vZHVsZXMubG9nZ2VyKSx0aGlzLm9wdGlvbnMpOkFlLmluaXQobnVsbCx0aGlzLm9wdGlvbnMpO3ZhciBvPW5ldyBHZSh0aGlzLm9wdGlvbnMpO3RoaXMuc3RvcmU9bmV3IFVlKHRoaXMub3B0aW9ucy5yZXNvdXJjZXMsdGhpcy5vcHRpb25zKTt2YXIgaT10aGlzLnNlcnZpY2VzO2kubG9nZ2VyPUFlLGkucmVzb3VyY2VTdG9yZT10aGlzLnN0b3JlLGkubGFuZ3VhZ2VVdGlscz1vLGkucGx1cmFsUmVzb2x2ZXI9bmV3IFllKG8se3ByZXBlbmQ6dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcixjb21wYXRpYmlsaXR5SlNPTjp0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04sc2ltcGxpZnlQbHVyYWxTdWZmaXg6dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4fSksaS5pbnRlcnBvbGF0b3I9bmV3IFFlKHRoaXMub3B0aW9ucyksaS51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOnRoaXMuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQodGhpcyl9LGkuYmFja2VuZENvbm5lY3Rvcj1uZXcgWmUocih0aGlzLm1vZHVsZXMuYmFja2VuZCksaS5yZXNvdXJjZVN0b3JlLGksdGhpcy5vcHRpb25zKSxpLmJhY2tlbmRDb25uZWN0b3Iub24oIioiLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4%2BMT9uLTE6MCksbz0xO288bjtvKyspcltvLTFdPWFyZ3VtZW50c1tvXTtlLmVtaXQuYXBwbHkoZSxbdF0uY29uY2F0KHIpKX0pLHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yJiYoaS5sYW5ndWFnZURldGVjdG9yPXIodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IpLGkubGFuZ3VhZ2VEZXRlY3Rvci5pbml0KGksdGhpcy5vcHRpb25zLmRldGVjdGlvbix0aGlzLm9wdGlvbnMpKSx0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCYmKGkuaTE4bkZvcm1hdD1yKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KSxpLmkxOG5Gb3JtYXQuaW5pdCYmaS5pMThuRm9ybWF0LmluaXQodGhpcykpLHRoaXMudHJhbnNsYXRvcj1uZXcgVmUodGhpcy5zZXJ2aWNlcyx0aGlzLm9wdGlvbnMpLHRoaXMudHJhbnNsYXRvci5vbigiKiIsZnVuY3Rpb24odCl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2UuZW1pdC5hcHBseShlLFt0XS5jb25jYXQocikpfSksdGhpcy5tb2R1bGVzLmV4dGVybmFsLmZvckVhY2goZnVuY3Rpb24odCl7dC5pbml0JiZ0LmluaXQoZSl9KX10aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3J8fHRoaXMub3B0aW9ucy5sbmd8fHRoaXMubG9nZ2VyLndhcm4oImluaXQ6IG5vIGxhbmd1YWdlRGV0ZWN0b3IgaXMgdXNlZCBhbmQgbm8gbG5nIGlzIGRlZmluZWQiKTt2YXIgYT1bImdldFJlc291cmNlIiwiaGFzUmVzb3VyY2VCdW5kbGUiLCJnZXRSZXNvdXJjZUJ1bmRsZSIsImdldERhdGFCeUxhbmd1YWdlIl07YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oKXt2YXIgbjtyZXR1cm4obj1lLnN0b3JlKVt0XS5hcHBseShuLGFyZ3VtZW50cyl9fSk7dmFyIHM9WyJhZGRSZXNvdXJjZSIsImFkZFJlc291cmNlcyIsImFkZFJlc291cmNlQnVuZGxlIiwicmVtb3ZlUmVzb3VyY2VCdW5kbGUiXTtzLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbigpe3ZhciBuO3JldHVybihuPWUuc3RvcmUpW3RdLmFwcGx5KG4sYXJndW1lbnRzKSxlfX0pO3ZhciB1PU5lKCksYz1mdW5jdGlvbigpe2UuY2hhbmdlTGFuZ3VhZ2UoZS5vcHRpb25zLmxuZyxmdW5jdGlvbih0LHIpe2UuaXNJbml0aWFsaXplZD0hMCxlLm9wdGlvbnMuaXNDbG9uZXx8ZS5sb2dnZXIubG9nKCJpbml0aWFsaXplZCIsZS5vcHRpb25zKSxlLmVtaXQoImluaXRpYWxpemVkIixlLm9wdGlvbnMpLHUucmVzb2x2ZShyKSxuKHQscil9KX07cmV0dXJuIHRoaXMub3B0aW9ucy5yZXNvdXJjZXN8fCF0aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZT9jKCk6c2V0VGltZW91dChjLDApLHV9fSx7a2V5OiJsb2FkUmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0%2FYXJndW1lbnRzWzFdOm50LHI9bixvPSJzdHJpbmciPT10eXBlb2YgZT9lOnRoaXMubGFuZ3VhZ2U7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUmJihyPWUpLCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzfHx0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpe2lmKG8mJiJjaW1vZGUiPT09by50b0xvd2VyQ2FzZSgpKXJldHVybiByKCk7dmFyIGk9W10sYT1mdW5jdGlvbihlKXtlJiZ0LnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGUpLmZvckVhY2goZnVuY3Rpb24oZSl7aS5pbmRleE9mKGUpPDAmJmkucHVzaChlKX0pfTtpZihvKWEobyk7ZWxzZXt2YXIgcz10aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpO3MuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gYShlKX0pfXRoaXMub3B0aW9ucy5wcmVsb2FkJiZ0aGlzLm9wdGlvbnMucHJlbG9hZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBhKGUpfSksdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmxvYWQoaSx0aGlzLm9wdGlvbnMubnMscil9ZWxzZSByKG51bGwpfX0se2tleToicmVsb2FkUmVzb3VyY2VzIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9TmUoKTtyZXR1cm4gZXx8KGU9dGhpcy5sYW5ndWFnZXMpLHR8fCh0PXRoaXMub3B0aW9ucy5ucyksbnx8KG49bnQpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5yZWxvYWQoZSx0LGZ1bmN0aW9uKGUpe3IucmVzb2x2ZSgpLG4oZSl9KSxyfX0se2tleToidXNlIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBhcmUgcGFzc2luZyBhbiB1bmRlZmluZWQgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKSIpO2lmKCFlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJZb3UgYXJlIHBhc3NpbmcgYSB3cm9uZyBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpIik7cmV0dXJuImJhY2tlbmQiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmJhY2tlbmQ9ZSksKCJsb2dnZXIiPT09ZS50eXBlfHxlLmxvZyYmZS53YXJuJiZlLmVycm9yKSYmKHRoaXMubW9kdWxlcy5sb2dnZXI9ZSksImxhbmd1YWdlRGV0ZWN0b3IiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3I9ZSksImkxOG5Gb3JtYXQiPT09ZS50eXBlJiYodGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQ9ZSksInBvc3RQcm9jZXNzb3IiPT09ZS50eXBlJiYkZS5hZGRQb3N0UHJvY2Vzc29yKGUpLCIzcmRQYXJ0eSI9PT1lLnR5cGUmJnRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKGUpLHRoaXN9fSx7a2V5OiJjaGFuZ2VMYW5ndWFnZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG89ZTt2YXIgcj1OZSgpO3RoaXMuZW1pdCgibGFuZ3VhZ2VDaGFuZ2luZyIsZSk7dmFyIG89ZnVuY3Rpb24oZSl7dmFyIG89InN0cmluZyI9PXR5cGVvZiBlP2U6bi5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEJlc3RNYXRjaEZyb21Db2RlcyhlKTtvJiYobi5sYW5ndWFnZXx8KG4ubGFuZ3VhZ2U9byxuLmxhbmd1YWdlcz1uLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KG8pKSxuLnRyYW5zbGF0b3IubGFuZ3VhZ2V8fG4udHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShvKSxuLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJm4uc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5jYWNoZVVzZXJMYW5ndWFnZShvKSksbi5sb2FkUmVzb3VyY2VzKG8sZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsbyl7bz8obi5sYW5ndWFnZT1vLG4ubGFuZ3VhZ2VzPW4uc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobyksbi50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKG8pLG4uaXNMYW5ndWFnZUNoYW5naW5nVG89dm9pZCAwLG4uZW1pdCgibGFuZ3VhZ2VDaGFuZ2VkIixvKSxuLmxvZ2dlci5sb2coImxhbmd1YWdlQ2hhbmdlZCIsbykpOm4uaXNMYW5ndWFnZUNoYW5naW5nVG89dm9pZCAwLHIucmVzb2x2ZShmdW5jdGlvbigpe3JldHVybiBuLnQuYXBwbHkobixhcmd1bWVudHMpfSksdCYmdChlLGZ1bmN0aW9uKCl7cmV0dXJuIG4udC5hcHBseShuLGFyZ3VtZW50cyl9KX0oZSxvKX0pfTtyZXR1cm4gZXx8IXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jPyFlJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJnRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYz90aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KG8pOm8oZSk6byh0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkpLHJ9fSx7a2V5OiJnZXRGaXhlZFQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPWZ1bmN0aW9uIGUodCxyKXt2YXIgbztpZigib2JqZWN0IiE9PW1lKHIpKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpPjI%2FaS0yOjApLHM9MjtzPGk7cysrKWFbcy0yXT1hcmd1bWVudHNbc107bz1uLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoW3Qscl0uY29uY2F0KGEpKX1lbHNlIG89eGUoe30scik7cmV0dXJuIG8ubG5nPW8ubG5nfHxlLmxuZyxvLmxuZ3M9by5sbmdzfHxlLmxuZ3Msby5ucz1vLm5zfHxlLm5zLG4udCh0LG8pfTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU%2Fci5sbmc9ZTpyLmxuZ3M9ZSxyLm5zPXQscn19LHtrZXk6InQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMudHJhbnNsYXRvciYmKGU9dGhpcy50cmFuc2xhdG9yKS50cmFuc2xhdGUuYXBwbHkoZSxhcmd1bWVudHMpfX0se2tleToiZXhpc3RzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLnRyYW5zbGF0b3ImJihlPXRoaXMudHJhbnNsYXRvcikuZXhpc3RzLmFwcGx5KGUsYXJndW1lbnRzKX19LHtrZXk6InNldERlZmF1bHROYW1lc3BhY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy5kZWZhdWx0TlM9ZX19LHtrZXk6Imhhc0xvYWRlZE5hbWVzcGFjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg%2BMSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighdGhpcy5pc0luaXRpYWxpemVkKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKCJoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG5leHQgd2FzIG5vdCBpbml0aWFsaXplZCIsdGhpcy5sYW5ndWFnZXMpLCExO2lmKCF0aGlzLmxhbmd1YWdlc3x8IXRoaXMubGFuZ3VhZ2VzLmxlbmd0aClyZXR1cm4gdGhpcy5sb2dnZXIud2FybigiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuLmxhbmd1YWdlcyB3ZXJlIHVuZGVmaW5lZCBvciBlbXB0eSIsdGhpcy5sYW5ndWFnZXMpLCExO3ZhciByPXRoaXMubGFuZ3VhZ2VzWzBdLG89ISF0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyxpPXRoaXMubGFuZ3VhZ2VzW3RoaXMubGFuZ3VhZ2VzLmxlbmd0aC0xXTtpZigiY2ltb2RlIj09PXIudG9Mb3dlckNhc2UoKSlyZXR1cm4hMDt2YXIgYT1mdW5jdGlvbihlLG4pe3ZhciByPXQuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVsiIi5jb25jYXQoZSwifCIpLmNvbmNhdChuKV07cmV0dXJuLTE9PT1yfHwyPT09cn07aWYobi5wcmVjaGVjayl7dmFyIHM9bi5wcmVjaGVjayh0aGlzLGEpO2lmKHZvaWQgMCE9PXMpcmV0dXJuIHN9cmV0dXJuISF0aGlzLmhhc1Jlc291cmNlQnVuZGxlKHIsZSl8fCghdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmR8fCEoIWEocixlKXx8byYmIWEoaSxlKSkpfX0se2tleToibG9hZE5hbWVzcGFjZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPU5lKCk7cmV0dXJuIHRoaXMub3B0aW9ucy5ucz8oInN0cmluZyI9PXR5cGVvZiBlJiYoZT1bZV0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXtuLm9wdGlvbnMubnMuaW5kZXhPZihlKTwwJiZuLm9wdGlvbnMubnMucHVzaChlKX0pLHRoaXMubG9hZFJlc291cmNlcyhmdW5jdGlvbihlKXtyLnJlc29sdmUoKSx0JiZ0KGUpfSkscik6KHQmJnQoKSxQcm9taXNlLnJlc29sdmUoKSl9fSx7a2V5OiJsb2FkTGFuZ3VhZ2VzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPU5lKCk7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1bZV0pO3ZhciByPXRoaXMub3B0aW9ucy5wcmVsb2FkfHxbXSxvPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiByLmluZGV4T2YoZSk8MH0pO3JldHVybiBvLmxlbmd0aD8odGhpcy5vcHRpb25zLnByZWxvYWQ9ci5jb25jYXQobyksdGhpcy5sb2FkUmVzb3VyY2VzKGZ1bmN0aW9uKGUpe24ucmVzb2x2ZSgpLHQmJnQoZSl9KSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX19LHtrZXk6ImRpciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZXx8KGU9dGhpcy5sYW5ndWFnZXMmJnRoaXMubGFuZ3VhZ2VzLmxlbmd0aD4wP3RoaXMubGFuZ3VhZ2VzWzBdOnRoaXMubGFuZ3VhZ2UpLCFlKXJldHVybiJydGwiO3JldHVyblsiYXIiLCJzaHUiLCJzcXIiLCJzc2giLCJ4YWEiLCJ5aGQiLCJ5dWQiLCJhYW8iLCJhYmgiLCJhYnYiLCJhY20iLCJhY3EiLCJhY3ciLCJhY3giLCJhY3kiLCJhZGYiLCJhZHMiLCJhZWIiLCJhZWMiLCJhZmIiLCJhanAiLCJhcGMiLCJhcGQiLCJhcmIiLCJhcnEiLCJhcnMiLCJhcnkiLCJhcnoiLCJhdXoiLCJhdmwiLCJheWgiLCJheWwiLCJheW4iLCJheXAiLCJiYnoiLCJwZ2EiLCJoZSIsIml3IiwicHMiLCJwYnQiLCJwYnUiLCJwc3QiLCJwcnAiLCJwcmQiLCJ1ZyIsInVyIiwieWRkIiwieWRzIiwieWloIiwiamkiLCJ5aSIsImhibyIsIm1lbiIsInhtbiIsImZhIiwianByIiwicGVvIiwicGVzIiwicHJzIiwiZHYiLCJzYW0iXS5pbmRleE9mKHRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKSk%2BPTA%2FInJ0bCI6Imx0ciJ9fSx7a2V5OiJjcmVhdGVJbnN0YW5jZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1hcmd1bWVudHMubGVuZ3RoPjE%2FYXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm4gbmV3IHQoZSxuKX19LHtrZXk6ImNsb25lSW5zdGFuY2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg%2BMCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPWFyZ3VtZW50cy5sZW5ndGg%2BMSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudCxvPXhlKHt9LHRoaXMub3B0aW9ucyxuLHtpc0Nsb25lOiEwfSksaT1uZXcgdChvKSxhPVsic3RvcmUiLCJzZXJ2aWNlcyIsImxhbmd1YWdlIl07cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbih0KXtpW3RdPWVbdF19KSxpLnNlcnZpY2VzPXhlKHt9LHRoaXMuc2VydmljZXMpLGkuc2VydmljZXMudXRpbHM9e2hhc0xvYWRlZE5hbWVzcGFjZTppLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKGkpfSxpLnRyYW5zbGF0b3I9bmV3IFZlKGkuc2VydmljZXMsaS5vcHRpb25zKSxpLnRyYW5zbGF0b3Iub24oIioiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ%2BMT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtpLmVtaXQuYXBwbHkoaSxbZV0uY29uY2F0KG4pKX0pLGkuaW5pdChvLHIpLGkudHJhbnNsYXRvci5vcHRpb25zPWkub3B0aW9ucyxpLnRyYW5zbGF0b3IuYmFja2VuZENvbm5lY3Rvci5zZXJ2aWNlcy51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOmkuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQoaSl9LGl9fV0pLHR9KCkpLG90PW4oMTE0KSxpdD1uLm4ob3QpO2Z1bmN0aW9uIGF0KGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBzdChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0%2FYXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe2F0KGUsdCxuW3RdKX0pfXJldHVybiBlfWZ1bmN0aW9uIHV0KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gY3QoZSx0LG4pe3ZhciByO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMsaT1hcmd1bWVudHMsYT1mdW5jdGlvbigpe3I9bnVsbCxufHxlLmFwcGx5KG8saSl9LHM9biYmIXI7Y2xlYXJUaW1lb3V0KHIpLHI9c2V0VGltZW91dChhLHQpLHMmJmUuYXBwbHkobyxpKX19ZnVuY3Rpb24gbHQoZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuaW5kZXhPZigiIyMjIik%2BLTE%2FZS5yZXBsYWNlKC8jIyMvZywiLiIpOmV9Zm9yKHZhciBvPSJzdHJpbmciIT10eXBlb2YgdD9bXS5jb25jYXQodCk6dC5zcGxpdCgiLiIpO28ubGVuZ3RoPjE7KXtpZighZSlyZXR1cm57fTt2YXIgaT1yKG8uc2hpZnQoKSk7IWVbaV0mJm4mJihlW2ldPW5ldyBuKSxlPWVbaV19cmV0dXJuIGU%2Fe29iajplLGs6cihvLnNoaWZ0KCkpfTp7fX1mdW5jdGlvbiBmdChlLHQsbil7dmFyIHI9bHQoZSx0LE9iamVjdCk7ci5vYmpbci5rXT1ufWZ1bmN0aW9uIHB0KGUsdCl7dmFyIG49bHQoZSx0KSxyPW4ub2JqLG89bi5rO2lmKHIpcmV0dXJuIHJbb119dmFyIGR0PW5ldyBSZWdFeHAoInt7KC4rPyl9fSIsImciKTtmdW5jdGlvbiBodChlLHQsbil7dmFyIHIsbyxpO2Zvcig7cj1kdC5leGVjKGUpOykic3RyaW5nIiE9dHlwZW9mKG89clsxXS50cmltKCkpJiYobz1udWxsPT0oaT1vKT8iIjoiIitpKSxvfHwobz0iIiksbz1vLnJlcGxhY2UoL1wkL2csIiQkJCQiKSxlPWUucmVwbGFjZShyWzBdLHRbb118fG8pLGR0Lmxhc3RJbmRleD0wO3JldHVybiBlfWZ1bmN0aW9uIGd0KGUsdCxuLHIsbyl7dHJ5e3ZhciBpPW5ldyhYTUxIdHRwUmVxdWVzdHx8QWN0aXZlWE9iamVjdCkoIk1TWE1MMi5YTUxIVFRQLjMuMCIpO2kub3BlbihyPyJQT1NUIjoiR0VUIixlLDEpLHQuY3Jvc3NEb21haW58fGkuc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0IiksdC5hdXRob3JpemUmJnQuYXBpS2V5JiZpLnNldFJlcXVlc3RIZWFkZXIoIkF1dGhvcml6YXRpb24iLHQuYXBpS2V5KSwocnx8dC5zZXRDb250ZW50VHlwZUpTT04pJiZpLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL2pzb24iKSxpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2kucmVhZHlTdGF0ZT4zJiZuJiZuKGkucmVzcG9uc2VUZXh0LGkpfSxpLnNlbmQoSlNPTi5zdHJpbmdpZnkocikpfWNhdGNoKGUpe3dpbmRvdy5jb25zb2xlJiZjb25zb2xlLmxvZyhlKX19dmFyIHZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdCYmdC5wcm9qZWN0SWQ%2FdGhpcy5pbml0KG51bGwsdCx7fSxuKTp0aGlzLmluaXQobnVsbCxuLHt9LHIpLHRoaXMudHlwZT0iYmFja2VuZCJ9dmFyIHQsbixyO3JldHVybiB0PWUsKG49W3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scj1hcmd1bWVudHMubGVuZ3RoPjI%2FYXJndW1lbnRzWzJdOnZvaWQgMCxvPWFyZ3VtZW50cy5sZW5ndGg%2BMz9hcmd1bWVudHNbM106dm9pZCAwO3RoaXMub3B0aW9ucz1zdCh7fSx7bG9hZFBhdGg6Imh0dHBzOi8vYXBpLmxvY2l6ZS5pby97e3Byb2plY3RJZH19L3t7dmVyc2lvbn19L3t7bG5nfX0ve3tuc319Iixwcml2YXRlUGF0aDoiaHR0cHM6Ly9hcGkubG9jaXplLmlvL3ByaXZhdGUve3twcm9qZWN0SWR9fS97e3ZlcnNpb259fS97e2xuZ319L3t7bnN9fSIscHVsbFBhdGg6Imh0dHBzOi8vYXBpLmxvY2l6ZS5pby9wdWxsL3t7cHJvamVjdElkfX0ve3t2ZXJzaW9ufX0ve3tsbmd9fS97e25zfX0iLGdldExhbmd1YWdlc1BhdGg6Imh0dHBzOi8vYXBpLmxvY2l6ZS5pby9sYW5ndWFnZXMve3twcm9qZWN0SWR9fSIsYWRkUGF0aDoiaHR0cHM6Ly9hcGkubG9jaXplLmlvL21pc3Npbmcve3twcm9qZWN0SWR9fS97e3ZlcnNpb259fS97e2xuZ319L3t7bnN9fSIsdXBkYXRlUGF0aDoiaHR0cHM6Ly9hcGkubG9jaXplLmlvL3VwZGF0ZS97e3Byb2plY3RJZH19L3t7dmVyc2lvbn19L3t7bG5nfX0ve3tuc319IixyZWZlcmVuY2VMbmc6ImVuIixjcm9zc0RvbWFpbjohMCxzZXRDb250ZW50VHlwZUpTT046ITEsdmVyc2lvbjoibGF0ZXN0IixwdWxsOiExLHByaXZhdGU6ITEsd2hpdGVsaXN0VGhyZXNob2xkOi45LGZhaWxMb2FkaW5nT25FbXB0eUpTT046ITEsYWxsb3dlZEFkZE9yVXBkYXRlSG9zdHM6WyJsb2NhbGhvc3QiXX0sdGhpcy5vcHRpb25zLG4pLHRoaXMuc2VydmljZXM9ZSx0aGlzLm9wdGlvbnMucHVsbCYmY29uc29sZS53YXJuKCJkZXByZWNhdGVkOiBwdWxsIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMgYW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGxvY2l6ZSBwcml2YXRlIHZlcnNpb25zIik7dmFyIGk9d2luZG93LmxvY2F0aW9uJiZ3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7aT8odGhpcy5pc0FkZE9yVXBkYXRlQWxsb3dlZD10aGlzLm9wdGlvbnMuYWxsb3dlZEFkZE9yVXBkYXRlSG9zdHMuaW5kZXhPZihpKT4tMSxyLnNhdmVNaXNzaW5nJiYhdGhpcy5pc0FkZE9yVXBkYXRlQWxsb3dlZCYmZSYmZS5sb2dnZXImJmUubG9nZ2VyLndhcm4oJ2xvY2l6ZS1iYWNrZW5kOiB3aWxsIG5vdCBzYXZlIG1pc3NpbmdzIGJlY2F1c2UgdGhlIGhvc3QgIicuY29uY2F0KGksJyIgd2FzIG5vdCBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkQWRkT3JVcGRhdGVIb3N0czogJykuY29uY2F0KHRoaXMub3B0aW9ucy5hbGxvd2VkQWRkT3JVcGRhdGVIb3N0cy5qb2luKCIsICIpLCIgKG1hdGNoZXMgbmVlZCB0byBiZSBleGFjdCkuIikpKTp0aGlzLmlzQWRkT3JVcGRhdGVBbGxvd2VkPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZ0aGlzLmdldE9wdGlvbnMoZnVuY3Rpb24oZSxyKXtpZihlKXJldHVybiBvKGUpO3Qub3B0aW9ucy5yZWZlcmVuY2VMbmc9bi5yZWZlcmVuY2VMbmd8fHIucmVmZXJlbmNlTG5nfHx0Lm9wdGlvbnMucmVmZXJlbmNlTG5nLG8obnVsbCxyKX0pLHRoaXMucXVldWVkV3JpdGVzPXt9LHRoaXMuZGVib3VuY2VkUHJvY2Vzcz1jdCh0aGlzLnByb2Nlc3MsMWU0KX19LHtrZXk6ImdldExhbmd1YWdlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9aHQodGhpcy5vcHRpb25zLmdldExhbmd1YWdlc1BhdGgse3Byb2plY3RJZDp0aGlzLm9wdGlvbnMucHJvamVjdElkfSk7dGhpcy5sb2FkVXJsKHQse30sZSl9fSx7a2V5OiJnZXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuZ2V0TGFuZ3VhZ2VzKGZ1bmN0aW9uKG4scil7aWYobilyZXR1cm4gZShuKTt2YXIgbz1PYmplY3Qua2V5cyhyKTtpZighby5sZW5ndGgpcmV0dXJuIGUobmV3IEVycm9yKCJ3YXMgdW5hYmxlIHRvIGxvYWQgbGFuZ3VhZ2VzIHZpYSBBUEkiKSk7dmFyIGk9by5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gclt0XS5pc1JlZmVyZW5jZUxhbmd1YWdlJiYoZT10KSxlfSwiIiksYT1vLnJlZHVjZShmdW5jdGlvbihlLG4pe3ZhciBvPXJbbl07cmV0dXJuIG8udHJhbnNsYXRlZFt0Lm9wdGlvbnMudmVyc2lvbl0mJm8udHJhbnNsYXRlZFt0Lm9wdGlvbnMudmVyc2lvbl0%2BPXQub3B0aW9ucy53aGl0ZWxpc3RUaHJlc2hvbGQmJmUucHVzaChuKSxlfSxbXSkscz1vLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiB0LmluZGV4T2YoIi0iKT4tMXx8ZX0sITEpO2UobnVsbCx7ZmFsbGJhY2tMbmc6aSxyZWZlcmVuY2VMbmc6aSx3aGl0ZWxpc3Q6YSxsb2FkOnM%2FImFsbCI6Imxhbmd1YWdlT25seSJ9KX0pfX0se2tleToicmVhZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89e307dGhpcy5vcHRpb25zLnByaXZhdGU%2FKHI9aHQodGhpcy5vcHRpb25zLnByaXZhdGVQYXRoLHtsbmc6ZSxuczp0LHByb2plY3RJZDp0aGlzLm9wdGlvbnMucHJvamVjdElkLHZlcnNpb246dGhpcy5vcHRpb25zLnZlcnNpb259KSxvPXthdXRob3JpemU6ITB9KTp0aGlzLm9wdGlvbnMucHVsbD8ocj1odCh0aGlzLm9wdGlvbnMucHVsbFBhdGgse2xuZzplLG5zOnQscHJvamVjdElkOnRoaXMub3B0aW9ucy5wcm9qZWN0SWQsdmVyc2lvbjp0aGlzLm9wdGlvbnMudmVyc2lvbn0pLG89e2F1dGhvcml6ZTohMH0pOnI9aHQodGhpcy5vcHRpb25zLmxvYWRQYXRoLHtsbmc6ZSxuczp0LHByb2plY3RJZDp0aGlzLm9wdGlvbnMucHJvamVjdElkLHZlcnNpb246dGhpcy5vcHRpb25zLnZlcnNpb259KSx0aGlzLmxvYWRVcmwocixvLG4pfX0se2tleToibG9hZFVybCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7Z3QoZSxzdCh7fSx0aGlzLm9wdGlvbnMsdCksZnVuY3Rpb24odCxvKXtpZihvLnN0YXR1cz49NTAwJiZvLnN0YXR1czw2MDApcmV0dXJuIG4oImZhaWxlZCBsb2FkaW5nICIrZSwhMCk7aWYoby5zdGF0dXM%2BPTQwMCYmby5zdGF0dXM8NTAwKXJldHVybiBuKCJmYWlsZWQgbG9hZGluZyAiK2UsITEpO3ZhciBpLGE7dHJ5e2k9SlNPTi5wYXJzZSh0KX1jYXRjaCh0KXthPSJmYWlsZWQgcGFyc2luZyAiK2UrIiB0byBqc29uIn1yZXR1cm4gYT9uKGEsITEpOnIub3B0aW9ucy5mYWlsTG9hZGluZ09uRW1wdHlKU09OJiYhT2JqZWN0LmtleXMoaSkubGVuZ3RoP24oImxvYWRlZCByZXN1bHQgZW1wdHkgZm9yICIrZSwhMSk6dm9pZCBuKG51bGwsaSl9KX19LHtrZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scixvLGkpe3ZhciBhPXRoaXM7aWYob3x8KG89ZnVuY3Rpb24oKXt9KSwhdGhpcy5pc0FkZE9yVXBkYXRlQWxsb3dlZClyZXR1cm4gbygiaG9zdCBpcyBub3QgYWxsb3dlZCB0byBjcmVhdGUga2V5LiIpOyJzdHJpbmciPT10eXBlb2YgZSYmKGU9W2VdKSxlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZT09PWEub3B0aW9ucy5yZWZlcmVuY2VMbmd9KS5sZW5ndGg8MSYmdGhpcy5zZXJ2aWNlcyYmdGhpcy5zZXJ2aWNlcy5sb2dnZXImJnRoaXMuc2VydmljZXMubG9nZ2VyLndhcm4oJ2xvY2l6ZS1iYWNrZW5kOiB3aWxsIG5vdCBzYXZlIG1pc3NpbmdzIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBsYW5ndWFnZSAiJy5jb25jYXQodGhpcy5vcHRpb25zLnJlZmVyZW5jZUxuZywnIiB3YXMgbm90IGluIHRoZSBsaXN0IG9mIHRvIHNhdmUgbGFuZ3VhZ2VzOiAnKS5jb25jYXQoZS5qb2luKCIsICIpLCIgKG9wZW4geW91ciBzaXRlIGluIHRoZSByZWZlcmVuY2UgbGFuZ3VhZ2UgdG8gc2F2ZSBtaXNzaW5ncykuIikpLGUuZm9yRWFjaChmdW5jdGlvbihlKXtlPT09YS5vcHRpb25zLnJlZmVyZW5jZUxuZyYmYS5xdWV1ZS5jYWxsKGEsYS5vcHRpb25zLnJlZmVyZW5jZUxuZyx0LG4scixvLGkpfSl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYT10aGlzO2lmKG98fChvPWZ1bmN0aW9uKCl7fSksIXRoaXMuaXNBZGRPclVwZGF0ZUFsbG93ZWQpcmV0dXJuIG8oImhvc3QgaXMgbm90IGFsbG93ZWQgdG8gdXBkYXRlIGtleS4iKTtpfHwoaT17fSksInN0cmluZyI9PXR5cGVvZiBlJiYoZT1bZV0pLGkuaXNVcGRhdGU9ITAsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2U9PT1hLm9wdGlvbnMucmVmZXJlbmNlTG5nJiZhLnF1ZXVlLmNhbGwoYSxhLm9wdGlvbnMucmVmZXJlbmNlTG5nLHQsbixyLG8saSl9KX19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYoIXB0KHRoaXMucXVldWVkV3JpdGVzLFsibG9ja3MiLGUsdF0pKXt2YXIgcj1odCh0aGlzLm9wdGlvbnMuYWRkUGF0aCx7bG5nOmUsbnM6dCxwcm9qZWN0SWQ6dGhpcy5vcHRpb25zLnByb2plY3RJZCx2ZXJzaW9uOnRoaXMub3B0aW9ucy52ZXJzaW9ufSksbz1odCh0aGlzLm9wdGlvbnMudXBkYXRlUGF0aCx7bG5nOmUsbnM6dCxwcm9qZWN0SWQ6dGhpcy5vcHRpb25zLnByb2plY3RJZCx2ZXJzaW9uOnRoaXMub3B0aW9ucy52ZXJzaW9ufSksaT1wdCh0aGlzLnF1ZXVlZFdyaXRlcyxbZSx0XSk7aWYoZnQodGhpcy5xdWV1ZWRXcml0ZXMsW2UsdF0sW10pLGkubGVuZ3RoKXtmdCh0aGlzLnF1ZXVlZFdyaXRlcyxbImxvY2tzIixlLHRdLCEwKTt2YXIgYT0hMSxzPSExLHU9e30sYz17fTtpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zJiZlLm9wdGlvbnMudERlc2NyaXB0aW9uP3t2YWx1ZTplLmZhbGxiYWNrVmFsdWV8fCIiLGNvbnRleHQ6e3RleHQ6ZS5vcHRpb25zLnREZXNjcmlwdGlvbn19OmUuZmFsbGJhY2tWYWx1ZXx8IiI7ZS5vcHRpb25zJiZlLm9wdGlvbnMuaXNVcGRhdGU%2FKHN8fChzPSEwKSxjW2Uua2V5XT10KTooYXx8KGE9ITApLHVbZS5rZXldPXQpfSk7dmFyIGw9MDthJiZsKysscyYmbCsrO3ZhciBmPWZ1bmN0aW9uKCl7LS1sfHwoZnQobi5xdWV1ZWRXcml0ZXMsWyJsb2NrcyIsZSx0XSwhMSksaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2FsbGJhY2smJmUuY2FsbGJhY2soKX0pLG4uZGVib3VuY2VkUHJvY2VzcyhlLHQpKX07bHx8ZigpLGEmJmd0KHIsc3Qoe30se2F1dGhvcml6ZTohMH0sdGhpcy5vcHRpb25zKSxmdW5jdGlvbihlLHQpe2YoKX0sdSkscyYmZ3QobyxzdCh7fSx7YXV0aG9yaXplOiEwfSx0aGlzLm9wdGlvbnMpLGZ1bmN0aW9uKGUsdCl7ZigpfSxjKX19fX0se2tleToicHJvY2VzcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO09iamVjdC5rZXlzKHRoaXMucXVldWVkV3JpdGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJsb2NrcyIhPT10JiZPYmplY3Qua2V5cyhlLnF1ZXVlZFdyaXRlc1t0XSkuZm9yRWFjaChmdW5jdGlvbihuKXtlLnF1ZXVlZFdyaXRlc1t0XVtuXS5sZW5ndGgmJmUud3JpdGUodCxuKX0pfSl9fSx7a2V5OiJxdWV1ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scixvLGkpe3ZhciBhLHMsdSxjLGwsZjthPXRoaXMucXVldWVkV3JpdGVzLHM9e2tleTpuLGZhbGxiYWNrVmFsdWU6cnx8IiIsY2FsbGJhY2s6byxvcHRpb25zOml9LGM9bHQoYSxbZSx0XSxPYmplY3QpLGw9Yy5vYmosZj1jLmssbFtmXT1sW2ZdfHxbXSx1JiYobFtmXT1sW2ZdLmNvbmNhdChzKSksdXx8bFtmXS5wdXNoKHMpLHRoaXMuZGVib3VuY2VkUHJvY2VzcygpfX1dKSYmdXQodC5wcm90b3R5cGUsbiksciYmdXQodCxyKSxlfSgpO3Z0LnR5cGU9ImJhY2tlbmQiO3ZhciB5dD12dCxtdD1uKDUzKTtmdW5jdGlvbiBidCgpe3JldHVybihidD1nZSgpKGZlLmEubWFyayhmdW5jdGlvbiBlKHQpe3JldHVybiBmZS5hLndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyB5ZS5hKGZ1bmN0aW9uKGUpe3J0LmNoYW5nZUxhbmd1YWdlKHQsZnVuY3Rpb24oKXtlKHZvaWQgMCl9KX0pKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGUpfSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geHQoKXt2YXIgZTtyZXR1cm4gZGUoKShlPXJ0LnQpLmNhbGwoZSxydCl9dmFyIHd0PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5ZS5hKGZ1bmN0aW9uKGUsdCl7cnQudXNlKG5ldyBpdC5hKG51bGwse29yZGVyOlsibmF2aWdhdG9yIl19KSkudXNlKHl0KS5pbml0KHtmYWxsYmFja0xuZzoiZW4iLG5zOlsiZGVmYXVsdCJdLGRlZmF1bHROUzoiZGVmYXVsdCIsYmFja2VuZDp7cHJvamVjdElkOm10LmxvY2l6ZS5wcm9kdWN0SWQsdmVyc2lvbjptdC5sb2NpemUudmVyc2lvbixhcGlLZXk6bXQubG9jaXplLmFwaUtleSxyZWZlcmVuY2VMbmc6ImVuIn19LGZ1bmN0aW9uKG4scil7cmV0dXJuIG4%2FdChuKTplKHIpfSl9KX0sY2hhbmdlTGFuZ3VhZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZ2V0TGFuZ3VhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gcnQubGFuZ3VhZ2V9LGdldFQ6eHR9O2Z1bmN0aW9uIGt0KGUsdCl7dmFyIG47aWYodm9pZCAwPT09bC5hfHxudWxsPT11KCkoZSkpe2lmKGEoKShlKXx8KG49ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZighZSlyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBTdChlLHQpO3ZhciByPWgoKShuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSkuY2FsbChuLDgsLTEpOyJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKTtpZigiTWFwIj09PXJ8fCJTZXQiPT09cilyZXR1cm4gcCgpKGUpO2lmKCJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QocikpcmV0dXJuIFN0KGUsdCl9KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7biYmKGU9bik7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49ZS5sZW5ndGg%2Fe2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbcisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIHMsYz0hMCxmPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bj1vKCkoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1uLm5leHQoKTtyZXR1cm4gYz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtmPSEwLHM9ZX0sZjpmdW5jdGlvbigpe3RyeXtjfHxudWxsPT1uLnJldHVybnx8bi5yZXR1cm4oKX1maW5hbGx5e2lmKGYpdGhyb3cgc319fX1mdW5jdGlvbiBTdChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIE90KGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhdi5hKXJldHVybiExO2lmKHYuYS5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodigpKERhdGUsW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHI9QSgpKGUpO2lmKHQpe3ZhciBvPUEoKSh0aGlzKS5jb25zdHJ1Y3RvcjtuPXYoKShyLGFyZ3VtZW50cyxvKX1lbHNlIG49ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIEwoKSh0aGlzLG4pfX1pZighL1wvKG1lbWJlclwvfG9yZGVyXC9yZWd8b3JkZXJcL2NhcnQpLy50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7dmFyIGp0PXdpbmRvdy56aWd6YWc7Y2Uub25DaGFuZ2VzUmVhZHkoZnVuY3Rpb24oZSl7Y2Uub3ZlcnJpZGVDbGlja0V2ZW50KGUsIi5pdGVtX2NhcnRfY2xpY2tfYXJlYSwgLmFkZC1jYXJ0LCAuaXRlbV9za3Vfc2VsZWN0X2J1dHRvbiwgI2FkZENhcnQiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxqdC5wYWdlVG8oIml0ZW0iKX0pLGNlLm92ZXJyaWRlQ2xpY2tFdmVudChlLCdhW2hyZWZePSIvb3JkZXIvY2FydCJdJyxmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksanQucGFnZVRvKCJjYXJ0Iil9KX0pO3ZhciBUdD1mdW5jdGlvbihlKXtUKCkobixlKTt2YXIgdD1PdChuKTtmdW5jdGlvbiBuKCl7cmV0dXJuIHgoKSh0aGlzLG4pLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBrKCkobixbe2tleToiaXNPcmRlclRhcmdldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLmhyZWY7cmV0dXJuL1wvaXRlbS8udGVzdChlKX19LHtrZXk6ImdldEl0ZW0iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9TygpKEEoKShuLnByb3RvdHlwZSksImdldEl0ZW0iLHRoaXMpLmNhbGwodGhpcyk7cmV0dXJuIGUubWFuYWdlc1N0b2NrPSEwLGV9fSx7a2V5OiJnZXRTa3VSb3dzIix2YWx1ZTpmdW5jdGlvbihlKXt3aW5kb3cuc2t1TGlzdHx8JC5lcnJvcigic2t1TGlzdOOBjOWtmOWcqOOBl%2BOBvuOBm%2BOCkyIpO3ZhciB0LG49W10scj1rdCh3aW5kb3cuc2t1TGlzdCk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgbz10LnZhbHVlO2lmKCIiIT09by5tdWx0aXB1bENvbXBvbmVudEl0ZW1WTy5heGlzMSYmIiIhPT1vLm11bHRpcHVsQ29tcG9uZW50SXRlbVZPLmF4aXMyJiYiIiE9PW8ubXVsdGlwdWxDb21wb25lbnRJdGVtVk8uYXhpczMpKG8uYWxsb2NhdGFibGVTdG9jaz4wfHxvLmFsbG9jYXRlTGltaXQ%2BMCkmJm4ucHVzaCh7InNrdS50eXBlMSI6by5tdWx0aXB1bENvbXBvbmVudEl0ZW1WTy5heGlzMSwic2t1LnR5cGUyIjpvLm11bHRpcHVsQ29tcG9uZW50SXRlbVZPLmF4aXMyLCJza3UudHlwZTMiOm8ubXVsdGlwdWxDb21wb25lbnRJdGVtVk8uYXhpczMscHJpY2U6by5yZXRhaWxQcmljZT09PW8uc2FsZXNQcmljZT9vLnJldGFpbFByaWNlOm8uc2FsZXNQcmljZSxzdG9jazoxfSk7ZWxzZShvLmFsbG9jYXRhYmxlU3RvY2s%2BMHx8by5hbGxvY2F0ZUxpbWl0PjApJiZuLnB1c2goeyJza3UuY29sb3IiOm8uY29sb3JOYW1lLCJza3Uuc2l6ZSI6by5zaXplTmFtZSxwcmljZTpvLnJldGFpbFByaWNlPT09by5zYWxlc1ByaWNlP28ucmV0YWlsUHJpY2U6by5zYWxlc1ByaWNlLHN0b2NrOjF9KX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIG59fSx7a2V5OiJleGNsdWRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0SXRlbSgpO3JldHVybiAwPT09dGhpcy5nZXRTa3VSb3dzKGUpLmxlbmd0aCYmKCQuZGVidWcoInNrdeOBjDDlgIvjga7jgZ%2FjgoHpmaTlpJYiKSwhMCl9fV0pLG59KEIpO2p0LmRpc2NvdmVyeShmdW5jdGlvbihlKXt2YXIgdD1lLmNhbGxiYWNrOyFmdW5jdGlvbihlLHQpe3ZhciBuPXdpbmRvdy56aWd6YWc7biYmbi51dGlscy5mZXRjaEh0bWwoZSx0KX0oZnVuY3Rpb24oZSl7bmV3IFR0KHskOmUsbmFtZToiLml0ZW1fbmFtZSIscHJpY2U6IiJ9KS5leGVjdXRlKHQpfSl9KSxqdC5jaGFyZ2VzKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZGVmYXVsdENoYXJnZXM7cmV0dXJuIG0oKShtKCkoe30sdCkse2Rpc2NvdW50OnQuZG9tZXN0aWNEZWxpdmVyeUZlZX0pfSksanQuY2FydE1vZGFsKGZ1bmN0aW9uKCl7dmFyIGU9eHQoKTtyZXR1cm57bWlkZGxlOntodG1sOidcbiAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7IG1hcmdpbjogLTZweCAwIDBweCAhaW1wb3J0YW50OyI%2BXG4gICAgICAgIDxwIHN0eWxlPSJcbiAgICAgICAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAhaW1wb3J0YW50O1xuICAgICAgICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmY1NjRjICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMWVtICFpbXBvcnRhbnQ7XG4gICAgICAgICI%2BJy5jb25jYXQoZSgibmlzc2VuX2NvX2pwLmNhcnRNb2RhbC5taWRkbGUiKSwiPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgIil9fX0pLHd0LmluaXRpYWxpemUoKS50aGVuKCksanQucnVuKCl9fV0pO30%3D%20(39)&_u=aGjAAEABAAAAAG~&jid=661090143&gjid=102450521&cid=1965910764.1614469108&tid=UA-33087201-6&_gid=59943534.1614469123&_r=1>m=2wg2h0Z67S&cd1=https%3A%2F%2Fwww.nissen.co.jp%2F&cd2=&cd3=8d0d233e-ac20-4923-9d94-b4227e7ff4b8&cd5=&cd6=&cd8=&cd9=NaN&cd23=&cd24=&z=1313885202
- Domain
- www.nissen.co.jp
- URL
- https://www.nissen.co.jp/member/api/favorite-item?op=getItemCodeList&_=1614469106562
Verdicts & Comments Add Verdict or Comment
254 JavaScript Global Variables
These are the non-standard "global" variables defined on the window object. These can be helpful in identifying possible client-side frameworks and code.
object| 0 object| 1 object| 2 object| 3 object| 4 object| 5 object| 6 object| ontransitionrun object| ontransitionstart object| ontransitioncancel object| cookieStore function| showDirectoryPicker function| showOpenFilePicker function| showSaveFilePicker object| trustedTypes boolean| crossOriginIsolated object| dataLayer function| $ function| jQuery function| _ function| moment string| customerId string| customerStatus string| birthday string| sexDiv string| balancePoint string| expirePoint string| customerRankId string| customerRankName string| privateRankId string| targetingId string| cardId string| cardIssueRealStoreId string| cardStatus string| deviceDiv string| currentDeviceDiv string| userAgent string| trackingId string| visitorId string| ecOrderCount string| totalCartCount string| domainId string| viewType boolean| isApp string| imageBaseUrl boolean| staticMode object| sessionModule function| searchFunction function| convertToZenkakuKatanaka function| convertToHalfAlphaNumSymbol function| setSubmitHookForLoginForm function| open_similar_items_modal function| nolGetURLParam undefined| nissenHoverTimerID function| hoverNavigation function| leaveNavigation boolean| intersectionObserver string| uaTxt function| Vue function| axios object| html5 object| Modernizr function| yepnope object| detailModule object| cartModule object| cartModuleForAjaxReturn object| historyModule object| favModule object| mailModule object| cartPage function| viewFavoriteItem function| viewFavoriteBrand function| viewSavedForLaterItem object| favModuleEx function| changeFavoriteItem object| utilModule object| modalModule object| modalModule2 object| jQuery111004863151724232151 undefined| $parentItemInfo string| API_EDIT_URL_PREFIX string| API_REFER_URL_PREFIX string| STORAGE_NICKNAME string| SERVER_ERROR_MESSAGE object| reviewModalModule string| reviewContainerClass object| reviewModule object| reviewPage function| setDefaultReviewNickName object| itemModule function| formatNumber function| resetItemStockViewOriginalSrc function| resetItemStockViewOriginalSrcBtnClick function| displayCampaignSummary function| followUpControl object| suggestModule_inputKeyword object| suggestModule function| clickSuggestLink object| nissenHistoryApiModule object| nissenHistoryModule function| history_build_area object| recommendApiModule object| nissenRecommendModule function| nissen_recommend_build_area number| existSimilarRecommendAreaFlag object| leanPlumModule string| LEANPLUM_SUCCESS string| LEANPLUM_FAIL boolean| DAILY_UPDATE object| leanPlumTrigger function| initReccomendCartIn undefined| nissenReadHistorySyncBetweenDevicesPromise string| _favItem_lastModified function| updateNotificationCount object| nissenFilterhistoryApiModule undefined| nissenFilterhistorySyncBetweenDevicesPromise object| PROBANCE_browser_detect object| probance_ajax object| PROBANCE_encoder object| PROBANCE_utils object| PROBANCE_urlUtils object| PROBANCE_idManager function| probanceCookies function| PROBANCE_abstractTracker function| probanceDelayedTrackItem function| PROBANCE_CRM_trackingMode string| cookieSep function| PROBANCE_CRMTracker function| PROBANCE_VRM_trackingMode function| PROBANCE_VRMTracker function| PROBANCE_tags function| PROBANCE_tag function| PROBANCE_taggerValue function| PROBANCE_trackers undefined| quote undefined| str object| probance_logger object| PROBANCE_infos object| DD_LOGS object| adv_cv_params string| advcone function| adv object| tracker function| googleTranslateElementInit object| BOOMR_mq string| BOOMR_API_key object| BOOMR number| BOOMR_lstart string| bazadebezolkohpepadr object| nissenOshiraseApiModule object| mayya_info object| nissenReadHistoryPromise object| google_tag_manager object| __letroUgcGadget function| visumoInitializer object| __karte_tracker object| WOVN object| Wovnio boolean| _wovnWrappedHistoryApi boolean| __karte_loaded object| _karte_logs undefined| _bt_url_prefix undefined| _bt_referrer undefined| _bt_site undefined| _bt_mode function| bt_log function| bt_eval function| bt_parameter function| bt_meta function| bt_cookie function| bt_data function| bt_handle_exception function| bt_data_escaped object| BrightTag function| btServe function| _xamzrequire object| AWS object| a function| b function| d function| c object| _cf object| _ac object| bmak number| bm_counter undefined| bm_script undefined| scripts undefined| bm_url undefined| url_split undefined| obfus_state_field undefined| state_field_str string| _sd_trace function| op string| urhehlevkedkilrobacf object| $footerModal function| menuOpen function| menuClose number| len number| BOOMR_configt boolean| preview_content_observer_added function| postscribe object| google_tag_data string| GoogleAnalyticsObject function| ga object| p object| _karte_tracker object| gaplugins object| gaGlobal object| gaData function| GooglemKTybQhCsO function| google_trackConversion object| GooglebQhCsO number| zigzagLoadingStartedAt function| onLoadZigZag function| $letroUgcsetJQ function| letroUgcSet object| array object| yjDataLayer function| ytag object| yahoo_retargeting_sent_urls_counter string| yahoo_retargeting_pv_id function| fbq function| _fbq function| twq object| SmartnewsAds function| obApi object| twttr function| retrieveUUID-0 function| retrieveUUID-1 undefined| __krt_jsonp__1614469110395_7635325501 undefined| candy_1_tag undefined| candyPurchase undefined| candyLandingConversion undefined| candyJump undefined| candyPurchaseOther function| getSubDomain function| setCookie function| candy_get_gookies function| candy_get_td_gookies function| candy_get_storages function| candy_get_td_storages function| candy_set_storages function| candy_set_td_storages function| candy_maintain_cookie function| candy_maintain_td_cookie string| cookie number| st string| ed object| cookies object| hotwords object| regeneratorRuntime object| zigzag object| criteo_q number| BOOMR_onload35 Cookies
Cookies are little pieces of information stored in the browser of a user. Whenever a user visits the site again, he will also send his cookie values, thus allowing the website to re-identify him even if he changed locations. This is how permanent logins work.
Domain/Path | Expires | Name / Value |
---|---|---|
.criteo.com/ | Name: uid Value: e4cfd8f8-a6b7-482d-ac95-40bfd1176e87 |
|
.creativecdn.com/ | Name: ts Value: 1614469110 |
|
.nissen.co.jp/ | Name: RT Value: "z=1&dm=nissen.co.jp&si=c78cab5f-0498-4a48-bdd7-d489ec44f45e&ss=klod7ye5&sl=1&tt=32p&bcn=%2F%2F685b3919.akstat.io%2F&ld=4ui" |
|
www.nissen.co.jp/ | Name: outbrain_cid_fetch Value: true |
|
.nissen.co.jp/ | Name: krt.v Value: message%3A5fa23c2d5d8b500012635ae0%7C5f06beb3965aab00114efe5e |
|
.nissen.co.jp/ | Name: _gat Value: 1 |
|
.nissen.co.jp/ | Name: _fbp Value: fb.2.1614469109996.1407775342 |
|
.creativecdn.com/ | Name: u Value: F9qS0unFRI3cYSVeF07Z |
|
.nissen.co.jp/ | Name: _abck Value: 8FB472826EC138E1EB2CAA5F193C94EA~-1~YAAQxKDVFzGY7Nh3AQAAoZXb5QVSdtLO/48ypCcQ34oYVDmys7Mii+mw5Dl06muCn89Xv5f/iuumutmVwSU4fLn0RbO3hWtxYE9NdJWUVqAErCBoKOKrkadfQc5+xW5jdRdhgjMiAdhyfL4fqFOb6B3hxRNoV1eZF01tuP98SBoWbEGLyQLrJF6VwxgGI24TUkMjw6aUoaIMKrHQLlBlgTtwTVjaCATaPiznUygkuRBpWjT4REVh3Eo9/LhIVHZYr8TYp46GB5Nf3tI0rB/3PynGSNvmaF1TELY/y67ymcZ+vjmLgEScoYOc4LdMOCYiMqnxMMlAVFjwxAWIKUSzib+nWp5qwp8vUy8QGOSkvmNyleH/LxBh/ei8MjKNFo85xeuDW4HRvso8Qw5Z~-1~-1~-1 |
|
.nissen.co.jp/ | Name: _gid Value: GA1.3.1219340154.1614469108 |
|
.nissen.co.jp/ | Name: _ga Value: GA1.3.1965910764.1614469108 |
|
.nissen.co.jp/ | Name: _gat_UA-33087201-6 Value: 1 |
|
.nissen.co.jp/ | Name: _dc_gtm_UA-33087201-7 Value: 1 |
|
.nissen.co.jp/ | Name: _gcl_au Value: 1.1.1160794541.1614469108 |
|
.nissen.co.jp/ | Name: krt.context Value: session%3A6a770c6f-4407-4792-880d-a4b10069b402%3Bcontext_mode%3Aother |
|
.nissen.co.jp/ | Name: _ts_yjad Value: 1614469109851 |
|
www.nissen.co.jp/ | Name: totalCartCount Value: 0 |
|
.nissen.co.jp/ | Name: krt.vis Value: d1c8a27b-cdda-4a63-9eca-cbc8d1eadf07 |
|
.nissen.co.jp/ | Name: AKA_A2 Value: A |
|
www.nissen.co.jp/ | Name: duid Value: 8d0d233e-ac20-4923-9d94-b4227e7ff4b8.1614469106521 |
|
.nissen.co.jp/ | Name: bm_sv Value: C67EA1245547C7AEE9C5E6D3B5B4D0A3~Yt+bTD5M5j8W/Urv61leBg+pvmk4I+ZXgblnvUne3PZlHQAdpWnOa8e0AqNp7cj9eNVEuFJJ7kyE+u3vPqhp8sPJcudMK20jqbtqMu9aYyVrjvlS0hU4qAWuxgld4Tf5NH8CAB9BksMlwNzXM1CcO1tgcDEJuKcQIrt181bwYIY= |
|
.nissen.co.jp/ | Name: _dc_gtm_UA-33087201-6 Value: 1 |
|
.nissen.co.jp/ | Name: bm_mi Value: 53351BE0DC3326A53D2583B70FEB39E5~MbKV8u0CaOSYT3j+08PcFQppRvd2NUg7S9bKYR82Q0GkYzWrLHcdmAW4LegO7F6h5AqE/fwXOXuMGMNSBlxR8IoRTuTx6AuGJ1WazqZrj93gbaYq/Qjxov4Dli14w8RpOXjxrq7MnjucbHw3XToPzl2tuG7NSZKcQDe6khCW5GtmE4eUALV4LZi37h/15x3w5DIklUsJgT+ah5MMlPlINeKe2aNx8T5uIBpueJr2mJOhetZ2Z7qcgVw9cldIJyRA |
|
cache.send.microadinc.com/js | Name: RTUS_STATUS Value: Unknown |
|
.nissen.co.jp/ | Name: __vtdr_ab_2625 Value: |
|
www.nissen.co.jp/ | Name: pv_count_all Value: 1 |
|
.nissen.co.jp/ | Name: __letro_v_id_357 Value: 92029616 |
|
.nissen.co.jp/ | Name: bm_sz Value: 8B797E44A8301A2D89632D4E9D4DDDDB~YAAQxKDVF/WX7Nh3AQAAvonb5Qq5eZ7o2GvoJW5MQRqGcJQ3rWQoUFh0z6IyatS/1bhyFTQ+9sImNB3L5CoB/a0mrTGyZwyW8Av3VQkKiuM4blxW87yMuz4AqMlqeqDEa9+dw/09RddBnBHITAlU4RyKZZO5uhTln3y8Augi2y+uOpWmx8P2VUsg6AWbNCjERx0= |
|
.nissen.co.jp/ | Name: ak_bmsc Value: CD21145A61C3BA1C7D01104D98ECB2B617D5A0C4974D0000F2D73A60C827792F~plSwxRpZ2yEOw+LUWCjbI7ZoxPn9Mgpvw6EFZoMi2ViKenTXOdbpVP8KeKyvhk/Rl11PTvy/Ni2/gWTrFedkre5uojE425UidfL6Nd5SG9rR6dWDq49/WPGI3LV8+sqAr9zTcb2ij2t8D6850WyMoedca2FbGR1nhXPEb09ssUA5+JvIJr83uyeSrQsGRD3S26urRfuH7Gb0Ca0DWBfNB/UF2/+whTz7Vm0IOvSqW25D/wJcTdNcRpUk3Q0PjRuSWTfEupbl4VZrCDPlSy+IuWnT0B85i3qSs9s1ZCWj1d79s= |
|
www.nissen.co.jp/ | Name: snexid Value: 0d1a1a50-6f5e-4dc9-8aa5-82b283e77b64 |
|
www.nissen.co.jp/ | Name: efs_exat Value: 202102280838%3A_via%3A%2F |
|
www.nissen.co.jp/ | Name: ssi Value: sGUBBWEfE6GJu-KIvuGCoTQ |
|
www.nissen.co.jp/ | Name: efs_vid Value: 8d0d233e-ac20-4923-9d94-b4227e7ff4b8 |
|
www.nissen.co.jp/ | Name: leanPlumSuccess Value: 0 |
|
www.nissen.co.jp/ | Name: _dd_s Value: logs=1&id=d445341f-3b4a-47b2-ab2d-2a947a9b151c&created=1614469106572&expire=1614470006572 |
21 Console Messages
A page may trigger messages to the console to be logged. These are often error messages about being unable to load a resource or execute a piece of JavaScript. Sometimes they also provide insight into the technology behind a website.
Source | Level | URL Text |
---|
Security Headers
This page lists any security headers set by the main page. If you want to understand what these mean and how to use them, head on over to this page
Header | Value |
---|---|
Strict-Transport-Security | max-age=31536000 |
X-Content-Type-Options | nosniff |
X-Frame-Options | SAMEORIGIN |
X-Xss-Protection | 1; mode=block |
Indicators
This is a term in the security industry to describe indicators such as IPs, Domains, Hashes, etc. This does not imply that any of these indicate malicious activity.
685b3919.akstat.io
ad1.candy-network.com
adv.mobsmart.net
amplify.outbrain.com
analytics.twitter.com
api.letro.jp
api.locize.io
asia.creativecdn.com
b92.yahoo.co.jp
b97.yahoo.co.jp
brandeliaffi.blob.core.windows.net
browsing-put.nissen.co.jp
c.go-mpulse.net
cache.send.microadinc.com
cdn.rollbar.com
cdn.smartnews-ads.com
cdnjs.cloudflare.com
checkout-api.worldshopping.jp
checkout-js.worldshopping.jp
cm.g.doubleclick.net
connect.facebook.net
ee.wovn.io
googleads.g.doubleclick.net
gum.criteo.com
i.microad.net
i.smartnews-ads.com
img-cf.karte.io
j.microad.net
j.wovn.io
jgl.microad.net
letro.jp
log.letro.jp
m.mobsmart.net
mt.mobsmart.net
pv.amanad.adtdp.com
s-rtb.send.microadinc.com
s.go-mpulse.net
s.yimg.jp
s.yjtag.jp
sin.creativecdn.com
sslwidget.criteo.com
ssp.send.microadinc.com
static.ads-twitter.com
static.criteo.net
static.karte.io
stats.g.doubleclick.net
sync-tag.karte.io
sync.teads.tv
t.co
t.karte.io
templates-cf.karte.io
tr.c-tag.net
tr.outbrain.com
v9999.adv.admeme.net
wap.wovn.io
wovn.global.ssl.fastly.net
www.datadoghq-browser-agent.com
www.facebook.com
www.google-analytics.com
www.google.com
www.google.de
www.googleadservices.com
www.googletagmanager.com
www.leanplum.com
www.nissen.co.jp
yjtag.yahoo.co.jp
www.google-analytics.com
www.nissen.co.jp
103.132.192.30
103.142.125.193
103.142.125.195
104.111.227.41
104.244.42.133
104.244.42.67
13.224.195.106
13.224.195.93
13.225.81.108
13.32.24.51
13.32.24.99
130.211.31.19
142.250.186.130
143.204.101.71
143.204.89.59
151.101.113.194
172.217.18.98
175.41.235.86
178.250.0.163
18.180.221.222
18.181.100.75
182.22.31.124
183.79.113.121
183.79.248.124
183.79.255.28
184.24.20.12
199.232.136.157
2001:4860:4802:34::15
23.218.208.31
23.218.209.56
23.218.209.87
23.36.238.197
2600:9000:20eb:ec00:d:1369:bf40:93a1
2600:9000:211e:2c00:d:5c6f:d380:93a1
2600:9000:211e:5000:16:494f:4640:93a1
2600:9000:2156:7e00:8:dcbf:c740:93a1
2600:9000:2156:d400:17:f89c:2b80:93a1
2606:4700::6810:125e
2a00:1450:4001:80e::2004
2a00:1450:4001:80f::2003
2a00:1450:4001:810::2002
2a00:1450:4001:812::2004
2a00:1450:4001:827::2002
2a00:1450:4001:827::2008
2a00:1450:4001:827::200e
2a00:1450:4001:82a::2003
2a00:1450:400c:c1b::9d
2a02:2638:1::13
2a02:2638:1::3
2a02:26f0:6c00:19a::11a6
2a02:26f0:6c00:291::11a6
2a03:2880:f01c:8012:face:b00c:0:3
2a03:2880:f11c:8183:face:b00c:0:25de
3.114.33.71
34.107.169.168
34.95.98.160
40.115.175.46
52.194.121.79
52.199.15.114
52.199.201.139
52.52.192.87
52.68.181.188
54.65.185.147
64.202.112.63
65.9.58.75
012e24ce727fd237d32537735fd5721e4354588f239d6e83a078e96756cd22b9
02a4ce1ae4dd1579ab71a8304520d1bf4d14b812cad60f08ea5fede2b5f523fb
02a97cbd226317481ddf34cfaad91bdfb10bfe30f19705917a052a7842c9d921
03a8a71246108f5c274534a5021dace0e487fc60e48531e1384032558ee2fc42
03ae1bbec1e390a4e3a1b95d9580be2241a311640a4daa4dcec5c9088b1cece1
05ece6f0b2d548a17843c4b937b3abea0dba36b8a00ba6e1de5b6db1e722f166
062b6385adcc8aaf4e34d98031f53d9e08e29a1d8bf1a334a8190912f818c324
07fcc346529983e3de6371dbc03d980d75f8e1ef2c41531d7b6c08cd525e1bff
0897fe79905a7dc88318e4c02c59688a9f683145ae4cd3fb1995dc8214a7eb9f
09ebd7f407439990aac227e70da23e1a819e8e30282928e324370805f480bec4
0a96c654c6c540690fbbe1f68dbe06215484a3ce2f542056edb5ce25a080c6aa
0ab5b2eb4fbcbda73d5a7de99410c498600aca4c38a5e72930eb8cba1ce47b2f
0aea3ad04bac5625185730069fba75627249d6a4fad314ba9e926a375e2148f4
0c7178cc6ca34fb18e30f070a5e7a1c287b2d7ccfcba2cfdf06e0f46eda55740
0f3be44690ae9914ae3e47b7752e1bdea316f09938e9094f99e0de19ccd8987a
0f6204713c11eeb6d7648e3401617e22f8e88f96cd517a538dc018ac2ab7bdf2
10d8d42d73a02ddb877101e72fbfa15a0ec820224d97cedee4cf92d571be5caa
1292200799983e1747bf849cf7b8de7a8cd80a74706a4907371c6a0d8ddaeded
136fd7f93f653abd945bc811a2d7d8aec1f92b8bfd2fa84658945b9fb5f98652
1381251b526736fd1adbcb467ec12e561b39e976ce1a3244fcf7ac9212b6a8a0
13af25647f3defc648f0bd255e86ba776ce4db92d02add013a4d3bc6556de772
13b4cb1e8f744dbc4085d2d55103bf1be6f2eefbdca1b7b78fd9447bfe279c95
14f39170523a1094baab00d6a5bc769916310427af098d4979a7246a8659a6bb
160530765b6f3583b0753de077bc591196623da2cdd5562ffe0fe0a53ffcaa1d
171632ee14cfd5f69d3e9ad65638c004fbe225a297e3d1e70b6e11e2133edaa7
17520d3472236299465cf2a259112c38db3a6b1be1a41af8d4bcd2d6d252b506
17ec06cb0e9751f1cca2eb8515b75d00123b6f23e442a0dec8b4df3c124d39da
17f28f172acc3f40ba0a3632e3393cfa9200b60909e1321750c0ab86eb17ebdf
18bee6255f26eddbcd206eae834d901cad6e510b4dd2a8f6a6dedc2c6b5212a5
1bad17824e1835fe64514ce8bfd7892a3ea1d12b18e149740cf17266a0a52769
1d348f9f803c95305f63def9d75fd50e79e54a375e1a4a888edbbea366845580
1d7647710fb2bc7cf162729f1ab695dbdbb4d3d38a219e7bb7da6f06030bd7b7
1e9998f3dc9e2ce7a621162612d7d24e2001b35c9ef60cda3853f4f2da48604a
206b4f356301b02f9de2c7e343b2be9d58acee6b98b61ed972c56eb149f06700
219fe17b206ab737beaa88c2a5eaa0c4f4466b5532988fe73c447aaeb4ea4744
23ad2ffa7283b5223a5d5f6b1e351e00bf484452549546fb50b9e1142614c258
23c033ff7d69399243759debb3f803e57eccb3a44b22928cf04d9a717c9c5082
23d9d48085191cde400b388b5ce89236705f0d7848cda926799d4bc1993a3ee9
2403ece7e7ddbb7deb76fffcaefd4cb4c65a6334f3d3135bd66e1d66cd8393b7
24ab00f27d0d15031b9aa1023ff1506505fcbf9dd9a45a66558a29f797107896
252ed9643f62ed6f6737b18933cbcdc547def634b5fa93bb31b19429ea0af653
252ff0dcb0f1fb6b93872d086131bf17c685cf51c2b1aa6bf1ff766d5da8f3ee
29706c94fa7664f8eb55c8e47476b8c122d1e899a3704a9252473cce534c9401
2a8355ac5cee33c9091d3db64b4e8ce7cb035fe11d5af00a076fa3b9079ea3f6
2abb26201e6eb439cbb31f98a3cb5189cbbb055bf5fe2983a9dd53a6f58b99da
2adfe23ff369658037ff307e94561506f5b010f132f32648182dee717d3038f4
2b55918fba7ca1a793becefd8757b3852500c4fc9883b0f5e5ea779e4cd4183e
2bc803db047d3178c0c7a420e2717427bab73c61a2a0abe0af095ebfdc135f9c
2c64d864b9b644eeb1f88c915418ad55fbb460efa5d945b3cff2440f1e3d36de
30a9956e9ef08e231af328e24a565d319923a4dc471a0bfd9bd590c42adb55ac
3117753747a6c47c4b142021274965a6500b9ca10a4da272eaf978c47dff9c99
325365d6ab2928e0202c292dbfc66ae24e682d018df6d62d7ea60f9a32e35938
3275b2af1740da5dd91f4b07833ade6062fadb3348581995e1a1d8206b4ed0b0
328e90a318268aea96180cc31666ae6d6f79d90d078c123bc3d98ee08a192fb7
33ca751ed175a163bef530ebdcdbd0a2d15997ccbcbf8d50a6f504e8ffac5a5c
343137c902520b53f88f1267abaaa184fb871f3b4bfff58ecaa2a3f6e2980216
343821497e2bfc6657a274c98d43d37c163d864e442abe6b2f0906effefdceb9
3b0be1161a55d49afc6dad331a79c1e00f79ee488f1fa844b8451be711b47f65
3bcaa1ee14528adfc1afa39d6b957f49df5a81e0ccab50574ed138b84d5d0a56
3c470044f593bcfb2a79e2ac4b6a059ba44e843eb497cf7259a2568a6c65d310
3d28eb77e6c866eaab12848d03ba717445c4d2204b289686ea947ba8c50c8d83
3ea1d47e294e438851d775f2eca7352b4d03cf662e3ad9410f18bae663a380e5
3ef4bc4f8fb3a445cf05225487f4fb1cbf85f613bf34409742abdd50d6a32124
3fe9f7ae27cfdac746fcdcaada5710e0cb69e43df737f456639da585de12f85c
3fecb7a5f36736f043a5819358c0b1521aeabfdd04bb870923fdf5bc67d5bdb1
405237710d57e1ffd922a8dbf0232c50b13065e01d7216df9915ea27825677d7
41cf450d374ef0ba252b05d2bc08dc74f2cd7ab52f5a3bfbda91ef49caf5e3fd
42985f3c11d44205ac8db60f7ae0c9d94e467852cbe5b4e1caf077507d478dcb
4332c390acd071a3d90b432e651c6e3e5f5a610d5b515ad0389111e600cb349a
434e8dcca045cef1923d4ad1d8d946e9d6aca8d05aa8e64768812cc2304d4338
44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a
45a514fa268f85ede91f52376506fd93971c94d6a7b2ed2ff93a95c8ad5553ce
45cb6869bb605f296c810897fcb4296a10f4c85ffc01b570c7250301e7bffb15
49fe46007729d29edf9c1a531239470e8f103e66c784e0356d1e8e9df12026da
4b314b11c1af4da7a3b2487eb5638bdb4df1ed5f40b19d4a7772402496b876d4
4b3e8131d1bdfd08bed2c97fd450d679f822794772b9f441471bd40ddd3fffce
4be02ea8f86bd018045579b1e047c3599031c2d80b4775fa79c0f008b8db89ad
4cf52cc73734aa71f26f6a10be9aeec89602af45bf0f9abd5c8445a076c1ae1a
50eacffe2fc6ed41bb1b6a3a72c1febfa0776428d2f9dd5628ec6188a8895b38
516a9e6ed2e7158207eddc500f45362ad6c89c5b18748296864f90069b03015b
523165496e85b7e7a498b23c2310136fa8022c9def69d1c8d797df44f8714677
5244b6bac19ec408a0abe0cb8f44152e3f1c8d9c44cf86a1b915bf9134c2a5ff
559931df4bf5a617aa723eb936e0ea4b5562a6d4dd758db5232c78095d12ab52
573f1fb729bbd12c5b3e6daab7f6b9f0b0e2d13decf53ad7779aab0387872e25
586f876503ed4dc63c6ff8567b67dfeb1c84723ef5c7cf218a8ed74ccba6e1ab
590bd25fe9b550e29529e89b206b79ae82ffcefe6677dc8bd6cb13f54736ff69
595454450543545c6e08be98a783420f5414da898b67885ad56da78c953ac50e
59a89d43e6a2f0485b0d3f696f290b68cf1ee3b7aa3365aa956291de637bf6ec
5a80735dba2f9f123164f6798319de9b9a9dc06c16cf7af98708fa4c2a2c509b
5af191abba12e73eb20ab9646bf89f8a801d8d81c98cd4a43b80c43f66ba13ca
5d87fea273ae2cbb92ef4de3d14feff02562b317fe233c883c32901dfdf6c2de
62fbe45761e6264f1ae78bc282f4520c7824dfba600734ee58c3be3319d8b550
64717aefa932a6ca55d8057e05e7d0b3598f0ead53685ca343a34fa85c5b2939
659db204872cc425357b8e99d208b4b377321d3d01b45ddc0c4a00aedf244b84
66854eb9f71ebc5c8ec3b3d9aedde9baf9f7423f14de6c407b456eb4315a6b8c
6783020fd9027ecbcc330d91594932a366cba48dc9d5cb335f04188f97716e24
687920bbac353436411b27696bd68131dcd3d55dbeeb5130690688e23596a758
6acc810809caf77aaf66c368b65ceecd91380ad97ee56d805bf76cd66c8a8441
6dc4551b125d377c7c14c7bb00436ab18955570905bd0093d7f5221d85cae737
6eab10b522736ec410751f745a0efe4bc33224e3c47d9f07bb592336c9739c6b
6eb6d4b9a5bbffe1aabb77081113e63e5a1a3c584d1d470ccb839e5f920ebd08
6ee2a80b9039611682105e3e64dc939e844e4780190dc35d1214d57256db7982
7019ebc5d4560de22eeb3b97520faa726c372868c48246db090d995f22f4003c
7025129dd1ef2161d31852c7510120e1d3b2f7d80f6d5e0fda6765eb0da60dfc
70fccc190dfee6a47fe805cddb5b06cce9573a468764a209a5b6f29d12d7ae54
71f7675be82c622c981761f9df158e525959d8b5f3d9b237c5c9b2d0d422330e
729fdf9ad9cb1f562bd3a3302bedad85c734a1271bb65a3d98f46c372ac9badc
73cbc08c0e1176443e62af0158da37f70b0dfce977702eb4be0b3280acc25c37
73f0f831c2d33098964f7edcfa60c91a0424c07a6d88c6884bccfb0b2762393f
75641773e63df168760b457af72a5d34250cfc94a3d134ce02ae97ca74da8c05
762f246f6fb3ccacef803b4104e5191fcf1ec9eb038db6f9c7ae22cb2b3a25f8
77229f6ac9bc1b732315cff8ed5a4462f6c648710944f5aff94d3635304c5158
7796d49e2eaa54d816320be68899412144018544b044568c5afaa22074339334
7ab90f6e6271ba07b1064459a05e73bd1a4ffcdd01b97828684c7146f253c3fd
7cbd4fa750f1a3b010b8d56688519e226bc113919d64718d6fecbd2d79648ee2
7ea864e8534d0538b4d256b8e55a259ab8693b728889298602613f0b4da9ceb8
7f44e5aca75425a9fc32a107a42905f54056e0d05e7ed4dc06a904536e8e5315
80d54533f80e8233621f965ae0a7713928bdb4d491ed0eb5e90434550f1894cb
81bcf8136cd05cd6c447df9e317addd7588f3511845c6825baf9e0ccc0af351f
8211a66d98acea9b0cbdf87be9bef64a09f78a54c2b771669085fb9a84413cf8
824b8c49b5908604dfdab1e246ea5a2a74c327997af31f1ac37e2748505b2864
8337212354871836e6763a41e615916c89bac5b3f1f0adf60ba43c7c806e1015
83630f65bc4ab28d9cf8670d64a777a2b1f3356e4dd4a80311cc31b27613cb88
84e01419bd81f32ac6df0f75f49c604fda9172000a3ae432b3c47b2a6a712d80
87b8e1853bfa7fb7266574da177e67677318c034983310460174163c738ebcf0
87d75008db1d9c729ca4cab495f763e08ab243286074290f1c6caeac90390293
883f0559649b471bd76a723759476257c1b529ce90eced51b80f8ec1249b894c
886c18da390d3e59f7af77b6a9bf6f53f11d878c21d7fe9956af2940d330fd79
88b0fc3f9d2f307411b1a42d7d8e97f1b68325d0f5f4d1185910fb55f2af9f3a
89fe0ee6020314794fc2cfeacf3d10c31050cfe56f8ebddf1ed0a33fbe941fa7
8c5d4bcf22b3392c7c192db09c93b176727bb4a06cdfc81996a32328549b52a4
8cadf3c3a9253b0d06232619dc20082d865a3824667154df1429cd9bca7388ab
8d73db2c0a0de47e364cc58d0d59439241c8a41e1d3aa394e99cd06e0ba03c5f
8d7c9519d0a681163e72a7743ce93f87342802be755a2b6e399ed925aebff9ce
8e89412aab0ff33898a4a5c3753a21ba1d0338932f24785a525b211a1918d301
8f5e60443e2164e742c3e94e5c3c9c20d5e8586dd4993f3b952ad3d9ab12c16a
91ae4c0badf6aac0700cc234a50b0fcdef9353ec6a61ba0c35d9c7fdc1ad7de6
92f10c5b428a0be40354ae0e8e587bb3133827e7a160c7555a1d14507df15061
9695a383fdcab0dfb8f79296973fa1228f41f982666cab4a933866f10351dc17
980722b57dce75c1afdeaab4ceb597e7955aaf8195edf93230a57e49c6da7bad
98cdb8c16223395ee4d11da69adf7de553d2075ae1a499c0bedc5ff7226ea3f2
98e0e8908faf94dbab4a08e65c579aa45c18aa7723f3ab06035557da4523dd0b
9904e2f2c8c42dea3979cc37ba632f5800a1bae8b43e48364054fc1880e3afab
9b26a58075ace1f79ed112d5f75839e0e48bea109d2ad515a612b74ecb06bab7
9c4a1bf6e63ef460dfd5ab17eab4118e017ca4c46c7547a10e8d312a54ea0a1b
9c7f0ffc191405c451581a8dacd7ef9acc8c5ffe5549e9f257368c030748d5b6
9cb3d313ec02b5da3c86a2d10798e7d0bbcb2c5e340891a15beed2b7cbd0d2eb
9d2d1094332c23311814c4266ee27d8b50282e10246d113e3d2ce348d814562b
9e7ea2b4ba8e2bcc4a964d6192e4671dc5f6863a1c7e35b52b229a3c1e67a68d
a15f69b885461f3bebb741a6cea93f9708eadd2422df4dc908123773968339b3
a39d8cd4cf7ec732844026ad04879d583fdcfc494fe83d6eb56173a8516f26e0
a3cf0d79946517f82402a5181a07ff6a7aa1d0dc93e77f3436db6a0918036a49
a532cc86a5caa21041f7a1c6a80c2fa3030eb898f6154e0b46c184baf14339c9
a6435d6853d8028115592beb43876b3e740d189dfcdc8be11d54ce6e08f08bd2
a6f90c57568ca5fe424415e43cd05823734825bace3504c2eb66c351adcba76e
a7669b5217ff799baf33ab9bb46d9c737248db2071e381df99ccdc364553879a
aad1a94433c47aee5045e2ed22081503c8b66ccdd7aacc02d739b30c19988903
ac5cad6b104d3bbf7e48706661b59f3eaea0822965f4ba4da5762ff748192855
ac8778041fdb7f2e08ceb574c9a766247ea26f1a7d90fa854c4efcf4b361a957
acc5d99842c0559a599d39abec35e05145e8e517f82102045e63684d85636aaf
ae3b429ad6074f122508b991c2cdd34f384496f7fc0f992d7a4a7b062479dcd3
aec60bc104db041b1512185839f18f52986df7e569e5445f740dd60f763fbca8
b01ea9fe8fa871454f7b2b1a4d704134ebb564bdd85c6de11d40723ca02f054e
b0f6ed6203c6b84794084f41991dbc9fc608853a2cf1d097651314af3696ac0f
b1442e85b03bdcaf66dc58c7abb98745dd2687d86350be9a298a1d9382ac849b
b493cdb3b30ea63f6a924f814dfccfcfe305dac02106f9994ce2bcb2e8ed28c4
b4ceacee581031a4014c658e33aa47874612b4c25c1aed8ef682cada98b99d6d
b592a31258a6e5c93aa02c7510d341cfc748bce6f59aa26d78b858d7dafc17b0
b75a5b6b8b9f5d83603e76d3272ddcb73ac1d1fc98d76aa18af4d2afe60861fe
b8d2d55660658b6b240d2c142b1c2ae529e44e0ab7923955bbcbebdacebd544c
b9a98c7d4e1978785f6e4a87798f27b054f135a2bc2b52b5463da0711e0958bf
ba45ea626e4342e948229b9030db23cd8a7e11d63c54f47b2f32e7138007548d
bae103649958fbef2f322c2c95724035345db926c1874aba61cae69cd6dddf0a
bd2aa6725710c5985115b8a1aa9fc0545c66af4a3f4733095934e59635045473
bdcb3c82d090f7ff2f9598d082f00015957e37b62f7bbf2acb73c2dadef2593f
be3ff536d5b676dabcd22154e008190d04d6d887d92e3e60761c20891a9ba31a
bee5ff5147e9029a4f889122c1ff76e8015782cc3a619f6fbc9f6a2257ac6657
bf006bc4eaaf19266f7964ee8cc1ac62ef9642fe2f57658915c43c74ddaf0bf3
bf5d039250d644f3ac284e8c9bf5b61c0e6da61ec31d8c536f0604645731b455
c2d456fbb01b8687552c41487531b62a22c3a46bfc8fccc1e50365cf726eb179
c4819ec64f2b24a053c9d2852e71553dc79f7e837f7d86c8bd144cfa2379429b
c4b470c076939626542ef685ce4b5089d721cd2cc565289fce1447cbc31018ec
c4fda37e5171d69aa0f5376c712675fd07bdd5752e1a468ee8587cccb60c35ef
c61782bff764bce2424b72aa4cea10e7d42fcff929c607d3c26d907abebefe2f
c619b739193df5512bb31c4e32ac9a30b99e4bfc55ff6a4eac82f391f6b14971
c69005e4e2d9e84be4a6c08aab790a45320e3a9428beccf95a1c325d1e7e155b
c75be30f04641d8aec1f769cd3608eebdfbae129c03913255af2808d0b121462
c959d309c7e201d1a37f3263659fa9a4c764ee604ead22de628628737fccd188
c9c9067716547ab04a557052e26ff8f40bbc74a80225602b8dd233533a405002
ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356
cbe0548c929a78e1c15c65d553a162abb2d1f4e129100c95a0025ff593a8604b
cd64b6835b22f87fa851470d116ca826139e40a7ed6b5a2234d37037ab8a0b3b
cec484df8304cb97b40d3d21dbcd4d8f2ad82261903cf57a5f4de6f80318687f
cf8a1812ea4ec96ac42ddb4fc54bdaf17111a4587c557b46b0691a37af5ba8ed
d007aa09360d8f725f94208fc1c07d5250f756a309399942c0199144d250a217
d05a949776db4defc81bde914cd41374e31c1abea13fdad80246ed9ea4995b3b
d0e8eb37d67b11c88466a29a27b34d21627cdf4a5a36fb33510b3981e953eb29
d15f92d74868ca7402dd53c69330c1981034a56d4c86953235266fae3497d982
d1bbb32474281d29c10fe7d4bf4d8992937d209bad41108f1b62982fd5ea9d95
d25d727ad741194bec5e8376d685a18009b27b575e08b7837c196ef60a674fcd
d33b52e930210a1738edd47059a0b9e6cc0013436b3d7182b939d48a1760abc5
d35df7617ad3490e146ced278dd5fdafcc58f4f9b3ba893a3bdf33bc796dd67a
d40efcac911d8964f3728eaa767de281306ff55ba9377435a3364d4d1e1613f6
d418a27a49293cc59e76609bdde05ca81118890ca7c0f2aaa69aaf4bfc74fba8
d41a8dc710c639fb2330902a19dae4a34b43a0ea109568728c25a5c02082b354
d6d94bc3a84e3e480950dbd032a3d3a374708b0a3f548a6b86097027ce24ece1
d8b7ebde2b709e0154bf442d2ca23a58780885bc1b84551d6b70468fc1e53adb
d94f23b584e694e8ddc15206b94fb92b4a28d1ad62253d943cbf6ea5fd092aa0
d9920e07fd9a60352c65051f95842194126f28fbc4d15926894188e2074e530f
da6e1c11412d9c8f3d86b7e2a9bd9eefffced41573b6f44d3a6fe4d0ae32bb91
ddacd9103e99519448a0c026fccb8b83ea8776304ca5299bc54e2cdde0f7652d
de3246094525b21a870fc7d2a67490d0132535c6fa5993755c549f1a9d1bd8af
df3e003cc30e9bdd0313100e8ee5d468070b4b34d11ad355f276a356d4b9c7bf
dfe2a249d1cd705bdf3d2cad4c0c387abc615df1799e5c85193c385d7a798a54
e15eca5878352d8972f4e93b9aed80e34860514c23bfe9ee0a01767a291cf28a
e33eaaf8ef9b27e3d2bb96192c81c979bed43d0c8c8b3786c08f33665aecb1e3
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
e563129d27ba8ecb79dab57bfe0fce702742ccbb1de2558587e7413750c9540a
e654ab4838bc0825c49012ef7f1204c5e4015cbe5f1de4b3a41a0747129e2ca4
e6b33345a009dd9c7aaf1e7af7251225901fd60a76f4ff301b2dfe00f3fae0a7
e706b42351a0cfa92ac93e4f089c95174bb6f7d42a145392884f97ffbf5d14e9
ea3e45b8d11a948027e4fe9782aec0b444a96a9b8a1d4fa91c712397e16d6236
ebd74c114ff95e43d8bbdd7c06343f7f6294ec9e4c06c09af3fa29377bbfd83d
ed2be03fda54c2085d49fb6cd172e2219137dfe4ee7e102aeaf939c5a31a6beb
ee50cc5d3e48ff3c268874476cd2f7b980af42496a089579805754a413c06cbc
ef1955ae757c8b966c83248350331bd3a30f658ced11f387f8ebf05ab3368629
f20c9b4f2b7f168579e31b7bcb4fdedbec99b3b5e60fee0be0cd7d173806db38
f29f9861ddf69182bf1d7b75ceeecff01fba89a43d97f37d4c84d27fcec716b7
f547cf91a57f23a5b2466c10133c927464a39ffa337b30081e5f2960001b88ad
f6a08861de202dcfbdf2dac825f630c215b960937ff0a2850ab749722de8b865
f72d575219c143c14a8db59904fab87f62984021a05b7b167ac7b41a963b3753
f82eeb7d741fcdd22be2f05939c7196ba620b539243541c6a56ab6cd62462613
f869a47a29278d091f4923691c1a1873186931a3ad592480984c848ac699efdf
f988de4b375cb24f3148e12810b71cb02d6e7a698b96bf2b27fab311eb5cf6b8
fa0490f5c30934a816fc2081786b09810a2892301d5d1f374b8b10218024cb2a
fa25e789582a880ef086689f48513f18f7829a819cb0b1016161b8c5a15264d4
faa232bdea645c1e729201763c2408d2ff21003a27ed9a7bf4d2411113f3db9f
fb9c572c233ca8af4ad093a4cd293a9b1dcbe8853a3af6ae8da8f6414b6bfbdd
fcb5ee7a8fcec48a11b7adf420332a9ff2cf49f99558795d6b7b810618573e35
fd10665681dd463a6ed919dddf34504b6b187483845c10d087fbd08e31460e8f
fe19ad4acc8d630eae7bf14662538b858225a7288e4b13a753aef0835cc04d0a
fe76f9d7c5fbdc7b5aa05024562623f5c7618ad3a82678f6775067c6d16d3846
ff1e7119689cdf1b0b2aef8a81aa5ed8a45c3e87358b80394e6c2168b3ad70b2