{"report_id":"cb4af3f1-8942-43e4-9848-25b923dca37b","version":0,"status":"done","tags":[],"date":"2026-07-27T00:13:00Z","url":{"schema":"http","addr":"22266.de-infokonto.com","fqdn":"22266.de-infokonto.com","domain":"de-infokonto.com","tld":"com"},"ip":{"addr":"104.21.82.9","port":0,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"final":{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"title":"PayPal","dom":{"size":8184,"mime_type":"text/html; charset=utf-8","magic":"HTML document, Unicode text, UTF-8 text, with very long lines (8172), with no line terminators","md5":"8889d1f77c6e91b4f6d6387586de32fc","sha1":"1e8ea606b21b9732f33cb6bedf58d621ca3debb7","sha256":"f78c5b5ff69553b35708b315fe42cde3794f7197d7517d2e1efb0023a39cd7b8","sha512":"ca4f1d395c7a15295b0350b62282c2a9970c2d922d0b96618830c46b0af7d6e19bbe2b1b92f0cebb5431ee0e3bc9817474ededff7831a35afeba8723ee862083","ssdeep":"96:uWmZuLFno0ggQcxnKcEl+xMwmRSOowIKR7ON5ZbfDZ17cg1xqzcfxm+fEqOcKxKE:uWmZuLFn3nKlLXslb9KgnqzcJmy/ylx","tlshash":"51f14076b404de8ffc577e5a103ead3e54cec56f8aa5c9b892dcce1006428796b92dc0","dom_hash":"domhash1e2bde1f0b835d742a6bf00d1ed0a02e","first_seen":"","last_seen":"","times_seen":0,"resource_available":false,"data":null}},"submit":{"url":{"schema":"http","addr":"22266.de-infokonto.com","fqdn":"22266.de-infokonto.com","domain":"de-infokonto.com","tld":"com"},"ip":{"addr":"104.21.82.9","port":0,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"tags":null,"meta":null},"settings":{"access":"public","device_type":"desktop","expires_at":"2027-08-31T00:13:00Z","useragent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0","referer":"","cookies":null,"exit_node":"qguvgzjxzsgb3vs"},"stats":{"alert_count":{"ids":0,"urlquery":0,"analyzer":7}},"detection":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"22266.de-infokonto.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"22266.de-infokonto.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"22266.de-infokonto.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null},"summary":[{"fqdn":"absicherung-kontakt.com","ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"domain_registered":"2026-07-25","domain_rank":0,"first_seen":"2026-07-26T12:48:43.467774Z","last_seen":"2026-07-26T12:48:43.467774Z","alert_count":100,"request_count":25,"received_data":700360,"sent_data":14311,"comment":"","tags":null,"fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}]},{"fqdn":"22266.de-infokonto.com","ip":{"addr":"172.67.167.133","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"domain_registered":"2026-05-18","domain_rank":0,"first_seen":"2026-07-27T00:13:01.287171Z","last_seen":"2026-07-27T00:13:01.287171Z","alert_count":3,"request_count":1,"received_data":527,"sent_data":491,"comment":"","tags":null,"fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}]}],"files":null,"artifacts":{"windows_shortcuts":null,"files":null,"telegram":null,"pdfs":null,"clipboard":null},"sensors":{"ids":null,"analyzer":null,"urlquery":null},"javascript":{"script":[{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/app/layout-5579a9d51929284a.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":false,"md5":"32fb50d4bad844c46e6f570e86e50204","sha1":"5ef8b2a4810be6f45b46c227328df1886514094f","sha256":"d05143673001ff2b06210668e4a2bdb07c13f422e65286b5395146e0fd18eae1","sha512":"b64064a705330138e31800627ad3c40c26f70fe3673a61545f9ac811745b780b11e3fe03f9c55e574599ffc9c4a1e689e6bafaec1e40185a0c1b6c08cb90ddc2","ssdeep":"192:cMGyFgOx/AES/BGrAfV/gjT4w64xy27G8SauZ/jtZu7pKzLMJ4xxHp56:cu/Ats0hw77G8Pobz+s/Y4xxHps","tlshash":"9d320a4a76647998b65b09bda1af540ca23f8a486c0e04b0b7b9fc2134079967337fdd","size":11506,"data":"","first_seen":"2026-07-26T12:48:47.486712Z","last_seen":"2026-07-27T00:14:58.579291Z","times_seen":8,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":true,"md5":"b40cdc025a72d0b516bd11d9ef0a1776","sha1":"9cd34b30af473b8071638d82dcacef0373194aaf","sha256":"43ef2d3ec8d5b620ec8c5fc2bfc14c3a9836620f75a0a14a0c025ab753cf6f68","sha512":"ffad498a0fda3194476aee567df0b821e3c4886662a0dc72a53e8289c98fc3187b991df3da95f0bc2fe1b238d3478ccfac9d39a23fa2e7928ff3be8461110af9","ssdeep":"","tlshash":"3aa001f190d29c69e43741ab687511161bac490d0109014123a198e91162a098f48e8e","size":72,"data":"","first_seen":"2023-10-09T10:35:22Z","last_seen":"2026-07-27T03:35:49.934665Z","times_seen":99268,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":true,"md5":"9d51cd332f1686bffd2a9ee505151d42","sha1":"b5583a856d629b9ec7e51850c54a22791386c76f","sha256":"c545c6c8c67f587f63a9e8b8f346a3fe0c015ca8eaca44a276397ff353c43e30","sha512":"1e9657a44f6fbfb412579abbd2759f018aa8f961098aa0cd29d0d2b01217a975a854bc9bcef6e59ab13260c39f03e5a8da6412b388ce90a045fba8c7806a13cb","ssdeep":"","tlshash":"1aa01228c4449c2541300716042c080180ccc64d865001861364c6855130c784284d84","size":86,"data":"","first_seen":"2026-07-11T00:23:13.792742Z","last_seen":"2026-07-27T00:14:58.586266Z","times_seen":15,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":true,"md5":"da93a9ec0a5d62ff38f2f25357e1589b","sha1":"bfc3a0eb725348a27c8f074e6a6f85bc031a0d9b","sha256":"3ca00bfd847d375afbf42eec5e387db11aa1b2d50e4b29ee3c48822fdae4bad0","sha512":"ced41d4f85d06b6a9fb80f808eb474963f65590087083339096cac9cc3bfca5b6b3fba42e74438eb1572b797d13b606dd225837e92c420ae0b2a6907675cde30","ssdeep":"","tlshash":"b1f0f925f180fa4378339f0b466bdd354edbe83e1538a0c8615dc4bb1a16d185fb8891","size":629,"data":"","first_seen":"2026-07-26T12:48:47.496137Z","last_seen":"2026-07-27T00:14:58.587351Z","times_seen":8,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":true,"md5":"20d03a8b50c94cecbfa8b524cf9df4df","sha1":"bdd27f60a9792b3c2d0dc249880cb22e54b63e8b","sha256":"b19e36d24cd9b137244407b4410395b8a100c6a405e8ea24be9e15ff8e666acb","sha512":"43ed4cccd9719659b1c17dd462b06a79c05b0ce1ec1dfc9eea63638d5da93562c31a2b3ba576b4490b7f4eb9911d85edf7aba6b57c0a92460de16c014ce5e1c0","ssdeep":"96:LEl+xMwmRSOowIKR7ON5ZbfDZ17cg1xqzcfxm+fEqU:QlLXslb9KgnqzcJmyA","tlshash":"02a1b8392009de9efd8a3d59113eac3a64cd866b47d5ceb882d8ce10068347d7b93ec0","size":4698,"data":"","first_seen":"2026-07-26T12:48:47.497158Z","last_seen":"2026-07-27T00:14:58.588222Z","times_seen":8,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":true,"md5":"d97e17074b03b6451718fb2972abbde5","sha1":"6172194e7b230e0d4547e7b8f26e41fa10152de5","sha256":"fde77db2d079845f6654c42bdcf5733b0e0d9fe12c9ebd3ddd0927b5a54daf23","sha512":"4448f4e2378c4ffbbaec0c71fd03ea2414262421714d6791faeeb50c7dd2c05026682f2dec171d2d06fb8f263474dde42475f5267ff0166167f8764d720969ba","ssdeep":"","tlshash":"81e07da1dc42de19db975f360c3f1c7831ddc77d5246914694c2cd645882a314ee2ec8","size":332,"data":"","first_seen":"2026-05-28T12:32:08.358057Z","last_seen":"2026-07-27T00:14:58.589149Z","times_seen":23,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/fd9d1056-f09744c5e9674c7b.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":false,"md5":"d70ea42503ecdf865cc5b50951e7a260","sha1":"d6024cc44a508c5e42bccc99aa6939490273b3a3","sha256":"b8bddf9481d859d648e1e050f8322eb3defe3dd3f9bd13f4c44dd6f2ecf5ab80","sha512":"c38885a712287d6c88b14f3a78df8b03c671a1e8fe71ec680edad591b056eabd5cc510e7cf2b565d94779bbb258ca49068d31adb94d343d59c653c57e77035ee","ssdeep":"1536:PVjExazug79h2U4kcNxakmBjt4oGZlibTR5ikxYhlUuRNka2wblHiN+wL8z9Ggum:3zug758kkEiXjOAprX2wd5WjguGOK","tlshash":"50f3f8e83995f6666eb30277009f1803737c262b280d4d60a211fd9eb5b845eb17bfd9","size":172834,"data":"","first_seen":"2025-01-18T11:47:06.649614Z","last_seen":"2026-07-27T02:07:42.514336Z","times_seen":4409,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/main-app-70ee7df9db027ccc.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":false,"md5":"3eaf12a540fadb070ef6722138574f92","sha1":"990942dc9054283a1d82636a19ce57ce2e8f16f6","sha256":"491a689e0ee919fc28a0ee04cdd9d264b27e10ee8baed794bb9fbf3249249d69","sha512":"ea6330a122f24236f7e8302d97122718c2c8e87618bc4ba3f63ff04bf9ca23ea2852328247f66e9323cb30b46bc544861d167fd3353de64042955f4633d127d8","ssdeep":"","tlshash":"59f012992b4d701f3d13ad24fdd35c2e755e416428a759501a14ddb12c336aca3f1c79","size":461,"data":"","first_seen":"2026-07-26T12:48:47.492553Z","last_seen":"2026-07-27T00:14:58.581761Z","times_seen":8,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/webpack-c81f7fd28659d64f.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":false,"md5":"48a0efa196e3561eba1491f20e632cbb","sha1":"b385022103992d75cfb2027770d4539bf9a918ef","sha256":"1bdb0dd87714cecd54db2509fc17767ce17b4606ee0eec9faca0871ab8fd87ca","sha512":"8e540715546e6692a68eda2cc987c811c2428e2250cf32864ed201364c34f1f9c2e99150aec534e7668a092424dcd4b23f929c0dac9c48ed7b8be73d7f724bc3","ssdeep":"","tlshash":"5e7196dd71a1f8ba1783a4a1043f9456f23f28b2281ee4a0cb25d8f5fc355488513fa8","size":3557,"data":"","first_seen":"2025-03-01T02:35:14.23303Z","last_seen":"2026-07-27T00:14:58.575499Z","times_seen":159,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/app/error-f3294a5e1b423e7f.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":false,"md5":"f98f0d2cf9e724a4a2b0c0296da1624d","sha1":"3d0ea2cbd05f9888f7dbb0025fed035543862ecf","sha256":"18e962a712b74058d01880424901a3930fd7c7999c2c40b1139f7d41f4c92783","sha512":"45b0e27e6ba23f778cfb3688e3db0a8a04055a994fe0d03baecafbdcdb67f4cf09b3e9474f5702166d0e4e942b693843f87bff2be145ba82664eb98d3c0d1ef7","ssdeep":"","tlshash":"b73140143684b948fd6785ac717f840c74a71828b27d1df563688c7222a10f53733bd8","size":1492,"data":"","first_seen":"2026-07-26T12:48:47.490511Z","last_seen":"2026-07-27T00:14:58.570493Z","times_seen":8,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/117-f9bf0cc16936e653.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"introduction_type":"scriptElement","is_inline":false,"md5":"793be48b503ddc3b5bcaba96361c7e84","sha1":"035410aa1815f8fcd8ce8bd99f18655bde3819a3","sha256":"4b9abd79e3e16a44cbc1a96e14bddb9f31e8c3b66e6332a251d6b77b4531b05f","sha512":"9af5a5347cce2b30a2d812ea4642654998634b88aac676c58f626789f95c4e79424472d85091af92f9d2be806d6f9a9c1b9ff3e2136cedc301fd8acde81b0b23","ssdeep":"768:fO9P55eNwbSlPftVDK//d9icrEAKH1ag8xxqKjj3fOpDKdlr/NaO8Qr93UsGoROz:Uiw2l+Wc3mY5jFdl/iPsibn2kJ51oCv7","tlshash":"6bc3d8ba71d0f8e2079744e5843b400af3791c3b146f70a0a7a5cdd9b5a44eea1a3f5e","size":124362,"data":"","first_seen":"2026-02-10T12:48:53.828874Z","last_seen":"2026-07-27T00:14:58.57841Z","times_seen":67,"alerts":{"ids":null,"analyzer":null,"urlquery":null}}],"eval":null,"write":null,"console":null},"http":[{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/app/error-f3294a5e1b423e7f.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:33.885Z","timestamp":1785111153885,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/app/error-f3294a5e1b423e7f.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:34 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 1492\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"5d4-19f99f825a9\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":1492,"size_decoded":2021,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, Unicode text, UTF-8 text, with very long lines (1488), with no line terminators","md5":"f98f0d2cf9e724a4a2b0c0296da1624d","sha1":"3d0ea2cbd05f9888f7dbb0025fed035543862ecf","sha256":"18e962a712b74058d01880424901a3930fd7c7999c2c40b1139f7d41f4c92783","sha512":"45b0e27e6ba23f778cfb3688e3db0a8a04055a994fe0d03baecafbdcdb67f4cf09b3e9474f5702166d0e4e942b693843f87bff2be145ba82664eb98d3c0d1ef7","ssdeep":"","tlshash":"b73140143684b948fd6785ac717f840c74a71828b27d1df563688c7222a10f53733bd8","first_seen":"2026-07-26T12:48:47.490511Z","last_seen":"2026-07-27T00:14:58.570493Z","times_seen":8,"resource_available":true,"data":"KHNlbGYud2VicGFja0NodW5rX05fRT1zZWxmLndlYnBhY2tDaHVua19OX0V8fFtdKS5wdXNoKFtbNjAxXSx7MjgxOmZ1bmN0aW9uKGUsdCxuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKG4uYmluZChuLDM0OTApKX0sMzQ5MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KSxuLmQodCx7ZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBvfX0pO3ZhciBpPW4oNzQzNykscj1uKDIyNjUpO2Z1bmN0aW9uIG8oZSl7bGV0e2Vycm9yOnQscmVzZXQ6bn09ZTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCk9Pnt9LFt0XSksKDAsaS5qc3gpKCJkaXYiLHtzdHlsZTp7bWluSGVpZ2h0OiIxMDB2aCIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiIjZjVmN2ZhIixmb250RmFtaWx5OiJzeXN0ZW0tdWksIHNhbnMtc2VyaWYifSxjaGlsZHJlbjooMCxpLmpzeHMpKCJkaXYiLHtzdHlsZTp7YmFja2dyb3VuZDoid2hpdGUiLGJvcmRlclJhZGl1czoxNixwYWRkaW5nOjQwLG1heFdpZHRoOjQ2MCx0ZXh0QWxpZ246ImNlbnRlciIsYm94U2hhZG93OiIwIDJweCAxNnB4IHJnYmEoMCwwLDAsMC4wNikifSxjaGlsZHJlbjpbKDAsaS5qc3gpKCJkaXYiLHtzdHlsZTp7Zm9udFNpemU6NDgsbWFyZ2luQm90dG9tOjE2fSxjaGlsZHJlbjoi4pqg77iPIn0pLCgwLGkuanN4KSgiaDIiLHtzdHlsZTp7Zm9udFNpemU6MjAsZm9udFdlaWdodDo2MDAsbWFyZ2luQm90dG9tOjgsY29sb3I6IiMyYzJlMmYifSxjaGlsZHJlbjoiRWluIEZlaGxlciBpc3QgYXVmZ2V0cmV0ZW4ifSksKDAsaS5qc3gpKCJwIix7c3R5bGU6e2ZvbnRTaXplOjE0LGNvbG9yOiIjNjg3MTczIixtYXJnaW5Cb3R0b206MjAsbGluZUhlaWdodDoxLjV9LGNoaWxkcmVuOiJCaXR0ZSBha3R1YWxpc2llcmVuIFNpZSBkaWUgU2VpdGUgb2RlciB2ZXJzdWNoZW4gU2llIGVzIHNwXHhlNHRlciBlcm5ldXQuIn0pLCgwLGkuanN4cykoInByZSIse3N0eWxlOntmb250U2l6ZToxMSxjb2xvcjoiI2MwMmIwYSIsYmFja2dyb3VuZDoiI2ZlZjBmMCIscGFkZGluZzoxMixib3JkZXJSYWRpdXM6OCx0ZXh0QWxpZ246ImxlZnQiLG92ZXJmbG93OiJhdXRvIixtYXhIZWlnaHQ6MTIwLG1hcmdpbkJvdHRvbToyMH0sY2hpbGRyZW46W3QubWVzc2FnZSx0LmRpZ2VzdD8iXG5EaWdlc3Q6ICIuY29uY2F0KHQuZGlnZXN0KToiIl19KSwoMCxpLmpzeCkoImJ1dHRvbiIse29uQ2xpY2s6bixzdHlsZTp7cGFkZGluZzoiMTJweCAyNHB4IixiYWNrZ3JvdW5kOiIjMDA3MGJhIixjb2xvcjoid2hpdGUiLGJvcmRlcjoibm9uZSIsYm9yZGVyUmFkaXVzOjI0LGZvbnRTaXplOjE1LGZvbnRXZWlnaHQ6NjAwLGN1cnNvcjoicG9pbnRlciJ9LGNoaWxkcmVuOiJTZWl0ZSBuZXUgbGFkZW4ifSldfSl9KX19fSxmdW5jdGlvbihlKXtlLk8oMCxbOTcxLDExNyw3NDRdLGZ1bmN0aW9uKCl7cmV0dXJuIGUoZS5zPTI4MSl9KSxfTl9FPWUuTygpfV0pOw=="}},"time_used":144,"timings":{"blocked":84,"dns":0,"connect":0,"send":0,"wait":60,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/fd9d1056-f09744c5e9674c7b.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.091Z","timestamp":1785111158091,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/fd9d1056-f09744c5e9674c7b.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 172834\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"2a322-19f99f825b7\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]},{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":172834,"size_decoded":173367,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, ASCII text, with very long lines (65536), with no line terminators","md5":"d70ea42503ecdf865cc5b50951e7a260","sha1":"d6024cc44a508c5e42bccc99aa6939490273b3a3","sha256":"b8bddf9481d859d648e1e050f8322eb3defe3dd3f9bd13f4c44dd6f2ecf5ab80","sha512":"c38885a712287d6c88b14f3a78df8b03c671a1e8fe71ec680edad591b056eabd5cc510e7cf2b565d94779bbb258ca49068d31adb94d343d59c653c57e77035ee","ssdeep":"1536:PVjExazug79h2U4kcNxakmBjt4oGZlibTR5ikxYhlUuRNka2wblHiN+wL8z9Ggum:3zug758kkEiXjOAprX2wd5WjguGOK","tlshash":"50f3f8e83995f6666eb30277009f1803737c262b280d4d60a211fd9eb5b845eb17bfd9","first_seen":"2025-01-18T11:47:06.649614Z","last_seen":"2026-07-27T02:07:42.514336Z","times_seen":4409,"resource_available":true,"data":"InVzZSBzdHJpY3QiOyhzZWxmLndlYnBhY2tDaHVua19OX0U9c2VsZi53ZWJwYWNrQ2h1bmtfTl9FfHxbXSkucHVzaChbWzk3MV0sezQ0MTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGw9bigyMjY1KSxhPW4oMTc2Nyksbz17dXNpbmdDbGllbnRFbnRyeVBvaW50OiExLEV2ZW50czpudWxsLERpc3BhdGNoZXI6e2N1cnJlbnQ6bnVsbH19O2Z1bmN0aW9uIGkoZSl7dmFyIHQ9Imh0dHBzOi8vcmVhY3QuZGV2L2Vycm9ycy8iK2U7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXt0Kz0iP2FyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbMV0pO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKX1yZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAiK3QrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn12YXIgdT1PYmplY3QuYXNzaWduLHM9bC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxjPXMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixmPXtwZW5kaW5nOiExLGRhdGE6bnVsbCxtZXRob2Q6bnVsbCxhY3Rpb246bnVsbH0sZD1bXSxwPS0xO2Z1bmN0aW9uIG0oZSl7cmV0dXJue2N1cnJlbnQ6ZX19ZnVuY3Rpb24gaChlKXswPnB8fChlLmN1cnJlbnQ9ZFtwXSxkW3BdPW51bGwscC0tKX1mdW5jdGlvbiBnKGUsdCl7ZFsrK3BdPWUuY3VycmVudCxlLmN1cnJlbnQ9dH12YXIgeT1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iiksdj1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSxiPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iiksaz1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLHc9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxTPVN5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIiksQz1TeW1ib2wuZm9yKCJyZWFjdC5jb25zdW1lciIpLEU9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLHg9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSx6PVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksUD1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZV9saXN0IiksTj1TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIiksXz1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksTD1TeW1ib2wuZm9yKCJyZWFjdC5zY29wZSIpO1N5bWJvbC5mb3IoInJlYWN0LmRlYnVnX3RyYWNlX21vZGUiKTt2YXIgVD1TeW1ib2wuZm9yKCJyZWFjdC5vZmZzY3JlZW4iKSxGPVN5bWJvbC5mb3IoInJlYWN0LmxlZ2FjeV9oaWRkZW4iKSxNPVN5bWJvbC5mb3IoInJlYWN0LmNhY2hlIik7U3ltYm9sLmZvcigicmVhY3QudHJhY2luZ19tYXJrZXIiKTt2YXIgTz1TeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gUihlKXtyZXR1cm4gbnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZT9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZihlPU8mJmVbT118fGVbIkBAaXRlcmF0b3IiXSk/ZTpudWxsfXZhciBEPW0obnVsbCksQT1tKG51bGwpLEk9bShudWxsKSxVPW0obnVsbCksQj17JCR0eXBlb2Y6RSxfY3VycmVudFZhbHVlOm51bGwsX2N1cnJlbnRWYWx1ZTI6bnVsbCxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9O2Z1bmN0aW9uIFYoZSx0KXtzd2l0Y2goZyhJLHQpLGcoQSxlKSxnKEQsbnVsbCksZT10Lm5vZGVUeXBlKXtjYXNlIDk6Y2FzZSAxMTp0PSh0PXQuZG9jdW1lbnRFbGVtZW50KSYmKHQ9dC5uYW1lc3BhY2VVUkkpP3MyKHQpOjA7YnJlYWs7ZGVmYXVsdDppZih0PShlPTg9PT1lP3QucGFyZW50Tm9kZTp0KS50YWdOYW1lLGU9ZS5uYW1lc3BhY2VVUkkpdD1zMyhlPXMyKGUpLHQpO2Vsc2Ugc3dpdGNoKHQpe2Nhc2Uic3ZnIjp0PTE7YnJlYWs7Y2FzZSJtYXRoIjp0PTI7YnJlYWs7ZGVmYXVsdDp0PTB9fWgoRCksZyhELHQpfWZ1bmN0aW9uIFEoKXtoKEQpLGgoQSksaChJKX1mdW5jdGlvbiAkKGUpe251bGwhPT1lLm1lbW9pemVkU3RhdGUmJmcoVSxlKTt2YXIgdD1ELmN1cnJlbnQsbj1zMyh0LGUudHlwZSk7dCE9PW4mJihnKEEsZSksZyhELG4pKX1mdW5jdGlvbiBqKGUpe0EuY3VycmVudD09PWUmJihoKEQpLGgoQSkpLFUuY3VycmVudD09PWUmJihoKFUpLEIuX2N1cnJlbnRWYWx1ZT1udWxsKX12YXIgVz1hLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssSD1hLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLHE9YS51bnN0YWJsZV9zaG91bGRZaWVsZCxLPWEudW5zdGFibGVfcmVxdWVzdFBhaW50LFk9YS51bnN0YWJsZV9ub3csWD1hLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLEc9YS51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxaPWEudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksSj1hLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LGVlPWEudW5zdGFibGVfTG93UHJpb3JpdHksZXQ9YS51bnN0YWJsZV9JZGxlUHJpb3JpdHksZW49YS5sb2csZXI9YS51bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZSxlbD1udWxsLGVhPW51bGw7ZnVuY3Rpb24gZW8oZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGVuJiZlcihlKSxlYSYmImZ1bmN0aW9uIj09dHlwZW9mIGVhLnNldFN0cmljdE1vZGUpdHJ5e2VhLnNldFN0cmljdE1vZGUoZWwsZSl9Y2F0Y2goZSl7fX12YXIgZWk9TWF0aC5jbHozMj9NYXRoLmNsejMyOmZ1bmN0aW9uKGUpe3JldHVybiAwPT0oZT4+Pj0wKT8zMjozMS0oZXUoZSkvZXN8MCl8MH0sZXU9TWF0aC5sb2csZXM9TWF0aC5MTjIsZWM9MTI4LGVmPTQxOTQzMDQ7ZnVuY3Rpb24gZWQoZSl7dmFyIHQ9NDImZTtpZigwIT09dClyZXR1cm4gdDtzd2l0Y2goZSYtZSl7Y2FzZSAxOnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA4OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIDE2O2Nhc2UgMzI6cmV0dXJuIDMyO2Nhc2UgNjQ6cmV0dXJuIDY0O2Nhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiA0MTk0MTc2JmU7Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6cmV0dXJuIDYyOTE0NTYwJmU7Y2FzZSA2NzEwODg2NDpyZXR1cm4gNjcxMDg4NjQ7Y2FzZSAxMzQyMTc3Mjg6cmV0dXJuIDEzNDIxNzcyODtjYXNlIDI2ODQzNTQ1NjpyZXR1cm4gMjY4NDM1NDU2O2Nhc2UgNTM2ODcwOTEyOnJldHVybiA1MzY4NzA5MTI7Y2FzZSAxMDczNzQxODI0OnJldHVybiAwO2RlZmF1bHQ6cmV0dXJuIGV9fWZ1bmN0aW9uIGVwKGUsdCl7dmFyIG49ZS5wZW5kaW5nTGFuZXM7aWYoMD09PW4pcmV0dXJuIDA7dmFyIHI9MCxsPWUuc3VzcGVuZGVkTGFuZXM7ZT1lLnBpbmdlZExhbmVzO3ZhciBhPTEzNDIxNzcyNyZuO3JldHVybiAwIT09YT8wIT0obj1hJn5sKT9yPWVkKG4pOjAhPShlJj1hKSYmKHI9ZWQoZSkpOjAhPShuJj1+bCk/cj1lZChuKTowIT09ZSYmKHI9ZWQoZSkpLDA9PT1yPzA6MCE9PXQmJnQhPT1yJiYwPT0odCZsKSYmKChsPXImLXIpPj0oZT10Ji10KXx8MzI9PT1sJiYwIT0oNDE5NDE3NiZlKSk/dDpyfWZ1bmN0aW9uIGVtKGUsdCl7cmV0dXJuIGUuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMmdD8wOjAhPShlPS01MzY4NzA5MTMmZS5wZW5kaW5nTGFuZXMpP2U6NTM2ODcwOTEyJmU/NTM2ODcwOTEyOjB9ZnVuY3Rpb24gZWgoKXt2YXIgZT1lYztyZXR1cm4gMD09KDQxOTQxNzYmKGVjPDw9MSkpJiYoZWM9MTI4KSxlfWZ1bmN0aW9uIGVnKCl7dmFyIGU9ZWY7cmV0dXJuIDA9PSg2MjkxNDU2MCYoZWY8PD0xKSkmJihlZj00MTk0MzA0KSxlfWZ1bmN0aW9uIGV5KGUpe2Zvcih2YXIgdD1bXSxuPTA7MzE+bjtuKyspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIGV2KGUsdCxuKXtlLnBlbmRpbmdMYW5lc3w9dCxlLnN1c3BlbmRlZExhbmVzJj1+dDt2YXIgcj0zMS1laSh0KTtlLmVudGFuZ2xlZExhbmVzfD10LGUuZW50YW5nbGVtZW50c1tyXT0xMDczNzQxODI0fGUuZW50YW5nbGVtZW50c1tyXXw0MTk0MjE4Jm59ZnVuY3Rpb24gZWIoZSx0KXt2YXIgbj1lLmVudGFuZ2xlZExhbmVzfD10O2ZvcihlPWUuZW50YW5nbGVtZW50cztuOyl7dmFyIHI9MzEtZWkobiksbD0xPDxyO2wmdHxlW3JdJnQmJihlW3JdfD10KSxuJj1+bH19dmFyIGVrPTA7ZnVuY3Rpb24gZXcoZSl7cmV0dXJuIDI8KGUmPS1lKT84PGU/MCE9KDEzNDIxNzcyNyZlKT8zMjoyNjg0MzU0NTY6ODoyfXZhciBlUz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGVDPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLGVFPSJfX3JlYWN0RmliZXIkIitlQyxleD0iX19yZWFjdFByb3BzJCIrZUMsZXo9Il9fcmVhY3RDb250YWluZXIkIitlQyxlUD0iX19yZWFjdEV2ZW50cyQiK2VDLGVOPSJfX3JlYWN0TGlzdGVuZXJzJCIrZUMsZV89Il9fcmVhY3RIYW5kbGVzJCIrZUMsZUw9Il9fcmVhY3RSZXNvdXJjZXMkIitlQyxlVD0iX19yZWFjdE1hcmtlciQiK2VDO2Z1bmN0aW9uIGVGKGUpe2RlbGV0ZSBlW2VFXSxkZWxldGUgZVtleF0sZGVsZXRlIGVbZVBdLGRlbGV0ZSBlW2VOXSxkZWxldGUgZVtlX119ZnVuY3Rpb24gZU0oZSl7dmFyIHQ9ZVtlRV07aWYodClyZXR1cm4gdDtmb3IodmFyIG49ZS5wYXJlbnROb2RlO247KXtpZih0PW5bZXpdfHxuW2VFXSl7aWYobj10LmFsdGVybmF0ZSxudWxsIT09dC5jaGlsZHx8bnVsbCE9PW4mJm51bGwhPT1uLmNoaWxkKWZvcihlPWNpKGUpO251bGwhPT1lOyl7aWYobj1lW2VFXSlyZXR1cm4gbjtlPWNpKGUpfXJldHVybiB0fW49KGU9bikucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlTyhlKXtpZihlPWVbZUVdfHxlW2V6XSl7dmFyIHQ9ZS50YWc7aWYoNT09PXR8fDY9PT10fHwxMz09PXR8fDI2PT09dHx8Mjc9PT10fHwzPT09dClyZXR1cm4gZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlUihlKXt2YXIgdD1lLnRhZztpZig1PT09dHx8MjY9PT10fHwyNz09PXR8fDY9PT10KXJldHVybiBlLnN0YXRlTm9kZTt0aHJvdyBFcnJvcihpKDMzKSl9ZnVuY3Rpb24gZUQoZSl7cmV0dXJuIGVbZXhdfHxudWxsfWZ1bmN0aW9uIGVBKGUpe3ZhciB0PWVbZUxdO3JldHVybiB0fHwodD1lW2VMXT17aG9pc3RhYmxlU3R5bGVzOm5ldyBNYXAsaG9pc3RhYmxlU2NyaXB0czpuZXcgTWFwfSksdH1mdW5jdGlvbiBlSShlKXtlW2VUXT0hMH12YXIgZVU9bmV3IFNldCxlQj17fTtmdW5jdGlvbiBlVihlLHQpe2VRKGUsdCksZVEoZSsiQ2FwdHVyZSIsdCl9ZnVuY3Rpb24gZVEoZSx0KXtmb3IoZUJbZV09dCxlPTA7ZTx0Lmxlbmd0aDtlKyspZVUuYWRkKHRbZV0pfXZhciBlJD0hKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHx2b2lkIDA9PT13aW5kb3cuZG9jdW1lbnR8fHZvaWQgMD09PXdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KSxlaj1SZWdFeHAoIl5bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKiQiKSxlVz17fSxlSD17fTtmdW5jdGlvbiBlcShlLHQsbil7aWYoZVMuY2FsbChlSCx0KXx8IWVTLmNhbGwoZVcsdCkmJihlai50ZXN0KHQpP2VIW3RdPSEwOihlV1t0XT0hMCwhMSkpKXtpZihudWxsPT09billLnJlbW92ZUF0dHJpYnV0ZSh0KTtlbHNle3N3aXRjaCh0eXBlb2Ygbil7Y2FzZSJ1bmRlZmluZWQiOmNhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjplLnJlbW92ZUF0dHJpYnV0ZSh0KTtyZXR1cm47Y2FzZSJib29sZWFuIjp2YXIgcj10LnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw1KTtpZigiZGF0YS0iIT09ciYmImFyaWEtIiE9PXIpe2UucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybn19ZS5zZXRBdHRyaWJ1dGUodCwiIituKX19fWZ1bmN0aW9uIGVLKGUsdCxuKXtpZihudWxsPT09billLnJlbW92ZUF0dHJpYnV0ZSh0KTtlbHNle3N3aXRjaCh0eXBlb2Ygbil7Y2FzZSJ1bmRlZmluZWQiOmNhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjpjYXNlImJvb2xlYW4iOmUucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybn1lLnNldEF0dHJpYnV0ZSh0LCIiK24pfX1mdW5jdGlvbiBlWShlLHQsbixyKXtpZihudWxsPT09cillLnJlbW92ZUF0dHJpYnV0ZShuKTtlbHNle3N3aXRjaCh0eXBlb2Ygcil7Y2FzZSJ1bmRlZmluZWQiOmNhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjpjYXNlImJvb2xlYW4iOmUucmVtb3ZlQXR0cmlidXRlKG4pO3JldHVybn1lLnNldEF0dHJpYnV0ZU5TKHQsbiwiIityKX19ZnVuY3Rpb24gZVgoZSl7aWYodm9pZCAwPT09aVkpdHJ5e3Rocm93IEVycm9yKCl9Y2F0Y2goZSl7dmFyIHQ9ZS5zdGFjay50cmltKCkubWF0Y2goL1xuKCAqKGF0ICk/KS8pO2lZPXQmJnRbMV18fCIifXJldHVybiJcbiIraVkrZX12YXIgZUc9ITE7ZnVuY3Rpb24gZVooZSx0KXtpZighZXx8ZUcpcmV0dXJuIiI7ZUc9ITA7dmFyIG49RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dm9pZCAwO3ZhciByPXtEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6ZnVuY3Rpb24oKXt0cnl7aWYodCl7dmFyIG49ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpfTtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsInByb3BzIix7c2V0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX19KSwib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QobixbXSl9Y2F0Y2goZSl7dmFyIHI9ZX1SZWZsZWN0LmNvbnN0cnVjdChlLFtdLG4pfWVsc2V7dHJ5e24uY2FsbCgpfWNhdGNoKGUpe3I9ZX1lLmNhbGwobi5wcm90b3R5cGUpfX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGUpe3I9ZX0obj1lKCkpJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5jYXRjaCYmbi5jYXRjaChmdW5jdGlvbigpe30pfX1jYXRjaChlKXtpZihlJiZyJiYic3RyaW5nIj09dHlwZW9mIGUuc3RhY2spcmV0dXJuW2Uuc3RhY2ssci5zdGFja119cmV0dXJuW251bGwsbnVsbF19fTtyLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZT0iRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Ijt2YXIgbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCJuYW1lIik7bCYmbC5jb25maWd1cmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwibmFtZSIse3ZhbHVlOiJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QifSk7dHJ5e3ZhciBhPXIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksbz1hWzBdLGk9YVsxXTtpZihvJiZpKXt2YXIgdT1vLnNwbGl0KCJcbiIpLHM9aS5zcGxpdCgiXG4iKTtmb3IobD1yPTA7cjx1Lmxlbmd0aCYmIXVbcl0uaW5jbHVkZXMoIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCIpOylyKys7Zm9yKDtsPHMubGVuZ3RoJiYhc1tsXS5pbmNsdWRlcygiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Iik7KWwrKztpZihyPT09dS5sZW5ndGh8fGw9PT1zLmxlbmd0aClmb3Iocj11Lmxlbmd0aC0xLGw9cy5sZW5ndGgtMTsxPD1yJiYwPD1sJiZ1W3JdIT09c1tsXTspbC0tO2Zvcig7MTw9ciYmMDw9bDtyLS0sbC0tKWlmKHVbcl0hPT1zW2xdKXtpZigxIT09cnx8MSE9PWwpZG8gaWYoci0tLGwtLSwwPmx8fHVbcl0hPT1zW2xdKXt2YXIgYz0iXG4iK3Vbcl0ucmVwbGFjZSgiIGF0IG5ldyAiLCIgYXQgIik7cmV0dXJuIGUuZGlzcGxheU5hbWUmJmMuaW5jbHVkZXMoIjxhbm9ueW1vdXM+IikmJihjPWMucmVwbGFjZSgiPGFub255bW91cz4iLGUuZGlzcGxheU5hbWUpKSxjfXdoaWxlKDE8PXImJjA8PWwpO2JyZWFrfX19ZmluYWxseXtlRz0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1ufXJldHVybihuPWU/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lOiIiKT9lWChuKToiIn1mdW5jdGlvbiBlSihlKXt0cnl7dmFyIHQ9IiI7ZG8gdCs9ZnVuY3Rpb24oZSl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnJldHVybiBlWChlLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIGVYKCJMYXp5Iik7Y2FzZSAxMzpyZXR1cm4gZVgoIlN1c3BlbnNlIik7Y2FzZSAxOTpyZXR1cm4gZVgoIlN1c3BlbnNlTGlzdCIpO2Nhc2UgMDpjYXNlIDI6Y2FzZSAxNTpyZXR1cm4gZT1lWihlLnR5cGUsITEpO2Nhc2UgMTE6cmV0dXJuIGU9ZVooZS50eXBlLnJlbmRlciwhMSk7Y2FzZSAxOnJldHVybiBlPWVaKGUudHlwZSwhMCk7ZGVmYXVsdDpyZXR1cm4iIn19KGUpLGU9ZS5yZXR1cm47d2hpbGUoZSk7cmV0dXJuIHR9Y2F0Y2goZSl7cmV0dXJuIlxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogIitlLm1lc3NhZ2UrIlxuIitlLnN0YWNrfX12YXIgZTA9U3ltYm9sLmZvcigicmVhY3QuY2xpZW50LnJlZmVyZW5jZSIpO2Z1bmN0aW9uIGUxKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmciOmNhc2UidW5kZWZpbmVkIjpjYXNlIm9iamVjdCI6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4iIn19ZnVuY3Rpb24gZTIoZSl7dmFyIHQ9ZS50eXBlO3JldHVybihlPWUubm9kZU5hbWUpJiYiaW5wdXQiPT09ZS50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PXR8fCJyYWRpbyI9PT10KX1mdW5jdGlvbiBlMyhlKXtlLl92YWx1ZVRyYWNrZXJ8fChlLl92YWx1ZVRyYWNrZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTIoZSk/ImNoZWNrZWQiOiJ2YWx1ZSIsbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUuY29uc3RydWN0b3IucHJvdG90eXBlLHQpLHI9IiIrZVt0XTtpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmdm9pZCAwIT09biYmImZ1bmN0aW9uIj09dHlwZW9mIG4uZ2V0JiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5zZXQpe3ZhciBsPW4uZ2V0LGE9bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oZSl7cj0iIitlLGEuY2FsbCh0aGlzLGUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGUpe3I9IiIrZX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19KGUpKX1mdW5jdGlvbiBlNChlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPWUyKGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSwoZT1yKSE9PW4mJih0LnNldFZhbHVlKGUpLCEwKX1mdW5jdGlvbiBlNihlKXtpZih2b2lkIDA9PT0oZT1lfHwoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGUuYWN0aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoKHQpe3JldHVybiBlLmJvZHl9fXZhciBlOD0vW1xuIlxcXS9nO2Z1bmN0aW9uIGU1KGUpe3JldHVybiBlLnJlcGxhY2UoZTgsZnVuY3Rpb24oZSl7cmV0dXJuIlxcIitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKyIgIn0pfWZ1bmN0aW9uIGU3KGUsdCxuLHIsbCxhLG8saSl7ZS5uYW1lPSIiLG51bGwhPW8mJiJmdW5jdGlvbiIhPXR5cGVvZiBvJiYic3ltYm9sIiE9dHlwZW9mIG8mJiJib29sZWFuIiE9dHlwZW9mIG8/ZS50eXBlPW86ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxudWxsIT10PyJudW1iZXIiPT09bz8oMD09PXQmJiIiPT09ZS52YWx1ZXx8ZS52YWx1ZSE9dCkmJihlLnZhbHVlPSIiK2UxKHQpKTplLnZhbHVlIT09IiIrZTEodCkmJihlLnZhbHVlPSIiK2UxKHQpKToic3VibWl0IiE9PW8mJiJyZXNldCIhPT1vfHxlLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKSxudWxsIT10P3RlKGUsbyxlMSh0KSk6bnVsbCE9bj90ZShlLG8sZTEobikpOm51bGwhPXImJmUucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpLG51bGw9PWwmJm51bGwhPWEmJihlLmRlZmF1bHRDaGVja2VkPSEhYSksbnVsbCE9bCYmKGUuY2hlY2tlZD1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCYmInN5bWJvbCIhPXR5cGVvZiBsKSxudWxsIT1pJiYiZnVuY3Rpb24iIT10eXBlb2YgaSYmInN5bWJvbCIhPXR5cGVvZiBpJiYiYm9vbGVhbiIhPXR5cGVvZiBpP2UubmFtZT0iIitlMShpKTplLnJlbW92ZUF0dHJpYnV0ZSgibmFtZSIpfWZ1bmN0aW9uIGU5KGUsdCxuLHIsbCxhLG8saSl7aWYobnVsbCE9YSYmImZ1bmN0aW9uIiE9dHlwZW9mIGEmJiJzeW1ib2wiIT10eXBlb2YgYSYmImJvb2xlYW4iIT10eXBlb2YgYSYmKGUudHlwZT1hKSxudWxsIT10fHxudWxsIT1uKXtpZighKCJzdWJtaXQiIT09YSYmInJlc2V0IiE9PWF8fG51bGwhPXQpKXJldHVybjtuPW51bGwhPW4/IiIrZTEobik6IiIsdD1udWxsIT10PyIiK2UxKHQpOm4saXx8dD09PWUudmFsdWV8fChlLnZhbHVlPXQpLGUuZGVmYXVsdFZhbHVlPXR9cj0iZnVuY3Rpb24iIT10eXBlb2Yocj1udWxsIT1yP3I6bCkmJiJzeW1ib2wiIT10eXBlb2YgciYmISFyLGUuY2hlY2tlZD1pP2UuY2hlY2tlZDohIXIsZS5kZWZhdWx0Q2hlY2tlZD0hIXIsbnVsbCE9byYmImZ1bmN0aW9uIiE9dHlwZW9mIG8mJiJzeW1ib2wiIT10eXBlb2YgbyYmImJvb2xlYW4iIT10eXBlb2YgbyYmKGUubmFtZT1vKX1mdW5jdGlvbiB0ZShlLHQsbil7Im51bWJlciI9PT10JiZlNihlLm93bmVyRG9jdW1lbnQpPT09ZXx8ZS5kZWZhdWx0VmFsdWU9PT0iIitufHwoZS5kZWZhdWx0VmFsdWU9IiIrbil9dmFyIHR0PUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gdG4oZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl0WyIkIituW2xdXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWw9dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PWwmJihlW25dLnNlbGVjdGVkPWwpLGwmJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3IobD0wLG49IiIrZTEobiksdD1udWxsO2w8ZS5sZW5ndGg7bCsrKXtpZihlW2xdLnZhbHVlPT09bil7ZVtsXS5zZWxlY3RlZD0hMCxyJiYoZVtsXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn1udWxsIT09dHx8ZVtsXS5kaXNhYmxlZHx8KHQ9ZVtsXSl9bnVsbCE9PXQmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gdHIoZSx0LG4pe2lmKG51bGwhPXQmJigodD0iIitlMSh0KSkhPT1lLnZhbHVlJiYoZS52YWx1ZT10KSxudWxsPT1uKSl7ZS5kZWZhdWx0VmFsdWUhPT10JiYoZS5kZWZhdWx0VmFsdWU9dCk7cmV0dXJufWUuZGVmYXVsdFZhbHVlPW51bGwhPW4/IiIrZTEobik6IiJ9ZnVuY3Rpb24gdGwoZSx0LG4scil7aWYobnVsbD09dCl7aWYobnVsbCE9cil7aWYobnVsbCE9bil0aHJvdyBFcnJvcihpKDkyKSk7aWYodHQocikpe2lmKDE8ci5sZW5ndGgpdGhyb3cgRXJyb3IoaSg5MykpO3I9clswXX1uPXJ9bnVsbD09biYmKG49IiIpLHQ9bn1uPWUxKHQpLGUuZGVmYXVsdFZhbHVlPW4sKHI9ZS50ZXh0Q29udGVudCk9PT1uJiYiIiE9PXImJm51bGwhPT1yJiYoZS52YWx1ZT1yKX1mdW5jdGlvbiB0YShlLHQpe2lmKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIhPT1lLm5hbWVzcGFjZVVSSXx8ImlubmVySFRNTCJpbiBlKWUuaW5uZXJIVE1MPXQ7ZWxzZXtmb3IoKGlYPWlYfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPSI8c3ZnPiIrdC52YWx1ZU9mKCkudG9TdHJpbmcoKSsiPC9zdmc+Iix0PWlYLmZpcnN0Q2hpbGQ7ZS5maXJzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7Zm9yKDt0LmZpcnN0Q2hpbGQ7KWUuYXBwZW5kQ2hpbGQodC5maXJzdENoaWxkKX19dmFyIHRvPXRhOyJ1bmRlZmluZWQiIT10eXBlb2YgTVNBcHAmJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uJiYodG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gdGEoZSx0KX0pfSk7dmFyIHRpPXRvO2Z1bmN0aW9uIHR1KGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmMz09PW4ubm9kZVR5cGUpe24ubm9kZVZhbHVlPXQ7cmV0dXJufX1lLnRleHRDb250ZW50PXR9dmFyIHRzPW5ldyBTZXQoImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IGFzcGVjdFJhdGlvIGJvcmRlckltYWdlT3V0c2V0IGJvcmRlckltYWdlU2xpY2UgYm9yZGVySW1hZ2VXaWR0aCBib3hGbGV4IGJveEZsZXhHcm91cCBib3hPcmRpbmFsR3JvdXAgY29sdW1uQ291bnQgY29sdW1ucyBmbGV4IGZsZXhHcm93IGZsZXhQb3NpdGl2ZSBmbGV4U2hyaW5rIGZsZXhOZWdhdGl2ZSBmbGV4T3JkZXIgZ3JpZEFyZWEgZ3JpZFJvdyBncmlkUm93RW5kIGdyaWRSb3dTcGFuIGdyaWRSb3dTdGFydCBncmlkQ29sdW1uIGdyaWRDb2x1bW5FbmQgZ3JpZENvbHVtblNwYW4gZ3JpZENvbHVtblN0YXJ0IGZvbnRXZWlnaHQgbGluZUNsYW1wIGxpbmVIZWlnaHQgb3BhY2l0eSBvcmRlciBvcnBoYW5zIHNjYWxlIHRhYlNpemUgd2lkb3dzIHpJbmRleCB6b29tIGZpbGxPcGFjaXR5IGZsb29kT3BhY2l0eSBzdG9wT3BhY2l0eSBzdHJva2VEYXNoYXJyYXkgc3Ryb2tlRGFzaG9mZnNldCBzdHJva2VNaXRlcmxpbWl0IHN0cm9rZU9wYWNpdHkgc3Ryb2tlV2lkdGggTW96QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgTW96Qm94RmxleCBNb3pCb3hGbGV4R3JvdXAgTW96TGluZUNsYW1wIG1zQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgbXNGbGV4IG1zWm9vbSBtc0ZsZXhHcm93IG1zRmxleE5lZ2F0aXZlIG1zRmxleE9yZGVyIG1zRmxleFBvc2l0aXZlIG1zRmxleFNocmluayBtc0dyaWRDb2x1bW4gbXNHcmlkQ29sdW1uU3BhbiBtc0dyaWRSb3cgbXNHcmlkUm93U3BhbiBXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCBXZWJraXRCb3hGbGV4IFdlYktpdEJveEZsZXhHcm91cCBXZWJraXRCb3hPcmRpbmFsR3JvdXAgV2Via2l0Q29sdW1uQ291bnQgV2Via2l0Q29sdW1ucyBXZWJraXRGbGV4IFdlYmtpdEZsZXhHcm93IFdlYmtpdEZsZXhQb3NpdGl2ZSBXZWJraXRGbGV4U2hyaW5rIFdlYmtpdExpbmVDbGFtcCIuc3BsaXQoIiAiKSk7ZnVuY3Rpb24gdGMoZSx0LG4pe3ZhciByPTA9PT10LmluZGV4T2YoIi0tIik7bnVsbD09bnx8ImJvb2xlYW4iPT10eXBlb2Ygbnx8IiI9PT1uP3I/ZS5zZXRQcm9wZXJ0eSh0LCIiKToiZmxvYXQiPT09dD9lLmNzc0Zsb2F0PSIiOmVbdF09IiI6cj9lLnNldFByb3BlcnR5KHQsbik6Im51bWJlciIhPXR5cGVvZiBufHwwPT09bnx8dHMuaGFzKHQpPyJmbG9hdCI9PT10P2UuY3NzRmxvYXQ9bjplW3RdPSgiIituKS50cmltKCk6ZVt0XT1uKyJweCJ9ZnVuY3Rpb24gdGYoZSx0LG4pe2lmKG51bGwhPXQmJiJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBFcnJvcihpKDYyKSk7aWYoZT1lLnN0eWxlLG51bGwhPW4pe2Zvcih2YXIgciBpbiBuKSFuLmhhc093blByb3BlcnR5KHIpfHxudWxsIT10JiZ0Lmhhc093blByb3BlcnR5KHIpfHwoMD09PXIuaW5kZXhPZigiLS0iKT9lLnNldFByb3BlcnR5KHIsIiIpOiJmbG9hdCI9PT1yP2UuY3NzRmxvYXQ9IiI6ZVtyXT0iIik7Zm9yKHZhciBsIGluIHQpcj10W2xdLHQuaGFzT3duUHJvcGVydHkobCkmJm5bbF0hPT1yJiZ0YyhlLGwscil9ZWxzZSBmb3IodmFyIGEgaW4gdCl0Lmhhc093blByb3BlcnR5KGEpJiZ0YyhlLGEsdFthXSl9ZnVuY3Rpb24gdGQoZSl7aWYoLTE9PT1lLmluZGV4T2YoIi0iKSlyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgdHA9bmV3IE1hcChbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImh0bWxGb3IiLCJmb3IiXSxbImh0dHBFcXVpdiIsImh0dHAtZXF1aXYiXSxbImNyb3NzT3JpZ2luIiwiY3Jvc3NvcmlnaW4iXSxbImFjY2VudEhlaWdodCIsImFjY2VudC1oZWlnaHQiXSxbImFsaWdubWVudEJhc2VsaW5lIiwiYWxpZ25tZW50LWJhc2VsaW5lIl0sWyJhcmFiaWNGb3JtIiwiYXJhYmljLWZvcm0iXSxbImJhc2VsaW5lU2hpZnQiLCJiYXNlbGluZS1zaGlmdCJdLFsiY2FwSGVpZ2h0IiwiY2FwLWhlaWdodCJdLFsiY2xpcFBhdGgiLCJjbGlwLXBhdGgiXSxbImNsaXBSdWxlIiwiY2xpcC1ydWxlIl0sWyJjb2xvckludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uIl0sWyJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIl0sWyJjb2xvclByb2ZpbGUiLCJjb2xvci1wcm9maWxlIl0sWyJjb2xvclJlbmRlcmluZyIsImNvbG9yLXJlbmRlcmluZyJdLFsiZG9taW5hbnRCYXNlbGluZSIsImRvbWluYW50LWJhc2VsaW5lIl0sWyJlbmFibGVCYWNrZ3JvdW5kIiwiZW5hYmxlLWJhY2tncm91bmQiXSxbImZpbGxPcGFjaXR5IiwiZmlsbC1vcGFjaXR5Il0sWyJmaWxsUnVsZSIsImZpbGwtcnVsZSJdLFsiZmxvb2RDb2xvciIsImZsb29kLWNvbG9yIl0sWyJmbG9vZE9wYWNpdHkiLCJmbG9vZC1vcGFjaXR5Il0sWyJmb250RmFtaWx5IiwiZm9udC1mYW1pbHkiXSxbImZvbnRTaXplIiwiZm9udC1zaXplIl0sWyJmb250U2l6ZUFkanVzdCIsImZvbnQtc2l6ZS1hZGp1c3QiXSxbImZvbnRTdHJldGNoIiwiZm9udC1zdHJldGNoIl0sWyJmb250U3R5bGUiLCJmb250LXN0eWxlIl0sWyJmb250VmFyaWFudCIsImZvbnQtdmFyaWFudCJdLFsiZm9udFdlaWdodCIsImZvbnQtd2VpZ2h0Il0sWyJnbHlwaE5hbWUiLCJnbHlwaC1uYW1lIl0sWyJnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCIsImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwiXSxbImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbCIsImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIl0sWyJob3JpekFkdlgiLCJob3Jpei1hZHYteCJdLFsiaG9yaXpPcmlnaW5YIiwiaG9yaXotb3JpZ2luLXgiXSxbImltYWdlUmVuZGVyaW5nIiwiaW1hZ2UtcmVuZGVyaW5nIl0sWyJsZXR0ZXJTcGFjaW5nIiwibGV0dGVyLXNwYWNpbmciXSxbImxpZ2h0aW5nQ29sb3IiLCJsaWdodGluZy1jb2xvciJdLFsibWFya2VyRW5kIiwibWFya2VyLWVuZCJdLFsibWFya2VyTWlkIiwibWFya2VyLW1pZCJdLFsibWFya2VyU3RhcnQiLCJtYXJrZXItc3RhcnQiXSxbIm92ZXJsaW5lUG9zaXRpb24iLCJvdmVybGluZS1wb3NpdGlvbiJdLFsib3ZlcmxpbmVUaGlja25lc3MiLCJvdmVybGluZS10aGlja25lc3MiXSxbInBhaW50T3JkZXIiLCJwYWludC1vcmRlciJdLFsicGFub3NlLTEiLCJwYW5vc2UtMSJdLFsicG9pbnRlckV2ZW50cyIsInBvaW50ZXItZXZlbnRzIl0sWyJyZW5kZXJpbmdJbnRlbnQiLCJyZW5kZXJpbmctaW50ZW50Il0sWyJzaGFwZVJlbmRlcmluZyIsInNoYXBlLXJlbmRlcmluZyJdLFsic3RvcENvbG9yIiwic3RvcC1jb2xvciJdLFsic3RvcE9wYWNpdHkiLCJzdG9wLW9wYWNpdHkiXSxbInN0cmlrZXRocm91Z2hQb3NpdGlvbiIsInN0cmlrZXRocm91Z2gtcG9zaXRpb24iXSxbInN0cmlrZXRocm91Z2hUaGlja25lc3MiLCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyJdLFsic3Ryb2tlRGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hhcnJheSJdLFsic3Ryb2tlRGFzaG9mZnNldCIsInN0cm9rZS1kYXNob2Zmc2V0Il0sWyJzdHJva2VMaW5lY2FwIiwic3Ryb2tlLWxpbmVjYXAiXSxbInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlLWxpbmVqb2luIl0sWyJzdHJva2VNaXRlcmxpbWl0Iiwic3Ryb2tlLW1pdGVybGltaXQiXSxbInN0cm9rZU9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSJdLFsic3Ryb2tlV2lkdGgiLCJzdHJva2Utd2lkdGgiXSxbInRleHRBbmNob3IiLCJ0ZXh0LWFuY2hvciJdLFsidGV4dERlY29yYXRpb24iLCJ0ZXh0LWRlY29yYXRpb24iXSxbInRleHRSZW5kZXJpbmciLCJ0ZXh0LXJlbmRlcmluZyJdLFsidHJhbnNmb3JtT3JpZ2luIiwidHJhbnNmb3JtLW9yaWdpbiJdLFsidW5kZXJsaW5lUG9zaXRpb24iLCJ1bmRlcmxpbmUtcG9zaXRpb24iXSxbInVuZGVybGluZVRoaWNrbmVzcyIsInVuZGVybGluZS10aGlja25lc3MiXSxbInVuaWNvZGVCaWRpIiwidW5pY29kZS1iaWRpIl0sWyJ1bmljb2RlUmFuZ2UiLCJ1bmljb2RlLXJhbmdlIl0sWyJ1bml0c1BlckVtIiwidW5pdHMtcGVyLWVtIl0sWyJ2QWxwaGFiZXRpYyIsInYtYWxwaGFiZXRpYyJdLFsidkhhbmdpbmciLCJ2LWhhbmdpbmciXSxbInZJZGVvZ3JhcGhpYyIsInYtaWRlb2dyYXBoaWMiXSxbInZNYXRoZW1hdGljYWwiLCJ2LW1hdGhlbWF0aWNhbCJdLFsidmVjdG9yRWZmZWN0IiwidmVjdG9yLWVmZmVjdCJdLFsidmVydEFkdlkiLCJ2ZXJ0LWFkdi15Il0sWyJ2ZXJ0T3JpZ2luWCIsInZlcnQtb3JpZ2luLXgiXSxbInZlcnRPcmlnaW5ZIiwidmVydC1vcmlnaW4teSJdLFsid29yZFNwYWNpbmciLCJ3b3JkLXNwYWNpbmciXSxbIndyaXRpbmdNb2RlIiwid3JpdGluZy1tb2RlIl0sWyJ4bWxuc1hsaW5rIiwieG1sbnM6eGxpbmsiXSxbInhIZWlnaHQiLCJ4LWhlaWdodCJdXSksdG09bnVsbDtmdW5jdGlvbiB0aChlKXtyZXR1cm4oZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3cpLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSwzPT09ZS5ub2RlVHlwZT9lLnBhcmVudE5vZGU6ZX12YXIgdGc9bnVsbCx0eT1udWxsO2Z1bmN0aW9uIHR2KGUpe3ZhciB0PWVPKGUpO2lmKHQmJihlPXQuc3RhdGVOb2RlKSl7dmFyIG49ZUQoZSk7c3dpdGNoKGU9dC5zdGF0ZU5vZGUsdC50eXBlKXtjYXNlImlucHV0IjppZihlNyhlLG4udmFsdWUsbi5kZWZhdWx0VmFsdWUsbi5kZWZhdWx0VmFsdWUsbi5jaGVja2VkLG4uZGVmYXVsdENoZWNrZWQsbi50eXBlLG4ubmFtZSksdD1uLm5hbWUsInJhZGlvIj09PW4udHlwZSYmbnVsbCE9dCl7Zm9yKG49ZTtuLnBhcmVudE5vZGU7KW49bi5wYXJlbnROb2RlO2ZvcihuPW4ucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0iJytlNSgiIit0KSsnIl1bdHlwZT0icmFkaW8iXScpLHQ9MDt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTtpZihyIT09ZSYmci5mb3JtPT09ZS5mb3JtKXt2YXIgbD1lRChyKTtpZighbCl0aHJvdyBFcnJvcihpKDkwKSk7ZTcocixsLnZhbHVlLGwuZGVmYXVsdFZhbHVlLGwuZGVmYXVsdFZhbHVlLGwuY2hlY2tlZCxsLmRlZmF1bHRDaGVja2VkLGwudHlwZSxsLm5hbWUpfX1mb3IodD0wO3Q8bi5sZW5ndGg7dCsrKShyPW5bdF0pLmZvcm09PT1lLmZvcm0mJmU0KHIpfWJyZWFrO2Nhc2UidGV4dGFyZWEiOnRyKGUsbi52YWx1ZSxuLmRlZmF1bHRWYWx1ZSk7YnJlYWs7Y2FzZSJzZWxlY3QiOm51bGwhPSh0PW4udmFsdWUpJiZ0bihlLCEhbi5tdWx0aXBsZSx0LCExKX19fWZ1bmN0aW9uIHRiKGUpe3RnP3R5P3R5LnB1c2goZSk6dHk9W2VdOnRnPWV9ZnVuY3Rpb24gdGsoKXtpZih0Zyl7dmFyIGU9dGcsdD10eTtpZih0eT10Zz1udWxsLHR2KGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0dih0W2VdKX19ZnVuY3Rpb24gdHcoZSl7dmFyIHQ9ZSxuPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkbyAwIT0oNDA5OCYodD1lKS5mbGFncykmJihuPXQucmV0dXJuKSxlPXQucmV0dXJuO3doaWxlKGUpfXJldHVybiAzPT09dC50YWc/bjpudWxsfWZ1bmN0aW9uIHRTKGUpe2lmKDEzPT09ZS50YWcpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09dCYmbnVsbCE9PShlPWUuYWx0ZXJuYXRlKSYmKHQ9ZS5tZW1vaXplZFN0YXRlKSxudWxsIT09dClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIHRDKGUpe2lmKHR3KGUpIT09ZSl0aHJvdyBFcnJvcihpKDE4OCkpfWZ1bmN0aW9uIHRFKGUpe3JldHVybiBudWxsIT09KGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7aWYoIXQpe2lmKG51bGw9PT0odD10dyhlKSkpdGhyb3cgRXJyb3IoaSgxODgpKTtyZXR1cm4gdCE9PWU/bnVsbDplfWZvcih2YXIgbj1lLHI9dDs7KXt2YXIgbD1uLnJldHVybjtpZihudWxsPT09bClicmVhazt2YXIgYT1sLmFsdGVybmF0ZTtpZihudWxsPT09YSl7aWYobnVsbCE9PShyPWwucmV0dXJuKSl7bj1yO2NvbnRpbnVlfWJyZWFrfWlmKGwuY2hpbGQ9PT1hLmNoaWxkKXtmb3IoYT1sLmNoaWxkO2E7KXtpZihhPT09bilyZXR1cm4gdEMobCksZTtpZihhPT09cilyZXR1cm4gdEMobCksdDthPWEuc2libGluZ310aHJvdyBFcnJvcihpKDE4OCkpfWlmKG4ucmV0dXJuIT09ci5yZXR1cm4pbj1sLHI9YTtlbHNle2Zvcih2YXIgbz0hMSx1PWwuY2hpbGQ7dTspe2lmKHU9PT1uKXtvPSEwLG49bCxyPWE7YnJlYWt9aWYodT09PXIpe289ITAscj1sLG49YTticmVha311PXUuc2libGluZ31pZighbyl7Zm9yKHU9YS5jaGlsZDt1Oyl7aWYodT09PW4pe289ITAsbj1hLHI9bDticmVha31pZih1PT09cil7bz0hMCxyPWEsbj1sO2JyZWFrfXU9dS5zaWJsaW5nfWlmKCFvKXRocm93IEVycm9yKGkoMTg5KSl9fWlmKG4uYWx0ZXJuYXRlIT09cil0aHJvdyBFcnJvcihpKDE5MCkpfWlmKDMhPT1uLnRhZyl0aHJvdyBFcnJvcihpKDE4OCkpO3JldHVybiBuLnN0YXRlTm9kZS5jdXJyZW50PT09bj9lOnR9KGUpKT9mdW5jdGlvbiBlKHQpe3ZhciBuPXQudGFnO2lmKDU9PT1ufHwyNj09PW58fDI3PT09bnx8Nj09PW4pcmV0dXJuIHQ7Zm9yKHQ9dC5jaGlsZDtudWxsIT09dDspe2lmKG51bGwhPT0obj1lKHQpKSlyZXR1cm4gbjt0PXQuc2libGluZ31yZXR1cm4gbnVsbH0oZSk6bnVsbH12YXIgdHg9e30sdHo9bSh0eCksdFA9bSghMSksdE49dHg7ZnVuY3Rpb24gdF8oZSx0KXt2YXIgbj1lLnR5cGUuY29udGV4dFR5cGVzO2lmKCFuKXJldHVybiB0eDt2YXIgcj1lLnN0YXRlTm9kZTtpZihyJiZyLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9PT10KXJldHVybiByLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O3ZhciBsLGE9e307Zm9yKGwgaW4gbilhW2xdPXRbbF07cmV0dXJuIHImJigoZT1lLnN0YXRlTm9kZSkuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD10LGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9YSksYX1mdW5jdGlvbiB0TChlKXtyZXR1cm4gbnVsbCE9KGU9ZS5jaGlsZENvbnRleHRUeXBlcyl9ZnVuY3Rpb24gdFQoKXtoKHRQKSxoKHR6KX1mdW5jdGlvbiB0RihlLHQsbil7aWYodHouY3VycmVudCE9PXR4KXRocm93IEVycm9yKGkoMTY4KSk7Zyh0eix0KSxnKHRQLG4pfWZ1bmN0aW9uIHRNKGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZih0PXQuY2hpbGRDb250ZXh0VHlwZXMsImZ1bmN0aW9uIiE9dHlwZW9mIHIuZ2V0Q2hpbGRDb250ZXh0KXJldHVybiBuO2Zvcih2YXIgbCBpbiByPXIuZ2V0Q2hpbGRDb250ZXh0KCkpaWYoIShsIGluIHQpKXRocm93IEVycm9yKGkoMTA4LGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZTtzd2l0Y2goZS50YWcpe2Nhc2UgMjQ6cmV0dXJuIkNhY2hlIjtjYXNlIDk6cmV0dXJuKHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Db25zdW1lciI7Y2FzZSAxMDpyZXR1cm4odC5fY29udGV4dC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLlByb3ZpZGVyIjtjYXNlIDE4OnJldHVybiJEZWh5ZHJhdGVkRnJhZ21lbnQiO2Nhc2UgMTE6cmV0dXJuIGU9KGU9dC5yZW5kZXIpLmRpc3BsYXlOYW1lfHxlLm5hbWV8fCIiLHQuZGlzcGxheU5hbWV8fCgiIiE9PWU/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpO2Nhc2UgNzpyZXR1cm4iRnJhZ21lbnQiO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIHQ7Y2FzZSA0OnJldHVybiJQb3J0YWwiO2Nhc2UgMzpyZXR1cm4iUm9vdCI7Y2FzZSA2OnJldHVybiJUZXh0IjtjYXNlIDE2OnJldHVybiBmdW5jdGlvbiBlKHQpe2lmKG51bGw9PXQpcmV0dXJuIG51bGw7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHQuJCR0eXBlb2Y9PT1lMD9udWxsOnQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2UgYjpyZXR1cm4iRnJhZ21lbnQiO2Nhc2UgdjpyZXR1cm4iUG9ydGFsIjtjYXNlIHc6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIGs6cmV0dXJuIlN0cmljdE1vZGUiO2Nhc2UgejpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgUDpyZXR1cm4iU3VzcGVuc2VMaXN0IjtjYXNlIE06cmV0dXJuIkNhY2hlIn1pZigib2JqZWN0Ij09dHlwZW9mIHQpc3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgUzpyZXR1cm4odC5fY29udGV4dC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLlByb3ZpZGVyIjtjYXNlIEU6cmV0dXJuKHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Db25zdW1lciI7Y2FzZSB4OnZhciBuPXQucmVuZGVyO3JldHVybih0PXQuZGlzcGxheU5hbWUpfHwodD0iIiE9PSh0PW4uZGlzcGxheU5hbWV8fG4ubmFtZXx8IiIpPyJGb3J3YXJkUmVmKCIrdCsiKSI6IkZvcndhcmRSZWYiKSx0O2Nhc2UgTjpyZXR1cm4gbnVsbCE9PShuPXQuZGlzcGxheU5hbWV8fG51bGwpP246ZSh0LnR5cGUpfHwiTWVtbyI7Y2FzZSBfOm49dC5fcGF5bG9hZCx0PXQuX2luaXQ7dHJ5e3JldHVybiBlKHQobikpfWNhdGNoKGUpe319cmV0dXJuIG51bGx9KHQpO2Nhc2UgODpyZXR1cm4gdD09PWs/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHR9cmV0dXJuIG51bGx9KGUpfHwiVW5rbm93biIsbCkpO3JldHVybiB1KHt9LG4scil9ZnVuY3Rpb24gdE8oZSl7cmV0dXJuIGU9KGU9ZS5zdGF0ZU5vZGUpJiZlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHx0eCx0Tj10ei5jdXJyZW50LGcodHosZSksZyh0UCx0UC5jdXJyZW50KSwhMH1mdW5jdGlvbiB0UihlLHQsbil7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYoIXIpdGhyb3cgRXJyb3IoaSgxNjkpKTtuPyhlPXRNKGUsdCx0Tiksci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1lLGgodFApLGgodHopLGcodHosZSkpOmgodFApLGcodFAsbil9dmFyIHREPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoMCE9PWV8fDEvZT09MS90KXx8ZSE9ZSYmdCE9dH0sdEE9W10sdEk9MCx0VT1udWxsLHRCPTAsdFY9W10sdFE9MCx0JD1udWxsLHRqPTEsdFc9IiI7ZnVuY3Rpb24gdEgoZSx0KXt0QVt0SSsrXT10Qix0QVt0SSsrXT10VSx0VT1lLHRCPXR9ZnVuY3Rpb24gdHEoZSx0LG4pe3RWW3RRKytdPXRqLHRWW3RRKytdPXRXLHRWW3RRKytdPXQkLHQkPWU7dmFyIHI9dGo7ZT10Vzt2YXIgbD0zMi1laShyKS0xO3ImPX4oMTw8bCksbis9MTt2YXIgYT0zMi1laSh0KStsO2lmKDMwPGEpe3ZhciBvPWwtbCU1O2E9KHImKDE8PG8pLTEpLnRvU3RyaW5nKDMyKSxyPj49byxsLT1vLHRqPTE8PDMyLWVpKHQpK2x8bjw8bHxyLHRXPWErZX1lbHNlIHRqPTE8PGF8bjw8bHxyLHRXPWV9ZnVuY3Rpb24gdEsoZSl7bnVsbCE9PWUucmV0dXJuJiYodEgoZSwxKSx0cShlLDEsMCkpfWZ1bmN0aW9uIHRZKGUpe2Zvcig7ZT09PXRVOyl0VT10QVstLXRJXSx0QVt0SV09bnVsbCx0Qj10QVstLXRJXSx0QVt0SV09bnVsbDtmb3IoO2U9PT10JDspdCQ9dFZbLS10UV0sdFZbdFFdPW51bGwsdFc9dFZbLS10UV0sdFZbdFFdPW51bGwsdGo9dFZbLS10UV0sdFZbdFFdPW51bGx9dmFyIHRYPW51bGwsdEc9bnVsbCx0Wj0hMSx0Sj1udWxsLHQwPSExO2Z1bmN0aW9uIHQxKGUsdCl7dmFyIG49aVMoNSxudWxsLG51bGwsMCk7bi5lbGVtZW50VHlwZT0iREVMRVRFRCIsbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLG51bGw9PT0odD1lLmRlbGV0aW9ucyk/KGUuZGVsZXRpb25zPVtuXSxlLmZsYWdzfD0xNik6dC5wdXNoKG4pfWZ1bmN0aW9uIHQyKGUsdCl7dC5mbGFncz0tNDA5NyZ0LmZsYWdzfDJ9ZnVuY3Rpb24gdDMoZSx0KXtyZXR1cm4gbnVsbCE9PSh0PWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcig7MT09PWUubm9kZVR5cGU7KXtpZihlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpe2lmKCFyJiYoIklOUFVUIiE9PWUubm9kZU5hbWV8fCJoaWRkZW4iIT09ZS50eXBlKSlicmVha31lbHNlIGlmKHIpe2lmKCFlW2VUXSlzd2l0Y2godCl7Y2FzZSJtZXRhIjppZighZS5oYXNBdHRyaWJ1dGUoIml0ZW1wcm9wIikpYnJlYWs7cmV0dXJuIGU7Y2FzZSJsaW5rIjppZigic3R5bGVzaGVldCI9PT0obD1lLmdldEF0dHJpYnV0ZSgicmVsIikpJiZlLmhhc0F0dHJpYnV0ZSgiZGF0YS1wcmVjZWRlbmNlIil8fGwhPT1uLnJlbHx8ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKSE9PShudWxsPT1uLmhyZWY/bnVsbDpuLmhyZWYpfHxlLmdldEF0dHJpYnV0ZSgiY3Jvc3NvcmlnaW4iKSE9PShudWxsPT1uLmNyb3NzT3JpZ2luP251bGw6bi5jcm9zc09yaWdpbil8fGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpIT09KG51bGw9PW4udGl0bGU/bnVsbDpuLnRpdGxlKSlicmVhaztyZXR1cm4gZTtjYXNlInN0eWxlIjppZihlLmhhc0F0dHJpYnV0ZSgiZGF0YS1wcmVjZWRlbmNlIikpYnJlYWs7cmV0dXJuIGU7Y2FzZSJzY3JpcHQiOmlmKCgobD1lLmdldEF0dHJpYnV0ZSgic3JjIikpIT09KG51bGw9PW4uc3JjP251bGw6bi5zcmMpfHxlLmdldEF0dHJpYnV0ZSgidHlwZSIpIT09KG51bGw9PW4udHlwZT9udWxsOm4udHlwZSl8fGUuZ2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIpIT09KG51bGw9PW4uY3Jvc3NPcmlnaW4/bnVsbDpuLmNyb3NzT3JpZ2luKSkmJmwmJmUuaGFzQXR0cmlidXRlKCJhc3luYyIpJiYhZS5oYXNBdHRyaWJ1dGUoIml0ZW1wcm9wIikpYnJlYWs7cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gZX19ZWxzZXtpZigiaW5wdXQiIT09dHx8ImhpZGRlbiIhPT1lLnR5cGUpcmV0dXJuIGU7dmFyIGw9bnVsbD09bi5uYW1lP251bGw6IiIrbi5uYW1lO2lmKCJoaWRkZW4iPT09bi50eXBlJiZlLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09bClyZXR1cm4gZX1pZihudWxsPT09KGU9Y2EoZSkpKWJyZWFrfXJldHVybiBudWxsfSh0LGUudHlwZSxlLnBlbmRpbmdQcm9wcyx0MCkpJiYoZS5zdGF0ZU5vZGU9dCx0WD1lLHRHPWNsKHQuZmlyc3RDaGlsZCksdDA9ITEsITApfWZ1bmN0aW9uIHQ0KGUsdCl7cmV0dXJuIG51bGwhPT0odD1mdW5jdGlvbihlLHQsbil7aWYoIiI9PT10KXJldHVybiBudWxsO2Zvcig7MyE9PWUubm9kZVR5cGU7KWlmKCgxIT09ZS5ub2RlVHlwZXx8IklOUFVUIiE9PWUubm9kZU5hbWV8fCJoaWRkZW4iIT09ZS50eXBlKSYmIW58fG51bGw9PT0oZT1jYShlKSkpcmV0dXJuIG51bGw7cmV0dXJuIGV9KHQsZS5wZW5kaW5nUHJvcHMsdDApKSYmKGUuc3RhdGVOb2RlPXQsdFg9ZSx0Rz1udWxsLCEwKX1mdW5jdGlvbiB0NihlLHQpe2U6e3ZhciBuPXQ7Zm9yKHQ9dDA7OCE9PW4ubm9kZVR5cGU7KWlmKCF0fHxudWxsPT09KG49Y2EobikpKXt0PW51bGw7YnJlYWsgZX10PW59cmV0dXJuIG51bGwhPT10JiYobj1udWxsIT09dCQ/e2lkOnRqLG92ZXJmbG93OnRXfTpudWxsLGUubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDp0LHRyZWVDb250ZXh0Om4scmV0cnlMYW5lOjUzNjg3MDkxMn0sKG49aVMoMTgsbnVsbCxudWxsLDApKS5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLGUuY2hpbGQ9bix0WD1lLHRHPW51bGwsITApfWZ1bmN0aW9uIHQ4KGUpe3JldHVybiAwIT0oMSZlLm1vZGUpJiYwPT0oMTI4JmUuZmxhZ3MpfWZ1bmN0aW9uIHQ1KCl7dGhyb3cgRXJyb3IoaSg0MTgpKX1mdW5jdGlvbiB0NyhlKXtmb3IodFg9ZS5yZXR1cm47dFg7KXN3aXRjaCh0WC50YWcpe2Nhc2UgMzpjYXNlIDI3OnQwPSEwO3JldHVybjtjYXNlIDU6Y2FzZSAxMzp0MD0hMTtyZXR1cm47ZGVmYXVsdDp0WD10WC5yZXR1cm59fWZ1bmN0aW9uIHQ5KGUpe2lmKGUhPT10WClyZXR1cm4hMTtpZighdFopcmV0dXJuIHQ3KGUpLHRaPSEwLCExO3ZhciB0LG49ITE7aWYoKHQ9MyE9PWUudGFnJiYyNyE9PWUudGFnKSYmKCh0PTU9PT1lLnRhZykmJih0PSEoImZvcm0iIT09KHQ9ZS50eXBlKSYmImJ1dHRvbiIhPT10KXx8czQoZS50eXBlLGUubWVtb2l6ZWRQcm9wcykpLHQ9IXQpLHQmJihuPSEwKSxuJiYobj10Rykpe2lmKHQ4KGUpKW5lKCksdDUoKTtlbHNlIGZvcig7bjspdDEoZSxuKSxuPWNhKG4pfWlmKHQ3KGUpLDEzPT09ZS50YWcpe2lmKCEoZT1udWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKT9lLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IoaSgzMTcpKTtlOntmb3Iobj0wLGU9ZS5uZXh0U2libGluZztlOyl7aWYoOD09PWUubm9kZVR5cGUpe2lmKCIvJCI9PT0odD1lLmRhdGEpKXtpZigwPT09bil7dEc9Y2EoZSk7YnJlYWsgZX1uLS19ZWxzZSIkIiE9PXQmJiIkISIhPT10JiYiJD8iIT09dHx8bisrfWU9ZS5uZXh0U2libGluZ310Rz1udWxsfX1lbHNlIHRHPXRYP2NhKGUuc3RhdGVOb2RlKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIG5lKCl7Zm9yKHZhciBlPXRHO2U7KWU9Y2EoZSl9ZnVuY3Rpb24gbnQoKXt0Rz10WD1udWxsLHRaPSExfWZ1bmN0aW9uIG5uKGUpe251bGw9PT10Sj90Sj1bZV06dEoucHVzaChlKX12YXIgbnI9W10sbmw9MCxuYT0wO2Z1bmN0aW9uIG5vKCl7Zm9yKHZhciBlPW5sLHQ9bmE9bmw9MDt0PGU7KXt2YXIgbj1uclt0XTtuclt0KytdPW51bGw7dmFyIHI9bnJbdF07bnJbdCsrXT1udWxsO3ZhciBsPW5yW3RdO25yW3QrK109bnVsbDt2YXIgYT1uclt0XTtpZihuclt0KytdPW51bGwsbnVsbCE9PXImJm51bGwhPT1sKXt2YXIgbz1yLnBlbmRpbmc7bnVsbD09PW8/bC5uZXh0PWw6KGwubmV4dD1vLm5leHQsby5uZXh0PWwpLHIucGVuZGluZz1sfTAhPT1hJiZuYyhuLGwsYSl9fWZ1bmN0aW9uIG5pKGUsdCxuLHIpe25yW25sKytdPWUsbnJbbmwrK109dCxucltubCsrXT1uLG5yW25sKytdPXIsbmF8PXIsZS5sYW5lc3w9cixudWxsIT09KGU9ZS5hbHRlcm5hdGUpJiYoZS5sYW5lc3w9cil9ZnVuY3Rpb24gbnUoZSx0LG4scil7cmV0dXJuIG5pKGUsdCxuLHIpLG5mKGUpfWZ1bmN0aW9uIG5zKGUsdCl7cmV0dXJuIG5pKGUsbnVsbCxudWxsLHQpLG5mKGUpfWZ1bmN0aW9uIG5jKGUsdCxuKXtlLmxhbmVzfD1uO3ZhciByPWUuYWx0ZXJuYXRlO251bGwhPT1yJiYoci5sYW5lc3w9bik7Zm9yKHZhciBsPSExLGE9ZS5yZXR1cm47bnVsbCE9PWE7KWEuY2hpbGRMYW5lc3w9bixudWxsIT09KHI9YS5hbHRlcm5hdGUpJiYoci5jaGlsZExhbmVzfD1uKSwyMj09PWEudGFnJiYobnVsbD09PShlPWEuc3RhdGVOb2RlKXx8MSZlLl92aXNpYmlsaXR5fHwobD0hMCkpLGU9YSxhPWEucmV0dXJuO2wmJm51bGwhPT10JiYzPT09ZS50YWcmJihhPWUuc3RhdGVOb2RlLGw9MzEtZWkobiksbnVsbD09PShlPShhPWEuaGlkZGVuVXBkYXRlcylbbF0pP2FbbF09W3RdOmUucHVzaCh0KSx0LmxhbmU9NTM2ODcwOTEyfG4pfWZ1bmN0aW9uIG5mKGUpe2lrKCk7Zm9yKHZhciB0PWUucmV0dXJuO251bGwhPT10Oyl0PShlPXQpLnJldHVybjtyZXR1cm4gMz09PWUudGFnP2Uuc3RhdGVOb2RlOm51bGx9dmFyIG5kPW51bGwsbnA9bnVsbCxubT0hMSxuaD0hMSxuZz0hMSxueT0wO2Z1bmN0aW9uIG52KGUpe2UhPT1ucCYmbnVsbD09PWUubmV4dCYmKG51bGw9PT1ucD9uZD1ucD1lOm5wPW5wLm5leHQ9ZSksbmg9ITAsbm18fChubT0hMCxuQyhudykpfWZ1bmN0aW9uIG5iKGUpe2lmKCFuZyYmbmgpe3ZhciB0PW51bGw7bmc9ITA7ZG8gZm9yKHZhciBuPSExLHI9bmQ7bnVsbCE9PXI7KXtpZighZXx8MD09PXIudGFnKXt2YXIgbD1vUyxhPWVwKHIscj09PW9rP2w6MCk7aWYoMCE9KDMmYSkpdHJ5e2lmKG49ITAsbD1yLDAhPSg2Jm9iKSl0aHJvdyBFcnJvcihpKDMyNykpO2lmKCFpZCgpKXt2YXIgbz1pbChsLGEpO2lmKDAhPT1sLnRhZyYmMj09PW8pe3ZhciB1PWEscz1lbShsLHUpOzAhPT1zJiYoYT1zLG89b0oobCx1LHMpKX1pZigxPT09byl0aHJvdyB1PW9OLG81KGwsMCksbzMobCxhLDApLG52KGwpLHU7Nj09PW8/bzMobCxhLG9GKToobC5maW5pc2hlZFdvcms9bC5jdXJyZW50LmFsdGVybmF0ZSxsLmZpbmlzaGVkTGFuZXM9YSxpcyhsLG9PLG9VLG9SLG9GKSl9bnYobCl9Y2F0Y2goZSl7bnVsbD09PXQ/dD1bZV06dC5wdXNoKGUpfX1yPXIubmV4dH13aGlsZShuKTtpZihuZz0hMSxudWxsIT09dCl7aWYoMTx0Lmxlbmd0aCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yKXRocm93IEFnZ3JlZ2F0ZUVycm9yKHQpO2ZvcihlPTE7ZTx0Lmxlbmd0aDtlKyspbkMobmsuYmluZChudWxsLHRbZV0pKX10aHJvdyB0WzBdfX19ZnVuY3Rpb24gbmsoZSl7dGhyb3cgZX1mdW5jdGlvbiBudygpe25oPW5tPSExO2Zvcih2YXIgZT1ZKCksdD1udWxsLG49bmQ7bnVsbCE9PW47KXt2YXIgcj1uLm5leHQ7aWYoMCE9PW55JiZmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5ldmVudDtyZXR1cm4gZSYmInBvcHN0YXRlIj09PWUudHlwZT9lIT09czYmJihzNj1lLCEwKTooczY9bnVsbCwhMSl9KCkpe3ZhciBsPW4sYT1ueTtsLnBlbmRpbmdMYW5lc3w9MixsLmVudGFuZ2xlZExhbmVzfD0yLGwuZW50YW5nbGVtZW50c1sxXXw9YX0wPT09KGw9blMobixlKSk/KG4ubmV4dD1udWxsLG51bGw9PT10P25kPXI6dC5uZXh0PXIsbnVsbD09PXImJihucD10KSk6KHQ9biwwIT0oMyZsKSYmKG5oPSEwKSksbj1yfW55PTAsbmIoITEpfWZ1bmN0aW9uIG5TKGUsdCl7Zm9yKHZhciBuPWUuc3VzcGVuZGVkTGFuZXMscj1lLnBpbmdlZExhbmVzLGw9ZS5leHBpcmF0aW9uVGltZXMsYT0tNjI5MTQ1NjEmZS5wZW5kaW5nTGFuZXM7MDxhOyl7dmFyIG89MzEtZWkoYSksaT0xPDxvLHU9bFtvXTstMT09PXU/KDA9PShpJm4pfHwwIT0oaSZyKSkmJihsW29dPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgODpyZXR1cm4gdCsyNTA7Y2FzZSAxNjpjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6cmV0dXJuIHQrNWUzO2RlZmF1bHQ6cmV0dXJuIC0xfX0oaSx0KSk6dTw9dCYmKGUuZXhwaXJlZExhbmVzfD1pKSxhJj1+aX1pZih0PW9rLG49b1Msbj1lcChlLGU9PT10P246MCkscj1lLmNhbGxiYWNrTm9kZSwwPT09bnx8ZT09PXQmJjI9PT1vQ3x8bnVsbCE9PWUuY2FuY2VsUGVuZGluZ0NvbW1pdClyZXR1cm4gbnVsbCE9PXImJm51bGwhPT1yJiZIKHIpLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7aWYoMCE9KDMmbikpcmV0dXJuIG51bGwhPT1yJiZudWxsIT09ciYmSChyKSxlLmNhbGxiYWNrUHJpb3JpdHk9MixlLmNhbGxiYWNrTm9kZT1udWxsLDI7aWYoKHQ9biYtbik9PT1lLmNhbGxiYWNrUHJpb3JpdHkpcmV0dXJuIHQ7c3dpdGNoKG51bGwhPT1yJiZIKHIpLGV3KG4pKXtjYXNlIDI6bj1HO2JyZWFrO2Nhc2UgODpuPVo7YnJlYWs7Y2FzZSAzMjpkZWZhdWx0Om49SjticmVhaztjYXNlIDI2ODQzNTQ1NjpuPWV0fXJldHVybiBuPVcobixyPW9aLmJpbmQobnVsbCxlKSksZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bix0fWZ1bmN0aW9uIG5DKGUpe3M5KGZ1bmN0aW9uKCl7MCE9KDYmb2IpP1coRyxlKTplKCl9KX1mdW5jdGlvbiBuRSgpe3JldHVybiAwPT09bnkmJihueT1laCgpKSxueX12YXIgbng9bnVsbCxuej0wLG5QPTAsbk49bnVsbDtmdW5jdGlvbiBuXygpe2lmKG51bGwhPT1ueCYmMD09LS1ueil7bnVsbCE9PW5OJiYobk4uc3RhdHVzPSJmdWxmaWxsZWQiKTt2YXIgZT1ueDtueD1udWxsLG5QPTAsbk49bnVsbDtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfX12YXIgbkw9ITE7ZnVuY3Rpb24gblQoZSl7ZS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGxhbmVzOjAsaGlkZGVuQ2FsbGJhY2tzOm51bGx9LGNhbGxiYWNrczpudWxsfX1mdW5jdGlvbiBuRihlLHQpe2U9ZS51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPT09ZSYmKHQudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsY2FsbGJhY2tzOm51bGx9KX1mdW5jdGlvbiBuTShlKXtyZXR1cm57bGFuZTplLHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gbk8oZSx0LG4pe3ZhciByPWUudXBkYXRlUXVldWU7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7aWYocj1yLnNoYXJlZCwwIT0oMiZvYikpe3ZhciBsPXIucGVuZGluZztyZXR1cm4gbnVsbD09PWw/dC5uZXh0PXQ6KHQubmV4dD1sLm5leHQsbC5uZXh0PXQpLHIucGVuZGluZz10LHQ9bmYoZSksbmMoZSxudWxsLG4pLHR9cmV0dXJuIG5pKGUscix0LG4pLG5mKGUpfWZ1bmN0aW9uIG5SKGUsdCxuKXtpZihudWxsIT09KHQ9dC51cGRhdGVRdWV1ZSkmJih0PXQuc2hhcmVkLDAhPSg0MTk0MTc2Jm4pKSl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixlYihlLG4pfX1mdW5jdGlvbiBuRChlLHQpe3ZhciBuPWUudXBkYXRlUXVldWUscj1lLmFsdGVybmF0ZTtpZihudWxsIT09ciYmbj09PShyPXIudXBkYXRlUXVldWUpKXt2YXIgbD1udWxsLGE9bnVsbDtpZihudWxsIT09KG49bi5maXJzdEJhc2VVcGRhdGUpKXtkb3t2YXIgbz17bGFuZTpuLmxhbmUsdGFnOm4udGFnLHBheWxvYWQ6bi5wYXlsb2FkLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfTtudWxsPT09YT9sPWE9bzphPWEubmV4dD1vLG49bi5uZXh0fXdoaWxlKG51bGwhPT1uKTtudWxsPT09YT9sPWE9dDphPWEubmV4dD10fWVsc2UgbD1hPXQ7bj17YmFzZVN0YXRlOnIuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpsLGxhc3RCYXNlVXBkYXRlOmEsc2hhcmVkOnIuc2hhcmVkLGNhbGxiYWNrczpyLmNhbGxiYWNrc30sZS51cGRhdGVRdWV1ZT1uO3JldHVybn1udWxsPT09KGU9bi5sYXN0QmFzZVVwZGF0ZSk/bi5maXJzdEJhc2VVcGRhdGU9dDplLm5leHQ9dCxuLmxhc3RCYXNlVXBkYXRlPXR9dmFyIG5BPSExO2Z1bmN0aW9uIG5JKCl7aWYobkEpe3ZhciBlPW5OO2lmKG51bGwhPT1lKXRocm93IGV9fWZ1bmN0aW9uIG5VKGUsdCxuLHIpe25BPSExO3ZhciBsPWUudXBkYXRlUXVldWU7bkw9ITE7dmFyIGE9bC5maXJzdEJhc2VVcGRhdGUsbz1sLmxhc3RCYXNlVXBkYXRlLGk9bC5zaGFyZWQucGVuZGluZztpZihudWxsIT09aSl7bC5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBzPWksYz1zLm5leHQ7cy5uZXh0PW51bGwsbnVsbD09PW8/YT1jOm8ubmV4dD1jLG89czt2YXIgZj1lLmFsdGVybmF0ZTtudWxsIT09ZiYmKGk9KGY9Zi51cGRhdGVRdWV1ZSkubGFzdEJhc2VVcGRhdGUpIT09byYmKG51bGw9PT1pP2YuZmlyc3RCYXNlVXBkYXRlPWM6aS5uZXh0PWMsZi5sYXN0QmFzZVVwZGF0ZT1zKX1pZihudWxsIT09YSl7dmFyIGQ9bC5iYXNlU3RhdGU7Zm9yKG89MCxmPWM9cz1udWxsLGk9YTs7KXt2YXIgcD0tNTM2ODcwOTEzJmkubGFuZSxtPXAhPT1pLmxhbmU7aWYobT8ob1MmcCk9PT1wOihyJnApPT09cCl7MCE9PXAmJnA9PT1uUCYmKG5BPSEwKSxudWxsIT09ZiYmKGY9Zi5uZXh0PXtsYW5lOjAsdGFnOmkudGFnLHBheWxvYWQ6aS5wYXlsb2FkLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfSk7ZTp7dmFyIGg9ZSxnPWk7c3dpdGNoKHA9dCxnLnRhZyl7Y2FzZSAxOmlmKCJmdW5jdGlvbiI9PXR5cGVvZihoPWcucGF5bG9hZCkpe2Q9aC5jYWxsKG4sZCxwKTticmVhayBlfWQ9aDticmVhayBlO2Nhc2UgMzpoLmZsYWdzPS02NTUzNyZoLmZsYWdzfDEyODtjYXNlIDA6aWYobnVsbD09KHA9ImZ1bmN0aW9uIj09dHlwZW9mKGg9Zy5wYXlsb2FkKT9oLmNhbGwobixkLHApOmgpKWJyZWFrIGU7ZD11KHt9LGQscCk7YnJlYWsgZTtjYXNlIDI6bkw9ITB9fW51bGwhPT0ocD1pLmNhbGxiYWNrKSYmKGUuZmxhZ3N8PTY0LG0mJihlLmZsYWdzfD04MTkyKSxudWxsPT09KG09bC5jYWxsYmFja3MpP2wuY2FsbGJhY2tzPVtwXTptLnB1c2gocCkpfWVsc2UgbT17bGFuZTpwLHRhZzppLnRhZyxwYXlsb2FkOmkucGF5bG9hZCxjYWxsYmFjazppLmNhbGxiYWNrLG5leHQ6bnVsbH0sbnVsbD09PWY/KGM9Zj1tLHM9ZCk6Zj1mLm5leHQ9bSxvfD1wO2lmKG51bGw9PT0oaT1pLm5leHQpKXtpZihudWxsPT09KGk9bC5zaGFyZWQucGVuZGluZykpYnJlYWs7aT0obT1pKS5uZXh0LG0ubmV4dD1udWxsLGwubGFzdEJhc2VVcGRhdGU9bSxsLnNoYXJlZC5wZW5kaW5nPW51bGx9fW51bGw9PT1mJiYocz1kKSxsLmJhc2VTdGF0ZT1zLGwuZmlyc3RCYXNlVXBkYXRlPWMsbC5sYXN0QmFzZVVwZGF0ZT1mLG51bGw9PT1hJiYobC5zaGFyZWQubGFuZXM9MCksb198PW8sZS5sYW5lcz1vLGUubWVtb2l6ZWRTdGF0ZT1kfX1mdW5jdGlvbiBuQihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IEVycm9yKGkoMTkxLGUpKTtlLmNhbGwodCl9ZnVuY3Rpb24gblYoZSx0KXt2YXIgbj1lLmNhbGxiYWNrcztpZihudWxsIT09bilmb3IoZS5jYWxsYmFja3M9bnVsbCxlPTA7ZTxuLmxlbmd0aDtlKyspbkIobltlXSx0KX1mdW5jdGlvbiBuUShlLHQpe2lmKHREKGUsdCkpcmV0dXJuITA7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxyPU9iamVjdC5rZXlzKHQpO2lmKG4ubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXTtpZighZVMuY2FsbCh0LGwpfHwhdEQoZVtsXSx0W2xdKSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgbiQ9RXJyb3IoaSg0NjApKSxuaj1FcnJvcihpKDQ3NCkpLG5XPXt0aGVuOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gbkgoZSl7cmV0dXJuImZ1bGZpbGxlZCI9PT0oZT1lLnN0YXR1cyl8fCJyZWplY3RlZCI9PT1lfWZ1bmN0aW9uIG5xKCl7fWZ1bmN0aW9uIG5LKGUsdCxuKXtzd2l0Y2godm9pZCAwPT09KG49ZVtuXSk/ZS5wdXNoKHQpOm4hPT10JiYodC50aGVuKG5xLG5xKSx0PW4pLHQuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIHQudmFsdWU7Y2FzZSJyZWplY3RlZCI6aWYoKGU9dC5yZWFzb24pPT09biQpdGhyb3cgRXJyb3IoaSg0ODMpKTt0aHJvdyBlO2RlZmF1bHQ6aWYoInN0cmluZyI9PXR5cGVvZiB0LnN0YXR1cyl0LnRoZW4obnEsbnEpO2Vsc2V7aWYobnVsbCE9PShlPW9rKSYmMTAwPGUuc2hlbGxTdXNwZW5kQ291bnRlcil0aHJvdyBFcnJvcihpKDQ4MikpOyhlPXQpLnN0YXR1cz0icGVuZGluZyIsZS50aGVuKGZ1bmN0aW9uKGUpe2lmKCJwZW5kaW5nIj09PXQuc3RhdHVzKXt2YXIgbj10O24uc3RhdHVzPSJmdWxmaWxsZWQiLG4udmFsdWU9ZX19LGZ1bmN0aW9uKGUpe2lmKCJwZW5kaW5nIj09PXQuc3RhdHVzKXt2YXIgbj10O24uc3RhdHVzPSJyZWplY3RlZCIsbi5yZWFzb249ZX19KX1zd2l0Y2godC5zdGF0dXMpe2Nhc2UiZnVsZmlsbGVkIjpyZXR1cm4gdC52YWx1ZTtjYXNlInJlamVjdGVkIjppZigoZT10LnJlYXNvbik9PT1uJCl0aHJvdyBFcnJvcihpKDQ4MykpO3Rocm93IGV9dGhyb3cgblk9dCxuJH19dmFyIG5ZPW51bGw7ZnVuY3Rpb24gblgoKXtpZihudWxsPT09blkpdGhyb3cgRXJyb3IoaSg0NTkpKTt2YXIgZT1uWTtyZXR1cm4gblk9bnVsbCxlfXZhciBuRz1udWxsLG5aPTA7ZnVuY3Rpb24gbkooZSl7dmFyIHQ9blo7cmV0dXJuIG5aKz0xLG51bGw9PT1uRyYmKG5HPVtdKSxuSyhuRyxlLHQpfWZ1bmN0aW9uIG4wKGUsdCxuLHIpe3ZhciBsPXIucmVmO2U9bnVsbCE9PWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsJiYib2JqZWN0IiE9dHlwZW9mIGw/ZnVuY3Rpb24oZSx0LG4scil7ZnVuY3Rpb24gbChlKXt2YXIgdD1vLnJlZnM7bnVsbD09PWU/ZGVsZXRlIHRbYV06dFthXT1lfWlmKCEoZT1uLl9vd25lcikpe2lmKCJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBFcnJvcihpKDI4NCkpO3Rocm93IEVycm9yKGkoMjkwLHIpKX1pZigxIT09ZS50YWcpdGhyb3cgRXJyb3IoaSgzMDkpKTt2YXIgYT0iIityLG89ZS5zdGF0ZU5vZGU7aWYoIW8pdGhyb3cgRXJyb3IoaSgxNDcsYSkpO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXQucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWYmJnQucmVmLl9zdHJpbmdSZWY9PT1hP3QucmVmOihsLl9zdHJpbmdSZWY9YSxsKX0oZSx0LHIsbCk6bCxuLnJlZj1lfWZ1bmN0aW9uIG4xKGUsdCl7dGhyb3cgRXJyb3IoaSgzMSwiW29iamVjdCBPYmplY3RdIj09PShlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSk/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXModCkuam9pbigiLCAiKSsifSI6ZSkpfWZ1bmN0aW9uIG4yKGUpe3JldHVybigwLGUuX2luaXQpKGUuX3BheWxvYWQpfWZ1bmN0aW9uIG4zKGUpe2Z1bmN0aW9uIHQodCxuKXtpZihlKXt2YXIgcj10LmRlbGV0aW9ucztudWxsPT09cj8odC5kZWxldGlvbnM9W25dLHQuZmxhZ3N8PTE2KTpyLnB1c2gobil9fWZ1bmN0aW9uIG4obixyKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO251bGwhPT1yOyl0KG4scikscj1yLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihlLHQpe2ZvcihlPW5ldyBNYXA7bnVsbCE9PXQ7KW51bGwhPT10LmtleT9lLnNldCh0LmtleSx0KTplLnNldCh0LmluZGV4LHQpLHQ9dC5zaWJsaW5nO3JldHVybiBlfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4oZT1pRShlLHQpKS5pbmRleD0wLGUuc2libGluZz1udWxsLGV9ZnVuY3Rpb24gYSh0LG4scil7cmV0dXJuKHQuaW5kZXg9cixlKT9udWxsIT09KHI9dC5hbHRlcm5hdGUpPyhyPXIuaW5kZXgpPG4/KHQuZmxhZ3N8PTMzNTU0NDM0LG4pOnI6KHQuZmxhZ3N8PTMzNTU0NDM0LG4pOih0LmZsYWdzfD0xMDQ4NTc2LG4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGUmJm51bGw9PT10LmFsdGVybmF0ZSYmKHQuZmxhZ3N8PTMzNTU0NDM0KSx0fWZ1bmN0aW9uIHUoZSx0LG4scil7cmV0dXJuIG51bGw9PT10fHw2IT09dC50YWc/KHQ9aV8obixlLm1vZGUscikpLnJldHVybj1lOih0PWwodCxuKSkucmV0dXJuPWUsdH1mdW5jdGlvbiBzKGUsdCxuLHIpe3ZhciBhPW4udHlwZTtyZXR1cm4gYT09PWI/ZihlLHQsbi5wcm9wcy5jaGlsZHJlbixyLG4ua2V5KToocj1udWxsIT09dCYmKHQuZWxlbWVudFR5cGU9PT1hfHwib2JqZWN0Ij09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09XyYmbjIoYSk9PT10LnR5cGUpP2wodCxuLnByb3BzKTppeihuLnR5cGUsbi5rZXksbi5wcm9wcyxudWxsLGUubW9kZSxyKSxuMChlLHQscixuKSxyLnJldHVybj1lLHIpfWZ1bmN0aW9uIGMoZSx0LG4scil7cmV0dXJuIG51bGw9PT10fHw0IT09dC50YWd8fHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8hPT1uLmNvbnRhaW5lckluZm98fHQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uIT09bi5pbXBsZW1lbnRhdGlvbj8odD1pTChuLGUubW9kZSxyKSkucmV0dXJuPWU6KHQ9bCh0LG4uY2hpbGRyZW58fFtdKSkucmV0dXJuPWUsdH1mdW5jdGlvbiBmKGUsdCxuLHIsYSl7cmV0dXJuIG51bGw9PT10fHw3IT09dC50YWc/KHQ9aVAobixlLm1vZGUscixhKSkucmV0dXJuPWU6KHQ9bCh0LG4pKS5yZXR1cm49ZSx0fWZ1bmN0aW9uIGQoZSx0LG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10fHwibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuKHQ9aV8oIiIrdCxlLm1vZGUsbikpLnJldHVybj1lLHQ7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCl7c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgeTpyZXR1cm4gbj1peih0LnR5cGUsdC5rZXksdC5wcm9wcyxudWxsLGUubW9kZSxuKSxuMChlLG51bGwsbix0KSxuLnJldHVybj1lLG47Y2FzZSB2OnJldHVybih0PWlMKHQsZS5tb2RlLG4pKS5yZXR1cm49ZSx0O2Nhc2UgXzpyZXR1cm4gZChlLCgwLHQuX2luaXQpKHQuX3BheWxvYWQpLG4pfWlmKHR0KHQpfHxSKHQpKXJldHVybih0PWlQKHQsZS5tb2RlLG4sbnVsbCkpLnJldHVybj1lLHQ7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQudGhlbilyZXR1cm4gZChlLG5KKHQpLG4pO2lmKHQuJCR0eXBlb2Y9PT1FKXJldHVybiBkKGUsYWkoZSx0LG4pLG4pO24xKGUsdCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChlLHQsbixyKXt2YXIgbD1udWxsIT09dD90LmtleTpudWxsO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG51bGwhPT1sP251bGw6dShlLHQsIiIrbixyKTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uKXtzd2l0Y2gobi4kJHR5cGVvZil7Y2FzZSB5OnJldHVybiBuLmtleT09PWw/cyhlLHQsbixyKTpudWxsO2Nhc2UgdjpyZXR1cm4gbi5rZXk9PT1sP2MoZSx0LG4scik6bnVsbDtjYXNlIF86cmV0dXJuIHAoZSx0LChsPW4uX2luaXQpKG4uX3BheWxvYWQpLHIpfWlmKHR0KG4pfHxSKG4pKXJldHVybiBudWxsIT09bD9udWxsOmYoZSx0LG4scixudWxsKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbi50aGVuKXJldHVybiBwKGUsdCxuSihuKSxyKTtpZihuLiQkdHlwZW9mPT09RSlyZXR1cm4gcChlLHQsYWkoZSxuLHIpLHIpO24xKGUsbil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbShlLHQsbixyLGwpe2lmKCJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwibnVtYmVyIj09dHlwZW9mIHIpcmV0dXJuIHUodCxlPWUuZ2V0KG4pfHxudWxsLCIiK3IsbCk7aWYoIm9iamVjdCI9PXR5cGVvZiByJiZudWxsIT09cil7c3dpdGNoKHIuJCR0eXBlb2Ype2Nhc2UgeTpyZXR1cm4gcyh0LGU9ZS5nZXQobnVsbD09PXIua2V5P246ci5rZXkpfHxudWxsLHIsbCk7Y2FzZSB2OnJldHVybiBjKHQsZT1lLmdldChudWxsPT09ci5rZXk/bjpyLmtleSl8fG51bGwscixsKTtjYXNlIF86cmV0dXJuIG0oZSx0LG4sKDAsci5faW5pdCkoci5fcGF5bG9hZCksbCl9aWYodHQocil8fFIocikpcmV0dXJuIGYodCxlPWUuZ2V0KG4pfHxudWxsLHIsbCxudWxsKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci50aGVuKXJldHVybiBtKGUsdCxuLG5KKHIpLGwpO2lmKHIuJCR0eXBlb2Y9PT1FKXJldHVybiBtKGUsdCxuLGFpKHQscixsKSxsKTtuMSh0LHIpfXJldHVybiBudWxsfXJldHVybiBmdW5jdGlvbih1LHMsYyxmKXtyZXR1cm4gblo9MCx1PWZ1bmN0aW9uIHUocyxjLGYsaCl7aWYoIm9iamVjdCI9PXR5cGVvZiBmJiZudWxsIT09ZiYmZi50eXBlPT09YiYmbnVsbD09PWYua2V5JiYoZj1mLnByb3BzLmNoaWxkcmVuKSwib2JqZWN0Ij09dHlwZW9mIGYmJm51bGwhPT1mKXtzd2l0Y2goZi4kJHR5cGVvZil7Y2FzZSB5OmU6e2Zvcih2YXIgZz1mLmtleSxrPWM7bnVsbCE9PWs7KXtpZihrLmtleT09PWcpe2lmKChnPWYudHlwZSk9PT1iKXtpZig3PT09ay50YWcpe24ocyxrLnNpYmxpbmcpLChjPWwoayxmLnByb3BzLmNoaWxkcmVuKSkucmV0dXJuPXMscz1jO2JyZWFrIGV9fWVsc2UgaWYoay5lbGVtZW50VHlwZT09PWd8fCJvYmplY3QiPT10eXBlb2YgZyYmbnVsbCE9PWcmJmcuJCR0eXBlb2Y9PT1fJiZuMihnKT09PWsudHlwZSl7bihzLGsuc2libGluZyksYz1sKGssZi5wcm9wcyksbjAocyxrLGMsZiksYy5yZXR1cm49cyxzPWM7YnJlYWsgZX1uKHMsayk7YnJlYWt9dChzLGspLGs9ay5zaWJsaW5nfWYudHlwZT09PWI/KChjPWlQKGYucHJvcHMuY2hpbGRyZW4scy5tb2RlLGgsZi5rZXkpKS5yZXR1cm49cyxzPWMpOihoPWl6KGYudHlwZSxmLmtleSxmLnByb3BzLG51bGwscy5tb2RlLGgpLG4wKHMsYyxoLGYpLGgucmV0dXJuPXMscz1oKX1yZXR1cm4gbyhzKTtjYXNlIHY6ZTp7Zm9yKGs9Zi5rZXk7bnVsbCE9PWM7KXtpZihjLmtleT09PWspe2lmKDQ9PT1jLnRhZyYmYy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWYuY29udGFpbmVySW5mbyYmYy5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1mLmltcGxlbWVudGF0aW9uKXtuKHMsYy5zaWJsaW5nKSwoYz1sKGMsZi5jaGlsZHJlbnx8W10pKS5yZXR1cm49cyxzPWM7YnJlYWsgZX1uKHMsYyk7YnJlYWt9dChzLGMpLGM9Yy5zaWJsaW5nfShjPWlMKGYscy5tb2RlLGgpKS5yZXR1cm49cyxzPWN9cmV0dXJuIG8ocyk7Y2FzZSBfOnJldHVybiB1KHMsYywoaz1mLl9pbml0KShmLl9wYXlsb2FkKSxoKX1pZih0dChmKSlyZXR1cm4gZnVuY3Rpb24obCxvLGksdSl7Zm9yKHZhciBzPW51bGwsYz1udWxsLGY9byxoPW89MCxnPW51bGw7bnVsbCE9PWYmJmg8aS5sZW5ndGg7aCsrKXtmLmluZGV4Pmg/KGc9ZixmPW51bGwpOmc9Zi5zaWJsaW5nO3ZhciB5PXAobCxmLGlbaF0sdSk7aWYobnVsbD09PXkpe251bGw9PT1mJiYoZj1nKTticmVha31lJiZmJiZudWxsPT09eS5hbHRlcm5hdGUmJnQobCxmKSxvPWEoeSxvLGgpLG51bGw9PT1jP3M9eTpjLnNpYmxpbmc9eSxjPXksZj1nfWlmKGg9PT1pLmxlbmd0aClyZXR1cm4gbihsLGYpLHRaJiZ0SChsLGgpLHM7aWYobnVsbD09PWYpe2Zvcig7aDxpLmxlbmd0aDtoKyspbnVsbCE9PShmPWQobCxpW2hdLHUpKSYmKG89YShmLG8saCksbnVsbD09PWM/cz1mOmMuc2libGluZz1mLGM9Zik7cmV0dXJuIHRaJiZ0SChsLGgpLHN9Zm9yKGY9cihsLGYpO2g8aS5sZW5ndGg7aCsrKW51bGwhPT0oZz1tKGYsbCxoLGlbaF0sdSkpJiYoZSYmbnVsbCE9PWcuYWx0ZXJuYXRlJiZmLmRlbGV0ZShudWxsPT09Zy5rZXk/aDpnLmtleSksbz1hKGcsbyxoKSxudWxsPT09Yz9zPWc6Yy5zaWJsaW5nPWcsYz1nKTtyZXR1cm4gZSYmZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0KGwsZSl9KSx0WiYmdEgobCxoKSxzfShzLGMsZixoKTtpZihSKGYpKXJldHVybiBmdW5jdGlvbihsLG8sdSxzKXt2YXIgYz1SKHUpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IEVycm9yKGkoMTUwKSk7aWYobnVsbD09KHU9Yy5jYWxsKHUpKSl0aHJvdyBFcnJvcihpKDE1MSkpO2Zvcih2YXIgZj1jPW51bGwsaD1vLGc9bz0wLHk9bnVsbCx2PXUubmV4dCgpO251bGwhPT1oJiYhdi5kb25lO2crKyx2PXUubmV4dCgpKXtoLmluZGV4Pmc/KHk9aCxoPW51bGwpOnk9aC5zaWJsaW5nO3ZhciBiPXAobCxoLHYudmFsdWUscyk7aWYobnVsbD09PWIpe251bGw9PT1oJiYoaD15KTticmVha31lJiZoJiZudWxsPT09Yi5hbHRlcm5hdGUmJnQobCxoKSxvPWEoYixvLGcpLG51bGw9PT1mP2M9YjpmLnNpYmxpbmc9YixmPWIsaD15fWlmKHYuZG9uZSlyZXR1cm4gbihsLGgpLHRaJiZ0SChsLGcpLGM7aWYobnVsbD09PWgpe2Zvcig7IXYuZG9uZTtnKyssdj11Lm5leHQoKSludWxsIT09KHY9ZChsLHYudmFsdWUscykpJiYobz1hKHYsbyxnKSxudWxsPT09Zj9jPXY6Zi5zaWJsaW5nPXYsZj12KTtyZXR1cm4gdFomJnRIKGwsZyksY31mb3IoaD1yKGwsaCk7IXYuZG9uZTtnKyssdj11Lm5leHQoKSludWxsIT09KHY9bShoLGwsZyx2LnZhbHVlLHMpKSYmKGUmJm51bGwhPT12LmFsdGVybmF0ZSYmaC5kZWxldGUobnVsbD09PXYua2V5P2c6di5rZXkpLG89YSh2LG8sZyksbnVsbD09PWY/Yz12OmYuc2libGluZz12LGY9dik7cmV0dXJuIGUmJmguZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdChsLGUpfSksdFomJnRIKGwsZyksY30ocyxjLGYsaCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYudGhlbilyZXR1cm4gdShzLGMsbkooZiksaCk7aWYoZi4kJHR5cGVvZj09PUUpcmV0dXJuIHUocyxjLGFpKHMsZixoKSxoKTtuMShzLGYpfXJldHVybiJzdHJpbmciPT10eXBlb2YgZiYmIiIhPT1mfHwibnVtYmVyIj09dHlwZW9mIGY/KGY9IiIrZixudWxsIT09YyYmNj09PWMudGFnPyhuKHMsYy5zaWJsaW5nKSwoYz1sKGMsZikpLnJldHVybj1zKToobihzLGMpLChjPWlfKGYscy5tb2RlLGgpKS5yZXR1cm49cyksbyhzPWMpKTpuKHMsYyl9KHUscyxjLGYpLG5HPW51bGwsdX19dmFyIG40PW4zKCEwKSxuNj1uMyghMSksbjg9bShudWxsKSxuNT1tKDApO2Z1bmN0aW9uIG43KGUsdCl7ZyhuNSxlPW96KSxnKG44LHQpLG96PWV8dC5iYXNlTGFuZXN9ZnVuY3Rpb24gbjkoKXtnKG41LG96KSxnKG44LG44LmN1cnJlbnQpfWZ1bmN0aW9uIHJlKCl7b3o9bjUuY3VycmVudCxoKG44KSxoKG41KX12YXIgcnQ9bShudWxsKSxybj1udWxsO2Z1bmN0aW9uIHJyKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2cocmksMSZyaS5jdXJyZW50KSxnKHJ0LGUpLG51bGw9PT1ybiYmKG51bGw9PT10fHxudWxsIT09bjguY3VycmVudD9ybj1lOm51bGwhPT10Lm1lbW9pemVkU3RhdGUmJihybj1lKSl9ZnVuY3Rpb24gcmwoZSl7aWYoMjI9PT1lLnRhZyl7aWYoZyhyaSxyaS5jdXJyZW50KSxnKHJ0LGUpLG51bGw9PT1ybil7dmFyIHQ9ZS5hbHRlcm5hdGU7bnVsbCE9PXQmJm51bGwhPT10Lm1lbW9pemVkU3RhdGUmJihybj1lKX19ZWxzZSByYShlKX1mdW5jdGlvbiByYSgpe2cocmkscmkuY3VycmVudCksZyhydCxydC5jdXJyZW50KX1mdW5jdGlvbiBybyhlKXtoKHJ0KSxybj09PWUmJihybj1udWxsKSxoKHJpKX12YXIgcmk9bSgwKTtmdW5jdGlvbiBydShlKXtmb3IodmFyIHQ9ZTtudWxsIT09dDspe2lmKDEzPT09dC50YWcpe3ZhciBuPXQubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09biYmKG51bGw9PT0obj1uLmRlaHlkcmF0ZWQpfHwiJD8iPT09bi5kYXRhfHwiJCEiPT09bi5kYXRhKSlyZXR1cm4gdH1lbHNlIGlmKDE5PT09dC50YWcmJnZvaWQgMCE9PXQubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlcil7aWYoMCE9KDEyOCZ0LmZsYWdzKSlyZXR1cm4gdH1lbHNlIGlmKG51bGwhPT10LmNoaWxkKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO251bGw9PT10LnNpYmxpbmc7KXtpZihudWxsPT09dC5yZXR1cm58fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHJzPXMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixyYz1zLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLHJmPTAscmQ9bnVsbCxycD1udWxsLHJtPW51bGwscmg9ITEscmc9ITEscnk9ITEscnY9MCxyYj0wLHJrPW51bGwscnc9MDtmdW5jdGlvbiByUygpe3Rocm93IEVycm9yKGkoMzIxKSl9ZnVuY3Rpb24gckMoZSx0KXtpZihudWxsPT09dClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZuPGUubGVuZ3RoO24rKylpZighdEQoZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiByRShlLHQsbixyLGwsYSl7cmV0dXJuIHJmPWEscmQ9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLHJzLmN1cnJlbnQ9bnVsbD09PWV8fG51bGw9PT1lLm1lbW9pemVkU3RhdGU/bGc6bHkscnk9ITEsZT1uKHIsbCkscnk9ITEscmcmJihlPXJ6KHQsbixyLGwpKSxyeCgpLGV9ZnVuY3Rpb24gcngoKXtycy5jdXJyZW50PWxoO3ZhciBlPW51bGwhPT1ycCYmbnVsbCE9PXJwLm5leHQ7aWYocmY9MCxybT1ycD1yZD1udWxsLHJoPSExLHJiPTAscms9bnVsbCxlKXRocm93IEVycm9yKGkoMzAwKSl9ZnVuY3Rpb24gcnooZSx0LG4scil7cmQ9ZTt2YXIgbD0wO2Rve2lmKHJnJiYocms9bnVsbCkscmI9MCxyZz0hMSwyNTw9bCl0aHJvdyBFcnJvcihpKDMwMSkpO2wrPTEscm09cnA9bnVsbCxlLnVwZGF0ZVF1ZXVlPW51bGwscnMuY3VycmVudD1sdjt2YXIgYT10KG4scil9d2hpbGUocmcpO3JldHVybiBhfWZ1bmN0aW9uIHJQKCl7dmFyIGU9cnMuY3VycmVudC51c2VTdGF0ZSgpWzBdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW4/ck0oZSk6ZX1mdW5jdGlvbiByTigpe3ZhciBlPTAhPT1ydjtyZXR1cm4gcnY9MCxlfWZ1bmN0aW9uIHJfKGUsdCxuKXt0LnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdC5mbGFncyY9LTIwNTMsZS5sYW5lcyY9fm59ZnVuY3Rpb24gckwoZSl7aWYocmgpe2ZvcihlPWUubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZTspe3ZhciB0PWUucXVldWU7bnVsbCE9PXQmJih0LnBlbmRpbmc9bnVsbCksZT1lLm5leHR9cmg9ITF9cmY9MCxybT1ycD1yZD1udWxsLHJnPSExLHJiPXJ2PTAscms9bnVsbH1mdW5jdGlvbiByVCgpe3ZhciBlPXttZW1vaXplZFN0YXRlOm51bGwsYmFzZVN0YXRlOm51bGwsYmFzZVF1ZXVlOm51bGwscXVldWU6bnVsbCxuZXh0Om51bGx9O3JldHVybiBudWxsPT09cm0/cmQubWVtb2l6ZWRTdGF0ZT1ybT1lOnJtPXJtLm5leHQ9ZSxybX1mdW5jdGlvbiByRigpe2lmKG51bGw9PT1ycCl7dmFyIGU9cmQuYWx0ZXJuYXRlO2U9bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGx9ZWxzZSBlPXJwLm5leHQ7dmFyIHQ9bnVsbD09PXJtP3JkLm1lbW9pemVkU3RhdGU6cm0ubmV4dDtpZihudWxsIT09dClybT10LHJwPWU7ZWxzZXtpZihudWxsPT09ZSl7aWYobnVsbD09PXJkLmFsdGVybmF0ZSl0aHJvdyBFcnJvcihpKDQ2NykpO3Rocm93IEVycm9yKGkoMzEwKSl9ZT17bWVtb2l6ZWRTdGF0ZToocnA9ZSkubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6cnAuYmFzZVN0YXRlLGJhc2VRdWV1ZTpycC5iYXNlUXVldWUscXVldWU6cnAucXVldWUsbmV4dDpudWxsfSxudWxsPT09cm0/cmQubWVtb2l6ZWRTdGF0ZT1ybT1lOnJtPXJtLm5leHQ9ZX1yZXR1cm4gcm19ZnVuY3Rpb24gck0oZSl7dmFyIHQ9cmI7cmV0dXJuIHJiKz0xLG51bGw9PT1yayYmKHJrPVtdKSxlPW5LKHJrLGUsdCksbnVsbD09PXJkLmFsdGVybmF0ZSYmKG51bGw9PT1ybT9udWxsPT09cmQubWVtb2l6ZWRTdGF0ZTpudWxsPT09cm0ubmV4dCkmJihycy5jdXJyZW50PWxnKSxlfWZ1bmN0aW9uIHJPKGUpe2lmKG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW4pcmV0dXJuIHJNKGUpO2lmKGUuJCR0eXBlb2Y9PT1FKXJldHVybiBhbyhlKX10aHJvdyBFcnJvcihpKDQzOCxTdHJpbmcoZSkpKX1mdW5jdGlvbiByUihlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoZSk6dH1mdW5jdGlvbiByRChlKXtyZXR1cm4gckEockYoKSxycCxlKX1mdW5jdGlvbiByQShlLHQsbil7dmFyIHI9ZS5xdWV1ZTtpZihudWxsPT09cil0aHJvdyBFcnJvcihpKDMxMSkpO3IubGFzdFJlbmRlcmVkUmVkdWNlcj1uO3ZhciBsPWUuYmFzZVF1ZXVlLGE9ci5wZW5kaW5nO2lmKG51bGwhPT1hKXtpZihudWxsIT09bCl7dmFyIG89bC5uZXh0O2wubmV4dD1hLm5leHQsYS5uZXh0PW99dC5iYXNlUXVldWU9bD1hLHIucGVuZGluZz1udWxsfWlmKGE9ZS5iYXNlU3RhdGUsbnVsbD09PWwpZS5tZW1vaXplZFN0YXRlPWE7ZWxzZXt0PWwubmV4dDt2YXIgdT1vPW51bGwscz1udWxsLGM9dCxmPSExO2Rve3ZhciBkPS01MzY4NzA5MTMmYy5sYW5lO2lmKGQhPT1jLmxhbmU/KG9TJmQpPT09ZDoocmYmZCk9PT1kKXt2YXIgcD1jLnJldmVydExhbmU7aWYoMD09PXApbnVsbCE9PXMmJihzPXMubmV4dD17bGFuZTowLHJldmVydExhbmU6MCxhY3Rpb246Yy5hY3Rpb24saGFzRWFnZXJTdGF0ZTpjLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpjLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSksZD09PW5QJiYoZj0hMCk7ZWxzZSBpZigocmYmcCk9PT1wKXtjPWMubmV4dCxwPT09blAmJihmPSEwKTtjb250aW51ZX1lbHNlIGQ9e2xhbmU6MCxyZXZlcnRMYW5lOmMucmV2ZXJ0TGFuZSxhY3Rpb246Yy5hY3Rpb24saGFzRWFnZXJTdGF0ZTpjLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpjLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSxudWxsPT09cz8odT1zPWQsbz1hKTpzPXMubmV4dD1kLHJkLmxhbmVzfD1wLG9ffD1wO2Q9Yy5hY3Rpb24scnkmJm4oYSxkKSxhPWMuaGFzRWFnZXJTdGF0ZT9jLmVhZ2VyU3RhdGU6bihhLGQpfWVsc2UgcD17bGFuZTpkLHJldmVydExhbmU6Yy5yZXZlcnRMYW5lLGFjdGlvbjpjLmFjdGlvbixoYXNFYWdlclN0YXRlOmMuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOmMuZWFnZXJTdGF0ZSxuZXh0Om51bGx9LG51bGw9PT1zPyh1PXM9cCxvPWEpOnM9cy5uZXh0PXAscmQubGFuZXN8PWQsb198PWQ7Yz1jLm5leHR9d2hpbGUobnVsbCE9PWMmJmMhPT10KTtpZihudWxsPT09cz9vPWE6cy5uZXh0PXUsIXREKGEsZS5tZW1vaXplZFN0YXRlKSYmKGxSPSEwLGYmJm51bGwhPT0obj1uTikpKXRocm93IG47ZS5tZW1vaXplZFN0YXRlPWEsZS5iYXNlU3RhdGU9byxlLmJhc2VRdWV1ZT1zLHIubGFzdFJlbmRlcmVkU3RhdGU9YX1yZXR1cm4gbnVsbD09PWwmJihyLmxhbmVzPTApLFtlLm1lbW9pemVkU3RhdGUsci5kaXNwYXRjaF19ZnVuY3Rpb24gckkoZSl7dmFyIHQ9ckYoKSxuPXQucXVldWU7aWYobnVsbD09PW4pdGhyb3cgRXJyb3IoaSgzMTEpKTtuLmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj1uLmRpc3BhdGNoLGw9bi5wZW5kaW5nLGE9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1sKXtuLnBlbmRpbmc9bnVsbDt2YXIgbz1sPWwubmV4dDtkbyBhPWUoYSxvLmFjdGlvbiksbz1vLm5leHQ7d2hpbGUobyE9PWwpO3REKGEsdC5tZW1vaXplZFN0YXRlKXx8KGxSPSEwKSx0Lm1lbW9pemVkU3RhdGU9YSxudWxsPT09dC5iYXNlUXVldWUmJih0LmJhc2VTdGF0ZT1hKSxuLmxhc3RSZW5kZXJlZFN0YXRlPWF9cmV0dXJuW2Escl19ZnVuY3Rpb24gclUoZSx0LG4pe3ZhciByPXJkLGw9ckYoKSxhPXRaO2lmKGEpe2lmKHZvaWQgMD09PW4pdGhyb3cgRXJyb3IoaSg0MDcpKTtuPW4oKX1lbHNlIG49dCgpO3ZhciBvPSF0RCgocnB8fGwpLm1lbW9pemVkU3RhdGUsbik7aWYobyYmKGwubWVtb2l6ZWRTdGF0ZT1uLGxSPSEwKSxsPWwucXVldWUscjQoclEuYmluZChudWxsLHIsbCxlKSxbZV0pLGwuZ2V0U25hcHNob3QhPT10fHxvfHxudWxsIT09cm0mJjEmcm0ubWVtb2l6ZWRTdGF0ZS50YWcpe2lmKHIuZmxhZ3N8PTIwNDgsckooOSxyVi5iaW5kKG51bGwscixsLG4sdCkse2Rlc3Ryb3k6dm9pZCAwfSxudWxsKSxudWxsPT09b2spdGhyb3cgRXJyb3IoaSgzNDkpKTthfHwwIT0oNjAmcmYpfHxyQihyLHQsbil9cmV0dXJuIG59ZnVuY3Rpb24gckIoZSx0LG4pe2UuZmxhZ3N8PTE2Mzg0LGU9e2dldFNuYXBzaG90OnQsdmFsdWU6bn0sbnVsbD09PSh0PXJkLnVwZGF0ZVF1ZXVlKT8odD1pRygpLHJkLnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKTpudWxsPT09KG49dC5zdG9yZXMpP3Quc3RvcmVzPVtlXTpuLnB1c2goZSl9ZnVuY3Rpb24gclYoZSx0LG4scil7dC52YWx1ZT1uLHQuZ2V0U25hcHNob3Q9cixyJCh0KSYmcmooZSl9ZnVuY3Rpb24gclEoZSx0LG4pe3JldHVybiBuKGZ1bmN0aW9uKCl7ciQodCkmJnJqKGUpfSl9ZnVuY3Rpb24gciQoZSl7dmFyIHQ9ZS5nZXRTbmFwc2hvdDtlPWUudmFsdWU7dHJ5e3ZhciBuPXQoKTtyZXR1cm4hdEQoZSxuKX1jYXRjaChlKXtyZXR1cm4hMH19ZnVuY3Rpb24gcmooZSl7dmFyIHQ9bnMoZSwyKTtudWxsIT09dCYmb0codCxlLDIpfWZ1bmN0aW9uIHJXKGUpe3ZhciB0PXJUKCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpe3ZhciBuPWU7ZT1uKCkscnkmJihlbyghMCksbigpLGVvKCExKSl9cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT10LmJhc2VTdGF0ZT1lLHQucXVldWU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpyUixsYXN0UmVuZGVyZWRTdGF0ZTplfSx0fWZ1bmN0aW9uIHJIKGUsdCxuLHIpe3JldHVybiBlLmJhc2VTdGF0ZT1uLHJBKGUscnAsImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpyUil9ZnVuY3Rpb24gcnEoZSx0LG4scil7aWYobGQoZSkpdGhyb3cgRXJyb3IoaSg0ODUpKTtudWxsPT09KGU9dC5wZW5kaW5nKT8oKGU9e3BheWxvYWQ6cixuZXh0Om51bGx9KS5uZXh0PXQucGVuZGluZz1lLHJLKHQsbixyKSk6dC5wZW5kaW5nPWUubmV4dD17cGF5bG9hZDpyLG5leHQ6ZS5uZXh0fX1mdW5jdGlvbiBySyhlLHQsbil7dmFyIHI9ZS5hY3Rpb24sbD1lLnN0YXRlLGE9cmMudHJhbnNpdGlvbixvPXtfY2FsbGJhY2tzOm5ldyBTZXR9O3JjLnRyYW5zaXRpb249bzt0cnl7dmFyIGk9cihsLG4pO251bGwhPT1pJiYib2JqZWN0Ij09dHlwZW9mIGkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLnRoZW4/KGF2KG8saSksaS50aGVuKGZ1bmN0aW9uKG4pe2Uuc3RhdGU9bixyWShlLHQpfSxmdW5jdGlvbigpe3JldHVybiByWShlLHQpfSksdChpKSk6KHQoaSksZS5zdGF0ZT1pLHJZKGUsdCkpfWNhdGNoKG4pe3Qoe3RoZW46ZnVuY3Rpb24oKXt9LHN0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpufSksclkoZSx0KX1maW5hbGx5e3JjLnRyYW5zaXRpb249YX19ZnVuY3Rpb24gclkoZSx0KXt2YXIgbj1lLnBlbmRpbmc7aWYobnVsbCE9PW4pe3ZhciByPW4ubmV4dDtyPT09bj9lLnBlbmRpbmc9bnVsbDoocj1yLm5leHQsbi5uZXh0PXIscksoZSx0LHIucGF5bG9hZCkpfX1mdW5jdGlvbiByWChlLHQpe3JldHVybiB0fWZ1bmN0aW9uIHJHKGUsdCxuKXtlPSJvYmplY3QiPT10eXBlb2YoZT1yQShlLHQsclgpWzBdKSYmbnVsbCE9PWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW4/ck0oZSk6ZTt2YXIgcj0odD1yRigpKS5xdWV1ZSxsPXIuZGlzcGF0Y2g7cmV0dXJuIG4hPT10Lm1lbW9pemVkU3RhdGUmJihyZC5mbGFnc3w9MjA0OCxySig5LHJaLmJpbmQobnVsbCxyLG4pLHtkZXN0cm95OnZvaWQgMH0sbnVsbCkpLFtlLGxdfWZ1bmN0aW9uIHJaKGUsdCl7ZS5hY3Rpb249dH1mdW5jdGlvbiBySihlLHQsbixyKXtyZXR1cm4gZT17dGFnOmUsY3JlYXRlOnQsaW5zdDpuLGRlcHM6cixuZXh0Om51bGx9LG51bGw9PT0odD1yZC51cGRhdGVRdWV1ZSk/KHQ9aUcoKSxyZC51cGRhdGVRdWV1ZT10LHQubGFzdEVmZmVjdD1lLm5leHQ9ZSk6bnVsbD09PShuPXQubGFzdEVmZmVjdCk/dC5sYXN0RWZmZWN0PWUubmV4dD1lOihyPW4ubmV4dCxuLm5leHQ9ZSxlLm5leHQ9cix0Lmxhc3RFZmZlY3Q9ZSksZX1mdW5jdGlvbiByMCgpe3JldHVybiByRigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gcjEoZSx0LG4scil7dmFyIGw9clQoKTtyZC5mbGFnc3w9ZSxsLm1lbW9pemVkU3RhdGU9ckooMXx0LG4se2Rlc3Ryb3k6dm9pZCAwfSx2b2lkIDA9PT1yP251bGw6cil9ZnVuY3Rpb24gcjIoZSx0LG4scil7dmFyIGw9ckYoKTtyPXZvaWQgMD09PXI/bnVsbDpyO3ZhciBhPWwubWVtb2l6ZWRTdGF0ZS5pbnN0O251bGwhPT1ycCYmbnVsbCE9PXImJnJDKHIscnAubWVtb2l6ZWRTdGF0ZS5kZXBzKT9sLm1lbW9pemVkU3RhdGU9ckoodCxuLGEscik6KHJkLmZsYWdzfD1lLGwubWVtb2l6ZWRTdGF0ZT1ySigxfHQsbixhLHIpKX1mdW5jdGlvbiByMyhlLHQpe3IxKDgzOTA2NTYsOCxlLHQpfWZ1bmN0aW9uIHI0KGUsdCl7cjIoMjA0OCw4LGUsdCl9ZnVuY3Rpb24gcjYoZSx0KXtyZXR1cm4gcjIoNCwyLGUsdCl9ZnVuY3Rpb24gcjgoZSx0KXtyZXR1cm4gcjIoNCw0LGUsdCl9ZnVuY3Rpb24gcjUoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD8odChlPWUoKSksZnVuY3Rpb24oKXt0KG51bGwpfSk6bnVsbCE9dD8oZT1lKCksdC5jdXJyZW50PWUsZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bnVsbH0pOnZvaWQgMH1mdW5jdGlvbiByNyhlLHQsbil7bj1udWxsIT1uP24uY29uY2F0KFtlXSk6bnVsbCxyMig0LDQscjUuYmluZChudWxsLHQsZSksbil9ZnVuY3Rpb24gcjkoKXt9ZnVuY3Rpb24gbGUoZSx0KXt2YXIgbj1yRigpO3Q9dm9pZCAwPT09dD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsIT09dCYmckModCxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gbHQoZSx0KXt2YXIgbj1yRigpO3Q9dm9pZCAwPT09dD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsIT09dCYmckModCxyWzFdKT9yWzBdOihyPWUoKSxyeSYmKGVvKCEwKSxlKCksZW8oITEpKSxuLm1lbW9pemVkU3RhdGU9W3IsdF0scil9ZnVuY3Rpb24gbG4oZSx0LG4pe3JldHVybiB0RChuLHQpP246bnVsbCE9PW44LmN1cnJlbnQ/KGUubWVtb2l6ZWRTdGF0ZT1uLHREKG4sdCl8fChsUj0hMCksbik6MD09KDQyJnJmKT8obFI9ITAsZS5tZW1vaXplZFN0YXRlPW4pOigwPT09b0YmJihvRj0wPT0oNTM2ODcwOTEyJm9TKXx8dFo/ZWgoKTo1MzY4NzA5MTIpLG51bGwhPT0oZT1ydC5jdXJyZW50KSYmKGUuZmxhZ3N8PTMyKSxlPW9GLHJkLmxhbmVzfD1lLG9ffD1lLHQpfWZ1bmN0aW9uIGxyKGUsdCxuLHIsbCl7dmFyIGE9ZWs7ZWs9MCE9PWEmJjg+YT9hOjg7dmFyIG89cmMudHJhbnNpdGlvbixpPXtfY2FsbGJhY2tzOm5ldyBTZXR9O3JjLnRyYW5zaXRpb249aSxsZihlLCExLHQsbik7dHJ5e3ZhciB1PWwoKTtpZihudWxsIT09dSYmIm9iamVjdCI9PXR5cGVvZiB1JiYiZnVuY3Rpb24iPT10eXBlb2YgdS50aGVuKXthdihpLHUpO3ZhciBzLGMsZj0ocz1bXSxjPXtzdGF0dXM6InBlbmRpbmciLHZhbHVlOm51bGwscmVhc29uOm51bGwsdGhlbjpmdW5jdGlvbihlKXtzLnB1c2goZSl9fSx1LnRoZW4oZnVuY3Rpb24oKXtjLnN0YXR1cz0iZnVsZmlsbGVkIixjLnZhbHVlPXI7Zm9yKHZhciBlPTA7ZTxzLmxlbmd0aDtlKyspKDAsc1tlXSkocil9LGZ1bmN0aW9uKGUpe2ZvcihjLnN0YXR1cz0icmVqZWN0ZWQiLGMucmVhc29uPWUsZT0wO2U8cy5sZW5ndGg7ZSsrKSgwLHNbZV0pKHZvaWQgMCl9KSxjKTtsYyhlLHQsZil9ZWxzZSBsYyhlLHQscil9Y2F0Y2gobil7bGMoZSx0LHt0aGVuOmZ1bmN0aW9uKCl7fSxzdGF0dXM6InJlamVjdGVkIixyZWFzb246bn0pfWZpbmFsbHl7ZWs9YSxyYy50cmFuc2l0aW9uPW99fWZ1bmN0aW9uIGxsKGUsdCxuLHIpe2lmKDUhPT1lLnRhZyl0aHJvdyBFcnJvcihpKDQ3NikpO2lmKG51bGw9PT1lLm1lbW9pemVkU3RhdGUpe3ZhciBsPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6clIsbGFzdFJlbmRlcmVkU3RhdGU6Zn0sYT1sO2w9e21lbW9pemVkU3RhdGU6ZixiYXNlU3RhdGU6ZixiYXNlUXVldWU6bnVsbCxxdWV1ZTpsLG5leHQ6bnVsbH0sZS5tZW1vaXplZFN0YXRlPWw7dmFyIG89ZS5hbHRlcm5hdGU7bnVsbCE9PW8mJihvLm1lbW9pemVkU3RhdGU9bCl9ZWxzZSBhPWUubWVtb2l6ZWRTdGF0ZS5xdWV1ZTtscihlLGEsdCxmLGZ1bmN0aW9uKCl7cmV0dXJuIG4ocil9KX1mdW5jdGlvbiBsYSgpe3ZhciBlPWFvKEIpO3JldHVybiBudWxsIT09ZT9lOmZ9ZnVuY3Rpb24gbG8oKXtyZXR1cm4gckYoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGxpKCl7cmV0dXJuIHJGKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBsdShlKXtmb3IodmFyIHQ9ZS5yZXR1cm47bnVsbCE9PXQ7KXtzd2l0Y2godC50YWcpe2Nhc2UgMjQ6Y2FzZSAzOnZhciBuPW9YKHQpLHI9bk8odCxlPW5NKG4pLG4pO251bGwhPT1yJiYob0cocix0LG4pLG5SKHIsdCxuKSksdD17Y2FjaGU6YXAoKX0sZS5wYXlsb2FkPXQ7cmV0dXJufXQ9dC5yZXR1cm59fWZ1bmN0aW9uIGxzKGUsdCxuKXt2YXIgcj1vWChlKTtuPXtsYW5lOnIscmV2ZXJ0TGFuZTowLGFjdGlvbjpuLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sbGQoZSk/bHAodCxuKTpudWxsIT09KG49bnUoZSx0LG4scikpJiYob0cobixlLHIpLGxtKG4sdCxyKSl9ZnVuY3Rpb24gbGMoZSx0LG4pe3ZhciByPW9YKGUpLGw9e2xhbmU6cixyZXZlcnRMYW5lOjAsYWN0aW9uOm4saGFzRWFnZXJTdGF0ZTohMSxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfTtpZihsZChlKSlscCh0LGwpO2Vsc2V7dmFyIGE9ZS5hbHRlcm5hdGU7aWYoMD09PWUubGFuZXMmJihudWxsPT09YXx8MD09PWEubGFuZXMpJiZudWxsIT09KGE9dC5sYXN0UmVuZGVyZWRSZWR1Y2VyKSl0cnl7dmFyIG89dC5sYXN0UmVuZGVyZWRTdGF0ZSxpPWEobyxuKTtpZihsLmhhc0VhZ2VyU3RhdGU9ITAsbC5lYWdlclN0YXRlPWksdEQoaSxvKSl7bmkoZSx0LGwsMCksbnVsbD09PW9rJiZubygpO3JldHVybn19Y2F0Y2goZSl7fWZpbmFsbHl7fW51bGwhPT0obj1udShlLHQsbCxyKSkmJihvRyhuLGUsciksbG0obix0LHIpKX19ZnVuY3Rpb24gbGYoZSx0LG4scil7aWYoYWcoKSxyPXtsYW5lOjIscmV2ZXJ0TGFuZTpuRSgpLGFjdGlvbjpyLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sbGQoZSkpe2lmKHQpdGhyb3cgRXJyb3IoaSg0NzkpKX1lbHNlIG51bGwhPT0odD1udShlLG4sciwyKSkmJm9HKHQsZSwyKX1mdW5jdGlvbiBsZChlKXt2YXIgdD1lLmFsdGVybmF0ZTtyZXR1cm4gZT09PXJkfHxudWxsIT09dCYmdD09PXJkfWZ1bmN0aW9uIGxwKGUsdCl7cmc9cmg9ITA7dmFyIG49ZS5wZW5kaW5nO251bGw9PT1uP3QubmV4dD10Oih0Lm5leHQ9bi5uZXh0LG4ubmV4dD10KSxlLnBlbmRpbmc9dH1mdW5jdGlvbiBsbShlLHQsbil7aWYoMCE9KDQxOTQxNzYmbikpe3ZhciByPXQubGFuZXM7ciY9ZS5wZW5kaW5nTGFuZXMsbnw9cix0LmxhbmVzPW4sZWIoZSxuKX19aUc9ZnVuY3Rpb24oKXtyZXR1cm57bGFzdEVmZmVjdDpudWxsLGV2ZW50czpudWxsLHN0b3JlczpudWxsfX07dmFyIGxoPXtyZWFkQ29udGV4dDphbyx1c2U6ck8sdXNlQ2FsbGJhY2s6clMsdXNlQ29udGV4dDpyUyx1c2VFZmZlY3Q6clMsdXNlSW1wZXJhdGl2ZUhhbmRsZTpyUyx1c2VJbnNlcnRpb25FZmZlY3Q6clMsdXNlTGF5b3V0RWZmZWN0OnJTLHVzZU1lbW86clMsdXNlUmVkdWNlcjpyUyx1c2VSZWY6clMsdXNlU3RhdGU6clMsdXNlRGVidWdWYWx1ZTpyUyx1c2VEZWZlcnJlZFZhbHVlOnJTLHVzZVRyYW5zaXRpb246clMsdXNlU3luY0V4dGVybmFsU3RvcmU6clMsdXNlSWQ6clN9O2xoLnVzZUNhY2hlUmVmcmVzaD1yUyxsaC51c2VIb3N0VHJhbnNpdGlvblN0YXR1cz1yUyxsaC51c2VGb3JtU3RhdGU9clMsbGgudXNlT3B0aW1pc3RpYz1yUzt2YXIgbGc9e3JlYWRDb250ZXh0OmFvLHVzZTpyTyx1c2VDYWxsYmFjazpmdW5jdGlvbihlLHQpe3JldHVybiByVCgpLm1lbW9pemVkU3RhdGU9W2Usdm9pZCAwPT09dD9udWxsOnRdLGV9LHVzZUNvbnRleHQ6YW8sdXNlRWZmZWN0OnIzLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oZSx0LG4pe249bnVsbCE9bj9uLmNvbmNhdChbZV0pOm51bGwscjEoNDE5NDMwOCw0LHI1LmJpbmQobnVsbCx0LGUpLG4pfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcjEoNDE5NDMwOCw0LGUsdCl9LHVzZUluc2VydGlvbkVmZmVjdDpmdW5jdGlvbihlLHQpe3IxKDQsMixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIG49clQoKTt0PXZvaWQgMD09PXQ/bnVsbDp0O3ZhciByPWUoKTtyZXR1cm4gcnkmJihlbyghMCksZSgpLGVvKCExKSksbi5tZW1vaXplZFN0YXRlPVtyLHRdLHJ9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXJUKCk7aWYodm9pZCAwIT09bil7dmFyIGw9bih0KTtyeSYmKGVvKCEwKSxuKHQpLGVvKCExKSl9ZWxzZSBsPXQ7cmV0dXJuIHIubWVtb2l6ZWRTdGF0ZT1yLmJhc2VTdGF0ZT1sLGU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOmx9LHIucXVldWU9ZSxlPWUuZGlzcGF0Y2g9bHMuYmluZChudWxsLHJkLGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXtyZXR1cm4gZT17Y3VycmVudDplfSxyVCgpLm1lbW9pemVkU3RhdGU9ZX0sdXNlU3RhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9KGU9clcoZSkpLnF1ZXVlLG49bGMuYmluZChudWxsLHJkLHQpO3JldHVybiB0LmRpc3BhdGNoPW4sW2UubWVtb2l6ZWRTdGF0ZSxuXX0sdXNlRGVidWdWYWx1ZTpyOSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiByVCgpLm1lbW9pemVkU3RhdGU9ZSxlfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9clcoITEpO3JldHVybiBlPWxyLmJpbmQobnVsbCxyZCxlLnF1ZXVlLCEwLCExKSxyVCgpLm1lbW9pemVkU3RhdGU9ZSxbITEsZV19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1yZCxsPXJUKCk7aWYodFope2lmKHZvaWQgMD09PW4pdGhyb3cgRXJyb3IoaSg0MDcpKTtuPW4oKX1lbHNle2lmKG49dCgpLG51bGw9PT1vayl0aHJvdyBFcnJvcihpKDM0OSkpOzAhPSg2MCZvUyl8fHJCKHIsdCxuKX1sLm1lbW9pemVkU3RhdGU9bjt2YXIgYT17dmFsdWU6bixnZXRTbmFwc2hvdDp0fTtyZXR1cm4gbC5xdWV1ZT1hLHIzKHJRLmJpbmQobnVsbCxyLGEsZSksW2VdKSxyLmZsYWdzfD0yMDQ4LHJKKDksclYuYmluZChudWxsLHIsYSxuLHQpLHtkZXN0cm95OnZvaWQgMH0sbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgZT1yVCgpLHQ9b2suaWRlbnRpZmllclByZWZpeDtpZih0Wil7dmFyIG49dFcscj10ajt0PSI6Iit0KyJSIisobj0ociZ+KDE8PDMyLWVpKHIpLTEpKS50b1N0cmluZygzMikrbiksMDwobj1ydisrKSYmKHQrPSJIIituLnRvU3RyaW5nKDMyKSksdCs9IjoifWVsc2UgdD0iOiIrdCsiciIrKG49cncrKykudG9TdHJpbmcoMzIpKyI6IjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVzZUNhY2hlUmVmcmVzaDpmdW5jdGlvbigpe3JldHVybiByVCgpLm1lbW9pemVkU3RhdGU9bHUuYmluZChudWxsLHJkKX19O2xnLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzPWxhLGxnLnVzZUZvcm1TdGF0ZT1mdW5jdGlvbihlLHQpe2lmKHRaKXt2YXIgbj1vay5mb3JtU3RhdGU7aWYobnVsbCE9PW4pe2U6e2lmKHRaKXtpZih0Ryl7dDp7Zm9yKHZhciByPXRHLGw9dDA7OCE9PXIubm9kZVR5cGU7KWlmKCFsfHxudWxsPT09KHI9Y2EocikpKXtyPW51bGw7YnJlYWsgdH1yPSJGISI9PT0obD1yLmRhdGEpfHwiRiI9PT1sP3I6bnVsbH1pZihyKXt0Rz1jYShyKSxyPSJGISI9PT1yLmRhdGE7YnJlYWsgZX19dDUoKX1yPSExfXImJih0PW5bMF0pfX1yZXR1cm4obj1yVCgpKS5tZW1vaXplZFN0YXRlPW4uYmFzZVN0YXRlPXQscj17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOnJYLGxhc3RSZW5kZXJlZFN0YXRlOnR9LG4ucXVldWU9cixuPWxjLmJpbmQobnVsbCxyZCxyKSxyLmRpc3BhdGNoPW4scj1yVCgpLGw9e3N0YXRlOnQsZGlzcGF0Y2g6bnVsbCxhY3Rpb246ZSxwZW5kaW5nOm51bGx9LHIucXVldWU9bCxuPXJxLmJpbmQobnVsbCxyZCxsLG4pLGwuZGlzcGF0Y2g9bixyLm1lbW9pemVkU3RhdGU9ZSxbdCxuXX0sbGcudXNlT3B0aW1pc3RpYz1mdW5jdGlvbihlKXt2YXIgdD1yVCgpO3QubWVtb2l6ZWRTdGF0ZT10LmJhc2VTdGF0ZT1lO3ZhciBuPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6bnVsbCxsYXN0UmVuZGVyZWRTdGF0ZTpudWxsfTtyZXR1cm4gdC5xdWV1ZT1uLHQ9bGYuYmluZChudWxsLHJkLCEwLG4pLG4uZGlzcGF0Y2g9dCxbZSx0XX07dmFyIGx5PXtyZWFkQ29udGV4dDphbyx1c2U6ck8sdXNlQ2FsbGJhY2s6bGUsdXNlQ29udGV4dDphbyx1c2VFZmZlY3Q6cjQsdXNlSW1wZXJhdGl2ZUhhbmRsZTpyNyx1c2VJbnNlcnRpb25FZmZlY3Q6cjYsdXNlTGF5b3V0RWZmZWN0OnI4LHVzZU1lbW86bHQsdXNlUmVkdWNlcjpyRCx1c2VSZWY6cjAsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gckQoclIpfSx1c2VEZWJ1Z1ZhbHVlOnI5LHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGxuKHJGKCkscnAubWVtb2l6ZWRTdGF0ZSxlKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXJEKHJSKVswXSx0PXJGKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bImJvb2xlYW4iPT10eXBlb2YgZT9lOnJNKGUpLHRdfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpyVSx1c2VJZDpsb307bHkudXNlQ2FjaGVSZWZyZXNoPWxpLGx5LnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzPWxhLGx5LnVzZUZvcm1TdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gckcockYoKSxycCxlKX0sbHkudXNlT3B0aW1pc3RpYz1mdW5jdGlvbihlLHQpe3JldHVybiBySChyRigpLHJwLGUsdCl9O3ZhciBsdj17cmVhZENvbnRleHQ6YW8sdXNlOnJPLHVzZUNhbGxiYWNrOmxlLHVzZUNvbnRleHQ6YW8sdXNlRWZmZWN0OnI0LHVzZUltcGVyYXRpdmVIYW5kbGU6cjcsdXNlSW5zZXJ0aW9uRWZmZWN0OnI2LHVzZUxheW91dEVmZmVjdDpyOCx1c2VNZW1vOmx0LHVzZVJlZHVjZXI6ckksdXNlUmVmOnIwLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHJJKHJSKX0sdXNlRGVidWdWYWx1ZTpyOSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXJGKCk7cmV0dXJuIG51bGw9PT1ycD8odC5tZW1vaXplZFN0YXRlPWUsZSk6bG4odCxycC5tZW1vaXplZFN0YXRlLGUpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9ckkoclIpWzBdLHQ9ckYoKS5tZW1vaXplZFN0YXRlO3JldHVyblsiYm9vbGVhbiI9PXR5cGVvZiBlP2U6ck0oZSksdF19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOnJVLHVzZUlkOmxvfTtmdW5jdGlvbiBsYihlLHQpe2lmKGUmJmUuZGVmYXVsdFByb3BzKWZvcih2YXIgbiBpbiB0PXUoe30sdCksZT1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT10W25dJiYodFtuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBsayhlLHQsbixyKXtuPW51bGw9PShuPW4ocix0PWUubWVtb2l6ZWRTdGF0ZSkpP3Q6dSh7fSx0LG4pLGUubWVtb2l6ZWRTdGF0ZT1uLDA9PT1lLmxhbmVzJiYoZS51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9bil9bHYudXNlQ2FjaGVSZWZyZXNoPWxpLGx2LnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzPWxhLGx2LnVzZUZvcm1TdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1yRigpLG49cnA7aWYobnVsbCE9PW4pcmV0dXJuIHJHKHQsbixlKTt0PXQubWVtb2l6ZWRTdGF0ZTt2YXIgcj0obj1yRigpKS5xdWV1ZS5kaXNwYXRjaDtyZXR1cm4gbi5tZW1vaXplZFN0YXRlPWUsW3Qscl19LGx2LnVzZU9wdGltaXN0aWM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yRigpO3JldHVybiBudWxsIT09cnA/ckgobixycCxlLHQpOihuLmJhc2VTdGF0ZT1lLFtlLG4ucXVldWUuZGlzcGF0Y2hdKX07dmFyIGx3PXtpc01vdW50ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuISEoZT1lLl9yZWFjdEludGVybmFscykmJnR3KGUpPT09ZX0sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1vWChlPWUuX3JlYWN0SW50ZXJuYWxzKSxsPW5NKHIpO2wucGF5bG9hZD10LG51bGwhPW4mJihsLmNhbGxiYWNrPW4pLG51bGwhPT0odD1uTyhlLGwscikpJiYob0codCxlLHIpLG5SKHQsZSxyKSl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW9YKGU9ZS5fcmVhY3RJbnRlcm5hbHMpLGw9bk0ocik7bC50YWc9MSxsLnBheWxvYWQ9dCxudWxsIT1uJiYobC5jYWxsYmFjaz1uKSxudWxsIT09KHQ9bk8oZSxsLHIpKSYmKG9HKHQsZSxyKSxuUih0LGUscikpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1vWChlPWUuX3JlYWN0SW50ZXJuYWxzKSxyPW5NKG4pO3IudGFnPTIsbnVsbCE9dCYmKHIuY2FsbGJhY2s9dCksbnVsbCE9PSh0PW5PKGUscixuKSkmJihvRyh0LGUsbiksblIodCxlLG4pKX19O2Z1bmN0aW9uIGxTKGUsdCxuLHIsbCxhLG8pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZihlPWUuc3RhdGVOb2RlKS5zaG91bGRDb21wb25lbnRVcGRhdGU/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocixhLG8pOiF0LnByb3RvdHlwZXx8IXQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50fHwhblEobixyKXx8IW5RKGwsYSl9ZnVuY3Rpb24gbEMoZSx0LG4pe3ZhciByPSExLGw9dHgsYT10LmNvbnRleHRUeXBlO3JldHVybiJvYmplY3QiPT10eXBlb2YgYSYmbnVsbCE9PWE/YT1hbyhhKToobD10TCh0KT90Tjp0ei5jdXJyZW50LGE9KHI9bnVsbCE9KHI9dC5jb250ZXh0VHlwZXMpKT90XyhlLGwpOnR4KSx0PW5ldyB0KG4sYSksZS5tZW1vaXplZFN0YXRlPW51bGwhPT10LnN0YXRlJiZ2b2lkIDAhPT10LnN0YXRlP3Quc3RhdGU6bnVsbCx0LnVwZGF0ZXI9bHcsZS5zdGF0ZU5vZGU9dCx0Ll9yZWFjdEludGVybmFscz1lLHImJigoZT1lLnN0YXRlTm9kZSkuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD1sLGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9YSksdH1mdW5jdGlvbiBsRShlLHQsbixyKXtlPXQuc3RhdGUsImZ1bmN0aW9uIj09dHlwZW9mIHQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksImZ1bmN0aW9uIj09dHlwZW9mIHQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJnQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobixyKSx0LnN0YXRlIT09ZSYmbHcuZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0LHQuc3RhdGUsbnVsbCl9ZnVuY3Rpb24gbHgoZSx0LG4scil7dmFyIGw9ZS5zdGF0ZU5vZGU7bC5wcm9wcz1uLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlLGwucmVmcz17fSxuVChlKTt2YXIgYT10LmNvbnRleHRUeXBlOyJvYmplY3QiPT10eXBlb2YgYSYmbnVsbCE9PWE/bC5jb250ZXh0PWFvKGEpOihhPXRMKHQpP3ROOnR6LmN1cnJlbnQsbC5jb250ZXh0PXRfKGUsYSkpLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlLCJmdW5jdGlvbiI9PXR5cGVvZihhPXQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKSYmKGxrKGUsdCxhLG4pLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHN8fCJmdW5jdGlvbiI9PXR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT10eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnR8fCh0PWwuc3RhdGUsImZ1bmN0aW9uIj09dHlwZW9mIGwuY29tcG9uZW50V2lsbE1vdW50JiZsLmNvbXBvbmVudFdpbGxNb3VudCgpLCJmdW5jdGlvbiI9PXR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmwuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLHQhPT1sLnN0YXRlJiZsdy5lbnF1ZXVlUmVwbGFjZVN0YXRlKGwsbC5zdGF0ZSxudWxsKSxuVShlLG4sbCxyKSxuSSgpLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgbC5jb21wb25lbnREaWRNb3VudCYmKGUuZmxhZ3N8PTQxOTQzMDgpfXZhciBsej1uZXcgV2Vha01hcDtmdW5jdGlvbiBsUChlLHQpe2lmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciBuPWx6LmdldChlKTsic3RyaW5nIiE9dHlwZW9mIG4mJihuPWVKKHQpLGx6LnNldChlLG4pKX1lbHNlIG49ZUoodCk7cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6bixkaWdlc3Q6bnVsbH19ZnVuY3Rpb24gbE4oZSx0LG4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmbHouc2V0KGUsbikse3ZhbHVlOmUsc291cmNlOm51bGwsc3RhY2s6bnVsbCE9bj9uOm51bGwsZGlnZXN0Om51bGwhPXQ/dDpudWxsfX1mdW5jdGlvbiBsXyhlLHQpe3RyeXtjb25zb2xlLmVycm9yKHQudmFsdWUpfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9fWZ1bmN0aW9uIGxMKGUsdCxuKXsobj1uTShuKSkudGFnPTMsbi5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciByPXQudmFsdWU7cmV0dXJuIG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtvQnx8KG9CPSEwLG9WPXIpLGxfKGUsdCl9LG59ZnVuY3Rpb24gbFQoZSx0LG4peyhuPW5NKG4pKS50YWc9Mzt2YXIgcj1lLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXt2YXIgbD10LnZhbHVlO24ucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiByKGwpfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7bF8oZSx0KX19dmFyIGE9ZS5zdGF0ZU5vZGU7cmV0dXJuIG51bGwhPT1hJiYiZnVuY3Rpb24iPT10eXBlb2YgYS5jb21wb25lbnREaWRDYXRjaCYmKG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtsXyhlLHQpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiYobnVsbD09PW9RP29RPW5ldyBTZXQoW3RoaXNdKTpvUS5hZGQodGhpcykpO3ZhciBuPXQuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaCh0LnZhbHVlLHtjb21wb25lbnRTdGFjazpudWxsIT09bj9uOiIifSl9KSxufWZ1bmN0aW9uIGxGKGUsdCxuLHIsbCl7cmV0dXJuIDA9PSgxJmUubW9kZSk/ZT09PXQ/ZS5mbGFnc3w9NjU1MzY6KGUuZmxhZ3N8PTEyOCxuLmZsYWdzfD0xMzEwNzIsbi5mbGFncyY9LTUyODA1LDE9PT1uLnRhZyYmKG51bGw9PT1uLmFsdGVybmF0ZT9uLnRhZz0xNzooKHQ9bk0oMikpLnRhZz0yLG5PKG4sdCwyKSkpLG4ubGFuZXN8PTIpOihlLmZsYWdzfD02NTUzNixlLmxhbmVzPWwpLGV9dmFyIGxNPXMuUmVhY3RDdXJyZW50T3duZXIsbE89RXJyb3IoaSg0NjEpKSxsUj0hMTtmdW5jdGlvbiBsRChlLHQsbixyKXt0LmNoaWxkPW51bGw9PT1lP242KHQsbnVsbCxuLHIpOm40KHQsZS5jaGlsZCxuLHIpfWZ1bmN0aW9uIGxBKGUsdCxuLHIsbCl7bj1uLnJlbmRlcjt2YXIgYT10LnJlZjtyZXR1cm4oYWEodCxsKSxyPXJFKGUsdCxuLHIsYSxsKSxuPXJOKCksbnVsbD09PWV8fGxSKT8odFomJm4mJnRLKHQpLHQuZmxhZ3N8PTEsbEQoZSx0LHIsbCksdC5jaGlsZCk6KHJfKGUsdCxsKSxsNihlLHQsbCkpfWZ1bmN0aW9uIGxJKGUsdCxuLHIsbCl7aWYobnVsbD09PWUpe3ZhciBhPW4udHlwZTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgYXx8aUMoYSl8fHZvaWQgMCE9PWEuZGVmYXVsdFByb3BzfHxudWxsIT09bi5jb21wYXJlfHx2b2lkIDAhPT1uLmRlZmF1bHRQcm9wcz8oKGU9aXoobi50eXBlLG51bGwscix0LHQubW9kZSxsKSkucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lKToodC50YWc9MTUsdC50eXBlPWEsbFUoZSx0LGEscixsKSl9aWYoYT1lLmNoaWxkLDA9PShlLmxhbmVzJmwpKXt2YXIgbz1hLm1lbW9pemVkUHJvcHM7aWYoKG49bnVsbCE9PShuPW4uY29tcGFyZSk/bjpuUSkobyxyKSYmZS5yZWY9PT10LnJlZilyZXR1cm4gbDYoZSx0LGwpfXJldHVybiB0LmZsYWdzfD0xLChlPWlFKGEscikpLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZX1mdW5jdGlvbiBsVShlLHQsbixyLGwpe2lmKG51bGwhPT1lKXt2YXIgYT1lLm1lbW9pemVkUHJvcHM7aWYoblEoYSxyKSYmZS5yZWY9PT10LnJlZil7aWYobFI9ITEsdC5wZW5kaW5nUHJvcHM9cj1hLDA9PShlLmxhbmVzJmwpKXJldHVybiB0LmxhbmVzPWUubGFuZXMsbDYoZSx0LGwpOzAhPSgxMzEwNzImZS5mbGFncykmJihsUj0hMCl9fXJldHVybiBsJChlLHQsbixyLGwpfWZ1bmN0aW9uIGxCKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxsPXIuY2hpbGRyZW4sYT0wIT0oMiZ0LnN0YXRlTm9kZS5fcGVuZGluZ1Zpc2liaWxpdHkpLG89bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGw7aWYobFEoZSx0KSwiaGlkZGVuIj09PXIubW9kZXx8YSl7aWYoMCE9KDEyOCZ0LmZsYWdzKSl7aWYobj1udWxsIT09bz9vLmJhc2VMYW5lc3xuOm4sbnVsbCE9PWUpe2ZvcihsPTAscj10LmNoaWxkPWUuY2hpbGQ7bnVsbCE9PXI7KWw9bHxyLmxhbmVzfHIuY2hpbGRMYW5lcyxyPXIuc2libGluZzt0LmNoaWxkTGFuZXM9bCZ+bn1lbHNlIHQuY2hpbGRMYW5lcz0wLHQuY2hpbGQ9bnVsbDtyZXR1cm4gbFYoZSx0LG4pfWlmKDA9PSgxJnQubW9kZSkpdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbH0sbnVsbCE9PWUmJmF3KHQsbnVsbCksbjkoKSxybCh0KTtlbHNle2lmKDA9PSg1MzY4NzA5MTImbikpcmV0dXJuIHQubGFuZXM9dC5jaGlsZExhbmVzPTUzNjg3MDkxMixsVihlLHQsbnVsbCE9PW8/by5iYXNlTGFuZXN8bjpuKTt0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsfSxudWxsIT09ZSYmYXcodCxudWxsIT09bz9vLmNhY2hlUG9vbDpudWxsKSxudWxsIT09bz9uNyh0LG8pOm45KCkscmwodCl9fWVsc2UgbnVsbCE9PW8/KGF3KHQsby5jYWNoZVBvb2wpLG43KHQsbykscmEodCksdC5tZW1vaXplZFN0YXRlPW51bGwpOihudWxsIT09ZSYmYXcodCxudWxsKSxuOSgpLHJhKHQpKTtyZXR1cm4gbEQoZSx0LGwsbiksdC5jaGlsZH1mdW5jdGlvbiBsVihlLHQsbil7dmFyIHI9YWsoKTtyZXR1cm4gcj1udWxsPT09cj9udWxsOntwYXJlbnQ6YWQuX2N1cnJlbnRWYWx1ZSxwb29sOnJ9LHQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOm4sY2FjaGVQb29sOnJ9LG51bGwhPT1lJiZhdyh0LG51bGwpLG45KCkscmwodCksbnVsbH1mdW5jdGlvbiBsUShlLHQpe3ZhciBuPXQucmVmOyhudWxsPT09ZSYmbnVsbCE9PW58fG51bGwhPT1lJiZlLnJlZiE9PW4pJiYodC5mbGFnc3w9NTEyLHQuZmxhZ3N8PTIwOTcxNTIpfWZ1bmN0aW9uIGwkKGUsdCxuLHIsbCl7dmFyIGE9dEwobik/dE46dHouY3VycmVudDtyZXR1cm4oYT10Xyh0LGEpLGFhKHQsbCksbj1yRShlLHQsbixyLGEsbCkscj1yTigpLG51bGw9PT1lfHxsUik/KHRaJiZyJiZ0Syh0KSx0LmZsYWdzfD0xLGxEKGUsdCxuLGwpLHQuY2hpbGQpOihyXyhlLHQsbCksbDYoZSx0LGwpKX1mdW5jdGlvbiBsaihlLHQsbixyLGwsYSl7cmV0dXJuKGFhKHQsYSksbj1yeih0LHIsbixsKSxyeCgpLHI9ck4oKSxudWxsPT09ZXx8bFIpPyh0WiYmciYmdEsodCksdC5mbGFnc3w9MSxsRChlLHQsbixhKSx0LmNoaWxkKToocl8oZSx0LGEpLGw2KGUsdCxhKSl9ZnVuY3Rpb24gbFcoZSx0LG4scixsKXtpZih0TChuKSl7dmFyIGE9ITA7dE8odCl9ZWxzZSBhPSExO2lmKGFhKHQsbCksbnVsbD09PXQuc3RhdGVOb2RlKWw0KGUsdCksbEModCxuLHIpLGx4KHQsbixyLGwpLHI9ITA7ZWxzZSBpZihudWxsPT09ZSl7dmFyIG89dC5zdGF0ZU5vZGUsaT10Lm1lbW9pemVkUHJvcHM7by5wcm9wcz1pO3ZhciB1PW8uY29udGV4dCxzPW4uY29udGV4dFR5cGU7cz0ib2JqZWN0Ij09dHlwZW9mIHMmJm51bGwhPT1zP2FvKHMpOnRfKHQscz10TChuKT90Tjp0ei5jdXJyZW50KTt2YXIgYz1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxmPSJmdW5jdGlvbiI9PXR5cGVvZiBjfHwiZnVuY3Rpb24iPT10eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtmfHwiZnVuY3Rpb24iIT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmImZ1bmN0aW9uIiE9dHlwZW9mIG8uY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGkhPT1yfHx1IT09cykmJmxFKHQsbyxyLHMpLG5MPSExO3ZhciBkPXQubWVtb2l6ZWRTdGF0ZTtvLnN0YXRlPWQsblUodCxyLG8sbCksbkkoKSx1PXQubWVtb2l6ZWRTdGF0ZSxpIT09cnx8ZCE9PXV8fHRQLmN1cnJlbnR8fG5MPygiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGxrKHQsbixjLHIpLHU9dC5tZW1vaXplZFN0YXRlKSwoaT1uTHx8bFModCxuLGkscixkLHUscykpPyhmfHwiZnVuY3Rpb24iIT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnR8fCgiZnVuY3Rpb24iPT10eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQmJm8uY29tcG9uZW50V2lsbE1vdW50KCksImZ1bmN0aW9uIj09dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZE1vdW50JiYodC5mbGFnc3w9NDE5NDMwOCkpOigiZnVuY3Rpb24iPT10eXBlb2Ygby5jb21wb25lbnREaWRNb3VudCYmKHQuZmxhZ3N8PTQxOTQzMDgpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT11KSxvLnByb3BzPXIsby5zdGF0ZT11LG8uY29udGV4dD1zLHI9aSk6KCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZE1vdW50JiYodC5mbGFnc3w9NDE5NDMwOCkscj0hMSl9ZWxzZXtvPXQuc3RhdGVOb2RlLG5GKGUsdCksaT10Lm1lbW9pemVkUHJvcHMscz10LnR5cGU9PT10LmVsZW1lbnRUeXBlP2k6bGIodC50eXBlLGkpLG8ucHJvcHM9cyxmPXQucGVuZGluZ1Byb3BzLGQ9by5jb250ZXh0LHU9Im9iamVjdCI9PXR5cGVvZih1PW4uY29udGV4dFR5cGUpJiZudWxsIT09dT9hbyh1KTp0Xyh0LHU9dEwobik/dE46dHouY3VycmVudCk7dmFyIHA9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHB8fCJmdW5jdGlvbiI9PXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJiJmdW5jdGlvbiIhPXR5cGVvZiBvLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChpIT09Znx8ZCE9PXUpJiZsRSh0LG8scix1KSxuTD0hMSxkPXQubWVtb2l6ZWRTdGF0ZSxvLnN0YXRlPWQsblUodCxyLG8sbCksbkkoKTt2YXIgbT10Lm1lbW9pemVkU3RhdGU7aSE9PWZ8fGQhPT1tfHx0UC5jdXJyZW50fHxuTD8oImZ1bmN0aW9uIj09dHlwZW9mIHAmJihsayh0LG4scCxyKSxtPXQubWVtb2l6ZWRTdGF0ZSksKHM9bkx8fGxTKHQsbixzLHIsZCxtLHUpfHwhMSk/KGN8fCJmdW5jdGlvbiIhPXR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsVXBkYXRlfHwoImZ1bmN0aW9uIj09dHlwZW9mIG8uY29tcG9uZW50V2lsbFVwZGF0ZSYmby5jb21wb25lbnRXaWxsVXBkYXRlKHIsbSx1KSwiZnVuY3Rpb24iPT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmby5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShyLG0sdSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZFVwZGF0ZSYmKHQuZmxhZ3N8PTQpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYodC5mbGFnc3w9MTAyNCkpOigiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnREaWRVcGRhdGV8fGk9PT1lLm1lbW9pemVkUHJvcHMmJmQ9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD00KSwiZnVuY3Rpb24iIT10eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZD09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTEwMjQpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT1tKSxvLnByb3BzPXIsby5zdGF0ZT1tLG8uY29udGV4dD11LHI9cyk6KCJmdW5jdGlvbiIhPXR5cGVvZiBvLmNvbXBvbmVudERpZFVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZD09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLCJmdW5jdGlvbiIhPXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxpPT09ZS5tZW1vaXplZFByb3BzJiZkPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCkscj0hMSl9cmV0dXJuIGxIKGUsdCxuLHIsYSxsKX1mdW5jdGlvbiBsSChlLHQsbixyLGwsYSl7bFEoZSx0KTt2YXIgbz0wIT0oMTI4JnQuZmxhZ3MpO2lmKCFyJiYhbylyZXR1cm4gbCYmdFIodCxuLCExKSxsNihlLHQsYSk7cj10LnN0YXRlTm9kZSxsTS5jdXJyZW50PXQ7dmFyIGk9byYmImZ1bmN0aW9uIiE9dHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yP251bGw6ci5yZW5kZXIoKTtyZXR1cm4gdC5mbGFnc3w9MSxudWxsIT09ZSYmbz8odC5jaGlsZD1uNCh0LGUuY2hpbGQsbnVsbCxhKSx0LmNoaWxkPW40KHQsbnVsbCxpLGEpKTpsRChlLHQsaSxhKSx0Lm1lbW9pemVkU3RhdGU9ci5zdGF0ZSxsJiZ0Uih0LG4sITApLHQuY2hpbGR9ZnVuY3Rpb24gbHEoZSl7dmFyIHQ9ZS5zdGF0ZU5vZGU7dC5wZW5kaW5nQ29udGV4dD90RihlLHQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dCE9PXQuY29udGV4dCk6dC5jb250ZXh0JiZ0RihlLHQuY29udGV4dCwhMSksVihlLHQuY29udGFpbmVySW5mbyl9ZnVuY3Rpb24gbEsoZSx0LG4scixsKXtyZXR1cm4gbnQoKSxubihsKSx0LmZsYWdzfD0yNTYsbEQoZSx0LG4sciksdC5jaGlsZH12YXIgbFk9e2RlaHlkcmF0ZWQ6bnVsbCx0cmVlQ29udGV4dDpudWxsLHJldHJ5TGFuZTowfTtmdW5jdGlvbiBsWChlKXtyZXR1cm57YmFzZUxhbmVzOmUsY2FjaGVQb29sOmFTKCl9fWZ1bmN0aW9uIGxHKGUsdCxuKXtyZXR1cm4gZT1udWxsIT09ZT9lLmNoaWxkTGFuZXMmfm46MCx0JiYoZXw9b0YpLGV9ZnVuY3Rpb24gbFooZSx0LG4pe3ZhciByLGw9dC5wZW5kaW5nUHJvcHMsYT0hMSxvPTAhPSgxMjgmdC5mbGFncyk7aWYoKHI9byl8fChyPShudWxsPT09ZXx8bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSkmJjAhPSgyJnJpLmN1cnJlbnQpKSxyJiYoYT0hMCx0LmZsYWdzJj0tMTI5KSxyPTAhPSgzMiZ0LmZsYWdzKSx0LmZsYWdzJj0tMzMsbnVsbD09PWUpe2lmKHRaKXtpZihhP3JyKHQpOnJhKHQpLHRaKXt2YXIgdT1vPXRHO2lmKHUpe2lmKCF0Nih0LHUpKXt0OCh0KSYmdDUoKSx0Rz1jYSh1KTt2YXIgcz10WDt0RyYmdDYodCx0Ryk/dDEocyx1KToodDIodFgsdCksdFo9ITEsdFg9dCx0Rz1vKX19ZWxzZSB0OCh0KSYmdDUoKSx0Mih0WCx0KSx0Wj0hMSx0WD10LHRHPW99aWYobnVsbCE9PShvPXQubWVtb2l6ZWRTdGF0ZSkmJm51bGwhPT0obz1vLmRlaHlkcmF0ZWQpKXJldHVybiAwPT0oMSZ0Lm1vZGUpP3QubGFuZXM9MjoiJCEiPT09by5kYXRhP3QubGFuZXM9MTY6dC5sYW5lcz01MzY4NzA5MTIsbnVsbDtybyh0KX1yZXR1cm4obz1sLmNoaWxkcmVuLGw9bC5mYWxsYmFjayxhKT8ocmEodCksYT10Lm1vZGUsdT10LmNoaWxkLG89e21vZGU6ImhpZGRlbiIsY2hpbGRyZW46b30sMD09KDEmYSkmJm51bGwhPT11Pyh1LmNoaWxkTGFuZXM9MCx1LnBlbmRpbmdQcm9wcz1vKTp1PWlOKG8sYSwwLG51bGwpLGw9aVAobCxhLG4sbnVsbCksdS5yZXR1cm49dCxsLnJldHVybj10LHUuc2libGluZz1sLHQuY2hpbGQ9dSwoYT10LmNoaWxkKS5tZW1vaXplZFN0YXRlPWxYKG4pLGEuY2hpbGRMYW5lcz1sRyhlLHIsbiksdC5tZW1vaXplZFN0YXRlPWxZLGwpOihycih0KSxsSih0LG8pKX1pZihudWxsIT09KHU9ZS5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PShzPXUuZGVoeWRyYXRlZCkpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsbCxhLG8sdSl7aWYobilyZXR1cm4gMjU2JnQuZmxhZ3M/KHJyKHQpLHQuZmxhZ3MmPS0yNTcsbDAoZSx0LHUsYT1sTihFcnJvcihpKDQyMikpKSkpOm51bGwhPT10Lm1lbW9pemVkU3RhdGU/KHJhKHQpLHQuY2hpbGQ9ZS5jaGlsZCx0LmZsYWdzfD0xMjgsbnVsbCk6KHJhKHQpLGE9bC5mYWxsYmFjayxvPXQubW9kZSxsPWlOKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjpsLmNoaWxkcmVufSxvLDAsbnVsbCksYT1pUChhLG8sdSxudWxsKSxhLmZsYWdzfD0yLGwucmV0dXJuPXQsYS5yZXR1cm49dCxsLnNpYmxpbmc9YSx0LmNoaWxkPWwsMCE9KDEmdC5tb2RlKSYmbjQodCxlLmNoaWxkLG51bGwsdSksKG89dC5jaGlsZCkubWVtb2l6ZWRTdGF0ZT1sWCh1KSxvLmNoaWxkTGFuZXM9bEcoZSxyLHUpLHQubWVtb2l6ZWRTdGF0ZT1sWSxhKTtpZihycih0KSwwPT0oMSZ0Lm1vZGUpKXJldHVybiBsMChlLHQsdSxudWxsKTtpZigiJCEiPT09YS5kYXRhKXtpZihhPWEubmV4dFNpYmxpbmcmJmEubmV4dFNpYmxpbmcuZGF0YXNldCl2YXIgcz1hLmRnc3Q7cmV0dXJuIGE9cywocj1FcnJvcihpKDQxOSkpKS5kaWdlc3Q9YSxsMChlLHQsdSxhPWxOKHIsYSx2b2lkIDApKX1pZihyPTAhPSh1JmUuY2hpbGRMYW5lcyksbFJ8fHIpe2lmKG51bGwhPT0ocj1vaykpe2lmKDAhPSg0MiYobD11Ji11KSkpbD0xO2Vsc2Ugc3dpdGNoKGwpe2Nhc2UgMjpsPTE7YnJlYWs7Y2FzZSA4Omw9NDticmVhaztjYXNlIDMyOmw9MTY7YnJlYWs7Y2FzZSAxMjg6Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6bD02NDticmVhaztjYXNlIDI2ODQzNTQ1NjpsPTEzNDIxNzcyODticmVhaztkZWZhdWx0Omw9MH1pZigwIT09KGw9MCE9KGwmKHIuc3VzcGVuZGVkTGFuZXN8dSkpPzA6bCkmJmwhPT1vLnJldHJ5TGFuZSl0aHJvdyBvLnJldHJ5TGFuZT1sLG5zKGUsbCksb0cocixlLGwpLGxPfXJldHVybiIkPyIhPT1hLmRhdGEmJmlyKCksbDAoZSx0LHUsbnVsbCl9cmV0dXJuIiQ/Ij09PWEuZGF0YT8odC5mbGFnc3w9MTI4LHQuY2hpbGQ9ZS5jaGlsZCx0PWl2LmJpbmQobnVsbCxlKSxhLl9yZWFjdFJldHJ5PXQsbnVsbCk6KGU9by50cmVlQ29udGV4dCx0Rz1jbChhLm5leHRTaWJsaW5nKSx0WD10LHRaPSEwLHRKPW51bGwsdDA9ITEsbnVsbCE9PWUmJih0Vlt0USsrXT10aix0Vlt0USsrXT10Vyx0Vlt0USsrXT10JCx0aj1lLmlkLHRXPWUub3ZlcmZsb3csdCQ9dCksdD1sSih0LGwuY2hpbGRyZW4pLHQuZmxhZ3N8PTQwOTYsdCl9KGUsdCxvLHIsbCxzLHUsbik7aWYoYSl7cmEodCksYT1sLmZhbGxiYWNrLG89dC5tb2RlLHM9KHU9ZS5jaGlsZCkuc2libGluZzt2YXIgYz17bW9kZToiaGlkZGVuIixjaGlsZHJlbjpsLmNoaWxkcmVufTtyZXR1cm4gMD09KDEmbykmJnQuY2hpbGQhPT11PygobD10LmNoaWxkKS5jaGlsZExhbmVzPTAsbC5wZW5kaW5nUHJvcHM9Yyx0LmRlbGV0aW9ucz1udWxsKToobD1pRSh1LGMpKS5zdWJ0cmVlRmxhZ3M9MzE0NTcyODAmdS5zdWJ0cmVlRmxhZ3MsbnVsbCE9PXM/YT1pRShzLGEpOihhPWlQKGEsbyxuLG51bGwpLGEuZmxhZ3N8PTIpLGEucmV0dXJuPXQsbC5yZXR1cm49dCxsLnNpYmxpbmc9YSx0LmNoaWxkPWwsbD1hLGE9dC5jaGlsZCxudWxsPT09KG89ZS5jaGlsZC5tZW1vaXplZFN0YXRlKT9vPWxYKG4pOihudWxsIT09KHU9by5jYWNoZVBvb2wpPyhzPWFkLl9jdXJyZW50VmFsdWUsdT11LnBhcmVudCE9PXM/e3BhcmVudDpzLHBvb2w6c306dSk6dT1hUygpLG89e2Jhc2VMYW5lczpvLmJhc2VMYW5lc3xuLGNhY2hlUG9vbDp1fSksYS5tZW1vaXplZFN0YXRlPW8sYS5jaGlsZExhbmVzPWxHKGUscixuKSx0Lm1lbW9pemVkU3RhdGU9bFksbH1yZXR1cm4gcnIodCksZT0ocj1lLmNoaWxkKS5zaWJsaW5nLHI9aUUocix7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46bC5jaGlsZHJlbn0pLDA9PSgxJnQubW9kZSkmJihyLmxhbmVzPW4pLHIucmV0dXJuPXQsci5zaWJsaW5nPW51bGwsbnVsbCE9PWUmJihudWxsPT09KG49dC5kZWxldGlvbnMpPyh0LmRlbGV0aW9ucz1bZV0sdC5mbGFnc3w9MTYpOm4ucHVzaChlKSksdC5jaGlsZD1yLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHJ9ZnVuY3Rpb24gbEooZSx0KXtyZXR1cm4odD1pTih7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46dH0sZS5tb2RlLDAsbnVsbCkpLnJldHVybj1lLGUuY2hpbGQ9dH1mdW5jdGlvbiBsMChlLHQsbixyKXtyZXR1cm4gbnVsbCE9PXImJm5uKHIpLG40KHQsZS5jaGlsZCxudWxsLG4pLGU9bEoodCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksZS5mbGFnc3w9Mix0Lm1lbW9pemVkU3RhdGU9bnVsbCxlfWZ1bmN0aW9uIGwxKGUsdCxuKXtlLmxhbmVzfD10O3ZhciByPWUuYWx0ZXJuYXRlO251bGwhPT1yJiYoci5sYW5lc3w9dCksYXIoZS5yZXR1cm4sdCxuKX1mdW5jdGlvbiBsMihlLHQsbixyLGwpe3ZhciBhPWUubWVtb2l6ZWRTdGF0ZTtudWxsPT09YT9lLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOnQscmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDpyLHRhaWw6bix0YWlsTW9kZTpsfTooYS5pc0JhY2t3YXJkcz10LGEucmVuZGVyaW5nPW51bGwsYS5yZW5kZXJpbmdTdGFydFRpbWU9MCxhLmxhc3Q9cixhLnRhaWw9bixhLnRhaWxNb2RlPWwpfWZ1bmN0aW9uIGwzKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxsPXIucmV2ZWFsT3JkZXIsYT1yLnRhaWw7aWYobEQoZSx0LHIuY2hpbGRyZW4sbiksMCE9KDImKHI9cmkuY3VycmVudCkpKXI9MSZyfDIsdC5mbGFnc3w9MTI4O2Vsc2V7aWYobnVsbCE9PWUmJjAhPSgxMjgmZS5mbGFncykpZTpmb3IoZT10LmNoaWxkO251bGwhPT1lOyl7aWYoMTM9PT1lLnRhZyludWxsIT09ZS5tZW1vaXplZFN0YXRlJiZsMShlLG4sdCk7ZWxzZSBpZigxOT09PWUudGFnKWwxKGUsbix0KTtlbHNlIGlmKG51bGwhPT1lLmNoaWxkKXtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZDtjb250aW51ZX1pZihlPT09dClicmVhaztmb3IoO251bGw9PT1lLnNpYmxpbmc7KXtpZihudWxsPT09ZS5yZXR1cm58fGUucmV0dXJuPT09dClicmVhayBlO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ31yJj0xfWlmKGcocmksciksMD09KDEmdC5tb2RlKSl0Lm1lbW9pemVkU3RhdGU9bnVsbDtlbHNlIHN3aXRjaChsKXtjYXNlImZvcndhcmRzIjpmb3IobD1udWxsLG49dC5jaGlsZDtudWxsIT09bjspbnVsbCE9PShlPW4uYWx0ZXJuYXRlKSYmbnVsbD09PXJ1KGUpJiYobD1uKSxuPW4uc2libGluZztudWxsPT09KG49bCk/KGw9dC5jaGlsZCx0LmNoaWxkPW51bGwpOihsPW4uc2libGluZyxuLnNpYmxpbmc9bnVsbCksbDIodCwhMSxsLG4sYSk7YnJlYWs7Y2FzZSJiYWNrd2FyZHMiOmZvcihuPW51bGwsbD10LmNoaWxkLHQuY2hpbGQ9bnVsbDtudWxsIT09bDspe2lmKG51bGwhPT0oZT1sLmFsdGVybmF0ZSkmJm51bGw9PT1ydShlKSl7dC5jaGlsZD1sO2JyZWFrfWU9bC5zaWJsaW5nLGwuc2libGluZz1uLG49bCxsPWV9bDIodCwhMCxuLG51bGwsYSk7YnJlYWs7Y2FzZSJ0b2dldGhlciI6bDIodCwhMSxudWxsLG51bGwsdm9pZCAwKTticmVhaztkZWZhdWx0OnQubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIGw0KGUsdCl7MD09KDEmdC5tb2RlKSYmbnVsbCE9PWUmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5mbGFnc3w9Mil9ZnVuY3Rpb24gbDYoZSx0LG4pe2lmKG51bGwhPT1lJiYodC5kZXBlbmRlbmNpZXM9ZS5kZXBlbmRlbmNpZXMpLG9ffD10LmxhbmVzLDA9PShuJnQuY2hpbGRMYW5lcykpcmV0dXJuIG51bGw7aWYobnVsbCE9PWUmJnQuY2hpbGQhPT1lLmNoaWxkKXRocm93IEVycm9yKGkoMTUzKSk7aWYobnVsbCE9PXQuY2hpbGQpe2ZvcihuPWlFKGU9dC5jaGlsZCxlLnBlbmRpbmdQcm9wcyksdC5jaGlsZD1uLG4ucmV0dXJuPXQ7bnVsbCE9PWUuc2libGluZzspZT1lLnNpYmxpbmcsKG49bi5zaWJsaW5nPWlFKGUsZS5wZW5kaW5nUHJvcHMpKS5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH12YXIgbDg9bShudWxsKSxsNT1udWxsLGw3PW51bGwsbDk9bnVsbDtmdW5jdGlvbiBhZSgpe2w5PWw3PWw1PW51bGx9ZnVuY3Rpb24gYXQoZSx0LG4pe2cobDgsdC5fY3VycmVudFZhbHVlKSx0Ll9jdXJyZW50VmFsdWU9bn1mdW5jdGlvbiBhbihlKXtlLl9jdXJyZW50VmFsdWU9bDguY3VycmVudCxoKGw4KX1mdW5jdGlvbiBhcihlLHQsbil7Zm9yKDtudWxsIT09ZTspe3ZhciByPWUuYWx0ZXJuYXRlO2lmKChlLmNoaWxkTGFuZXMmdCkhPT10PyhlLmNoaWxkTGFuZXN8PXQsbnVsbCE9PXImJihyLmNoaWxkTGFuZXN8PXQpKTpudWxsIT09ciYmKHIuY2hpbGRMYW5lcyZ0KSE9PXQmJihyLmNoaWxkTGFuZXN8PXQpLGU9PT1uKWJyZWFrO2U9ZS5yZXR1cm59fWZ1bmN0aW9uIGFsKGUsdCxuKXt2YXIgcj1lLmNoaWxkO2ZvcihudWxsIT09ciYmKHIucmV0dXJuPWUpO251bGwhPT1yOyl7dmFyIGw9ci5kZXBlbmRlbmNpZXM7aWYobnVsbCE9PWwpZm9yKHZhciBhPXIuY2hpbGQsbz1sLmZpcnN0Q29udGV4dDtudWxsIT09bzspe2lmKG8uY29udGV4dD09PXQpe2lmKDE9PT1yLnRhZyl7KG89bk0obiYtbikpLnRhZz0yO3ZhciB1PXIudXBkYXRlUXVldWU7aWYobnVsbCE9PXUpe3ZhciBzPSh1PXUuc2hhcmVkKS5wZW5kaW5nO251bGw9PT1zP28ubmV4dD1vOihvLm5leHQ9cy5uZXh0LHMubmV4dD1vKSx1LnBlbmRpbmc9b319ci5sYW5lc3w9bixudWxsIT09KG89ci5hbHRlcm5hdGUpJiYoby5sYW5lc3w9biksYXIoci5yZXR1cm4sbixlKSxsLmxhbmVzfD1uO2JyZWFrfW89by5uZXh0fWVsc2UgaWYoMTA9PT1yLnRhZylhPXIudHlwZT09PWUudHlwZT9udWxsOnIuY2hpbGQ7ZWxzZSBpZigxOD09PXIudGFnKXtpZihudWxsPT09KGE9ci5yZXR1cm4pKXRocm93IEVycm9yKGkoMzQxKSk7YS5sYW5lc3w9bixudWxsIT09KGw9YS5hbHRlcm5hdGUpJiYobC5sYW5lc3w9biksYXIoYSxuLGUpLGE9ci5zaWJsaW5nfWVsc2UgYT1yLmNoaWxkO2lmKG51bGwhPT1hKWEucmV0dXJuPXI7ZWxzZSBmb3IoYT1yO251bGwhPT1hOyl7aWYoYT09PWUpe2E9bnVsbDticmVha31pZihudWxsIT09KHI9YS5zaWJsaW5nKSl7ci5yZXR1cm49YS5yZXR1cm4sYT1yO2JyZWFrfWE9YS5yZXR1cm59cj1hfX1mdW5jdGlvbiBhYShlLHQpe2w1PWUsbDk9bDc9bnVsbCxudWxsIT09KGU9ZS5kZXBlbmRlbmNpZXMpJiZudWxsIT09ZS5maXJzdENvbnRleHQmJigwIT0oZS5sYW5lcyZ0KSYmKGxSPSEwKSxlLmZpcnN0Q29udGV4dD1udWxsKX1mdW5jdGlvbiBhbyhlKXtyZXR1cm4gYXUobDUsZSl9ZnVuY3Rpb24gYWkoZSx0LG4pe3JldHVybiBudWxsPT09bDUmJmFhKGUsbiksYXUoZSx0KX1mdW5jdGlvbiBhdShlLHQpe3ZhciBuPXQuX2N1cnJlbnRWYWx1ZTtpZihsOSE9PXQpe2lmKHQ9e2NvbnRleHQ6dCxtZW1vaXplZFZhbHVlOm4sbmV4dDpudWxsfSxudWxsPT09bDcpe2lmKG51bGw9PT1lKXRocm93IEVycm9yKGkoMzA4KSk7bDc9dCxlLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6dH19ZWxzZSBsNz1sNy5uZXh0PXR9cmV0dXJuIG59dmFyIGFzPSJ1bmRlZmluZWQiIT10eXBlb2YgQWJvcnRDb250cm9sbGVyP0Fib3J0Q29udHJvbGxlcjpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5zaWduYWw9e2Fib3J0ZWQ6ITEsYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LG4pe2UucHVzaChuKX19O3RoaXMuYWJvcnQ9ZnVuY3Rpb24oKXt0LmFib3J0ZWQ9ITAsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX19LGFjPWEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxhZj1hLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LGFkPXskJHR5cGVvZjpFLENvbnN1bWVyOm51bGwsUHJvdmlkZXI6bnVsbCxfY3VycmVudFZhbHVlOm51bGwsX2N1cnJlbnRWYWx1ZTI6bnVsbCxfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gYXAoKXtyZXR1cm57Y29udHJvbGxlcjpuZXcgYXMsZGF0YTpuZXcgTWFwLHJlZkNvdW50OjB9fWZ1bmN0aW9uIGFtKGUpe2UucmVmQ291bnQtLSwwPT09ZS5yZWZDb3VudCYmYWMoYWYsZnVuY3Rpb24oKXtlLmNvbnRyb2xsZXIuYWJvcnQoKX0pfXZhciBhaD1zLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIGFnKCl7dmFyIGU9YWgudHJhbnNpdGlvbjtyZXR1cm4gbnVsbCE9PWUmJmUuX2NhbGxiYWNrcy5hZGQoYXkpLGV9ZnVuY3Rpb24gYXkoZSx0KXshZnVuY3Rpb24oZSx0KXtpZihudWxsPT09bngpe3ZhciBuPW54PVtdO256PTAsblA9bkUoKSxuTj17c3RhdHVzOiJwZW5kaW5nIix2YWx1ZTp2b2lkIDAsdGhlbjpmdW5jdGlvbihlKXtuLnB1c2goZSl9fX1ueisrLHQudGhlbihuXyxuXyl9KDAsdCl9ZnVuY3Rpb24gYXYoZSx0KXtlLl9jYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gbihlLHQpfSl9dmFyIGFiPW0obnVsbCk7ZnVuY3Rpb24gYWsoKXt2YXIgZT1hYi5jdXJyZW50O3JldHVybiBudWxsIT09ZT9lOm9rLnBvb2xlZENhY2hlfWZ1bmN0aW9uIGF3KGUsdCl7bnVsbD09PXQ/ZyhhYixhYi5jdXJyZW50KTpnKGFiLHQucG9vbCl9ZnVuY3Rpb24gYVMoKXt2YXIgZT1haygpO3JldHVybiBudWxsPT09ZT9udWxsOntwYXJlbnQ6YWQuX2N1cnJlbnRWYWx1ZSxwb29sOmV9fWZ1bmN0aW9uIGFDKGUpe2UuZmxhZ3N8PTR9ZnVuY3Rpb24gYUUoZSx0KXtpZigic3R5bGVzaGVldCIhPT10LnR5cGV8fDAhPSg0JnQuc3RhdGUubG9hZGluZykpZS5mbGFncyY9LTE2Nzc3MjE3O2Vsc2UgaWYoZS5mbGFnc3w9MTY3NzcyMTYsMD09KDQyJm9TKSYmISh0PSJzdHlsZXNoZWV0IiE9PXQudHlwZXx8MCE9KDMmdC5zdGF0ZS5sb2FkaW5nKSkpe2lmKG85KCkpZS5mbGFnc3w9ODE5MjtlbHNlIHRocm93IG5ZPW5XLG5qfX1mdW5jdGlvbiBheChlLHQpe251bGwhPT10P2UuZmxhZ3N8PTQ6MTYzODQmZS5mbGFncyYmKHQ9MjIhPT1lLnRhZz9lZygpOjUzNjg3MDkxMixlLmxhbmVzfD10KX1mdW5jdGlvbiBheihlLHQpe2lmKCF0Wilzd2l0Y2goZS50YWlsTW9kZSl7Y2FzZSJoaWRkZW4iOnQ9ZS50YWlsO2Zvcih2YXIgbj1udWxsO251bGwhPT10OyludWxsIT09dC5hbHRlcm5hdGUmJihuPXQpLHQ9dC5zaWJsaW5nO251bGw9PT1uP2UudGFpbD1udWxsOm4uc2libGluZz1udWxsO2JyZWFrO2Nhc2UiY29sbGFwc2VkIjpuPWUudGFpbDtmb3IodmFyIHI9bnVsbDtudWxsIT09bjspbnVsbCE9PW4uYWx0ZXJuYXRlJiYocj1uKSxuPW4uc2libGluZztudWxsPT09cj90fHxudWxsPT09ZS50YWlsP2UudGFpbD1udWxsOmUudGFpbC5zaWJsaW5nPW51bGw6ci5zaWJsaW5nPW51bGx9fWZ1bmN0aW9uIGFQKGUpe3ZhciB0PW51bGwhPT1lLmFsdGVybmF0ZSYmZS5hbHRlcm5hdGUuY2hpbGQ9PT1lLmNoaWxkLG49MCxyPTA7aWYodClmb3IodmFyIGw9ZS5jaGlsZDtudWxsIT09bDspbnw9bC5sYW5lc3xsLmNoaWxkTGFuZXMscnw9MzE0NTcyODAmbC5zdWJ0cmVlRmxhZ3Mscnw9MzE0NTcyODAmbC5mbGFncyxsLnJldHVybj1lLGw9bC5zaWJsaW5nO2Vsc2UgZm9yKGw9ZS5jaGlsZDtudWxsIT09bDspbnw9bC5sYW5lc3xsLmNoaWxkTGFuZXMscnw9bC5zdWJ0cmVlRmxhZ3Mscnw9bC5mbGFncyxsLnJldHVybj1lLGw9bC5zaWJsaW5nO3JldHVybiBlLnN1YnRyZWVGbGFnc3w9cixlLmNoaWxkTGFuZXM9bix0fWZ1bmN0aW9uIGFOKGUsdCl7c3dpdGNoKHRZKHQpLHQudGFnKXtjYXNlIDE6bnVsbCE9KGU9dC50eXBlLmNoaWxkQ29udGV4dFR5cGVzKSYmdFQoKTticmVhaztjYXNlIDM6YW4oYWQpLFEoKSxoKHRQKSxoKHR6KTticmVhaztjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OmoodCk7YnJlYWs7Y2FzZSA0OlEoKTticmVhaztjYXNlIDEzOnJvKHQpO2JyZWFrO2Nhc2UgMTk6aChyaSk7YnJlYWs7Y2FzZSAxMDphbih0LnR5cGUuX2NvbnRleHQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzpybyh0KSxyZSgpLG51bGwhPT1lJiZoKGFiKTticmVhaztjYXNlIDI0OmFuKGFkKX19ZnVuY3Rpb24gYV8oZSx0LG4pe3ZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7dC5hcHBseShuLHIpfWNhdGNoKGUpe3RoaXMub25FcnJvcihlKX19dmFyIGFMPSExLGFUPW51bGwsYUY9ITEsYU09bnVsbCxhTz17b25FcnJvcjpmdW5jdGlvbihlKXthTD0hMCxhVD1lfX07ZnVuY3Rpb24gYVIoZSx0LG4scixsLGEsbyxpLHUpe2FMPSExLGFUPW51bGwsYV8uYXBwbHkoYU8sYXJndW1lbnRzKX12YXIgYUQ9ITEsYUE9ITEsYUk9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtTZXQ/V2Vha1NldDpTZXQsYVU9bnVsbDtmdW5jdGlvbiBhQihlLHQpe3RyeXt2YXIgbj1lLnJlZjtpZihudWxsIT09bil7dmFyIHI9ZS5zdGF0ZU5vZGU7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnZhciBsPXI7YnJlYWs7ZGVmYXVsdDpsPXJ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/ZS5yZWZDbGVhbnVwPW4obCk6bi5jdXJyZW50PWx9fWNhdGNoKG4pe2ltKGUsdCxuKX19ZnVuY3Rpb24gYVYoZSx0KXt2YXIgbj1lLnJlZixyPWUucmVmQ2xlYW51cDtpZihudWxsIT09bil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpdHJ5e3IoKX1jYXRjaChuKXtpbShlLHQsbil9ZmluYWxseXtlLnJlZkNsZWFudXA9bnVsbCxudWxsIT0oZT1lLmFsdGVybmF0ZSkmJihlLnJlZkNsZWFudXA9bnVsbCl9ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil0cnl7bihudWxsKX1jYXRjaChuKXtpbShlLHQsbil9ZWxzZSBuLmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gYVEoZSx0LG4pe3RyeXtuKCl9Y2F0Y2gobil7aW0oZSx0LG4pfX12YXIgYSQ9ITE7ZnVuY3Rpb24gYWooZSx0LG4pe3ZhciByPXQudXBkYXRlUXVldWU7aWYobnVsbCE9PShyPW51bGwhPT1yP3IubGFzdEVmZmVjdDpudWxsKSl7dmFyIGw9cj1yLm5leHQ7ZG97aWYoKGwudGFnJmUpPT09ZSl7dmFyIGE9bC5pbnN0LG89YS5kZXN0cm95O3ZvaWQgMCE9PW8mJihhLmRlc3Ryb3k9dm9pZCAwLGFRKHQsbixvKSl9bD1sLm5leHR9d2hpbGUobCE9PXIpfX1mdW5jdGlvbiBhVyhlLHQpe2lmKG51bGwhPT0odD1udWxsIT09KHQ9dC51cGRhdGVRdWV1ZSk/dC5sYXN0RWZmZWN0Om51bGwpKXt2YXIgbj10PXQubmV4dDtkb3tpZigobi50YWcmZSk9PT1lKXt2YXIgcj1uLmNyZWF0ZSxsPW4uaW5zdDtyPXIoKSxsLmRlc3Ryb3k9cn1uPW4ubmV4dH13aGlsZShuIT09dCl9fWZ1bmN0aW9uIGFIKGUsdCl7dHJ5e2FXKHQsZSl9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19ZnVuY3Rpb24gYXEoZSl7dmFyIHQ9ZS51cGRhdGVRdWV1ZTtpZihudWxsIT09dCl7dmFyIG49ZS5zdGF0ZU5vZGU7dHJ5e25WKHQsbil9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19fWZ1bmN0aW9uIGFLKGUpe3ZhciB0PWUudHlwZSxuPWUubWVtb2l6ZWRQcm9wcyxyPWUuc3RhdGVOb2RlO3RyeXtzd2l0Y2godCl7Y2FzZSJidXR0b24iOmNhc2UiaW5wdXQiOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpuLmF1dG9Gb2N1cyYmci5mb2N1cygpO2JyZWFrO2Nhc2UiaW1nIjpuLnNyYyYmKHIuc3JjPW4uc3JjKX19Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19ZnVuY3Rpb24gYVkoZSx0LG4pe3ZhciByPW4uZmxhZ3M7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmE5KGUsbiksNCZyJiZhSChuLDUpO2JyZWFrO2Nhc2UgMTppZihhOShlLG4pLDQmcil7aWYoZT1uLnN0YXRlTm9kZSxudWxsPT09dCl0cnl7ZS5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGUpe2ltKG4sbi5yZXR1cm4sZSl9ZWxzZXt2YXIgbD1uLmVsZW1lbnRUeXBlPT09bi50eXBlP3QubWVtb2l6ZWRQcm9wczpsYihuLnR5cGUsdC5tZW1vaXplZFByb3BzKTt0PXQubWVtb2l6ZWRTdGF0ZTt0cnl7ZS5jb21wb25lbnREaWRVcGRhdGUobCx0LGUuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfWNhdGNoKGUpe2ltKG4sbi5yZXR1cm4sZSl9fX02NCZyJiZhcShuKSw1MTImciYmYUIobixuLnJldHVybik7YnJlYWs7Y2FzZSAzOmlmKGE5KGUsbiksNjQmciYmbnVsbCE9PShyPW4udXBkYXRlUXVldWUpKXtpZihlPW51bGwsbnVsbCE9PW4uY2hpbGQpc3dpdGNoKG4uY2hpbGQudGFnKXtjYXNlIDI3OmNhc2UgNTpjYXNlIDE6ZT1uLmNoaWxkLnN0YXRlTm9kZX10cnl7blYocixlKX1jYXRjaChlKXtpbShuLG4ucmV0dXJuLGUpfX1icmVhaztjYXNlIDI2OmE5KGUsbiksNTEyJnImJmFCKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMjc6Y2FzZSA1OmE5KGUsbiksbnVsbD09PXQmJjQmciYmYUsobiksNTEyJnImJmFCKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6ZGVmYXVsdDphOShlLG4pO2JyZWFrO2Nhc2UgMTM6YTkoZSxuKSw0JnImJmEzKGUsbik7YnJlYWs7Y2FzZSAyMjppZigwIT0oMSZuLm1vZGUpKXtpZighKGw9bnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZXx8YUQpKXt0PW51bGwhPT10JiZudWxsIT09dC5tZW1vaXplZFN0YXRlfHxhQTt2YXIgYT1hRCxvPWFBO2FEPWwsKGFBPXQpJiYhbz9mdW5jdGlvbiBlKHQsbixyKXtmb3Iocj1yJiYwIT0oODc3MiZuLnN1YnRyZWVGbGFncyksbj1uLmNoaWxkO251bGwhPT1uOyl7dmFyIGw9bi5hbHRlcm5hdGUsYT10LG89bixpPW8uZmxhZ3M7c3dpdGNoKG8udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmUoYSxvLHIpLGFIKG8sNCk7YnJlYWs7Y2FzZSAxOmlmKGUoYSxvLHIpLCJmdW5jdGlvbiI9PXR5cGVvZihhPW8uc3RhdGVOb2RlKS5jb21wb25lbnREaWRNb3VudCl0cnl7YS5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGUpe2ltKG8sby5yZXR1cm4sZSl9aWYobnVsbCE9PShsPW8udXBkYXRlUXVldWUpKXt2YXIgdT1sLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7aWYobnVsbCE9PXUpZm9yKGwuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcz1udWxsLGw9MDtsPHUubGVuZ3RoO2wrKyluQih1W2xdLGEpfXImJjY0JmkmJmFxKG8pLGFCKG8sby5yZXR1cm4pO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6ZShhLG8sciksciYmbnVsbD09PWwmJjQmaSYmYUsobyksYUIobyxvLnJldHVybik7YnJlYWs7Y2FzZSAxMjpkZWZhdWx0OmUoYSxvLHIpO2JyZWFrO2Nhc2UgMTM6ZShhLG8sciksciYmNCZpJiZhMyhhLG8pO2JyZWFrO2Nhc2UgMjI6bnVsbD09PW8ubWVtb2l6ZWRTdGF0ZSYmZShhLG8sciksYUIobyxvLnJldHVybil9bj1uLnNpYmxpbmd9fShlLG4sMCE9KDg3NzImbi5zdWJ0cmVlRmxhZ3MpKTphOShlLG4pLGFEPWEsYUE9b319ZWxzZSBhOShlLG4pOzUxMiZyJiYoIm1hbnVhbCI9PT1uLm1lbW9pemVkUHJvcHMubW9kZT9hQihuLG4ucmV0dXJuKTphVihuLG4ucmV0dXJuKSl9fWZ1bmN0aW9uIGFYKGUpe3JldHVybiA1PT09ZS50YWd8fDM9PT1lLnRhZ3x8MjY9PT1lLnRhZ3x8Mjc9PT1lLnRhZ3x8ND09PWUudGFnfWZ1bmN0aW9uIGFHKGUpe2U6Zm9yKDs7KXtmb3IoO251bGw9PT1lLnNpYmxpbmc7KXtpZihudWxsPT09ZS5yZXR1cm58fGFYKGUucmV0dXJuKSlyZXR1cm4gbnVsbDtlPWUucmV0dXJufWZvcihlLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nOzUhPT1lLnRhZyYmNiE9PWUudGFnJiYyNyE9PWUudGFnJiYxOCE9PWUudGFnOyl7aWYoMiZlLmZsYWdzfHxudWxsPT09ZS5jaGlsZHx8ND09PWUudGFnKWNvbnRpbnVlIGU7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGR9aWYoISgyJmUuZmxhZ3MpKXJldHVybiBlLnN0YXRlTm9kZX19ZnVuY3Rpb24gYVooZSx0LG4pe3ZhciByPWUudGFnO2lmKDU9PT1yfHw2PT09cillPWUuc3RhdGVOb2RlLHQ/bi5pbnNlcnRCZWZvcmUoZSx0KTpuLmFwcGVuZENoaWxkKGUpO2Vsc2UgaWYoNCE9PXImJjI3IT09ciYmbnVsbCE9PShlPWUuY2hpbGQpKWZvcihhWihlLHQsbiksZT1lLnNpYmxpbmc7bnVsbCE9PWU7KWFaKGUsdCxuKSxlPWUuc2libGluZ312YXIgYUo9bnVsbCxhMD0hMTtmdW5jdGlvbiBhMShlLHQsbil7Zm9yKG49bi5jaGlsZDtudWxsIT09bjspYTIoZSx0LG4pLG49bi5zaWJsaW5nfWZ1bmN0aW9uIGEyKGUsdCxuKXtpZihlYSYmImZ1bmN0aW9uIj09dHlwZW9mIGVhLm9uQ29tbWl0RmliZXJVbm1vdW50KXRyeXtlYS5vbkNvbW1pdEZpYmVyVW5tb3VudChlbCxuKX1jYXRjaChlKXt9c3dpdGNoKG4udGFnKXtjYXNlIDI2OmFBfHxhVihuLHQpLGExKGUsdCxuKSxuLm1lbW9pemVkU3RhdGU/bi5tZW1vaXplZFN0YXRlLmNvdW50LS06bi5zdGF0ZU5vZGUmJihuPW4uc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pO2JyZWFrO2Nhc2UgMjc6YUF8fGFWKG4sdCk7dmFyIHI9YUosbD1hMDtmb3IoYUo9bi5zdGF0ZU5vZGUsYTEoZSx0LG4pLGU9KG49bi5zdGF0ZU5vZGUpLmF0dHJpYnV0ZXM7ZS5sZW5ndGg7KW4ucmVtb3ZlQXR0cmlidXRlTm9kZShlWzBdKTtlRihuKSxhSj1yLGEwPWw7YnJlYWs7Y2FzZSA1OmFBfHxhVihuLHQpO2Nhc2UgNjpyPWFKLGw9YTAsYUo9bnVsbCxhMShlLHQsbiksYUo9cixhMD1sLG51bGwhPT1hSiYmKGEwPyhlPWFKLG49bi5zdGF0ZU5vZGUsOD09PWUubm9kZVR5cGU/ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pOmUucmVtb3ZlQ2hpbGQobikpOmFKLnJlbW92ZUNoaWxkKG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSAxODpudWxsIT09YUomJihhMD8oZT1hSixuPW4uc3RhdGVOb2RlLDg9PT1lLm5vZGVUeXBlP2N0KGUucGFyZW50Tm9kZSxuKToxPT09ZS5ub2RlVHlwZSYmY3QoZSxuKSx1TChlKSk6Y3QoYUosbi5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDQ6cj1hSixsPWEwLGFKPW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sYTA9ITAsYTEoZSx0LG4pLGFKPXIsYTA9bDticmVhaztjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6aWYoIWFBJiZudWxsIT09KHI9bi51cGRhdGVRdWV1ZSkmJm51bGwhPT0ocj1yLmxhc3RFZmZlY3QpKXtsPXI9ci5uZXh0O2Rve3ZhciBhPWwudGFnLG89bC5pbnN0LGk9by5kZXN0cm95O3ZvaWQgMCE9PWkmJigwIT0oMiZhKT8oby5kZXN0cm95PXZvaWQgMCxhUShuLHQsaSkpOjAhPSg0JmEpJiYoby5kZXN0cm95PXZvaWQgMCxhUShuLHQsaSkpKSxsPWwubmV4dH13aGlsZShsIT09cil9YTEoZSx0LG4pO2JyZWFrO2Nhc2UgMTppZighYUEmJihhVihuLHQpLCJmdW5jdGlvbiI9PXR5cGVvZihyPW4uc3RhdGVOb2RlKS5jb21wb25lbnRXaWxsVW5tb3VudCkpdHJ5e3IucHJvcHM9bi5tZW1vaXplZFByb3BzLHIuc3RhdGU9bi5tZW1vaXplZFN0YXRlLHIuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChlKXtpbShuLHQsZSl9YTEoZSx0LG4pO2JyZWFrO2Nhc2UgMjE6ZGVmYXVsdDphMShlLHQsbik7YnJlYWs7Y2FzZSAyMjphVihuLHQpLDEmbi5tb2RlPyhhQT0ocj1hQSl8fG51bGwhPT1uLm1lbW9pemVkU3RhdGUsYTEoZSx0LG4pLGFBPXIpOmExKGUsdCxuKX19ZnVuY3Rpb24gYTMoZSx0KXtpZihudWxsPT09dC5tZW1vaXplZFN0YXRlJiZudWxsIT09KGU9dC5hbHRlcm5hdGUpJiZudWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PShlPWUuZGVoeWRyYXRlZCkpdHJ5e3VMKGUpfWNhdGNoKGUpe2ltKHQsdC5yZXR1cm4sZSl9fWZ1bmN0aW9uIGE0KGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7c3dpdGNoKGUudGFnKXtjYXNlIDEzOmNhc2UgMTk6dmFyIHQ9ZS5zdGF0ZU5vZGU7cmV0dXJuIG51bGw9PT10JiYodD1lLnN0YXRlTm9kZT1uZXcgYUkpLHQ7Y2FzZSAyMjpyZXR1cm4gbnVsbD09PSh0PShlPWUuc3RhdGVOb2RlKS5fcmV0cnlDYWNoZSkmJih0PWUuX3JldHJ5Q2FjaGU9bmV3IGFJKSx0O2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0MzUsZS50YWcpKX19KGUpO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1pYi5iaW5kKG51bGwsZSx0KTtuLmhhcyh0KXx8KG4uYWRkKHQpLHQudGhlbihyLHIpKX0pfWZ1bmN0aW9uIGE2KGUsdCl7dmFyIG49dC5kZWxldGlvbnM7aWYobnVsbCE9PW4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl07dHJ5e3ZhciBhPXQsbz1hO2U6Zm9yKDtudWxsIT09bzspe3N3aXRjaChvLnRhZyl7Y2FzZSAyNzpjYXNlIDU6YUo9by5zdGF0ZU5vZGUsYTA9ITE7YnJlYWsgZTtjYXNlIDM6Y2FzZSA0OmFKPW8uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sYTA9ITA7YnJlYWsgZX1vPW8ucmV0dXJufWlmKG51bGw9PT1hSil0aHJvdyBFcnJvcihpKDE2MCkpO2EyKGUsYSxsKSxhSj1udWxsLGEwPSExO3ZhciB1PWwuYWx0ZXJuYXRlO251bGwhPT11JiYodS5yZXR1cm49bnVsbCksbC5yZXR1cm49bnVsbH1jYXRjaChlKXtpbShsLHQsZSl9fWlmKDEyODU0JnQuc3VidHJlZUZsYWdzKWZvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KWE1KHQsZSksdD10LnNpYmxpbmd9dmFyIGE4PW51bGw7ZnVuY3Rpb24gYTUoZSx0KXt2YXIgbj1lLmFsdGVybmF0ZSxyPWUuZmxhZ3M7c3dpdGNoKGUudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6aWYoYTYodCxlKSxhNyhlKSw0JnIpe3RyeXthaigzLGUsZS5yZXR1cm4pLGFXKDMsZSl9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX10cnl7YWooNSxlLGUucmV0dXJuKX1jYXRjaCh0KXtpbShlLGUucmV0dXJuLHQpfX1icmVhaztjYXNlIDE6YTYodCxlKSxhNyhlKSw1MTImciYmbnVsbCE9PW4mJmFWKG4sbi5yZXR1cm4pLDY0JnImJmFEJiZudWxsIT09KGU9ZS51cGRhdGVRdWV1ZSkmJm51bGwhPT0obj1lLmNhbGxiYWNrcykmJihyPWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyxlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M9bnVsbD09PXI/bjpyLmNvbmNhdChuKSk7YnJlYWs7Y2FzZSAyNjp2YXIgbD1hODtpZihhNih0LGUpLGE3KGUpLDUxMiZyJiZudWxsIT09biYmYVYobixuLnJldHVybiksNCZyKXtpZih0PW51bGwhPT1uP24ubWVtb2l6ZWRTdGF0ZTpudWxsLHI9ZS5tZW1vaXplZFN0YXRlLG51bGw9PT1uKXtpZihudWxsPT09cil7aWYobnVsbD09PWUuc3RhdGVOb2RlKXtlOntuPWUudHlwZSxyPWUubWVtb2l6ZWRQcm9wcyx0PWwub3duZXJEb2N1bWVudHx8bDt0OnN3aXRjaChuKXtjYXNlInRpdGxlIjooIShsPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxlIilbMF0pfHxsW2VUXXx8bFtlRV18fCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI9PT1sLm5hbWVzcGFjZVVSSXx8bC5oYXNBdHRyaWJ1dGUoIml0ZW1wcm9wIikpJiYobD10LmNyZWF0ZUVsZW1lbnQobiksdC5oZWFkLmluc2VydEJlZm9yZShsLHQucXVlcnlTZWxlY3RvcigiaGVhZCA+IHRpdGxlIikpKSxzRyhsLG4sciksbFtlRV09ZSxlSShsKSxuPWw7YnJlYWsgZTtjYXNlImxpbmsiOnZhciBhPWNFKCJsaW5rIiwiaHJlZiIsdCkuZ2V0KG4rKHIuaHJlZnx8IiIpKTtpZihhKXtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZigobD1hW29dKS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PShudWxsPT1yLmhyZWY/bnVsbDpyLmhyZWYpJiZsLmdldEF0dHJpYnV0ZSgicmVsIik9PT0obnVsbD09ci5yZWw/bnVsbDpyLnJlbCkmJmwuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpPT09KG51bGw9PXIudGl0bGU/bnVsbDpyLnRpdGxlKSYmbC5nZXRBdHRyaWJ1dGUoImNyb3Nzb3JpZ2luIik9PT0obnVsbD09ci5jcm9zc09yaWdpbj9udWxsOnIuY3Jvc3NPcmlnaW4pKXthLnNwbGljZShvLDEpO2JyZWFrIHR9fXNHKGw9dC5jcmVhdGVFbGVtZW50KG4pLG4sciksdC5oZWFkLmFwcGVuZENoaWxkKGwpO2JyZWFrO2Nhc2UibWV0YSI6aWYoYT1jRSgibWV0YSIsImNvbnRlbnQiLHQpLmdldChuKyhyLmNvbnRlbnR8fCIiKSkpe2ZvcihvPTA7bzxhLmxlbmd0aDtvKyspaWYoKGw9YVtvXSkuZ2V0QXR0cmlidXRlKCJjb250ZW50Iik9PT0obnVsbD09ci5jb250ZW50P251bGw6IiIrci5jb250ZW50KSYmbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PShudWxsPT1yLm5hbWU/bnVsbDpyLm5hbWUpJiZsLmdldEF0dHJpYnV0ZSgicHJvcGVydHkiKT09PShudWxsPT1yLnByb3BlcnR5P251bGw6ci5wcm9wZXJ0eSkmJmwuZ2V0QXR0cmlidXRlKCJodHRwLWVxdWl2Iik9PT0obnVsbD09ci5odHRwRXF1aXY/bnVsbDpyLmh0dHBFcXVpdikmJmwuZ2V0QXR0cmlidXRlKCJjaGFyc2V0Iik9PT0obnVsbD09ci5jaGFyU2V0P251bGw6ci5jaGFyU2V0KSl7YS5zcGxpY2UobywxKTticmVhayB0fX1zRyhsPXQuY3JlYXRlRWxlbWVudChuKSxuLHIpLHQuaGVhZC5hcHBlbmRDaGlsZChsKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGkoNDY4LG4pKX1sW2VFXT1lLGVJKGwpLG49bH1lLnN0YXRlTm9kZT1ufWVsc2UgY3gobCxlLnR5cGUsZS5zdGF0ZU5vZGUpfWVsc2UgZS5zdGF0ZU5vZGU9Y2IobCxyLGUubWVtb2l6ZWRQcm9wcyl9ZWxzZSBpZih0IT09ciludWxsPT09dD9udWxsIT09bi5zdGF0ZU5vZGUmJihuPW4uc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pOnQuY291bnQtLSxudWxsPT09cj9jeChsLGUudHlwZSxlLnN0YXRlTm9kZSk6Y2IobCxyLGUubWVtb2l6ZWRQcm9wcyk7ZWxzZSBpZihudWxsPT09ciYmbnVsbCE9PWUuc3RhdGVOb2RlKXtlLnVwZGF0ZVF1ZXVlPW51bGw7dHJ5e3ZhciB1PWUuc3RhdGVOb2RlLHM9ZS5tZW1vaXplZFByb3BzO3NaKHUsZS50eXBlLG4ubWVtb2l6ZWRQcm9wcyxzKSx1W2V4XT1zfWNhdGNoKHQpe2ltKGUsZS5yZXR1cm4sdCl9fX1icmVhaztjYXNlIDI3OmlmKDQmciYmbnVsbD09PWUuYWx0ZXJuYXRlKXtmb3IobD1lLnN0YXRlTm9kZSxhPWUubWVtb2l6ZWRQcm9wcyxvPWwuZmlyc3RDaGlsZDtvOyl7dmFyIGM9by5uZXh0U2libGluZyxmPW8ubm9kZU5hbWU7b1tlVF18fCJIRUFEIj09PWZ8fCJCT0RZIj09PWZ8fCJTQ1JJUFQiPT09Znx8IlNUWUxFIj09PWZ8fCJMSU5LIj09PWYmJiJzdHlsZXNoZWV0Ij09PW8ucmVsLnRvTG93ZXJDYXNlKCl8fGwucmVtb3ZlQ2hpbGQobyksbz1jfWZvcihvPWUudHlwZSxjPWwuYXR0cmlidXRlcztjLmxlbmd0aDspbC5yZW1vdmVBdHRyaWJ1dGVOb2RlKGNbMF0pO3NHKGwsbyxhKSxsW2VFXT1lLGxbZXhdPWF9Y2FzZSA1OmlmKGE2KHQsZSksYTcoZSksNTEyJnImJm51bGwhPT1uJiZhVihuLG4ucmV0dXJuKSwzMiZlLmZsYWdzKXt0PWUuc3RhdGVOb2RlO3RyeXt0dSh0LCIiKX1jYXRjaCh0KXtpbShlLGUucmV0dXJuLHQpfX1pZig0JnImJm51bGwhPShyPWUuc3RhdGVOb2RlKSl7dD1lLm1lbW9pemVkUHJvcHMsbj1udWxsIT09bj9uLm1lbW9pemVkUHJvcHM6dCxsPWUudHlwZSxlLnVwZGF0ZVF1ZXVlPW51bGw7dHJ5e3NaKHIsbCxuLHQpLHJbZXhdPXR9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19YnJlYWs7Y2FzZSA2OmlmKGE2KHQsZSksYTcoZSksNCZyKXtpZihudWxsPT09ZS5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoaSgxNjIpKTtuPWUuc3RhdGVOb2RlLHI9ZS5tZW1vaXplZFByb3BzO3RyeXtuLm5vZGVWYWx1ZT1yfWNhdGNoKHQpe2ltKGUsZS5yZXR1cm4sdCl9fWJyZWFrO2Nhc2UgMzppZihjQz1udWxsLGw9YTgsYTg9Y2YodC5jb250YWluZXJJbmZvKSxhNih0LGUpLGE4PWwsYTcoZSksNCZyJiZudWxsIT09biYmbi5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7dUwodC5jb250YWluZXJJbmZvKX1jYXRjaCh0KXtpbShlLGUucmV0dXJuLHQpfWJyZWFrO2Nhc2UgNDpuPWE4LGE4PWNmKGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLGE2KHQsZSksYTcoZSksYTg9bjticmVhaztjYXNlIDEzOmE2KHQsZSksYTcoZSksODE5MiZlLmNoaWxkLmZsYWdzJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlIT0obnVsbCE9PW4mJm51bGwhPT1uLm1lbW9pemVkU3RhdGUpJiYob0E9WSgpKSw0JnImJm51bGwhPT0obj1lLnVwZGF0ZVF1ZXVlKSYmKGUudXBkYXRlUXVldWU9bnVsbCxhNChlLG4pKTticmVhaztjYXNlIDIyOmlmKDUxMiZyJiZudWxsIT09biYmYVYobixuLnJldHVybiksdT1udWxsIT09ZS5tZW1vaXplZFN0YXRlLHM9bnVsbCE9PW4mJm51bGwhPT1uLm1lbW9pemVkU3RhdGUsMSZlLm1vZGUpe3ZhciBkPWFELHA9YUE7YUQ9ZHx8dSxhQT1wfHxzLGE2KHQsZSksYUE9cCxhRD1kfWVsc2UgYTYodCxlKTtpZihhNyhlKSwodD1lLnN0YXRlTm9kZSkuX2N1cnJlbnQ9ZSx0Ll92aXNpYmlsaXR5Jj0tMyx0Ll92aXNpYmlsaXR5fD0yJnQuX3BlbmRpbmdWaXNpYmlsaXR5LDgxOTImciYmKHQuX3Zpc2liaWxpdHk9dT8tMiZ0Ll92aXNpYmlsaXR5OjF8dC5fdmlzaWJpbGl0eSx1JiYodD1hRHx8YUEsbnVsbD09PW58fHN8fHR8fDAhPSgxJmUubW9kZSkmJmZ1bmN0aW9uIGUodCl7Zm9yKHQ9dC5jaGlsZDtudWxsIT09dDspe3ZhciBuPXQ7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6YWooNCxuLG4ucmV0dXJuKSxlKG4pO2JyZWFrO2Nhc2UgMTphVihuLG4ucmV0dXJuKTt2YXIgcj1uLnN0YXRlTm9kZTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci5jb21wb25lbnRXaWxsVW5tb3VudCl7dmFyIGw9bi5yZXR1cm47dHJ5e3IucHJvcHM9bi5tZW1vaXplZFByb3BzLHIuc3RhdGU9bi5tZW1vaXplZFN0YXRlLHIuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChlKXtpbShuLGwsZSl9fWUobik7YnJlYWs7Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNTphVihuLG4ucmV0dXJuKSxlKG4pO2JyZWFrO2Nhc2UgMjI6YVYobixuLnJldHVybiksbnVsbD09PW4ubWVtb2l6ZWRTdGF0ZSYmZShuKTticmVhaztkZWZhdWx0OmUobil9dD10LnNpYmxpbmd9fShlKSksbnVsbD09PWUubWVtb2l6ZWRQcm9wc3x8Im1hbnVhbCIhPT1lLm1lbW9pemVkUHJvcHMubW9kZSkpZTpmb3Iobj1udWxsLHQ9ZTs7KXtpZig1PT09dC50YWd8fDI2PT09dC50YWd8fDI3PT09dC50YWcpe2lmKG51bGw9PT1uKXtuPXQ7dHJ5e2w9dC5zdGF0ZU5vZGUsdT8oYT1sLnN0eWxlLCJmdW5jdGlvbiI9PXR5cGVvZiBhLnNldFByb3BlcnR5P2Euc2V0UHJvcGVydHkoImRpc3BsYXkiLCJub25lIiwiaW1wb3J0YW50Iik6YS5kaXNwbGF5PSJub25lIik6KG89dC5zdGF0ZU5vZGUsZj1udWxsIT0oYz10Lm1lbW9pemVkUHJvcHMuc3R5bGUpJiZjLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/Yy5kaXNwbGF5Om51bGwsby5zdHlsZS5kaXNwbGF5PW51bGw9PWZ8fCJib29sZWFuIj09dHlwZW9mIGY/IiI6KCIiK2YpLnRyaW0oKSl9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19fWVsc2UgaWYoNj09PXQudGFnKXtpZihudWxsPT09bil0cnl7dC5zdGF0ZU5vZGUubm9kZVZhbHVlPXU/IiI6dC5tZW1vaXplZFByb3BzfWNhdGNoKHQpe2ltKGUsZS5yZXR1cm4sdCl9fWVsc2UgaWYoKDIyIT09dC50YWcmJjIzIT09dC50YWd8fG51bGw9PT10Lm1lbW9pemVkU3RhdGV8fHQ9PT1lKSYmbnVsbCE9PXQuY2hpbGQpe3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfWlmKHQ9PT1lKWJyZWFrO2Zvcig7bnVsbD09PXQuc2libGluZzspe2lmKG51bGw9PT10LnJldHVybnx8dC5yZXR1cm49PT1lKWJyZWFrIGU7bj09PXQmJihuPW51bGwpLHQ9dC5yZXR1cm59bj09PXQmJihuPW51bGwpLHQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9NCZyJiZudWxsIT09KG49ZS51cGRhdGVRdWV1ZSkmJm51bGwhPT0ocj1uLnJldHJ5UXVldWUpJiYobi5yZXRyeVF1ZXVlPW51bGwsYTQoZSxyKSk7YnJlYWs7Y2FzZSAxOTphNih0LGUpLGE3KGUpLDQmciYmbnVsbCE9PShuPWUudXBkYXRlUXVldWUpJiYoZS51cGRhdGVRdWV1ZT1udWxsLGE0KGUsbikpO2JyZWFrO2Nhc2UgMjE6YnJlYWs7ZGVmYXVsdDphNih0LGUpLGE3KGUpfX1mdW5jdGlvbiBhNyhlKXt2YXIgdD1lLmZsYWdzO2lmKDImdCl7dHJ5e2lmKDI3IT09ZS50YWcpe3Q6e2Zvcih2YXIgbj1lLnJldHVybjtudWxsIT09bjspe2lmKGFYKG4pKXt2YXIgcj1uO2JyZWFrIHR9bj1uLnJldHVybn10aHJvdyBFcnJvcihpKDE2MCkpfXN3aXRjaChyLnRhZyl7Y2FzZSAyNzp2YXIgbD1yLnN0YXRlTm9kZSxhPWFHKGUpO2FaKGUsYSxsKTticmVhaztjYXNlIDU6dmFyIG89ci5zdGF0ZU5vZGU7MzImci5mbGFncyYmKHR1KG8sIiIpLHIuZmxhZ3MmPS0zMyk7dmFyIHU9YUcoZSk7YVooZSx1LG8pO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIHM9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxjPWFHKGUpOyFmdW5jdGlvbiBlKHQsbixyKXt2YXIgbD10LnRhZztpZig1PT09bHx8Nj09PWwpdD10LnN0YXRlTm9kZSxuPzg9PT1yLm5vZGVUeXBlP3IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxuKTpyLmluc2VydEJlZm9yZSh0LG4pOig4PT09ci5ub2RlVHlwZT8obj1yLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZSh0LHIpOihuPXIpLmFwcGVuZENoaWxkKHQpLG51bGwhPShyPXIuX3JlYWN0Um9vdENvbnRhaW5lcil8fG51bGwhPT1uLm9uY2xpY2t8fChuLm9uY2xpY2s9c0spKTtlbHNlIGlmKDQhPT1sJiYyNyE9PWwmJm51bGwhPT0odD10LmNoaWxkKSlmb3IoZSh0LG4sciksdD10LnNpYmxpbmc7bnVsbCE9PXQ7KWUodCxuLHIpLHQ9dC5zaWJsaW5nfShlLGMscyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDE2MSkpfX19Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX1lLmZsYWdzJj0tM300MDk2JnQmJihlLmZsYWdzJj0tNDA5Nyl9ZnVuY3Rpb24gYTkoZSx0KXtpZig4NzcyJnQuc3VidHJlZUZsYWdzKWZvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KWFZKGUsdC5hbHRlcm5hdGUsdCksdD10LnNpYmxpbmd9ZnVuY3Rpb24gb2UoZSx0KXt0cnl7YVcodCxlKX1jYXRjaCh0KXtpbShlLGUucmV0dXJuLHQpfX1mdW5jdGlvbiBvdChlLHQpe3ZhciBuPW51bGw7bnVsbCE9PWUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYobj1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGU9bnVsbCxudWxsIT09dC5tZW1vaXplZFN0YXRlJiZudWxsIT09dC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKGU9dC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxlIT09biYmKG51bGwhPWUmJmUucmVmQ291bnQrKyxudWxsIT1uJiZhbShuKSl9ZnVuY3Rpb24gb24oZSx0KXtlPW51bGwsbnVsbCE9PXQuYWx0ZXJuYXRlJiYoZT10LmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSwodD10Lm1lbW9pemVkU3RhdGUuY2FjaGUpIT09ZSYmKHQucmVmQ291bnQrKyxudWxsIT1lJiZhbShlKSl9ZnVuY3Rpb24gb3IoZSx0LG4scil7aWYoMTAyNTYmdC5zdWJ0cmVlRmxhZ3MpZm9yKHQ9dC5jaGlsZDtudWxsIT09dDspb2woZSx0LG4sciksdD10LnNpYmxpbmd9ZnVuY3Rpb24gb2woZSx0LG4scil7dmFyIGw9dC5mbGFncztzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6b3IoZSx0LG4sciksMjA0OCZsJiZvZSh0LDkpO2JyZWFrO2Nhc2UgMzpvcihlLHQsbixyKSwyMDQ4JmwmJihlPW51bGwsbnVsbCE9PXQuYWx0ZXJuYXRlJiYoZT10LmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSwodD10Lm1lbW9pemVkU3RhdGUuY2FjaGUpIT09ZSYmKHQucmVmQ291bnQrKyxudWxsIT1lJiZhbShlKSkpO2JyZWFrO2Nhc2UgMjM6YnJlYWs7Y2FzZSAyMjp2YXIgYT10LnN0YXRlTm9kZTtudWxsIT09dC5tZW1vaXplZFN0YXRlPzQmYS5fdmlzaWJpbGl0eT9vcihlLHQsbixyKToxJnQubW9kZT9vYShlLHQpOihhLl92aXNpYmlsaXR5fD00LG9yKGUsdCxuLHIpKTo0JmEuX3Zpc2liaWxpdHk/b3IoZSx0LG4scik6KGEuX3Zpc2liaWxpdHl8PTQsZnVuY3Rpb24gZSh0LG4scixsLGEpe2ZvcihhPWEmJjAhPSgxMDI1NiZuLnN1YnRyZWVGbGFncyksbj1uLmNoaWxkO251bGwhPT1uOyl7dmFyIG89bixpPW8uZmxhZ3M7c3dpdGNoKG8udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmUodCxvLHIsbCxhKSxvZShvLDgpO2JyZWFrO2Nhc2UgMjM6YnJlYWs7Y2FzZSAyMjp2YXIgdT1vLnN0YXRlTm9kZTtudWxsIT09by5tZW1vaXplZFN0YXRlPzQmdS5fdmlzaWJpbGl0eT9lKHQsbyxyLGwsYSk6MSZvLm1vZGU/b2EodCxvKToodS5fdmlzaWJpbGl0eXw9NCxlKHQsbyxyLGwsYSkpOih1Ll92aXNpYmlsaXR5fD00LGUodCxvLHIsbCxhKSksYSYmMjA0OCZpJiZvdChvLmFsdGVybmF0ZSxvKTticmVhaztjYXNlIDI0OmUodCxvLHIsbCxhKSxhJiYyMDQ4JmkmJm9uKG8uYWx0ZXJuYXRlLG8pO2JyZWFrO2RlZmF1bHQ6ZSh0LG8scixsLGEpfW49bi5zaWJsaW5nfX0oZSx0LG4sciwwIT0oMTAyNTYmdC5zdWJ0cmVlRmxhZ3MpKSksMjA0OCZsJiZvdCh0LmFsdGVybmF0ZSx0KTticmVhaztjYXNlIDI0Om9yKGUsdCxuLHIpLDIwNDgmbCYmb24odC5hbHRlcm5hdGUsdCk7YnJlYWs7ZGVmYXVsdDpvcihlLHQsbixyKX19ZnVuY3Rpb24gb2EoZSx0KXtpZigxMDI1NiZ0LnN1YnRyZWVGbGFncylmb3IodD10LmNoaWxkO251bGwhPT10Oyl7dmFyIG49dCxyPW4uZmxhZ3M7c3dpdGNoKG4udGFnKXtjYXNlIDIyOm9hKGUsbiksMjA0OCZyJiZvdChuLmFsdGVybmF0ZSxuKTticmVhaztjYXNlIDI0Om9hKGUsbiksMjA0OCZyJiZvbihuLmFsdGVybmF0ZSxuKTticmVhaztkZWZhdWx0Om9hKGUsbil9dD10LnNpYmxpbmd9fXZhciBvbz04MTkyO2Z1bmN0aW9uIG9pKGUpe2lmKGUuc3VidHJlZUZsYWdzJm9vKWZvcihlPWUuY2hpbGQ7bnVsbCE9PWU7KW91KGUpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIG91KGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAyNjpvaShlKSxlLmZsYWdzJm9vJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlJiZmdW5jdGlvbihlLHQsbil7aWYobnVsbD09PWN6KXRocm93IEVycm9yKGkoNDc1KSk7dmFyIHI9Y3o7aWYoInN0eWxlc2hlZXQiPT09dC50eXBlJiYoInN0cmluZyIhPXR5cGVvZiBuLm1lZGlhfHwhMSE9PW1hdGNoTWVkaWEobi5tZWRpYSkubWF0Y2hlcykmJjA9PSg0JnQuc3RhdGUubG9hZGluZykpe2lmKG51bGw9PT10Lmluc3RhbmNlKXt2YXIgbD1jbShuLmhyZWYpLGE9ZS5xdWVyeVNlbGVjdG9yKGNoKGwpKTtpZihhKXtudWxsIT09KGU9YS5fcCkmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudGhlbiYmKHIuY291bnQrKyxyPWNOLmJpbmQociksZS50aGVuKHIscikpLHQuc3RhdGUubG9hZGluZ3w9NCx0Lmluc3RhbmNlPWEsZUkoYSk7cmV0dXJufWE9ZS5vd25lckRvY3VtZW50fHxlLG49Y2cobiksKGw9Y3MuZ2V0KGwpKSYmY3cobixsKSxlSShhPWEuY3JlYXRlRWxlbWVudCgibGluayIpKTt2YXIgbz1hO28uX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtvLm9ubG9hZD1lLG8ub25lcnJvcj10fSksc0coYSwibGluayIsbiksdC5pbnN0YW5jZT1hfW51bGw9PT1yLnN0eWxlc2hlZXRzJiYoci5zdHlsZXNoZWV0cz1uZXcgTWFwKSxyLnN0eWxlc2hlZXRzLnNldCh0LGUpLChlPXQuc3RhdGUucHJlbG9hZCkmJjA9PSgzJnQuc3RhdGUubG9hZGluZykmJihyLmNvdW50KyssdD1jTi5iaW5kKHIpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdCksZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdCkpfX0oYTgsZS5tZW1vaXplZFN0YXRlLGUubWVtb2l6ZWRQcm9wcyk7YnJlYWs7Y2FzZSA1OmRlZmF1bHQ6b2koZSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgdD1hODthOD1jZihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxvaShlKSxhOD10O2JyZWFrO2Nhc2UgMjI6bnVsbD09PWUubWVtb2l6ZWRTdGF0ZSYmKG51bGwhPT0odD1lLmFsdGVybmF0ZSkmJm51bGwhPT10Lm1lbW9pemVkU3RhdGU/KHQ9b28sb289MTY3NzcyMTYsb2koZSksb289dCk6b2koZSkpfX1mdW5jdGlvbiBvcyhlKXt2YXIgdD1lLmFsdGVybmF0ZTtpZihudWxsIT09dCYmbnVsbCE9PShlPXQuY2hpbGQpKXt0LmNoaWxkPW51bGw7ZG8gdD1lLnNpYmxpbmcsZS5zaWJsaW5nPW51bGwsZT10O3doaWxlKG51bGwhPT1lKX19ZnVuY3Rpb24gb2MoZSl7dmFyIHQ9ZS5kZWxldGlvbnM7aWYoMCE9KDE2JmUuZmxhZ3MpKXtpZihudWxsIT09dClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTthVT1yLG9kKHIsZSl9b3MoZSl9aWYoMTAyNTYmZS5zdWJ0cmVlRmxhZ3MpZm9yKGU9ZS5jaGlsZDtudWxsIT09ZTspb2YoZSksZT1lLnNpYmxpbmd9ZnVuY3Rpb24gb2YoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1Om9jKGUpLDIwNDgmZS5mbGFncyYmYWooOSxlLGUucmV0dXJuKTticmVhaztjYXNlIDIyOnZhciB0PWUuc3RhdGVOb2RlO251bGwhPT1lLm1lbW9pemVkU3RhdGUmJjQmdC5fdmlzaWJpbGl0eSYmKG51bGw9PT1lLnJldHVybnx8MTMhPT1lLnJldHVybi50YWcpPyh0Ll92aXNpYmlsaXR5Jj0tNSxmdW5jdGlvbiBlKHQpe3ZhciBuPXQuZGVsZXRpb25zO2lmKDAhPSgxNiZ0LmZsYWdzKSl7aWYobnVsbCE9PW4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl07YVU9bCxvZChsLHQpfW9zKHQpfWZvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KXtzd2l0Y2goKG49dCkudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmFqKDgsbixuLnJldHVybiksZShuKTticmVhaztjYXNlIDIyOjQmKHI9bi5zdGF0ZU5vZGUpLl92aXNpYmlsaXR5JiYoci5fdmlzaWJpbGl0eSY9LTUsZShuKSk7YnJlYWs7ZGVmYXVsdDplKG4pfXQ9dC5zaWJsaW5nfX0oZSkpOm9jKGUpO2JyZWFrO2RlZmF1bHQ6b2MoZSl9fWZ1bmN0aW9uIG9kKGUsdCl7Zm9yKDtudWxsIT09YVU7KXt2YXIgbj1hVTtzd2l0Y2gobi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6YWooOCxuLHQpO2JyZWFrO2Nhc2UgMjM6Y2FzZSAyMjppZihudWxsIT09bi5tZW1vaXplZFN0YXRlJiZudWxsIT09bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCl7dmFyIHI9bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sO251bGwhPXImJnIucmVmQ291bnQrK31icmVhaztjYXNlIDI0OmFtKG4ubWVtb2l6ZWRTdGF0ZS5jYWNoZSl9aWYobnVsbCE9PShyPW4uY2hpbGQpKXIucmV0dXJuPW4sYVU9cjtlbHNlIGZvcihuPWU7bnVsbCE9PWFVOyl7dmFyIGw9KHI9YVUpLnNpYmxpbmcsYT1yLnJldHVybjtpZighZnVuY3Rpb24gZSh0KXt2YXIgbj10LmFsdGVybmF0ZTtudWxsIT09biYmKHQuYWx0ZXJuYXRlPW51bGwsZShuKSksdC5jaGlsZD1udWxsLHQuZGVsZXRpb25zPW51bGwsdC5zaWJsaW5nPW51bGwsNT09PXQudGFnJiZudWxsIT09KG49dC5zdGF0ZU5vZGUpJiZlRihuKSx0LnN0YXRlTm9kZT1udWxsLHQucmV0dXJuPW51bGwsdC5kZXBlbmRlbmNpZXM9bnVsbCx0Lm1lbW9pemVkUHJvcHM9bnVsbCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnBlbmRpbmdQcm9wcz1udWxsLHQuc3RhdGVOb2RlPW51bGwsdC51cGRhdGVRdWV1ZT1udWxsfShyKSxyPT09bil7YVU9bnVsbDticmVha31pZihudWxsIT09bCl7bC5yZXR1cm49YSxhVT1sO2JyZWFrfWFVPWF9fX12YXIgb3A9e2dldENhY2hlU2lnbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIGFvKGFkKS5jb250cm9sbGVyLnNpZ25hbH0sZ2V0Q2FjaGVGb3JUeXBlOmZ1bmN0aW9uKGUpe3ZhciB0PWFvKGFkKSxuPXQuZGF0YS5nZXQoZSk7cmV0dXJuIHZvaWQgMD09PW4mJihuPWUoKSx0LmRhdGEuc2V0KGUsbikpLG59fSxvbT0iZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcCxvaD1zLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsb2c9cy5SZWFjdEN1cnJlbnRDYWNoZSxveT1zLlJlYWN0Q3VycmVudE93bmVyLG92PXMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsb2I9MCxvaz1udWxsLG93PW51bGwsb1M9MCxvQz0wLG9FPW51bGwsb3g9ITEsb3o9MCxvUD0wLG9OPW51bGwsb189MCxvTD0wLG9UPTAsb0Y9MCxvTT1udWxsLG9PPW51bGwsb1I9ITEsb0Q9ITEsb0E9MCxvST0xLzAsb1U9bnVsbCxvQj0hMSxvVj1udWxsLG9RPW51bGwsbyQ9ITEsb2o9bnVsbCxvVz0wLG9IPTAsb3E9bnVsbCxvSz0wLG9ZPW51bGw7ZnVuY3Rpb24gb1goZSl7cmV0dXJuIDA9PSgxJmUubW9kZSk/MjowIT0oMiZvYikmJjAhPT1vUz9vUyYtb1M6bnVsbCE9PWFnKCk/MCE9PShlPW5QKT9lOm5FKCk6MCE9PShlPWVrKT9lOmU9dm9pZCAwPT09KGU9d2luZG93LmV2ZW50KT8zMjp1VShlLnR5cGUpfWZ1bmN0aW9uIG9HKGUsdCxuKXsoZT09PW9rJiYyPT09b0N8fG51bGwhPT1lLmNhbmNlbFBlbmRpbmdDb21taXQpJiYobzUoZSwwKSxvMyhlLG9TLG9GKSksbzIoZSxuKSwoMD09KDImb2IpfHxlIT09b2spJiYoZT09PW9rJiYoMD09KDImb2IpJiYob0x8PW4pLDQ9PT1vUCYmbzMoZSxvUyxvRikpLG52KGUpLDI9PT1uJiYwPT09b2ImJjA9PSgxJnQubW9kZSkmJihvST1ZKCkrNTAwLG5iKCEwKSkpfWZ1bmN0aW9uIG9aKGUsdCl7aWYoMCE9KDYmb2IpKXRocm93IEVycm9yKGkoMzI3KSk7dmFyIG49ZS5jYWxsYmFja05vZGU7aWYoaWQoKSYmZS5jYWxsYmFja05vZGUhPT1uKXJldHVybiBudWxsO3ZhciByPWVwKGUsZT09PW9rP29TOjApO2lmKDA9PT1yKXJldHVybiBudWxsO3ZhciBsPTA9PSg2MCZyKSYmMD09KHImZS5leHBpcmVkTGFuZXMpJiYhdDtpZigwIT09KHQ9bD9mdW5jdGlvbihlLHQpe3ZhciBuPW9iO29ifD0yO3ZhciByPWllKCksbD1pdCgpOyhvayE9PWV8fG9TIT09dCkmJihvVT1udWxsLG9JPVkoKSs1MDAsbzUoZSx0KSk7ZTpmb3IoOzspdHJ5e2lmKDAhPT1vQyYmbnVsbCE9PW93KXt0PW93O3ZhciBhPW9FO3Q6c3dpdGNoKG9DKXtjYXNlIDE6Y2FzZSA2Om9DPTAsb0U9bnVsbCxpaShlLHQsYSk7YnJlYWs7Y2FzZSAyOmlmKG5IKGEpKXtvQz0wLG9FPW51bGwsaW8odCk7YnJlYWt9dD1mdW5jdGlvbigpezI9PT1vQyYmb2s9PT1lJiYob0M9NyksbnYoZSl9LGEudGhlbih0LHQpO2JyZWFrIGU7Y2FzZSAzOm9DPTc7YnJlYWsgZTtjYXNlIDQ6b0M9NTticmVhayBlO2Nhc2UgNzpuSChhKT8ob0M9MCxvRT1udWxsLGlvKHQpKToob0M9MCxvRT1udWxsLGlpKGUsdCxhKSk7YnJlYWs7Y2FzZSA1OnN3aXRjaChvdy50YWcpe2Nhc2UgNTpjYXNlIDI2OmNhc2UgMjc6dD1vdyxvQz0wLG9FPW51bGw7dmFyIG89dC5zaWJsaW5nO2lmKG51bGwhPT1vKW93PW87ZWxzZXt2YXIgdT10LnJldHVybjtudWxsIT09dT8ob3c9dSxpdSh1KSk6b3c9bnVsbH1icmVhayB0fW9DPTAsb0U9bnVsbCxpaShlLHQsYSk7YnJlYWs7Y2FzZSA4Om84KCksb1A9NjticmVhayBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NjIpKX19IWZ1bmN0aW9uKCl7Zm9yKDtudWxsIT09b3cmJiFxKCk7KWlhKG93KX0oKTticmVha31jYXRjaCh0KXtvNyhlLHQpfXJldHVybihhZSgpLG9oLmN1cnJlbnQ9cixvZy5jdXJyZW50PWwsb2I9bixudWxsIT09b3cpPzA6KG9rPW51bGwsb1M9MCxubygpLG9QKX0oZSxyKTppbChlLHIpKSlmb3IodmFyIGE9bDs7KXtpZig2PT09dClvMyhlLHIsMCk7ZWxzZXtpZihsPWUuY3VycmVudC5hbHRlcm5hdGUsYSYmIWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lOzspe2lmKDE2Mzg0JnQuZmxhZ3Mpe3ZhciBuPXQudXBkYXRlUXVldWU7aWYobnVsbCE9PW4mJm51bGwhPT0obj1uLnN0b3JlcykpZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl0sYT1sLmdldFNuYXBzaG90O2w9bC52YWx1ZTt0cnl7aWYoIXREKGEoKSxsKSlyZXR1cm4hMX1jYXRjaChlKXtyZXR1cm4hMX19fWlmKG49dC5jaGlsZCwxNjM4NCZ0LnN1YnRyZWVGbGFncyYmbnVsbCE9PW4pbi5yZXR1cm49dCx0PW47ZWxzZXtpZih0PT09ZSlicmVhaztmb3IoO251bGw9PT10LnNpYmxpbmc7KXtpZihudWxsPT09dC5yZXR1cm58fHQucmV0dXJuPT09ZSlyZXR1cm4hMDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9fXJldHVybiEwfShsKSl7dD1pbChlLHIpLGE9ITE7Y29udGludWV9aWYoMj09PXQpe3ZhciBvPWVtKGUsYT1yKTswIT09byYmKHI9byx0PW9KKGUsYSxvKSl9aWYoMT09PXQpdGhyb3cgbj1vTixvNShlLDApLG8zKGUsciwwKSxudihlKSxuO2UuZmluaXNoZWRXb3JrPWwsZS5maW5pc2hlZExhbmVzPXI7ZTp7c3dpdGNoKGE9ZSx0KXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKGkoMzQ1KSk7Y2FzZSA0OmlmKCg0MTk0MTc2JnIpPT09cil7bzMoYSxyLG9GKTticmVhayBlfWJyZWFrO2Nhc2UgMjpjYXNlIDM6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSgzMjkpKX1pZigoNjI5MTQ1NjAmcik9PT1yJiYxMDwodD1vQSszMDAtWSgpKSl7aWYobzMoYSxyLG9GKSwwIT09ZXAoYSwwKSlicmVhayBlO2EudGltZW91dEhhbmRsZT1zOChvMS5iaW5kKG51bGwsYSxsLG9PLG9VLG9SLHIsb0YpLHQpO2JyZWFrIGV9bzEoYSxsLG9PLG9VLG9SLHIsb0YpfX1icmVha31yZXR1cm4gbnYoZSksblMoZSxZKCkpLGU9ZS5jYWxsYmFja05vZGU9PT1uP29aLmJpbmQobnVsbCxlKTpudWxsfWZ1bmN0aW9uIG9KKGUsdCxuKXt2YXIgcj1vTSxsPWUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZDtpZihsJiYobzUoZSxuKS5mbGFnc3w9MjU2KSwyIT09KG49aWwoZSxuKSkpe2lmKG94JiYhbClyZXR1cm4gZS5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lc3w9dCxvTHw9dCw0O2U9b08sb089cixudWxsIT09ZSYmbzAoZSl9cmV0dXJuIG59ZnVuY3Rpb24gbzAoZSl7bnVsbD09PW9PP29PPWU6b08ucHVzaC5hcHBseShvTyxlKX1mdW5jdGlvbiBvMShlLHQsbixyLGwsYSxvKXtpZigwPT0oNDImYSkmJihjej17c3R5bGVzaGVldHM6bnVsbCxjb3VudDowLHVuc3VzcGVuZDpjUH0sb3UodCksbnVsbCE9PSh0PWZ1bmN0aW9uKCl7aWYobnVsbD09PWN6KXRocm93IEVycm9yKGkoNDc1KSk7dmFyIGU9Y3o7cmV0dXJuIGUuc3R5bGVzaGVldHMmJjA9PT1lLmNvdW50JiZjTChlLGUuc3R5bGVzaGVldHMpLDA8ZS5jb3VudD9mdW5jdGlvbih0KXt2YXIgbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoZS5zdHlsZXNoZWV0cyYmY0woZSxlLnN0eWxlc2hlZXRzKSxlLnVuc3VzcGVuZCl7dmFyIHQ9ZS51bnN1c3BlbmQ7ZS51bnN1c3BlbmQ9bnVsbCx0KCl9fSw2ZTQpO3JldHVybiBlLnVuc3VzcGVuZD10LGZ1bmN0aW9uKCl7ZS51bnN1c3BlbmQ9bnVsbCxjbGVhclRpbWVvdXQobil9fTpudWxsfSgpKSkpe2UuY2FuY2VsUGVuZGluZ0NvbW1pdD10KGlzLmJpbmQobnVsbCxlLG4scixsKSksbzMoZSxhLG8pO3JldHVybn1pcyhlLG4scixsLG8pfWZ1bmN0aW9uIG8yKGUsdCl7ZS5wZW5kaW5nTGFuZXN8PXQsMjY4NDM1NDU2IT09dCYmKGUuc3VzcGVuZGVkTGFuZXM9MCxlLnBpbmdlZExhbmVzPTApLDImb2I/b1I9ITA6NCZvYiYmKG9EPSEwKSxpaygpfWZ1bmN0aW9uIG8zKGUsdCxuKXt0Jj1+b1QsdCY9fm9MLGUuc3VzcGVuZGVkTGFuZXN8PXQsZS5waW5nZWRMYW5lcyY9fnQ7Zm9yKHZhciByPWUuZXhwaXJhdGlvblRpbWVzLGw9dDswPGw7KXt2YXIgYT0zMS1laShsKSxvPTE8PGE7clthXT0tMSxsJj1+b30wIT09biYmZXYoZSxuLHQpfWZ1bmN0aW9uIG80KGUsdCl7dmFyIG49b2I7b2J8PTE7dHJ5e3JldHVybiBlKHQpfWZpbmFsbHl7MD09PShvYj1uKSYmKG9JPVkoKSs1MDAsbmIoITApKX19ZnVuY3Rpb24gbzYoZSl7bnVsbCE9PW9qJiYwPT09b2oudGFnJiYwPT0oNiZvYikmJmlkKCk7dmFyIHQ9b2I7b2J8PTE7dmFyIG49b3YudHJhbnNpdGlvbixyPWVrO3RyeXtpZihvdi50cmFuc2l0aW9uPW51bGwsZWs9MixlKXJldHVybiBlKCl9ZmluYWxseXtlaz1yLG92LnRyYW5zaXRpb249biwwPT0oNiYob2I9dCkpJiZuYighMSl9fWZ1bmN0aW9uIG84KCl7aWYobnVsbCE9PW93KXtpZigwPT09b0MpdmFyIGU9b3cucmV0dXJuO2Vsc2UgZT1vdyxhZSgpLHJMKGUpLG5HPW51bGwsblo9MCxlPW93O2Zvcig7bnVsbCE9PWU7KWFOKGUuYWx0ZXJuYXRlLGUpLGU9ZS5yZXR1cm47b3c9bnVsbH19ZnVuY3Rpb24gbzUoZSx0KXtlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wO3ZhciBuPWUudGltZW91dEhhbmRsZTstMSE9PW4mJihlLnRpbWVvdXRIYW5kbGU9LTEsczUobikpLG51bGwhPT0obj1lLmNhbmNlbFBlbmRpbmdDb21taXQpJiYoZS5jYW5jZWxQZW5kaW5nQ29tbWl0PW51bGwsbigpKSxvOCgpLG9rPWUsb3c9bj1pRShlLmN1cnJlbnQsbnVsbCksb1M9dCxvQz0wLG9FPW51bGwsb3g9ITEsb1A9MCxvTj1udWxsLG9GPW9UPW9MPW9fPTAsb089b009bnVsbCxvUj0hMSwwIT0oOCZ0KSYmKHR8PTMyJnQpO3ZhciByPWUuZW50YW5nbGVkTGFuZXM7aWYoMCE9PXIpZm9yKGU9ZS5lbnRhbmdsZW1lbnRzLHImPXQ7MDxyOyl7dmFyIGw9MzEtZWkociksYT0xPDxsO3R8PWVbbF0sciY9fmF9cmV0dXJuIG96PXQsbm8oKSxufWZ1bmN0aW9uIG83KGUsdCl7cmQ9bnVsbCxycy5jdXJyZW50PWxoLG95LmN1cnJlbnQ9bnVsbCx0PT09biQ/KHQ9blgoKSxvQz1vOSgpJiYwPT0oMTM0MjE3NzI3Jm9fKSYmMD09KDEzNDIxNzcyNyZvTCk/MjozKTp0PT09bmo/KHQ9blgoKSxvQz00KTpvQz10PT09bE8/ODpudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVuPzY6MSxvRT10LG51bGw9PT1vdyYmKG9QPTEsb049dCl9ZnVuY3Rpb24gbzkoKXt2YXIgZT1ydC5jdXJyZW50O3JldHVybiBudWxsPT09ZXx8KCg0MTk0MTc2Jm9TKT09PW9TP251bGw9PT1ybjooKDYyOTE0NTYwJm9TKT09PW9TfHwwIT0oNTM2ODcwOTEyJm9TKSkmJmU9PT1ybil9ZnVuY3Rpb24gaWUoKXt2YXIgZT1vaC5jdXJyZW50O3JldHVybiBvaC5jdXJyZW50PWxoLG51bGw9PT1lP2xoOmV9ZnVuY3Rpb24gaXQoKXt2YXIgZT1vZy5jdXJyZW50O3JldHVybiBvZy5jdXJyZW50PW9wLGV9ZnVuY3Rpb24gaXIoKXtvUD00LDA9PSgxMzQyMTc3Mjcmb18pJiYwPT0oMTM0MjE3NzI3Jm9MKXx8bnVsbD09PW9rfHxvMyhvayxvUyxvRil9ZnVuY3Rpb24gaWwoZSx0KXt2YXIgbj1vYjtvYnw9Mjt2YXIgcj1pZSgpLGw9aXQoKTsob2shPT1lfHxvUyE9PXQpJiYob1U9bnVsbCxvNShlLHQpKSx0PSExO2U6Zm9yKDs7KXRyeXtpZigwIT09b0MmJm51bGwhPT1vdyl7dmFyIGE9b3csbz1vRTtzd2l0Y2gob0Mpe2Nhc2UgODpvOCgpLG9QPTY7YnJlYWsgZTtjYXNlIDM6Y2FzZSAyOnR8fG51bGwhPT1ydC5jdXJyZW50fHwodD0hMCk7ZGVmYXVsdDpvQz0wLG9FPW51bGwsaWkoZSxhLG8pfX0hZnVuY3Rpb24oKXtmb3IoO251bGwhPT1vdzspaWEob3cpfSgpO2JyZWFrfWNhdGNoKHQpe283KGUsdCl9aWYodCYmZS5zaGVsbFN1c3BlbmRDb3VudGVyKyssYWUoKSxvYj1uLG9oLmN1cnJlbnQ9cixvZy5jdXJyZW50PWwsbnVsbCE9PW93KXRocm93IEVycm9yKGkoMjYxKSk7cmV0dXJuIG9rPW51bGwsb1M9MCxubygpLG9QfWZ1bmN0aW9uIGlhKGUpe3ZhciB0PWlaKGUuYWx0ZXJuYXRlLGUsb3opO2UubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyxudWxsPT09dD9pdShlKTpvdz10LG95LmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBpbyhlKXt2YXIgdD1lLmFsdGVybmF0ZTtzd2l0Y2goZS50YWcpe2Nhc2UgMjplLnRhZz0wO2Nhc2UgMTU6Y2FzZSAwOnZhciBuPWUudHlwZSxyPWUucGVuZGluZ1Byb3BzO3I9ZS5lbGVtZW50VHlwZT09PW4/cjpsYihuLHIpO3ZhciBsPXRMKG4pP3ROOnR6LmN1cnJlbnQ7bD10XyhlLGwpLHQ9bGoodCxlLHIsbixsLG9TKTticmVhaztjYXNlIDExOm49ZS50eXBlLnJlbmRlcixyPWUucGVuZGluZ1Byb3BzLHI9ZS5lbGVtZW50VHlwZT09PW4/cjpsYihuLHIpLHQ9bGoodCxlLHIsbixlLnJlZixvUyk7YnJlYWs7Y2FzZSA1OnJMKGUpO2RlZmF1bHQ6YU4odCxlKSxlPW93PWl4KGUsb3opLHQ9aVoodCxlLG96KX1lLm1lbW9pemVkUHJvcHM9ZS5wZW5kaW5nUHJvcHMsbnVsbD09PXQ/aXUoZSk6b3c9dCxveS5jdXJyZW50PW51bGx9ZnVuY3Rpb24gaWkoZSx0LG4pe2FlKCksckwodCksbkc9bnVsbCxuWj0wO3ZhciByPXQucmV0dXJuO3RyeXtpZihmdW5jdGlvbihlLHQsbixyLGwpe2lmKG4uZmxhZ3N8PTMyNzY4LG51bGwhPT1yJiYib2JqZWN0Ij09dHlwZW9mIHImJiJmdW5jdGlvbiI9PXR5cGVvZiByLnRoZW4pe3ZhciBhPW4udGFnO2lmKDAhPSgxJm4ubW9kZSl8fDAhPT1hJiYxMSE9PWEmJjE1IT09YXx8KChhPW4uYWx0ZXJuYXRlKT8obi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLG4ubWVtb2l6ZWRTdGF0ZT1hLm1lbW9pemVkU3RhdGUsbi5sYW5lcz1hLmxhbmVzKToobi51cGRhdGVRdWV1ZT1udWxsLG4ubWVtb2l6ZWRTdGF0ZT1udWxsKSksbnVsbCE9PShhPXJ0LmN1cnJlbnQpKXtzd2l0Y2goYS50YWcpe2Nhc2UgMTM6cmV0dXJuIDEmbi5tb2RlJiYobnVsbD09PXJuP2lyKCk6bnVsbD09PWEuYWx0ZXJuYXRlJiYwPT09b1AmJihvUD0zKSksYS5mbGFncyY9LTI1NyxsRihhLHQsbixlLGwpLHI9PT1uVz9hLmZsYWdzfD0xNjM4NDoobnVsbD09PSh0PWEudXBkYXRlUXVldWUpP2EudXBkYXRlUXVldWU9bmV3IFNldChbcl0pOnQuYWRkKHIpLDEmYS5tb2RlJiZpaChlLHIsbCkpLCExO2Nhc2UgMjI6aWYoMSZhLm1vZGUpcmV0dXJuIGEuZmxhZ3N8PTY1NTM2LHI9PT1uVz9hLmZsYWdzfD0xNjM4NDoobnVsbD09PSh0PWEudXBkYXRlUXVldWUpPyh0PXt0cmFuc2l0aW9uczpudWxsLG1hcmtlckluc3RhbmNlczpudWxsLHJldHJ5UXVldWU6bmV3IFNldChbcl0pfSxhLnVwZGF0ZVF1ZXVlPXQpOm51bGw9PT0obj10LnJldHJ5UXVldWUpP3QucmV0cnlRdWV1ZT1uZXcgU2V0KFtyXSk6bi5hZGQociksaWgoZSxyLGwpKSwhMX10aHJvdyBFcnJvcihpKDQzNSxhLnRhZykpfWlmKDE9PT1lLnRhZylyZXR1cm4gaWgoZSxyLGwpLGlyKCksITE7cj1FcnJvcihpKDQyNikpfWlmKHRaJiYxJm4ubW9kZSYmbnVsbCE9PShhPXJ0LmN1cnJlbnQpKXJldHVybiAwPT0oNjU1MzYmYS5mbGFncykmJihhLmZsYWdzfD0yNTYpLGxGKGEsdCxuLGUsbCksbm4obFAocixuKSksITE7aWYoZT1yPWxQKHIsbiksNCE9PW9QJiYob1A9MiksbnVsbD09PW9NP29NPVtlXTpvTS5wdXNoKGUpLG51bGw9PT10KXJldHVybiEwO2U9dDtkb3tzd2l0Y2goZS50YWcpe2Nhc2UgMzpyZXR1cm4gZS5mbGFnc3w9NjU1MzYsbCY9LWwsZS5sYW5lc3w9bCxsPWxMKGUscixsKSxuRChlLGwpLCExO2Nhc2UgMTppZih0PXIsbj1lLnR5cGUsYT1lLnN0YXRlTm9kZSwwPT0oMTI4JmUuZmxhZ3MpJiYoImZ1bmN0aW9uIj09dHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxudWxsIT09YSYmImZ1bmN0aW9uIj09dHlwZW9mIGEuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09b1F8fCFvUS5oYXMoYSkpKSlyZXR1cm4gZS5mbGFnc3w9NjU1MzYsbCY9LWwsZS5sYW5lc3w9bCxsPWxUKGUsdCxsKSxuRChlLGwpLCExfWU9ZS5yZXR1cm59d2hpbGUobnVsbCE9PWUpO3JldHVybiExfShlLHIsdCxuLG9TKSl7b1A9MSxvTj1uLG93PW51bGw7cmV0dXJufX1jYXRjaChlKXtpZihudWxsIT09cil0aHJvdyBvdz1yLGU7b1A9MSxvTj1uLG93PW51bGw7cmV0dXJufWlmKDMyNzY4JnQuZmxhZ3MpZTp7ZT10O2Rve2lmKG51bGwhPT0odD1mdW5jdGlvbihlLHQpe3N3aXRjaCh0WSh0KSx0LnRhZyl7Y2FzZSAxOnJldHVybiB0TCh0LnR5cGUpJiZ0VCgpLDY1NTM2JihlPXQuZmxhZ3MpPyh0LmZsYWdzPS02NTUzNyZlfDEyOCx0KTpudWxsO2Nhc2UgMzpyZXR1cm4gYW4oYWQpLFEoKSxoKHRQKSxoKHR6KSwwIT0oNjU1MzYmKGU9dC5mbGFncykpJiYwPT0oMTI4JmUpPyh0LmZsYWdzPS02NTUzNyZlfDEyOCx0KTpudWxsO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIGoodCksbnVsbDtjYXNlIDEzOmlmKHJvKHQpLG51bGwhPT0oZT10Lm1lbW9pemVkU3RhdGUpJiZudWxsIT09ZS5kZWh5ZHJhdGVkKXtpZihudWxsPT09dC5hbHRlcm5hdGUpdGhyb3cgRXJyb3IoaSgzNDApKTtudCgpfXJldHVybiA2NTUzNiYoZT10LmZsYWdzKT8odC5mbGFncz0tNjU1MzcmZXwxMjgsdCk6bnVsbDtjYXNlIDE5OnJldHVybiBoKHJpKSxudWxsO2Nhc2UgNDpyZXR1cm4gUSgpLG51bGw7Y2FzZSAxMDpyZXR1cm4gYW4odC50eXBlLl9jb250ZXh0KSxudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gcm8odCkscmUoKSxudWxsIT09ZSYmaChhYiksNjU1MzYmKGU9dC5mbGFncyk/KHQuZmxhZ3M9LTY1NTM3JmV8MTI4LHQpOm51bGw7Y2FzZSAyNDpyZXR1cm4gYW4oYWQpLG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19KGUuYWx0ZXJuYXRlLGUpKSl7dC5mbGFncyY9MzI3Njcsb3c9dDticmVhayBlfW51bGwhPT0oZT1lLnJldHVybikmJihlLmZsYWdzfD0zMjc2OCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGwpLG93PWV9d2hpbGUobnVsbCE9PWUpO29QPTYsb3c9bnVsbH1lbHNlIGl1KHQpfWZ1bmN0aW9uIGl1KGUpe3ZhciB0PWU7ZG97ZT10LnJldHVybjt2YXIgbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHM7c3dpdGNoKHRZKHQpLHQudGFnKXtjYXNlIDI6Y2FzZSAxNjpjYXNlIDE1OmNhc2UgMDpjYXNlIDExOmNhc2UgNzpjYXNlIDg6Y2FzZSAxMjpjYXNlIDk6Y2FzZSAxNDpyZXR1cm4gYVAodCksbnVsbDtjYXNlIDE6Y2FzZSAxNzpyZXR1cm4gdEwodC50eXBlKSYmdFQoKSxhUCh0KSxudWxsO2Nhc2UgMzpyZXR1cm4gbj10LnN0YXRlTm9kZSxyPW51bGwsbnVsbCE9PWUmJihyPWUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksdC5tZW1vaXplZFN0YXRlLmNhY2hlIT09ciYmKHQuZmxhZ3N8PTIwNDgpLGFuKGFkKSxRKCksaCh0UCksaCh0eiksbi5wZW5kaW5nQ29udGV4dCYmKG4uY29udGV4dD1uLnBlbmRpbmdDb250ZXh0LG4ucGVuZGluZ0NvbnRleHQ9bnVsbCksKG51bGw9PT1lfHxudWxsPT09ZS5jaGlsZCkmJih0OSh0KT9hQyh0KTpudWxsPT09ZXx8ZS5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmMD09KDI1NiZ0LmZsYWdzKXx8KHQuZmxhZ3N8PTEwMjQsbnVsbCE9PXRKJiYobzAodEopLHRKPW51bGwpKSksYVAodCksbnVsbDtjYXNlIDI2OmlmKG49dC5tZW1vaXplZFN0YXRlLG51bGw9PT1lKWFDKHQpLG51bGwhPT1uPyhhUCh0KSxhRSh0LG4pKTooYVAodCksdC5mbGFncyY9LTE2Nzc3MjE3KTtlbHNle3ZhciBsPWUubWVtb2l6ZWRTdGF0ZTtuIT09bCYmYUModCksbnVsbCE9PW4/KGFQKHQpLG49PT1sP3QuZmxhZ3MmPS0xNjc3NzIxNzphRSh0LG4pKTooZS5tZW1vaXplZFByb3BzIT09ciYmYUModCksYVAodCksdC5mbGFncyY9LTE2Nzc3MjE3KX1yZXR1cm4gbnVsbDtjYXNlIDI3OmlmKGoodCksbj1JLmN1cnJlbnQsbD10LnR5cGUsbnVsbCE9PWUmJm51bGwhPXQuc3RhdGVOb2RlKWUubWVtb2l6ZWRQcm9wcyE9PXImJmFDKHQpO2Vsc2V7aWYoIXIpe2lmKG51bGw9PT10LnN0YXRlTm9kZSl0aHJvdyBFcnJvcihpKDE2NikpO3JldHVybiBhUCh0KSxudWxsfWU9RC5jdXJyZW50LHQ5KHQpP2NvKHQuc3RhdGVOb2RlLHQudHlwZSx0Lm1lbW9pemVkUHJvcHMsZSx0KTooZT1jdShsLHIsbiksdC5zdGF0ZU5vZGU9ZSxhQyh0KSl9cmV0dXJuIGFQKHQpLG51bGw7Y2FzZSA1OmlmKGoodCksbj10LnR5cGUsbnVsbCE9PWUmJm51bGwhPXQuc3RhdGVOb2RlKWUubWVtb2l6ZWRQcm9wcyE9PXImJmFDKHQpO2Vsc2V7aWYoIXIpe2lmKG51bGw9PT10LnN0YXRlTm9kZSl0aHJvdyBFcnJvcihpKDE2NikpO3JldHVybiBhUCh0KSxudWxsfWlmKGU9RC5jdXJyZW50LHQ5KHQpKWNvKHQuc3RhdGVOb2RlLHQudHlwZSx0Lm1lbW9pemVkUHJvcHMsZSx0KTtlbHNle3N3aXRjaChsPXMxKEkuY3VycmVudCksZSl7Y2FzZSAxOmU9bC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixuKTticmVhaztjYXNlIDI6ZT1sLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsbik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2gobil7Y2FzZSJzdmciOmU9bC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixuKTticmVhaztjYXNlIm1hdGgiOmU9bC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLG4pO2JyZWFrO2Nhc2Uic2NyaXB0IjooZT1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pbm5lckhUTUw9IjxzY3JpcHQ+PC9zY3JpcHQ+IixlPWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTticmVhaztjYXNlInNlbGVjdCI6ZT0ic3RyaW5nIj09dHlwZW9mIHIuaXM/bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiLHtpczpyLmlzfSk6bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxyLm11bHRpcGxlP2UubXVsdGlwbGU9ITA6ci5zaXplJiYoZS5zaXplPXIuc2l6ZSk7YnJlYWs7ZGVmYXVsdDplPSJzdHJpbmciPT10eXBlb2Ygci5pcz9sLmNyZWF0ZUVsZW1lbnQobix7aXM6ci5pc30pOmwuY3JlYXRlRWxlbWVudChuKX19ZVtlRV09dCxlW2V4XT1yO2U6Zm9yKGw9dC5jaGlsZDtudWxsIT09bDspe2lmKDU9PT1sLnRhZ3x8Nj09PWwudGFnKWUuYXBwZW5kQ2hpbGQobC5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWwudGFnJiYyNyE9PWwudGFnJiZudWxsIT09bC5jaGlsZCl7bC5jaGlsZC5yZXR1cm49bCxsPWwuY2hpbGQ7Y29udGludWV9aWYobD09PXQpYnJlYWs7Zm9yKDtudWxsPT09bC5zaWJsaW5nOyl7aWYobnVsbD09PWwucmV0dXJufHxsLnJldHVybj09PXQpYnJlYWsgZTtsPWwucmV0dXJufWwuc2libGluZy5yZXR1cm49bC5yZXR1cm4sbD1sLnNpYmxpbmd9c3dpdGNoKHQuc3RhdGVOb2RlPWUsc0coZSxuLHIpLG4pe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6ZT0hIXIuYXV0b0ZvY3VzO2JyZWFrO2Nhc2UiaW1nIjplPSEwO2JyZWFrO2RlZmF1bHQ6ZT0hMX1lJiZhQyh0KX19cmV0dXJuIGFQKHQpLHQuZmxhZ3MmPS0xNjc3NzIxNyxudWxsO2Nhc2UgNjppZihlJiZudWxsIT10LnN0YXRlTm9kZSllLm1lbW9pemVkUHJvcHMhPT1yJiZhQyh0KTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2YgciYmbnVsbD09PXQuc3RhdGVOb2RlKXRocm93IEVycm9yKGkoMTY2KSk7aWYoZT1JLmN1cnJlbnQsdDkodCkpe2U6e2lmKGU9dC5zdGF0ZU5vZGUsbj10Lm1lbW9pemVkUHJvcHMsZVtlRV09dCwocj1lLm5vZGVWYWx1ZSE9PW4pJiZudWxsIT09KGw9dFgpKXN3aXRjaChsLnRhZyl7Y2FzZSAzOmlmKGw9MCE9KDEmbC5tb2RlKSxzcShlLm5vZGVWYWx1ZSxuLGwpLGwpe2U9ITE7YnJlYWsgZX1icmVhaztjYXNlIDI3OmNhc2UgNTp2YXIgYT0wIT0oMSZsLm1vZGUpO2lmKCEwIT09bC5tZW1vaXplZFByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyYmc3EoZS5ub2RlVmFsdWUsbixhKSxhKXtlPSExO2JyZWFrIGV9fWU9cn1lJiZhQyh0KX1lbHNlKGU9czEoZSkuY3JlYXRlVGV4dE5vZGUocikpW2VFXT10LHQuc3RhdGVOb2RlPWV9cmV0dXJuIGFQKHQpLG51bGw7Y2FzZSAxMzppZihybyh0KSxyPXQubWVtb2l6ZWRTdGF0ZSxudWxsPT09ZXx8bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkKXtpZih0WiYmbnVsbCE9PXRHJiYwIT0oMSZ0Lm1vZGUpJiYwPT0oMTI4JnQuZmxhZ3MpKW5lKCksbnQoKSx0LmZsYWdzfD0zODQsbD0hMTtlbHNlIGlmKGw9dDkodCksbnVsbCE9PXImJm51bGwhPT1yLmRlaHlkcmF0ZWQpe2lmKG51bGw9PT1lKXtpZighbCl0aHJvdyBFcnJvcihpKDMxOCkpO2lmKCEobD1udWxsIT09KGw9dC5tZW1vaXplZFN0YXRlKT9sLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IoaSgzMTcpKTtsW2VFXT10fWVsc2UgbnQoKSwwPT0oMTI4JnQuZmxhZ3MpJiYodC5tZW1vaXplZFN0YXRlPW51bGwpLHQuZmxhZ3N8PTQ7YVAodCksbD0hMX1lbHNlIG51bGwhPT10SiYmKG8wKHRKKSx0Sj1udWxsKSxsPSEwO2lmKCFsKXJldHVybiAyNTYmdC5mbGFncz90Om51bGx9aWYoMCE9KDEyOCZ0LmZsYWdzKSlyZXR1cm4gdC5sYW5lcz1uLHQ7cmV0dXJuIG49bnVsbCE9PXIsZT1udWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSxuJiYocj10LmNoaWxkLGw9bnVsbCxudWxsIT09ci5hbHRlcm5hdGUmJm51bGwhPT1yLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihsPXIuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGE9bnVsbCxudWxsIT09ci5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKGE9ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxhIT09bCYmKHIuZmxhZ3N8PTIwNDgpKSxuIT09ZSYmbiYmKHQuY2hpbGQuZmxhZ3N8PTgxOTIpLGF4KHQsdC51cGRhdGVRdWV1ZSksYVAodCksbnVsbDtjYXNlIDQ6cmV0dXJuIFEoKSxudWxsPT09ZSYmc0EodC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksYVAodCksbnVsbDtjYXNlIDEwOnJldHVybiBhbih0LnR5cGUuX2NvbnRleHQpLGFQKHQpLG51bGw7Y2FzZSAxOTppZihoKHJpKSxudWxsPT09KGw9dC5tZW1vaXplZFN0YXRlKSlyZXR1cm4gYVAodCksbnVsbDtpZihyPTAhPSgxMjgmdC5mbGFncyksbnVsbD09PShhPWwucmVuZGVyaW5nKSl7aWYocilheihsLCExKTtlbHNle2lmKDAhPT1vUHx8bnVsbCE9PWUmJjAhPSgxMjgmZS5mbGFncykpZm9yKGU9dC5jaGlsZDtudWxsIT09ZTspe2lmKG51bGwhPT0oYT1ydShlKSkpe2Zvcih0LmZsYWdzfD0xMjgsYXoobCwhMSksZT1hLnVwZGF0ZVF1ZXVlLHQudXBkYXRlUXVldWU9ZSxheCh0LGUpLHQuc3VidHJlZUZsYWdzPTAsZT1uLG49dC5jaGlsZDtudWxsIT09bjspaXgobixlKSxuPW4uc2libGluZztyZXR1cm4gZyhyaSwxJnJpLmN1cnJlbnR8MiksdC5jaGlsZH1lPWUuc2libGluZ31udWxsIT09bC50YWlsJiZZKCk+b0kmJih0LmZsYWdzfD0xMjgscj0hMCxheihsLCExKSx0LmxhbmVzPTQxOTQzMDQpfX1lbHNle2lmKCFyKXtpZihudWxsIT09KGU9cnUoYSkpKXtpZih0LmZsYWdzfD0xMjgscj0hMCxlPWUudXBkYXRlUXVldWUsdC51cGRhdGVRdWV1ZT1lLGF4KHQsZSksYXoobCwhMCksbnVsbD09PWwudGFpbCYmImhpZGRlbiI9PT1sLnRhaWxNb2RlJiYhYS5hbHRlcm5hdGUmJiF0WilyZXR1cm4gYVAodCksbnVsbH1lbHNlIDIqWSgpLWwucmVuZGVyaW5nU3RhcnRUaW1lPm9JJiY1MzY4NzA5MTIhPT1uJiYodC5mbGFnc3w9MTI4LHI9ITAsYXoobCwhMSksdC5sYW5lcz00MTk0MzA0KX1sLmlzQmFja3dhcmRzPyhhLnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPWEpOihudWxsIT09KGU9bC5sYXN0KT9lLnNpYmxpbmc9YTp0LmNoaWxkPWEsbC5sYXN0PWEpfWlmKG51bGwhPT1sLnRhaWwpcmV0dXJuIHQ9bC50YWlsLGwucmVuZGVyaW5nPXQsbC50YWlsPXQuc2libGluZyxsLnJlbmRlcmluZ1N0YXJ0VGltZT1ZKCksdC5zaWJsaW5nPW51bGwsZT1yaS5jdXJyZW50LGcocmkscj8xJmV8MjoxJmUpLHQ7cmV0dXJuIGFQKHQpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBybyh0KSxyZSgpLHI9bnVsbCE9PXQubWVtb2l6ZWRTdGF0ZSxudWxsIT09ZT9udWxsIT09ZS5tZW1vaXplZFN0YXRlIT09ciYmKHQuZmxhZ3N8PTgxOTIpOnImJih0LmZsYWdzfD04MTkyKSxyJiYwIT0oMSZ0Lm1vZGUpPzAhPSg1MzY4NzA5MTImbikmJjA9PSgxMjgmdC5mbGFncykmJihhUCh0KSw2JnQuc3VidHJlZUZsYWdzJiYodC5mbGFnc3w9ODE5MikpOmFQKHQpLG51bGwhPT0obj10LnVwZGF0ZVF1ZXVlKSYmYXgodCxuLnJldHJ5UXVldWUpLG49bnVsbCxudWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihuPWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCkscj1udWxsLG51bGwhPT10Lm1lbW9pemVkU3RhdGUmJm51bGwhPT10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYocj10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLHIhPT1uJiYodC5mbGFnc3w9MjA0OCksbnVsbCE9PWUmJmgoYWIpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbj1udWxsLG51bGwhPT1lJiYobj1lLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PW4mJih0LmZsYWdzfD0yMDQ4KSxhbihhZCksYVAodCksbnVsbDtjYXNlIDI1OnJldHVybiBudWxsfXRocm93IEVycm9yKGkoMTU2LHQudGFnKSl9KHQuYWx0ZXJuYXRlLHQsb3opO2lmKG51bGwhPT1uKXtvdz1uO3JldHVybn1pZihudWxsIT09KHQ9dC5zaWJsaW5nKSl7b3c9dDtyZXR1cm59b3c9dD1lfXdoaWxlKG51bGwhPT10KTswPT09b1AmJihvUD01KX1mdW5jdGlvbiBpcyhlLHQsbixyLGwpe3ZhciBhPWVrLG89b3YudHJhbnNpdGlvbjt0cnl7b3YudHJhbnNpdGlvbj1udWxsLGVrPTIsZnVuY3Rpb24oZSx0LG4scixsLGEpe2RvIGlkKCk7d2hpbGUobnVsbCE9PW9qKTtpZigwIT0oNiZvYikpdGhyb3cgRXJyb3IoaSgzMjcpKTt2YXIgbyx1PWUuZmluaXNoZWRXb3JrLHM9ZS5maW5pc2hlZExhbmVzO2lmKG51bGwhPT11KXtpZihlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wLHU9PT1lLmN1cnJlbnQpdGhyb3cgRXJyb3IoaSgxNzcpKTtlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wLGUuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsO3ZhciBjPXUubGFuZXN8dS5jaGlsZExhbmVzO2lmKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLnBlbmRpbmdMYW5lcyZ+dDtlLnBlbmRpbmdMYW5lcz10LGUuc3VzcGVuZGVkTGFuZXM9MCxlLnBpbmdlZExhbmVzPTAsZS5leHBpcmVkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCxlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJj10LGUuc2hlbGxTdXNwZW5kQ291bnRlcj0wLHQ9ZS5lbnRhbmdsZW1lbnRzO2Zvcih2YXIgbD1lLmV4cGlyYXRpb25UaW1lcyxhPWUuaGlkZGVuVXBkYXRlczswPHI7KXt2YXIgbz0zMS1laShyKSxpPTE8PG87dFtvXT0wLGxbb109LTE7dmFyIHU9YVtvXTtpZihudWxsIT09dSlmb3IoYVtvXT1udWxsLG89MDtvPHUubGVuZ3RoO28rKyl7dmFyIHM9dVtvXTtudWxsIT09cyYmKHMubGFuZSY9LTUzNjg3MDkxMyl9ciY9fml9MCE9PW4mJmV2KGUsbiwwKX0oZSxjfD1uYSxhKSxvRD0hMSxlPT09b2smJihvdz1vaz1udWxsLG9TPTApLDA9PSgxMDI1NiZ1LnN1YnRyZWVGbGFncykmJjA9PSgxMDI1NiZ1LmZsYWdzKXx8byR8fChvJD0hMCxvSD1jLG9xPW4sbz1mdW5jdGlvbigpe3JldHVybiBpZCgpLG51bGx9LFcoSixvKSksbj0wIT0oMTU5OTAmdS5mbGFncyksMCE9KDE1OTkwJnUuc3VidHJlZUZsYWdzKXx8bil7bj1vdi50cmFuc2l0aW9uLG92LnRyYW5zaXRpb249bnVsbCxhPWVrLGVrPTI7dmFyIGY9b2I7b2J8PTQsb3kuY3VycmVudD1udWxsLGZ1bmN0aW9uKGUsdCl7aWYoc0o9dUYsc3MoZT1zdSgpKSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIGUpdmFyIG49e3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGU6e3ZhciByPShuPShuPWUub3duZXJEb2N1bWVudCkmJm4uZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uJiZuLmdldFNlbGVjdGlvbigpO2lmKHImJjAhPT1yLnJhbmdlQ291bnQpe249ci5hbmNob3JOb2RlO3ZhciBsLGE9ci5hbmNob3JPZmZzZXQsbz1yLmZvY3VzTm9kZTtyPXIuZm9jdXNPZmZzZXQ7dHJ5e24ubm9kZVR5cGUsby5ub2RlVHlwZX1jYXRjaChlKXtuPW51bGw7YnJlYWsgZX12YXIgdT0wLHM9LTEsYz0tMSxmPTAsZD0wLHA9ZSxtPW51bGw7dDpmb3IoOzspe2Zvcig7cCE9PW58fDAhPT1hJiYzIT09cC5ub2RlVHlwZXx8KHM9dSthKSxwIT09b3x8MCE9PXImJjMhPT1wLm5vZGVUeXBlfHwoYz11K3IpLDM9PT1wLm5vZGVUeXBlJiYodSs9cC5ub2RlVmFsdWUubGVuZ3RoKSxudWxsIT09KGw9cC5maXJzdENoaWxkKTspbT1wLHA9bDtmb3IoOzspe2lmKHA9PT1lKWJyZWFrIHQ7aWYobT09PW4mJisrZj09PWEmJihzPXUpLG09PT1vJiYrK2Q9PT1yJiYoYz11KSxudWxsIT09KGw9cC5uZXh0U2libGluZykpYnJlYWs7bT0ocD1tKS5wYXJlbnROb2RlfXA9bH1uPS0xPT09c3x8LTE9PT1jP251bGw6e3N0YXJ0OnMsZW5kOmN9fWVsc2Ugbj1udWxsfW49bnx8e3N0YXJ0OjAsZW5kOjB9fWVsc2Ugbj1udWxsO2ZvcihzMD17Zm9jdXNlZEVsZW06ZSxzZWxlY3Rpb25SYW5nZTpufSx1Rj0hMSxhVT10O251bGwhPT1hVTspaWYoZT0odD1hVSkuY2hpbGQsMCE9KDEwMjgmdC5zdWJ0cmVlRmxhZ3MpJiZudWxsIT09ZSllLnJldHVybj10LGFVPWU7ZWxzZSBmb3IoO251bGwhPT1hVTspe3Q9YVU7dHJ5e3ZhciBoPXQuYWx0ZXJuYXRlLGc9dC5mbGFncztzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Y2FzZSA1OmNhc2UgMjY6Y2FzZSAyNzpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6YnJlYWs7Y2FzZSAxOmlmKDAhPSgxMDI0JmcpJiZudWxsIT09aCl7dmFyIHk9aC5tZW1vaXplZFByb3BzLHY9aC5tZW1vaXplZFN0YXRlLGI9dC5zdGF0ZU5vZGUsaz1iLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHQuZWxlbWVudFR5cGU9PT10LnR5cGU/eTpsYih0LnR5cGUseSksdik7Yi5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZT1rfWJyZWFrO2Nhc2UgMzowIT0oMTAyNCZnKSYmY24odC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7ZGVmYXVsdDppZigwIT0oMTAyNCZnKSl0aHJvdyBFcnJvcihpKDE2MykpfX1jYXRjaChlKXtpbSh0LHQucmV0dXJuLGUpfWlmKG51bGwhPT0oZT10LnNpYmxpbmcpKXtlLnJldHVybj10LnJldHVybixhVT1lO2JyZWFrfWFVPXQucmV0dXJufWg9YSQsYSQ9ITF9KGUsdSksYTUodSxlKSxmdW5jdGlvbihlKXt2YXIgdD1zdSgpLG49ZS5mb2N1c2VkRWxlbSxyPWUuc2VsZWN0aW9uUmFuZ2U7aWYodCE9PW4mJm4mJm4ub3duZXJEb2N1bWVudCYmZnVuY3Rpb24gZSh0LG4pe3JldHVybiEhdCYmISFuJiYodD09PW58fCghdHx8MyE9PXQubm9kZVR5cGUpJiYobiYmMz09PW4ubm9kZVR5cGU/ZSh0LG4ucGFyZW50Tm9kZSk6ImNvbnRhaW5zImluIHQ/dC5jb250YWlucyhuKTohIXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJiEhKDE2JnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obikpKSl9KG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKG51bGwhPT1yJiZzcyhuKSl7aWYodD1yLnN0YXJ0LHZvaWQgMD09PShlPXIuZW5kKSYmKGU9dCksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD10LG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKGUsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoKGU9KHQ9bi5vd25lckRvY3VtZW50fHxkb2N1bWVudCkmJnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKXtlPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIGw9bi50ZXh0Q29udGVudC5sZW5ndGgsYT1NYXRoLm1pbihyLnN0YXJ0LGwpO3I9dm9pZCAwPT09ci5lbmQ/YTpNYXRoLm1pbihyLmVuZCxsKSwhZS5leHRlbmQmJmE+ciYmKGw9cixyPWEsYT1sKSxsPXNpKG4sYSk7dmFyIG89c2kobixyKTtsJiZvJiYoMSE9PWUucmFuZ2VDb3VudHx8ZS5hbmNob3JOb2RlIT09bC5ub2RlfHxlLmFuY2hvck9mZnNldCE9PWwub2Zmc2V0fHxlLmZvY3VzTm9kZSE9PW8ubm9kZXx8ZS5mb2N1c09mZnNldCE9PW8ub2Zmc2V0KSYmKCh0PXQuY3JlYXRlUmFuZ2UoKSkuc2V0U3RhcnQobC5ub2RlLGwub2Zmc2V0KSxlLnJlbW92ZUFsbFJhbmdlcygpLGE+cj8oZS5hZGRSYW5nZSh0KSxlLmV4dGVuZChvLm5vZGUsby5vZmZzZXQpKToodC5zZXRFbmQoby5ub2RlLG8ub2Zmc2V0KSxlLmFkZFJhbmdlKHQpKSl9fWZvcih0PVtdLGU9bjtlPWUucGFyZW50Tm9kZTspMT09PWUubm9kZVR5cGUmJnQucHVzaCh7ZWxlbWVudDplLGxlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0pO2ZvcigiZnVuY3Rpb24iPT10eXBlb2Ygbi5mb2N1cyYmbi5mb2N1cygpLG49MDtuPHQubGVuZ3RoO24rKykoZT10W25dKS5lbGVtZW50LnNjcm9sbExlZnQ9ZS5sZWZ0LGUuZWxlbWVudC5zY3JvbGxUb3A9ZS50b3B9fShzMCksdUY9ISFzSixzMD1zSj1udWxsLGUuY3VycmVudD11LGFZKGUsdS5hbHRlcm5hdGUsdSksSygpLG9iPWYsZWs9YSxvdi50cmFuc2l0aW9uPW59ZWxzZSBlLmN1cnJlbnQ9dTtpZihvJD8obyQ9ITEsb2o9ZSxvVz1zKTppYyhlLGMpLDA9PT0oYz1lLnBlbmRpbmdMYW5lcykmJihvUT1udWxsKSxmdW5jdGlvbihlKXtpZihlYSYmImZ1bmN0aW9uIj09dHlwZW9mIGVhLm9uQ29tbWl0RmliZXJSb290KXRyeXtlYS5vbkNvbW1pdEZpYmVyUm9vdChlbCxlLHZvaWQgMCwxMjg9PSgxMjgmZS5jdXJyZW50LmZsYWdzKSl9Y2F0Y2goZSl7fX0odS5zdGF0ZU5vZGUsbCksbnYoZSksbnVsbCE9PXQpZm9yKGw9ZS5vblJlY292ZXJhYmxlRXJyb3IsdT0wO3U8dC5sZW5ndGg7dSsrKW49e2RpZ2VzdDooYz10W3VdKS5kaWdlc3QsY29tcG9uZW50U3RhY2s6Yy5zdGFja30sbChjLnZhbHVlLG4pO2lmKG9CKXRocm93IG9CPSExLGU9b1Ysb1Y9bnVsbCxlOzAhPSgzJm9XKSYmMCE9PWUudGFnJiZpZCgpLGM9ZS5wZW5kaW5nTGFuZXMscnx8b0R8fDAhPSg0MTk0MjE4JnMpJiYwIT0oNDImYyk/ZT09PW9ZP29LKys6KG9LPTAsb1k9ZSk6b0s9MCxuYighMSl9fShlLHQsbixyLGEsbCl9ZmluYWxseXtvdi50cmFuc2l0aW9uPW8sZWs9YX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBpYyhlLHQpezA9PShlLnBvb2xlZENhY2hlTGFuZXMmPXQpJiZudWxsIT0odD1lLnBvb2xlZENhY2hlKSYmKGUucG9vbGVkQ2FjaGU9bnVsbCxhbSh0KSl9ZnVuY3Rpb24gaWQoKXtpZihudWxsIT09b2ope3ZhciBlPW9qLHQ9b0g7b0g9MDt2YXIgbj1ldyhvVykscj0zMj5uPzMyOm47bj1vdi50cmFuc2l0aW9uO3ZhciBsPWVrO3RyeXtpZihvdi50cmFuc2l0aW9uPW51bGwsZWs9cixudWxsPT09b2opdmFyIGE9ITE7ZWxzZXtyPW9xLG9xPW51bGw7dmFyIG89b2osdT1vVztpZihvaj1udWxsLG9XPTAsMCE9KDYmb2IpKXRocm93IEVycm9yKGkoMzMxKSk7dmFyIHM9b2I7aWYob2J8PTQsb2Yoby5jdXJyZW50KSxvbChvLG8uY3VycmVudCx1LHIpLG9iPXMsbmIoITEpLGVhJiYiZnVuY3Rpb24iPT10eXBlb2YgZWEub25Qb3N0Q29tbWl0RmliZXJSb290KXRyeXtlYS5vblBvc3RDb21taXRGaWJlclJvb3QoZWwsbyl9Y2F0Y2goZSl7fWE9ITB9cmV0dXJuIGF9ZmluYWxseXtlaz1sLG92LnRyYW5zaXRpb249bixpYyhlLHQpfX1yZXR1cm4hMX1mdW5jdGlvbiBpcChlLHQsbil7dD1sTChlLHQ9bFAobix0KSwyKSxudWxsIT09KGU9bk8oZSx0LDIpKSYmKG8yKGUsMiksbnYoZSkpfWZ1bmN0aW9uIGltKGUsdCxuKXtpZigzPT09ZS50YWcpaXAoZSxlLG4pO2Vsc2UgZm9yKDtudWxsIT09dDspe2lmKDM9PT10LnRhZyl7aXAodCxlLG4pO2JyZWFrfWlmKDE9PT10LnRhZyl7dmFyIHI9dC5zdGF0ZU5vZGU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fCJmdW5jdGlvbiI9PXR5cGVvZiByLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PW9RfHwhb1EuaGFzKHIpKSl7ZT1sVCh0LGU9bFAobixlKSwyKSxudWxsIT09KHQ9bk8odCxlLDIpKSYmKG8yKHQsMiksbnYodCkpO2JyZWFrfX10PXQucmV0dXJufX1mdW5jdGlvbiBpaChlLHQsbil7dmFyIHI9ZS5waW5nQ2FjaGU7aWYobnVsbD09PXIpe3I9ZS5waW5nQ2FjaGU9bmV3IG9tO3ZhciBsPW5ldyBTZXQ7ci5zZXQodCxsKX1lbHNlIHZvaWQgMD09PShsPXIuZ2V0KHQpKSYmKGw9bmV3IFNldCxyLnNldCh0LGwpKTtsLmhhcyhuKXx8KG94PSEwLGwuYWRkKG4pLGU9aWcuYmluZChudWxsLGUsdCxuKSx0LnRoZW4oZSxlKSl9ZnVuY3Rpb24gaWcoZSx0LG4pe3ZhciByPWUucGluZ0NhY2hlO251bGwhPT1yJiZyLmRlbGV0ZSh0KSxlLnBpbmdlZExhbmVzfD1lLnN1c3BlbmRlZExhbmVzJm4sMiZvYj9vUj0hMDo0Jm9iJiYob0Q9ITApLGlrKCksb2s9PT1lJiYob1Mmbik9PT1uJiYoND09PW9QfHwzPT09b1AmJig2MjkxNDU2MCZvUyk9PT1vUyYmMzAwPlkoKS1vQT8wPT0oMiZvYikmJm81KGUsMCk6b1R8PW4pLG52KGUpfWZ1bmN0aW9uIGl5KGUsdCl7MD09PXQmJih0PTA9PSgxJmUubW9kZSk/MjplZygpKSxudWxsIT09KGU9bnMoZSx0KSkmJihvMihlLHQpLG52KGUpKX1mdW5jdGlvbiBpdihlKXt2YXIgdD1lLm1lbW9pemVkU3RhdGUsbj0wO251bGwhPT10JiYobj10LnJldHJ5TGFuZSksaXkoZSxuKX1mdW5jdGlvbiBpYihlLHQpe3ZhciBuPTA7c3dpdGNoKGUudGFnKXtjYXNlIDEzOnZhciByPWUuc3RhdGVOb2RlLGw9ZS5tZW1vaXplZFN0YXRlO251bGwhPT1sJiYobj1sLnJldHJ5TGFuZSk7YnJlYWs7Y2FzZSAxOTpyPWUuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMjI6cj1lLnN0YXRlTm9kZS5fcmV0cnlDYWNoZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGkoMzE0KSl9bnVsbCE9PXImJnIuZGVsZXRlKHQpLGl5KGUsbil9ZnVuY3Rpb24gaWsoKXtpZig1MDxvSyl0aHJvdyBvSz0wLG9ZPW51bGwsMiZvYiYmbnVsbCE9PW9rJiYob2suZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXN8PW9TKSxFcnJvcihpKDE4NSkpfWZ1bmN0aW9uIGl3KGUsdCxuLHIpe3RoaXMudGFnPWUsdGhpcy5rZXk9bix0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZkNsZWFudXA9dGhpcy5yZWY9bnVsbCx0aGlzLnBlbmRpbmdQcm9wcz10LHRoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsLHRoaXMubW9kZT1yLHRoaXMuc3VidHJlZUZsYWdzPXRoaXMuZmxhZ3M9MCx0aGlzLmRlbGV0aW9ucz1udWxsLHRoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTAsdGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiBpUyhlLHQsbixyKXtyZXR1cm4gbmV3IGl3KGUsdCxuLHIpfWZ1bmN0aW9uIGlDKGUpe3JldHVybiEoIShlPWUucHJvdG90eXBlKXx8IWUuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gaUUoZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbD09PW4/KChuPWlTKGUudGFnLHQsZS5rZXksZS5tb2RlKSkuZWxlbWVudFR5cGU9ZS5lbGVtZW50VHlwZSxuLnR5cGU9ZS50eXBlLG4uc3RhdGVOb2RlPWUuc3RhdGVOb2RlLG4uYWx0ZXJuYXRlPWUsZS5hbHRlcm5hdGU9bik6KG4ucGVuZGluZ1Byb3BzPXQsbi50eXBlPWUudHlwZSxuLmZsYWdzPTAsbi5zdWJ0cmVlRmxhZ3M9MCxuLmRlbGV0aW9ucz1udWxsKSxuLmZsYWdzPTMxNDU3MjgwJmUuZmxhZ3Msbi5jaGlsZExhbmVzPWUuY2hpbGRMYW5lcyxuLmxhbmVzPWUubGFuZXMsbi5jaGlsZD1lLmNoaWxkLG4ubWVtb2l6ZWRQcm9wcz1lLm1lbW9pemVkUHJvcHMsbi5tZW1vaXplZFN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxuLnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdD1lLmRlcGVuZGVuY2llcyxuLmRlcGVuZGVuY2llcz1udWxsPT09dD9udWxsOntsYW5lczp0LmxhbmVzLGZpcnN0Q29udGV4dDp0LmZpcnN0Q29udGV4dH0sbi5zaWJsaW5nPWUuc2libGluZyxuLmluZGV4PWUuaW5kZXgsbi5yZWY9ZS5yZWYsbi5yZWZDbGVhbnVwPWUucmVmQ2xlYW51cCxufWZ1bmN0aW9uIGl4KGUsdCl7ZS5mbGFncyY9MzE0NTcyODI7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIG51bGw9PT1uPyhlLmNoaWxkTGFuZXM9MCxlLmxhbmVzPXQsZS5jaGlsZD1udWxsLGUuc3VidHJlZUZsYWdzPTAsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS51cGRhdGVRdWV1ZT1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCk6KGUuY2hpbGRMYW5lcz1uLmNoaWxkTGFuZXMsZS5sYW5lcz1uLmxhbmVzLGUuY2hpbGQ9bi5jaGlsZCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGwsZS5tZW1vaXplZFByb3BzPW4ubWVtb2l6ZWRQcm9wcyxlLm1lbW9pemVkU3RhdGU9bi5tZW1vaXplZFN0YXRlLGUudXBkYXRlUXVldWU9bi51cGRhdGVRdWV1ZSxlLnR5cGU9bi50eXBlLHQ9bi5kZXBlbmRlbmNpZXMsZS5kZXBlbmRlbmNpZXM9bnVsbD09PXQ/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9KSxlfWZ1bmN0aW9uIGl6KGUsdCxuLHIsbCxhKXt2YXIgbz0yO2lmKHI9ZSwiZnVuY3Rpb24iPT10eXBlb2YgZSlpQyhlKSYmKG89MSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpbz0hZnVuY3Rpb24oZSx0LG4pe2lmKDE9PT1ufHxudWxsIT10Lml0ZW1Qcm9wKXJldHVybiExO3N3aXRjaChlKXtjYXNlIm1ldGEiOmNhc2UidGl0bGUiOnJldHVybiEwO2Nhc2Uic3R5bGUiOmlmKCJzdHJpbmciIT10eXBlb2YgdC5wcmVjZWRlbmNlfHwic3RyaW5nIiE9dHlwZW9mIHQuaHJlZnx8IiI9PT10LmhyZWYpYnJlYWs7cmV0dXJuITA7Y2FzZSJsaW5rIjppZigic3RyaW5nIiE9dHlwZW9mIHQucmVsfHwic3RyaW5nIiE9dHlwZW9mIHQuaHJlZnx8IiI9PT10LmhyZWZ8fHQub25Mb2FkfHx0Lm9uRXJyb3IpYnJlYWs7aWYoInN0eWxlc2hlZXQiPT09dC5yZWwpcmV0dXJuIGU9dC5kaXNhYmxlZCwic3RyaW5nIj09dHlwZW9mIHQucHJlY2VkZW5jZSYmbnVsbD09ZTtyZXR1cm4hMDtjYXNlInNjcmlwdCI6aWYoITA9PT10LmFzeW5jJiYhdC5vbkxvYWQmJiF0Lm9uRXJyb3ImJiJzdHJpbmciPT10eXBlb2YgdC5zcmMmJnQuc3JjKXJldHVybiEwfXJldHVybiExfShlLG4sRC5jdXJyZW50KT8iaHRtbCI9PT1lfHwiaGVhZCI9PT1lfHwiYm9keSI9PT1lPzI3OjU6MjY7ZWxzZSBlOnN3aXRjaChlKXtjYXNlIGI6cmV0dXJuIGlQKG4uY2hpbGRyZW4sbCxhLHQpO2Nhc2UgazpvPTgsMCE9KDEmKGx8PTgpKSYmKGx8PTE2KTticmVhaztjYXNlIHc6cmV0dXJuKGU9aVMoMTIsbix0LDJ8bCkpLmVsZW1lbnRUeXBlPXcsZS5sYW5lcz1hLGU7Y2FzZSB6OnJldHVybihlPWlTKDEzLG4sdCxsKSkuZWxlbWVudFR5cGU9eixlLmxhbmVzPWEsZTtjYXNlIFA6cmV0dXJuKGU9aVMoMTksbix0LGwpKS5lbGVtZW50VHlwZT1QLGUubGFuZXM9YSxlO2Nhc2UgVDpyZXR1cm4gaU4obixsLGEsdCk7Y2FzZSBGOmNhc2UgTDpjYXNlIE06cmV0dXJuKGU9aVMoMjQsbix0LGwpKS5lbGVtZW50VHlwZT1NLGUubGFuZXM9YSxlO2RlZmF1bHQ6aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSlzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBTOm89MTA7YnJlYWsgZTtjYXNlIEU6bz05O2JyZWFrIGU7Y2FzZSBDOmNhc2UgeDpvPTExO2JyZWFrIGU7Y2FzZSBOOm89MTQ7YnJlYWsgZTtjYXNlIF86bz0xNixyPW51bGw7YnJlYWsgZX10aHJvdyBFcnJvcihpKDEzMCxudWxsPT1lP2U6dHlwZW9mIGUsIiIpKX1yZXR1cm4odD1pUyhvLG4sdCxsKSkuZWxlbWVudFR5cGU9ZSx0LnR5cGU9cix0LmxhbmVzPWEsdH1mdW5jdGlvbiBpUChlLHQsbixyKXtyZXR1cm4oZT1pUyg3LGUscix0KSkubGFuZXM9bixlfWZ1bmN0aW9uIGlOKGUsdCxuLHIpeyhlPWlTKDIyLGUscix0KSkuZWxlbWVudFR5cGU9VCxlLmxhbmVzPW47dmFyIGw9e192aXNpYmlsaXR5OjEsX3BlbmRpbmdWaXNpYmlsaXR5OjEsX3BlbmRpbmdNYXJrZXJzOm51bGwsX3JldHJ5Q2FjaGU6bnVsbCxfdHJhbnNpdGlvbnM6bnVsbCxfY3VycmVudDpudWxsLGRldGFjaDpmdW5jdGlvbigpe3ZhciBlPWwuX2N1cnJlbnQ7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoaSg0NTYpKTtpZigwPT0oMiZsLl9wZW5kaW5nVmlzaWJpbGl0eSkpe3ZhciB0PW5zKGUsMik7bnVsbCE9PXQmJihsLl9wZW5kaW5nVmlzaWJpbGl0eXw9MixvRyh0LGUsMikpfX0sYXR0YWNoOmZ1bmN0aW9uKCl7dmFyIGU9bC5fY3VycmVudDtpZihudWxsPT09ZSl0aHJvdyBFcnJvcihpKDQ1NikpO2lmKDAhPSgyJmwuX3BlbmRpbmdWaXNpYmlsaXR5KSl7dmFyIHQ9bnMoZSwyKTtudWxsIT09dCYmKGwuX3BlbmRpbmdWaXNpYmlsaXR5Jj0tMyxvRyh0LGUsMikpfX19O3JldHVybiBlLnN0YXRlTm9kZT1sLGV9ZnVuY3Rpb24gaV8oZSx0LG4pe3JldHVybihlPWlTKDYsZSxudWxsLHQpKS5sYW5lcz1uLGV9ZnVuY3Rpb24gaUwoZSx0LG4pe3JldHVybih0PWlTKDQsbnVsbCE9PWUuY2hpbGRyZW4/ZS5jaGlsZHJlbjpbXSxlLmtleSx0KSkubGFuZXM9bix0LnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sdH1mdW5jdGlvbiBpVChlLHQsbixyLGwsYSl7dGhpcy50YWc9dCx0aGlzLmNvbnRhaW5lckluZm89ZSx0aGlzLmZpbmlzaGVkV29yaz10aGlzLnBpbmdDYWNoZT10aGlzLmN1cnJlbnQ9dGhpcy5wZW5kaW5nQ2hpbGRyZW49bnVsbCx0aGlzLnRpbWVvdXRIYW5kbGU9LTEsdGhpcy5jYWxsYmFja05vZGU9dGhpcy5uZXh0PXRoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PXRoaXMuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsLHRoaXMuY2FsbGJhY2tQcmlvcml0eT0wLHRoaXMuZXhwaXJhdGlvblRpbWVzPWV5KC0xKSx0aGlzLmVudGFuZ2xlZExhbmVzPXRoaXMuc2hlbGxTdXNwZW5kQ291bnRlcj10aGlzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzPXRoaXMuZmluaXNoZWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9ZXkoMCksdGhpcy5oaWRkZW5VcGRhdGVzPWV5KG51bGwpLHRoaXMuaWRlbnRpZmllclByZWZpeD1yLHRoaXMub25SZWNvdmVyYWJsZUVycm9yPWwsdGhpcy5wb29sZWRDYWNoZT1udWxsLHRoaXMucG9vbGVkQ2FjaGVMYW5lcz0wLHRoaXMuZm9ybVN0YXRlPWEsdGhpcy5pbmNvbXBsZXRlVHJhbnNpdGlvbnM9bmV3IE1hcH1mdW5jdGlvbiBpRihlLHQsbixyLGwsYSxvLGksdSxzLGMpe3JldHVybiBlPW5ldyBpVChlLHQsbixpLHUsYyksMT09PXQ/KHQ9MSwhMD09PWEmJih0fD0yNCkpOnQ9MCxhPWlTKDMsbnVsbCxudWxsLHQpLGUuY3VycmVudD1hLGEuc3RhdGVOb2RlPWUsdD1hcCgpLHQucmVmQ291bnQrKyxlLnBvb2xlZENhY2hlPXQsdC5yZWZDb3VudCsrLGEubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDpuLGNhY2hlOnR9LG5UKGEpLGV9ZnVuY3Rpb24gaU0oZSl7aWYoIWUpcmV0dXJuIHR4O2U9ZS5fcmVhY3RJbnRlcm5hbHM7ZTp7aWYodHcoZSkhPT1lfHwxIT09ZS50YWcpdGhyb3cgRXJyb3IoaSgxNzApKTt2YXIgdD1lO2Rve3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnQ9dC5zdGF0ZU5vZGUuY29udGV4dDticmVhayBlO2Nhc2UgMTppZih0TCh0LnR5cGUpKXt0PXQuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIGV9fXQ9dC5yZXR1cm59d2hpbGUobnVsbCE9PXQpO3Rocm93IEVycm9yKGkoMTcxKSl9aWYoMT09PWUudGFnKXt2YXIgbj1lLnR5cGU7aWYodEwobikpcmV0dXJuIHRNKGUsbix0KX1yZXR1cm4gdH1mdW5jdGlvbiBpTyhlLHQsbixyLGwsYSxvLGksdSxzLGMpe3JldHVybihlPWlGKG4sciwhMCxlLGwsYSxvLGksdSxzLGMpKS5jb250ZXh0PWlNKG51bGwpLChsPW5NKHI9b1gobj1lLmN1cnJlbnQpKSkuY2FsbGJhY2s9bnVsbCE9dD90Om51bGwsbk8obixsLHIpLGUuY3VycmVudC5sYW5lcz1yLG8yKGUsciksbnYoZSksZX1mdW5jdGlvbiBpUihlLHQsbixyKXt2YXIgbD10LmN1cnJlbnQsYT1vWChsKTtyZXR1cm4gbj1pTShuKSxudWxsPT09dC5jb250ZXh0P3QuY29udGV4dD1uOnQucGVuZGluZ0NvbnRleHQ9biwodD1uTShhKSkucGF5bG9hZD17ZWxlbWVudDplfSxudWxsIT09KHI9dm9pZCAwPT09cj9udWxsOnIpJiYodC5jYWxsYmFjaz1yKSxudWxsIT09KGU9bk8obCx0LGEpKSYmKG9HKGUsbCxhKSxuUihlLGwsYSkpLGF9ZnVuY3Rpb24gaUQoZSl7cmV0dXJuKGU9ZS5jdXJyZW50KS5jaGlsZD8oZS5jaGlsZC50YWcsZS5jaGlsZC5zdGF0ZU5vZGUpOm51bGx9ZnVuY3Rpb24gaUEoZSx0KXtpZihudWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PWUuZGVoeWRyYXRlZCl7dmFyIG49ZS5yZXRyeUxhbmU7ZS5yZXRyeUxhbmU9MCE9PW4mJm48dD9uOnR9fWZ1bmN0aW9uIGlJKGUsdCl7aUEoZSx0KSwoZT1lLmFsdGVybmF0ZSkmJmlBKGUsdCl9ZnVuY3Rpb24gaVUoZSl7aWYoMTM9PT1lLnRhZyl7dmFyIHQ9bnMoZSw2NzEwODg2NCk7bnVsbCE9PXQmJm9HKHQsZSw2NzEwODg2NCksaUkoZSw2NzEwODg2NCl9fWlaPWZ1bmN0aW9uKGUsdCxuKXtpZihudWxsIT09ZSl7aWYoZS5tZW1vaXplZFByb3BzIT09dC5wZW5kaW5nUHJvcHN8fHRQLmN1cnJlbnQpbFI9ITA7ZWxzZXtpZigwPT0oZS5sYW5lcyZuKSYmMD09KDEyOCZ0LmZsYWdzKSlyZXR1cm4gbFI9ITEsZnVuY3Rpb24oZSx0LG4pe3N3aXRjaCh0LnRhZyl7Y2FzZSAzOmxxKHQpLGF0KHQsYWQsZS5tZW1vaXplZFN0YXRlLmNhY2hlKSxudCgpO2JyZWFrO2Nhc2UgMjc6Y2FzZSA1OiQodCk7YnJlYWs7Y2FzZSAxOnRMKHQudHlwZSkmJnRPKHQpO2JyZWFrO2Nhc2UgNDpWKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDphdCh0LHQudHlwZS5fY29udGV4dCx0Lm1lbW9pemVkUHJvcHMudmFsdWUpO2JyZWFrO2Nhc2UgMTM6dmFyIHI9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1yKXtpZihudWxsIT09ci5kZWh5ZHJhdGVkKXJldHVybiBycih0KSx0LmZsYWdzfD0xMjgsbnVsbDtpZigwIT0obiZ0LmNoaWxkLmNoaWxkTGFuZXMpKXJldHVybiBsWihlLHQsbik7cmV0dXJuIHJyKHQpLG51bGwhPT0oZT1sNihlLHQsbikpP2Uuc2libGluZzpudWxsfXJyKHQpO2JyZWFrO2Nhc2UgMTk6aWYocj0wIT0obiZ0LmNoaWxkTGFuZXMpLDAhPSgxMjgmZS5mbGFncykpe2lmKHIpcmV0dXJuIGwzKGUsdCxuKTt0LmZsYWdzfD0xMjh9dmFyIGw9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1sJiYobC5yZW5kZXJpbmc9bnVsbCxsLnRhaWw9bnVsbCxsLmxhc3RFZmZlY3Q9bnVsbCksZyhyaSxyaS5jdXJyZW50KSwhcilyZXR1cm4gbnVsbDticmVhaztjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIHQubGFuZXM9MCxsQihlLHQsbik7Y2FzZSAyNDphdCh0LGFkLGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSl9cmV0dXJuIGw2KGUsdCxuKX0oZSx0LG4pO2xSPTAhPSgxMzEwNzImZS5mbGFncyl9fWVsc2UgbFI9ITEsdFomJjAhPSgxMDQ4NTc2JnQuZmxhZ3MpJiZ0cSh0LHRCLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMjp2YXIgcj10LnR5cGU7bDQoZSx0KSxlPXQucGVuZGluZ1Byb3BzO3ZhciBsPXRfKHQsdHouY3VycmVudCk7YWEodCxuKSxsPXJFKG51bGwsdCxyLGUsbCxuKTt2YXIgYT1yTigpO3JldHVybiB0LmZsYWdzfD0xLCJvYmplY3QiPT10eXBlb2YgbCYmbnVsbCE9PWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnJlbmRlciYmdm9pZCAwPT09bC4kJHR5cGVvZj8odC50YWc9MSx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdEwocik/KGE9ITAsdE8odCkpOmE9ITEsdC5tZW1vaXplZFN0YXRlPW51bGwhPT1sLnN0YXRlJiZ2b2lkIDAhPT1sLnN0YXRlP2wuc3RhdGU6bnVsbCxuVCh0KSxsLnVwZGF0ZXI9bHcsdC5zdGF0ZU5vZGU9bCxsLl9yZWFjdEludGVybmFscz10LGx4KHQscixlLG4pLHQ9bEgobnVsbCx0LHIsITAsYSxuKSk6KHQudGFnPTAsdFomJmEmJnRLKHQpLGxEKG51bGwsdCxsLG4pLHQ9dC5jaGlsZCksdDtjYXNlIDE2OnI9dC5lbGVtZW50VHlwZTtlOntzd2l0Y2gobDQoZSx0KSxlPXQucGVuZGluZ1Byb3BzLHI9KGw9ci5faW5pdCkoci5fcGF5bG9hZCksdC50eXBlPXIsbD10LnRhZz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlyZXR1cm4gaUMoZSk/MTowO2lmKG51bGwhPWUpe2lmKChlPWUuJCR0eXBlb2YpPT09eClyZXR1cm4gMTE7aWYoZT09PU4pcmV0dXJuIDE0fXJldHVybiAyfShyKSxlPWxiKHIsZSksbCl7Y2FzZSAwOnQ9bCQobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTp0PWxXKG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDExOnQ9bEEobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTQ6dD1sSShudWxsLHQscixsYihyLnR5cGUsZSksbik7YnJlYWsgZX10aHJvdyBFcnJvcihpKDMwNixyLCIiKSl9cmV0dXJuIHQ7Y2FzZSAwOnJldHVybiByPXQudHlwZSxsPXQucGVuZGluZ1Byb3BzLGw9dC5lbGVtZW50VHlwZT09PXI/bDpsYihyLGwpLGwkKGUsdCxyLGwsbik7Y2FzZSAxOnJldHVybiByPXQudHlwZSxsPXQucGVuZGluZ1Byb3BzLGw9dC5lbGVtZW50VHlwZT09PXI/bDpsYihyLGwpLGxXKGUsdCxyLGwsbik7Y2FzZSAzOmU6e2lmKGxxKHQpLG51bGw9PT1lKXRocm93IEVycm9yKGkoMzg3KSk7bD10LnBlbmRpbmdQcm9wcyxyPShhPXQubWVtb2l6ZWRTdGF0ZSkuZWxlbWVudCxuRihlLHQpLG5VKHQsbCxudWxsLG4pO3ZhciBvPXQubWVtb2l6ZWRTdGF0ZTtpZihhdCh0LGFkLGw9by5jYWNoZSksbCE9PWEuY2FjaGUmJmFsKHQsYWQsbiksbkkoKSxsPW8uZWxlbWVudCxhLmlzRGVoeWRyYXRlZCl7aWYoYT17ZWxlbWVudDpsLGlzRGVoeWRyYXRlZDohMSxjYWNoZTpvLmNhY2hlfSx0LnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1hLHQubWVtb2l6ZWRTdGF0ZT1hLDI1NiZ0LmZsYWdzKXtyPWxQKEVycm9yKGkoNDIzKSksdCksdD1sSyhlLHQsbCxuLHIpO2JyZWFrIGV9aWYobCE9PXIpe3I9bFAoRXJyb3IoaSg0MjQpKSx0KSx0PWxLKGUsdCxsLG4scik7YnJlYWsgZX1mb3IodEc9Y2wodC5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSx0WD10LHRaPSEwLHRKPW51bGwsdDA9ITAsbj1uNih0LG51bGwsbCxuKSx0LmNoaWxkPW47bjspbi5mbGFncz0tMyZuLmZsYWdzfDQwOTYsbj1uLnNpYmxpbmd9ZWxzZXtpZihudCgpLGw9PT1yKXt0PWw2KGUsdCxuKTticmVhayBlfWxEKGUsdCxsLG4pfXQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDI2OnJldHVybiBsUShlLHQpLG49dC5tZW1vaXplZFN0YXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighKHQ9KHQ9SS5jdXJyZW50KT9jZih0KTpudWxsKSl0aHJvdyBFcnJvcihpKDQ0NikpO3N3aXRjaChlKXtjYXNlIm1ldGEiOmNhc2UidGl0bGUiOnJldHVybiBudWxsO2Nhc2Uic3R5bGUiOnJldHVybiJzdHJpbmciPT10eXBlb2Ygbi5wcmVjZWRlbmNlJiYic3RyaW5nIj09dHlwZW9mIG4uaHJlZj8obj1jbShuLmhyZWYpLChlPSh0PWVBKHQpLmhvaXN0YWJsZVN0eWxlcykuZ2V0KG4pKXx8KGU9e3R5cGU6InN0eWxlIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH0sdC5zZXQobixlKSksZSk6e3R5cGU6InZvaWQiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfTtjYXNlImxpbmsiOmlmKCJzdHlsZXNoZWV0Ij09PW4ucmVsJiYic3RyaW5nIj09dHlwZW9mIG4uaHJlZiYmInN0cmluZyI9PXR5cGVvZiBuLnByZWNlZGVuY2Upe2U9Y20obi5ocmVmKTt2YXIgcixsLGEsbyx1PWVBKHQpLmhvaXN0YWJsZVN0eWxlcyxzPXUuZ2V0KGUpO3JldHVybiBzfHwodD10Lm93bmVyRG9jdW1lbnR8fHQscz17dHlwZToic3R5bGVzaGVldCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOntsb2FkaW5nOjAscHJlbG9hZDpudWxsfX0sdS5zZXQoZSxzKSxjcy5oYXMoZSl8fChyPXQsbD1lLGE9e3JlbDoicHJlbG9hZCIsYXM6InN0eWxlIixocmVmOm4uaHJlZixjcm9zc09yaWdpbjpuLmNyb3NzT3JpZ2luLGludGVncml0eTpuLmludGVncml0eSxtZWRpYTpuLm1lZGlhLGhyZWZMYW5nOm4uaHJlZkxhbmcscmVmZXJyZXJQb2xpY3k6bi5yZWZlcnJlclBvbGljeX0sbz1zLnN0YXRlLGNzLnNldChsLGEpLHIucXVlcnlTZWxlY3RvcihjaChsKSl8fChyLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPSJwcmVsb2FkIl1bYXM9InN0eWxlIl1bJytsKyJdIik/by5sb2FkaW5nPTE6KGw9ci5jcmVhdGVFbGVtZW50KCJsaW5rIiksby5wcmVsb2FkPWwsbC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe3JldHVybiBvLmxvYWRpbmd8PTF9KSxsLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe3JldHVybiBvLmxvYWRpbmd8PTJ9KSxzRyhsLCJsaW5rIixhKSxlSShsKSxyLmhlYWQuYXBwZW5kQ2hpbGQobCkpKSkpLHN9cmV0dXJuIG51bGw7Y2FzZSJzY3JpcHQiOnJldHVybiJzdHJpbmciPT10eXBlb2Ygbi5zcmMmJiEwPT09bi5hc3luYz8obj1jeShuLnNyYyksKGU9KHQ9ZUEodCkuaG9pc3RhYmxlU2NyaXB0cykuZ2V0KG4pKXx8KGU9e3R5cGU6InNjcmlwdCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9LHQuc2V0KG4sZSkpLGUpOnt0eXBlOiJ2b2lkIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH07ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDQ0NCxlKSl9fSh0LnR5cGUsbnVsbD09PWU/bnVsbDplLm1lbW9pemVkUHJvcHMsdC5wZW5kaW5nUHJvcHMpLG51bGwhPT1lfHx0Wnx8bnVsbCE9PW58fChuPXQudHlwZSxlPXQucGVuZGluZ1Byb3BzLChyPXMxKEkuY3VycmVudCkuY3JlYXRlRWxlbWVudChuKSlbZUVdPXQscltleF09ZSxzRyhyLG4sZSksZUkociksdC5zdGF0ZU5vZGU9ciksbnVsbDtjYXNlIDI3OnJldHVybiAkKHQpLG51bGw9PT1lJiZ0WiYmKHI9dC5zdGF0ZU5vZGU9Y3UodC50eXBlLHQucGVuZGluZ1Byb3BzLEkuY3VycmVudCksdFg9dCx0MD0hMCx0Rz1jbChyLmZpcnN0Q2hpbGQpKSxyPXQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG51bGwhPT1lfHx0Wj9sRChlLHQscixuKTp0LmNoaWxkPW40KHQsbnVsbCxyLG4pLGxRKGUsdCksdC5jaGlsZDtjYXNlIDU6cmV0dXJuIG51bGw9PT1lJiZ0WiYmKChsPXI9dEcpP3QzKHQsbCl8fCh0OCh0KSYmdDUoKSx0Rz1jYShsKSxhPXRYLHRHJiZ0Myh0LHRHKT90MShhLGwpOih0Mih0WCx0KSx0Wj0hMSx0WD10LHRHPXIpKToodDgodCkmJnQ1KCksdDIodFgsdCksdFo9ITEsdFg9dCx0Rz1yKSksJCh0KSxsPXQudHlwZSxhPXQucGVuZGluZ1Byb3BzLG89bnVsbCE9PWU/ZS5tZW1vaXplZFByb3BzOm51bGwscj1hLmNoaWxkcmVuLHM0KGwsYSk/cj1udWxsOm51bGwhPT1vJiZzNChsLG8pJiYodC5mbGFnc3w9MzIpLG51bGwhPT10Lm1lbW9pemVkU3RhdGUmJihsPXJFKGUsdCxyUCxudWxsLG51bGwsbiksQi5fY3VycmVudFZhbHVlPWwsbFImJm51bGwhPT1lJiZlLm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSE9PWwmJmFsKHQsQixuKSksbFEoZSx0KSxsRChlLHQscixuKSx0LmNoaWxkO2Nhc2UgNjpyZXR1cm4gbnVsbD09PWUmJnRaJiYoKHI9IiIhPT10LnBlbmRpbmdQcm9wcywoZT1uPXRHKSYmcik/dDQodCxlKXx8KHQ4KHQpJiZ0NSgpLHRHPWNhKGUpLHI9dFgsdEcmJnQ0KHQsdEcpP3QxKHIsZSk6KHQyKHRYLHQpLHRaPSExLHRYPXQsdEc9bikpOih0OCh0KSYmdDUoKSx0Mih0WCx0KSx0Wj0hMSx0WD10LHRHPW4pKSxudWxsO2Nhc2UgMTM6cmV0dXJuIGxaKGUsdCxuKTtjYXNlIDQ6cmV0dXJuIFYodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyPXQucGVuZGluZ1Byb3BzLG51bGw9PT1lP3QuY2hpbGQ9bjQodCxudWxsLHIsbik6bEQoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiByPXQudHlwZSxsPXQucGVuZGluZ1Byb3BzLGw9dC5lbGVtZW50VHlwZT09PXI/bDpsYihyLGwpLGxBKGUsdCxyLGwsbik7Y2FzZSA3OnJldHVybiBsRChlLHQsdC5wZW5kaW5nUHJvcHMsbiksdC5jaGlsZDtjYXNlIDg6Y2FzZSAxMjpyZXR1cm4gbEQoZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAxMDplOntpZihyPXQudHlwZS5fY29udGV4dCxsPXQucGVuZGluZ1Byb3BzLGE9dC5tZW1vaXplZFByb3BzLGF0KHQscixvPWwudmFsdWUpLG51bGwhPT1hKXtpZih0RChhLnZhbHVlLG8pKXtpZihhLmNoaWxkcmVuPT09bC5jaGlsZHJlbiYmIXRQLmN1cnJlbnQpe3Q9bDYoZSx0LG4pO2JyZWFrIGV9fWVsc2UgYWwodCxyLG4pfWxEKGUsdCxsLmNoaWxkcmVuLG4pLHQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDk6cmV0dXJuIGw9dC50eXBlLHI9dC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sYWEodCxuKSxyPXIobD1hbyhsKSksdC5mbGFnc3w9MSxsRChlLHQscixuKSx0LmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIGw9bGIocj10LnR5cGUsdC5wZW5kaW5nUHJvcHMpLGw9bGIoci50eXBlLGwpLGxJKGUsdCxyLGwsbik7Y2FzZSAxNTpyZXR1cm4gbFUoZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDE3OnJldHVybiByPXQudHlwZSxsPXQucGVuZGluZ1Byb3BzLGw9dC5lbGVtZW50VHlwZT09PXI/bDpsYihyLGwpLGw0KGUsdCksdC50YWc9MSx0TChyKT8oZT0hMCx0Tyh0KSk6ZT0hMSxhYSh0LG4pLGxDKHQscixsKSxseCh0LHIsbCxuKSxsSChudWxsLHQsciwhMCxlLG4pO2Nhc2UgMTk6cmV0dXJuIGwzKGUsdCxuKTtjYXNlIDIyOnJldHVybiBsQihlLHQsbik7Y2FzZSAyNDpyZXR1cm4gYWEodCxuKSxyPWFvKGFkKSxudWxsPT09ZT8obnVsbD09PShsPWFrKCkpJiYobD1vayxhPWFwKCksbC5wb29sZWRDYWNoZT1hLGEucmVmQ291bnQrKyxudWxsIT09YSYmKGwucG9vbGVkQ2FjaGVMYW5lc3w9biksbD1hKSx0Lm1lbW9pemVkU3RhdGU9e3BhcmVudDpyLGNhY2hlOmx9LG5UKHQpLGF0KHQsYWQsbCkpOigwIT0oZS5sYW5lcyZuKSYmKG5GKGUsdCksblUodCxudWxsLG51bGwsbiksbkkoKSksbD1lLm1lbW9pemVkU3RhdGUsYT10Lm1lbW9pemVkU3RhdGUsbC5wYXJlbnQhPT1yPyhsPXtwYXJlbnQ6cixjYWNoZTpyfSx0Lm1lbW9pemVkU3RhdGU9bCwwPT09dC5sYW5lcyYmKHQubWVtb2l6ZWRTdGF0ZT10LnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1sKSxhdCh0LGFkLHIpKTooYXQodCxhZCxyPWEuY2FjaGUpLHIhPT1sLmNhY2hlJiZhbCh0LGFkLG4pKSksbEQoZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGR9dGhyb3cgRXJyb3IoaSgxNTYsdC50YWcpKX07dmFyIGlCPSExO2Z1bmN0aW9uIGlWKGUsdCxuKXtpZihpQilyZXR1cm4gZSh0LG4pO2lCPSEwO3RyeXtyZXR1cm4gbzQoZSx0LG4pfWZpbmFsbHl7aUI9ITEsKG51bGwhPT10Z3x8bnVsbCE9PXR5KSYmKG82KCksdGsoKSl9fWZ1bmN0aW9uIGlRKGUsdCl7dmFyIG49ZS5zdGF0ZU5vZGU7aWYobnVsbD09PW4pcmV0dXJuIG51bGw7dmFyIHI9ZUQobik7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7c3dpdGNoKG49clt0XSx0KXtjYXNlIm9uQ2xpY2siOmNhc2Uib25DbGlja0NhcHR1cmUiOmNhc2Uib25Eb3VibGVDbGljayI6Y2FzZSJvbkRvdWJsZUNsaWNrQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRG93biI6Y2FzZSJvbk1vdXNlRG93bkNhcHR1cmUiOmNhc2Uib25Nb3VzZU1vdmUiOmNhc2Uib25Nb3VzZU1vdmVDYXB0dXJlIjpjYXNlIm9uTW91c2VVcCI6Y2FzZSJvbk1vdXNlVXBDYXB0dXJlIjpjYXNlIm9uTW91c2VFbnRlciI6KHI9IXIuZGlzYWJsZWQpfHwocj0hKCJidXR0b24iPT09KGU9ZS50eXBlKXx8ImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWUpKSxlPSFyO2JyZWFrO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IEVycm9yKGkoMjMxLHQsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgaSQ9ITE7aWYoZSQpdHJ5e3ZhciBpaj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWosInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtpJD0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsaWosaWopLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0Iixpaixpail9Y2F0Y2goZSl7aSQ9ITF9ZnVuY3Rpb24gaVcoZSl7dmFyIHQ9ZS5rZXlDb2RlO3JldHVybiJjaGFyQ29kZSJpbiBlPzA9PT0oZT1lLmNoYXJDb2RlKSYmMTM9PT10JiYoZT0xMyk6ZT10LDEwPT09ZSYmKGU9MTMpLDMyPD1lfHwxMz09PWU/ZTowfWZ1bmN0aW9uIGlIKCl7cmV0dXJuITB9ZnVuY3Rpb24gaXEoKXtyZXR1cm4hMX1mdW5jdGlvbiBpSyhlKXtmdW5jdGlvbiB0KHQsbixyLGwsYSl7Zm9yKHZhciBvIGluIHRoaXMuX3JlYWN0TmFtZT10LHRoaXMuX3RhcmdldEluc3Q9cix0aGlzLnR5cGU9bix0aGlzLm5hdGl2ZUV2ZW50PWwsdGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbCxlKWUuaGFzT3duUHJvcGVydHkobykmJih0PWVbb10sdGhpc1tvXT10P3QobCk6bFtvXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShudWxsIT1sLmRlZmF1bHRQcmV2ZW50ZWQ/bC5kZWZhdWx0UHJldmVudGVkOiExPT09bC5yZXR1cm5WYWx1ZSk/aUg6aXEsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1pcSx0aGlzfXJldHVybiB1KHQucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKToidW5rbm93biIhPXR5cGVvZiBlLnJldHVyblZhbHVlJiYoZS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9aUgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnN0b3BQcm9wYWdhdGlvbj9lLnN0b3BQcm9wYWdhdGlvbigpOiJ1bmtub3duIiE9dHlwZW9mIGUuY2FuY2VsQnViYmxlJiYoZS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9aUgpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7fSxpc1BlcnNpc3RlbnQ6aUh9KSx0fXZhciBpWSxpWCxpRyxpWixpSixpMCxpMSxpMj17ZXZlbnRQaGFzZTowLGJ1YmJsZXM6MCxjYW5jZWxhYmxlOjAsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDowLGlzVHJ1c3RlZDowfSxpMz1pSyhpMiksaTQ9dSh7fSxpMix7dmlldzowLGRldGFpbDowfSksaTY9aUsoaTQpLGk4PXUoe30saTQse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6dWksYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUucmVsYXRlZFRhcmdldD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuIm1vdmVtZW50WCJpbiBlP2UubW92ZW1lbnRYOihlIT09aTEmJihpMSYmIm1vdXNlbW92ZSI9PT1lLnR5cGU/KGlKPWUuc2NyZWVuWC1pMS5zY3JlZW5YLGkwPWUuc2NyZWVuWS1pMS5zY3JlZW5ZKTppMD1pSj0wLGkxPWUpLGlKKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFkiaW4gZT9lLm1vdmVtZW50WTppMH19KSxpNT1pSyhpOCksaTc9aUsodSh7fSxpOCx7ZGF0YVRyYW5zZmVyOjB9KSksaTk9aUsodSh7fSxpNCx7cmVsYXRlZFRhcmdldDowfSkpLHVlPWlLKHUoe30saTIse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pKSx1dD1pSyh1KHt9LGkyLHtjbGlwYm9hcmREYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJjbGlwYm9hcmREYXRhImluIGU/ZS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pKSx1bj1pSyh1KHt9LGkyLHtkYXRhOjB9KSksdXI9e0VzYzoiRXNjYXBlIixTcGFjZWJhcjoiICIsTGVmdDoiQXJyb3dMZWZ0IixVcDoiQXJyb3dVcCIsUmlnaHQ6IkFycm93UmlnaHQiLERvd246IkFycm93RG93biIsRGVsOiJEZWxldGUiLFdpbjoiT1MiLE1lbnU6IkNvbnRleHRNZW51IixBcHBzOiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixNb3pQcmludGFibGVLZXk6IlVuaWRlbnRpZmllZCJ9LHVsPXs4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTI6IkNsZWFyIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjYXBlIiwzMjoiICIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkFycm93TGVmdCIsMzg6IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0MDoiQXJyb3dEb3duIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwxMTQ6IkYzIiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6IkY5IiwxMjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoiRjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Nyb2xsTG9jayIsMjI0OiJNZXRhIn0sdWE9e0FsdDoiYWx0S2V5IixDb250cm9sOiJjdHJsS2V5IixNZXRhOiJtZXRhS2V5IixTaGlmdDoic2hpZnRLZXkifTtmdW5jdGlvbiB1byhlKXt2YXIgdD10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiB0LmdldE1vZGlmaWVyU3RhdGU/dC5nZXRNb2RpZmllclN0YXRlKGUpOiEhKGU9dWFbZV0pJiYhIXRbZV19ZnVuY3Rpb24gdWkoKXtyZXR1cm4gdW99dmFyIHV1PWlLKHUoe30saTQse2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9dXJbZS5rZXldfHxlLmtleTtpZigiVW5pZGVudGlmaWVkIiE9PXQpcmV0dXJuIHR9cmV0dXJuImtleXByZXNzIj09PWUudHlwZT8xMz09PShlPWlXKGUpKT8iRW50ZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP3VsW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTp1aSxjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP2lXKGUpOjB9LGtleUNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP2lXKGUpOiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT9lLmtleUNvZGU6MH19KSksdXM9aUsodSh7fSxpOCx7cG9pbnRlcklkOjAsd2lkdGg6MCxoZWlnaHQ6MCxwcmVzc3VyZTowLHRhbmdlbnRpYWxQcmVzc3VyZTowLHRpbHRYOjAsdGlsdFk6MCx0d2lzdDowLHBvaW50ZXJUeXBlOjAsaXNQcmltYXJ5OjB9KSksdWM9aUsodSh7fSxpNCx7dG91Y2hlczowLHRhcmdldFRvdWNoZXM6MCxjaGFuZ2VkVG91Y2hlczowLGFsdEtleTowLG1ldGFLZXk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxnZXRNb2RpZmllclN0YXRlOnVpfSkpLHVmPWlLKHUoe30saTIse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSkpLHVkPWlLKHUoe30saTgse2RlbHRhWDpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFYImluIGU/ZS5kZWx0YVg6IndoZWVsRGVsdGFYImluIGU/LWUud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVkiaW4gZT9lLmRlbHRhWToid2hlZWxEZWx0YVkiaW4gZT8tZS53aGVlbERlbHRhWToid2hlZWxEZWx0YSJpbiBlPy1lLndoZWVsRGVsdGE6MH0sZGVsdGFaOjAsZGVsdGFNb2RlOjB9KSksdXA9ITEsdW09bnVsbCx1aD1udWxsLHVnPW51bGwsdXk9bmV3IE1hcCx1dj1uZXcgTWFwLHViPVtdLHVrPSJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQiLnNwbGl0KCIgIik7ZnVuY3Rpb24gdXcoZSx0KXtzd2l0Y2goZSl7Y2FzZSJmb2N1c2luIjpjYXNlImZvY3Vzb3V0Ijp1bT1udWxsO2JyZWFrO2Nhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdsZWF2ZSI6dWg9bnVsbDticmVhaztjYXNlIm1vdXNlb3ZlciI6Y2FzZSJtb3VzZW91dCI6dWc9bnVsbDticmVhaztjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJvdXQiOnV5LmRlbGV0ZSh0LnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOnV2LmRlbGV0ZSh0LnBvaW50ZXJJZCl9fWZ1bmN0aW9uIHVTKGUsdCxuLHIsbCxhKXtyZXR1cm4gbnVsbD09PWV8fGUubmF0aXZlRXZlbnQhPT1hPyhlPXtibG9ja2VkT246dCxkb21FdmVudE5hbWU6bixldmVudFN5c3RlbUZsYWdzOnIsbmF0aXZlRXZlbnQ6YSx0YXJnZXRDb250YWluZXJzOltsXX0sbnVsbCE9PXQmJm51bGwhPT0odD1lTyh0KSkmJmlVKHQpKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLHQ9ZS50YXJnZXRDb250YWluZXJzLG51bGwhPT1sJiYtMT09PXQuaW5kZXhPZihsKSYmdC5wdXNoKGwpKSxlfWZ1bmN0aW9uIHVDKGUpe3ZhciB0PWVNKGUudGFyZ2V0KTtpZihudWxsIT09dCl7dmFyIG49dHcodCk7aWYobnVsbCE9PW4pe2lmKDEzPT09KHQ9bi50YWcpKXtpZihudWxsIT09KHQ9dFMobikpKXtlLmJsb2NrZWRPbj10LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZWs7dHJ5e3JldHVybiBlaz1lLHQoKX1maW5hbGx5e2VrPW59fShlLnByaW9yaXR5LGZ1bmN0aW9uKCl7aWYoMTM9PT1uLnRhZyl7dmFyIGU9b1gobiksdD1ucyhuLGUpO251bGwhPT10JiZvRyh0LG4sZSksaUkobixlKX19KTtyZXR1cm59fWVsc2UgaWYoMz09PXQmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPTM9PT1uLnRhZz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiB1RShlKXtpZihudWxsIT09ZS5ibG9ja2VkT24pcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49dUQoZS5uYXRpdmVFdmVudCk7aWYobnVsbCE9PW4pcmV0dXJuIG51bGwhPT0odD1lTyhuKSkmJmlVKHQpLGUuYmxvY2tlZE9uPW4sITE7dmFyIHI9bmV3KG49ZS5uYXRpdmVFdmVudCkuY29uc3RydWN0b3Iobi50eXBlLG4pO3RtPXIsbi50YXJnZXQuZGlzcGF0Y2hFdmVudChyKSx0bT1udWxsLHQuc2hpZnQoKX1yZXR1cm4hMH1mdW5jdGlvbiB1eChlLHQsbil7dUUoZSkmJm4uZGVsZXRlKHQpfWZ1bmN0aW9uIHV6KCl7dXA9ITEsbnVsbCE9PXVtJiZ1RSh1bSkmJih1bT1udWxsKSxudWxsIT09dWgmJnVFKHVoKSYmKHVoPW51bGwpLG51bGwhPT11ZyYmdUUodWcpJiYodWc9bnVsbCksdXkuZm9yRWFjaCh1eCksdXYuZm9yRWFjaCh1eCl9ZnVuY3Rpb24gdVAoZSx0KXtlLmJsb2NrZWRPbj09PXQmJihlLmJsb2NrZWRPbj1udWxsLHVwfHwodXA9ITAsYS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKGEudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksdXopKSl9dmFyIHVOPW51bGw7ZnVuY3Rpb24gdV8oZSl7dU4hPT1lJiYodU49ZSxhLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soYS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxmdW5jdGlvbigpe3VOPT09ZSYmKHVOPW51bGwpO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCs9Myl7dmFyIG49ZVt0XSxyPWVbdCsxXSxsPWVbdCsyXTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7aWYobnVsbD09PXVJKHJ8fG4pKWNvbnRpbnVlO2JyZWFrfXZhciBhPWVPKG4pO251bGwhPT1hJiYoZS5zcGxpY2UodCwzKSx0LT0zLGxsKGEse3BlbmRpbmc6ITAsZGF0YTpsLG1ldGhvZDpuLm1ldGhvZCxhY3Rpb246cn0scixsKSl9fSkpfWZ1bmN0aW9uIHVMKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHVQKHQsZSl9bnVsbCE9PXVtJiZ1UCh1bSxlKSxudWxsIT09dWgmJnVQKHVoLGUpLG51bGwhPT11ZyYmdVAodWcsZSksdXkuZm9yRWFjaCh0KSx1di5mb3JFYWNoKHQpO2Zvcih2YXIgbj0wO248dWIubGVuZ3RoO24rKyl7dmFyIHI9dWJbbl07ci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCl9Zm9yKDswPHViLmxlbmd0aCYmbnVsbD09PShuPXViWzBdKS5ibG9ja2VkT247KXVDKG4pLG51bGw9PT1uLmJsb2NrZWRPbiYmdWIuc2hpZnQoKTtpZihudWxsIT0obj0oZS5vd25lckRvY3VtZW50fHxlKS4kJHJlYWN0Rm9ybVJlcGxheSkpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrPTMpe3ZhciBsPW5bcl0sYT1uW3IrMV0sbz1lRChsKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSlvfHx1XyhuKTtlbHNlIGlmKG8pe3ZhciBpPW51bGw7aWYoYSYmYS5oYXNBdHRyaWJ1dGUoImZvcm1BY3Rpb24iKSl7aWYobD1hLG89ZUQoYSkpaT1vLmZvcm1BY3Rpb247ZWxzZSBpZihudWxsIT09dUkobCkpY29udGludWV9ZWxzZSBpPW8uYWN0aW9uOyJmdW5jdGlvbiI9PXR5cGVvZiBpP25bcisxXT1pOihuLnNwbGljZShyLDMpLHItPTMpLHVfKG4pfX19dmFyIHVUPXMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsdUY9ITA7ZnVuY3Rpb24gdU0oZSx0LG4scil7dmFyIGw9ZWssYT11VC50cmFuc2l0aW9uO3VULnRyYW5zaXRpb249bnVsbDt0cnl7ZWs9Mix1UihlLHQsbixyKX1maW5hbGx5e2VrPWwsdVQudHJhbnNpdGlvbj1hfX1mdW5jdGlvbiB1TyhlLHQsbixyKXt2YXIgbD1layxhPXVULnRyYW5zaXRpb247dVQudHJhbnNpdGlvbj1udWxsO3RyeXtlaz04LHVSKGUsdCxuLHIpfWZpbmFsbHl7ZWs9bCx1VC50cmFuc2l0aW9uPWF9fWZ1bmN0aW9uIHVSKGUsdCxuLHIpe2lmKHVGKXt2YXIgbD11RChyKTtpZihudWxsPT09bClzVShlLHQscix1QSxuKSx1dyhlLHIpO2Vsc2UgaWYoZnVuY3Rpb24oZSx0LG4scixsKXtzd2l0Y2godCl7Y2FzZSJmb2N1c2luIjpyZXR1cm4gdW09dVModW0sZSx0LG4scixsKSwhMDtjYXNlImRyYWdlbnRlciI6cmV0dXJuIHVoPXVTKHVoLGUsdCxuLHIsbCksITA7Y2FzZSJtb3VzZW92ZXIiOnJldHVybiB1Zz11Uyh1ZyxlLHQsbixyLGwpLCEwO2Nhc2UicG9pbnRlcm92ZXIiOnZhciBhPWwucG9pbnRlcklkO3JldHVybiB1eS5zZXQoYSx1Uyh1eS5nZXQoYSl8fG51bGwsZSx0LG4scixsKSksITA7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6cmV0dXJuIGE9bC5wb2ludGVySWQsdXYuc2V0KGEsdVModXYuZ2V0KGEpfHxudWxsLGUsdCxuLHIsbCkpLCEwfXJldHVybiExfShsLGUsdCxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZih1dyhlLHIpLDQmdCYmLTE8dWsuaW5kZXhPZihlKSl7Zm9yKDtudWxsIT09bDspe3ZhciBhPWVPKGwpO2lmKG51bGwhPT1hJiZmdW5jdGlvbihlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMzp2YXIgdD1lLnN0YXRlTm9kZTtpZih0LmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe3ZhciBuPWVkKHQucGVuZGluZ0xhbmVzKTswIT09biYmKGZ1bmN0aW9uKGUsdCl7Zm9yKGUucGVuZGluZ0xhbmVzfD0yLGUuZW50YW5nbGVkTGFuZXN8PTI7dDspe3ZhciBuPTE8PDMxLWVpKHQpO2UuZW50YW5nbGVtZW50c1sxXXw9bix0Jj1+bn19KHQsbiksbnYodCksMD09KDYmb2IpJiYob0k9WSgpKzUwMCxuYighMSkpKX1icmVhaztjYXNlIDEzOm82KGZ1bmN0aW9uKCl7dmFyIHQ9bnMoZSwyKTtudWxsIT09dCYmb0codCxlLDIpfSksaUkoZSwyKX19KGEpLG51bGw9PT0oYT11RChyKSkmJnNVKGUsdCxyLHVBLG4pLGE9PT1sKWJyZWFrO2w9YX1udWxsIT09bCYmci5zdG9wUHJvcGFnYXRpb24oKX1lbHNlIHNVKGUsdCxyLG51bGwsbil9fWZ1bmN0aW9uIHVEKGUpe3JldHVybiB1SShlPXRoKGUpKX12YXIgdUE9bnVsbDtmdW5jdGlvbiB1SShlKXtpZih1QT1udWxsLG51bGwhPT0oZT1lTShlKSkpe3ZhciB0PXR3KGUpO2lmKG51bGw9PT10KWU9bnVsbDtlbHNle3ZhciBuPXQudGFnO2lmKDEzPT09bil7aWYobnVsbCE9PShlPXRTKHQpKSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzPT09bil7aWYodC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gMz09PXQudGFnP3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSB0IT09ZSYmKGU9bnVsbCl9fXJldHVybiB1QT1lLG51bGx9ZnVuY3Rpb24gdVUoZSl7c3dpdGNoKGUpe2Nhc2UiY2FuY2VsIjpjYXNlImNsaWNrIjpjYXNlImNsb3NlIjpjYXNlImNvbnRleHRtZW51IjpjYXNlImNvcHkiOmNhc2UiY3V0IjpjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOmNhc2UiZm9jdXNpbiI6Y2FzZSJmb2N1c291dCI6Y2FzZSJpbnB1dCI6Y2FzZSJpbnZhbGlkIjpjYXNlImtleWRvd24iOmNhc2Uia2V5cHJlc3MiOmNhc2Uia2V5dXAiOmNhc2UibW91c2Vkb3duIjpjYXNlIm1vdXNldXAiOmNhc2UicGFzdGUiOmNhc2UicGF1c2UiOmNhc2UicGxheSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJ1cCI6Y2FzZSJyYXRlY2hhbmdlIjpjYXNlInJlc2V0IjpjYXNlInJlc2l6ZSI6Y2FzZSJzZWVrZWQiOmNhc2Uic3VibWl0IjpjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNoc3RhcnQiOmNhc2Uidm9sdW1lY2hhbmdlIjpjYXNlImNoYW5nZSI6Y2FzZSJzZWxlY3Rpb25jaGFuZ2UiOmNhc2UidGV4dElucHV0IjpjYXNlImNvbXBvc2l0aW9uc3RhcnQiOmNhc2UiY29tcG9zaXRpb25lbmQiOmNhc2UiY29tcG9zaXRpb251cGRhdGUiOmNhc2UiYmVmb3JlYmx1ciI6Y2FzZSJhZnRlcmJsdXIiOmNhc2UiYmVmb3JlaW5wdXQiOmNhc2UiYmx1ciI6Y2FzZSJmdWxsc2NyZWVuY2hhbmdlIjpjYXNlImZvY3VzIjpjYXNlImhhc2hjaGFuZ2UiOmNhc2UicG9wc3RhdGUiOmNhc2Uic2VsZWN0IjpjYXNlInNlbGVjdHN0YXJ0IjpyZXR1cm4gMjtjYXNlImRyYWciOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2Uic2Nyb2xsIjpjYXNlInRvZ2dsZSI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2Uid2hlZWwiOmNhc2UibW91c2VlbnRlciI6Y2FzZSJtb3VzZWxlYXZlIjpjYXNlInBvaW50ZXJlbnRlciI6Y2FzZSJwb2ludGVybGVhdmUiOnJldHVybiA4O2Nhc2UibWVzc2FnZSI6c3dpdGNoKFgoKSl7Y2FzZSBHOnJldHVybiAyO2Nhc2UgWjpyZXR1cm4gODtjYXNlIEo6Y2FzZSBlZTpyZXR1cm4gMzI7Y2FzZSBldDpyZXR1cm4gMjY4NDM1NDU2O2RlZmF1bHQ6cmV0dXJuIDMyfWRlZmF1bHQ6cmV0dXJuIDMyfX12YXIgdUI9bnVsbCx1Vj1udWxsLHVRPW51bGw7ZnVuY3Rpb24gdSQoKXtpZih1USlyZXR1cm4gdVE7dmFyIGUsdCxuPXVWLHI9bi5sZW5ndGgsbD0idmFsdWUiaW4gdUI/dUIudmFsdWU6dUIudGV4dENvbnRlbnQsYT1sLmxlbmd0aDtmb3IoZT0wO2U8ciYmbltlXT09PWxbZV07ZSsrKTt2YXIgbz1yLWU7Zm9yKHQ9MTt0PD1vJiZuW3ItdF09PT1sW2EtdF07dCsrKTtyZXR1cm4gdVE9bC5zbGljZShlLDE8dD8xLXQ6dm9pZCAwKX12YXIgdWo9WzksMTMsMjcsMzJdLHVXPWUkJiYiQ29tcG9zaXRpb25FdmVudCJpbiB3aW5kb3csdUg9bnVsbDtlJCYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmKHVIPWRvY3VtZW50LmRvY3VtZW50TW9kZSk7dmFyIHVxPWUkJiYiVGV4dEV2ZW50ImluIHdpbmRvdyYmIXVILHVLPWUkJiYoIXVXfHx1SCYmODx1SCYmMTE+PXVIKSx1WT0hMTtmdW5jdGlvbiB1WChlLHQpe3N3aXRjaChlKXtjYXNlImtleXVwIjpyZXR1cm4gLTEhPT11ai5pbmRleE9mKHQua2V5Q29kZSk7Y2FzZSJrZXlkb3duIjpyZXR1cm4gMjI5IT09dC5rZXlDb2RlO2Nhc2Uia2V5cHJlc3MiOmNhc2UibW91c2Vkb3duIjpjYXNlImZvY3Vzb3V0IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB1RyhlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mKGU9ZS5kZXRhaWwpJiYiZGF0YSJpbiBlP2UuZGF0YTpudWxsfXZhciB1Wj0hMSx1Sj17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gdTAoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10PyEhdUpbZS50eXBlXToidGV4dGFyZWEiPT09dH1mdW5jdGlvbiB1MShlLHQsbixyKXt0YihyKSwwPCh0PXNWKHQsIm9uQ2hhbmdlIikpLmxlbmd0aCYmKG49bmV3IGkzKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgdTI9bnVsbCx1Mz1udWxsO2Z1bmN0aW9uIHU0KGUpe3NNKGUsMCl9ZnVuY3Rpb24gdTYoZSl7aWYoZTQoZVIoZSkpKXJldHVybiBlfWZ1bmN0aW9uIHU4KGUsdCl7aWYoImNoYW5nZSI9PT1lKXJldHVybiB0fXZhciB1NT0hMTtpZihlJCl7aWYoZSQpe3ZhciB1Nz0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighdTcpe3ZhciB1OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1OS5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IiksdTc9ImZ1bmN0aW9uIj09dHlwZW9mIHU5Lm9uaW5wdXR9cj11N31lbHNlIHI9ITE7dTU9ciYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBzZSgpe3UyJiYodTIuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHN0KSx1Mz11Mj1udWxsKX1mdW5jdGlvbiBzdChlKXtpZigidmFsdWUiPT09ZS5wcm9wZXJ0eU5hbWUmJnU2KHUzKSl7dmFyIHQ9W107dTEodCx1MyxlLHRoKGUpKSxpVih1NCx0KX19ZnVuY3Rpb24gc24oZSx0LG4peyJmb2N1c2luIj09PWU/KHNlKCksdTI9dCx1Mz1uLHUyLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixzdCkpOiJmb2N1c291dCI9PT1lJiZzZSgpfWZ1bmN0aW9uIHNyKGUpe2lmKCJzZWxlY3Rpb25jaGFuZ2UiPT09ZXx8ImtleXVwIj09PWV8fCJrZXlkb3duIj09PWUpcmV0dXJuIHU2KHUzKX1mdW5jdGlvbiBzbChlLHQpe2lmKCJjbGljayI9PT1lKXJldHVybiB1Nih0KX1mdW5jdGlvbiBzYShlLHQpe2lmKCJpbnB1dCI9PT1lfHwiY2hhbmdlIj09PWUpcmV0dXJuIHU2KHQpfWZ1bmN0aW9uIHNvKGUpe2Zvcig7ZSYmZS5maXJzdENoaWxkOyllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX1mdW5jdGlvbiBzaShlLHQpe3ZhciBuLHI9c28oZSk7Zm9yKGU9MDtyOyl7aWYoMz09PXIubm9kZVR5cGUpe2lmKG49ZStyLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZuPj10KXJldHVybntub2RlOnIsb2Zmc2V0OnQtZX07ZT1ufWU6e2Zvcig7cjspe2lmKHIubmV4dFNpYmxpbmcpe3I9ci5uZXh0U2libGluZzticmVhayBlfXI9ci5wYXJlbnROb2RlfXI9dm9pZCAwfXI9c28ocil9fWZ1bmN0aW9uIHN1KCl7Zm9yKHZhciBlPXdpbmRvdyx0PWU2KCk7dCBpbnN0YW5jZW9mIGUuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7dmFyIG49InN0cmluZyI9PXR5cGVvZiB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZn1jYXRjaChlKXtuPSExfWlmKG4pZT10LmNvbnRlbnRXaW5kb3c7ZWxzZSBicmVhazt0PWU2KGUuZG9jdW1lbnQpfXJldHVybiB0fWZ1bmN0aW9uIHNzKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKCJpbnB1dCI9PT10JiYoInRleHQiPT09ZS50eXBlfHwic2VhcmNoIj09PWUudHlwZXx8InRlbCI9PT1lLnR5cGV8fCJ1cmwiPT09ZS50eXBlfHwicGFzc3dvcmQiPT09ZS50eXBlKXx8InRleHRhcmVhIj09PXR8fCJ0cnVlIj09PWUuY29udGVudEVkaXRhYmxlKX12YXIgc2M9ZSQmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsc2Y9bnVsbCxzZD1udWxsLHNwPW51bGwsc209ITE7ZnVuY3Rpb24gc2goZSx0LG4pe3ZhciByPW4ud2luZG93PT09bj9uLmRvY3VtZW50Ojk9PT1uLm5vZGVUeXBlP246bi5vd25lckRvY3VtZW50O3NtfHxudWxsPT1zZnx8c2YhPT1lNihyKXx8KHI9InNlbGVjdGlvblN0YXJ0ImluKHI9c2YpJiZzcyhyKT97c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OnthbmNob3JOb2RlOihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSkuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9LHNwJiZuUShzcCxyKXx8KHNwPXIsMDwocj1zVihzZCwib25TZWxlY3QiKSkubGVuZ3RoJiYodD1uZXcgaTMoIm9uU2VsZWN0Iiwic2VsZWN0IixudWxsLHQsbiksZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczpyfSksdC50YXJnZXQ9c2YpKSl9ZnVuY3Rpb24gc2coZSx0KXt2YXIgbj17fTtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldPXQudG9Mb3dlckNhc2UoKSxuWyJXZWJraXQiK2VdPSJ3ZWJraXQiK3QsblsiTW96IitlXT0ibW96Iit0LG59dmFyIHN5PXthbmltYXRpb25lbmQ6c2coIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkVuZCIpLGFuaW1hdGlvbml0ZXJhdGlvbjpzZygiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0aW9uIiksYW5pbWF0aW9uc3RhcnQ6c2coIkFuaW1hdGlvbiIsIkFuaW1hdGlvblN0YXJ0IiksdHJhbnNpdGlvbmVuZDpzZygiVHJhbnNpdGlvbiIsIlRyYW5zaXRpb25FbmQiKX0sc3Y9e30sc2I9e307ZnVuY3Rpb24gc2soZSl7aWYoc3ZbZV0pcmV0dXJuIHN2W2VdO2lmKCFzeVtlXSlyZXR1cm4gZTt2YXIgdCxuPXN5W2VdO2Zvcih0IGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eSh0KSYmdCBpbiBzYilyZXR1cm4gc3ZbZV09blt0XTtyZXR1cm4gZX1lJCYmKHNiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJBbmltYXRpb25FdmVudCJpbiB3aW5kb3d8fChkZWxldGUgc3kuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgc3kuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgc3kuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSwiVHJhbnNpdGlvbkV2ZW50ImluIHdpbmRvd3x8ZGVsZXRlIHN5LnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7dmFyIHN3PXNrKCJhbmltYXRpb25lbmQiKSxzUz1zaygiYW5pbWF0aW9uaXRlcmF0aW9uIiksc0M9c2soImFuaW1hdGlvbnN0YXJ0Iiksc0U9c2soInRyYW5zaXRpb25lbmQiKSxzeD1uZXcgTWFwLHN6PSJhYm9ydCBhdXhDbGljayBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHNjcm9sbEVuZCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24gc1AoZSx0KXtzeC5zZXQoZSx0KSxlVih0LFtlXSl9Zm9yKHZhciBzTj0wO3NOPHN6Lmxlbmd0aDtzTisrKXt2YXIgc189c3pbc05dO3NQKHNfLnRvTG93ZXJDYXNlKCksIm9uIisoc19bMF0udG9VcHBlckNhc2UoKStzXy5zbGljZSgxKSkpfXNQKHN3LCJvbkFuaW1hdGlvbkVuZCIpLHNQKHNTLCJvbkFuaW1hdGlvbkl0ZXJhdGlvbiIpLHNQKHNDLCJvbkFuaW1hdGlvblN0YXJ0Iiksc1AoImRibGNsaWNrIiwib25Eb3VibGVDbGljayIpLHNQKCJmb2N1c2luIiwib25Gb2N1cyIpLHNQKCJmb2N1c291dCIsIm9uQmx1ciIpLHNQKHNFLCJvblRyYW5zaXRpb25FbmQiKSxlUSgib25Nb3VzZUVudGVyIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pLGVRKCJvbk1vdXNlTGVhdmUiLFsibW91c2VvdXQiLCJtb3VzZW92ZXIiXSksZVEoIm9uUG9pbnRlckVudGVyIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKSxlUSgib25Qb2ludGVyTGVhdmUiLFsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl0pLGVWKCJvbkNoYW5nZSIsImNoYW5nZSBjbGljayBmb2N1c2luIGZvY3Vzb3V0IGlucHV0IGtleWRvd24ga2V5dXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKSxlVigib25TZWxlY3QiLCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpLGVWKCJvbkJlZm9yZUlucHV0IixbImNvbXBvc2l0aW9uZW5kIiwia2V5cHJlc3MiLCJ0ZXh0SW5wdXQiLCJwYXN0ZSJdKSxlVigib25Db21wb3NpdGlvbkVuZCIsImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKSxlVigib25Db21wb3NpdGlvblN0YXJ0IiwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSksZVYoIm9uQ29tcG9zaXRpb25VcGRhdGUiLCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7dmFyIHNMPSJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZyIuc3BsaXQoIiAiKSxzVD1uZXcgU2V0KCJjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCBzY3JvbGxlbmQgdG9nZ2xlIi5zcGxpdCgiICIpLmNvbmNhdChzTCkpO2Z1bmN0aW9uIHNGKGUsdCxuKXt2YXIgcj1lLnR5cGV8fCJ1bmtub3duLWV2ZW50IjtlLmN1cnJlbnRUYXJnZXQ9bixmdW5jdGlvbihlLHQsbixyLGwsYSxvLHUscyl7aWYoYVIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGFMKXtpZihhTCl7dmFyIGM9YVQ7YUw9ITEsYVQ9bnVsbH1lbHNlIHRocm93IEVycm9yKGkoMTk4KSk7YUZ8fChhRj0hMCxhTT1jKX19KHIsdCx2b2lkIDAsZSksZS5jdXJyZW50VGFyZ2V0PW51bGx9ZnVuY3Rpb24gc00oZSx0KXt0PTAhPSg0JnQpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dLGw9ci5ldmVudDtyPXIubGlzdGVuZXJzO2U6e3ZhciBhPXZvaWQgMDtpZih0KWZvcih2YXIgbz1yLmxlbmd0aC0xOzA8PW87by0tKXt2YXIgaT1yW29dLHU9aS5pbnN0YW5jZSxzPWkuY3VycmVudFRhcmdldDtpZihpPWkubGlzdGVuZXIsdSE9PWEmJmwuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO3NGKGwsaSxzKSxhPXV9ZWxzZSBmb3Iobz0wO288ci5sZW5ndGg7bysrKXtpZih1PShpPXJbb10pLmluc3RhbmNlLHM9aS5jdXJyZW50VGFyZ2V0LGk9aS5saXN0ZW5lcix1IT09YSYmbC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7c0YobCxpLHMpLGE9dX19fWlmKGFGKXRocm93IGU9YU0sYUY9ITEsYU09bnVsbCxlfWZ1bmN0aW9uIHNPKGUsdCl7dmFyIG49dFtlUF07dm9pZCAwPT09biYmKG49dFtlUF09bmV3IFNldCk7dmFyIHI9ZSsiX19idWJibGUiO24uaGFzKHIpfHwoc0kodCxlLDIsITEpLG4uYWRkKHIpKX1mdW5jdGlvbiBzUihlLHQsbil7dmFyIHI9MDt0JiYocnw9NCksc0kobixlLHIsdCl9dmFyIHNEPSJfcmVhY3RMaXN0ZW5pbmciK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIHNBKGUpe2lmKCFlW3NEXSl7ZVtzRF09ITAsZVUuZm9yRWFjaChmdW5jdGlvbih0KXsic2VsZWN0aW9uY2hhbmdlIiE9PXQmJihzVC5oYXModCl8fHNSKHQsITEsZSksc1IodCwhMCxlKSl9KTt2YXIgdD05PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudDtudWxsPT09dHx8dFtzRF18fCh0W3NEXT0hMCxzUigic2VsZWN0aW9uY2hhbmdlIiwhMSx0KSl9fWZ1bmN0aW9uIHNJKGUsdCxuLHIpe3N3aXRjaCh1VSh0KSl7Y2FzZSAyOnZhciBsPXVNO2JyZWFrO2Nhc2UgODpsPXVPO2JyZWFrO2RlZmF1bHQ6bD11Un1uPWwuYmluZChudWxsLHQsbixlKSxsPXZvaWQgMCxpJCYmKCJ0b3VjaHN0YXJ0Ij09PXR8fCJ0b3VjaG1vdmUiPT09dHx8IndoZWVsIj09PXQpJiYobD0hMCkscj92b2lkIDAhPT1sP2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4se2NhcHR1cmU6ITAscGFzc2l2ZTpsfSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMCk6dm9pZCAwIT09bD9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtwYXNzaXZlOmx9KTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKX1mdW5jdGlvbiBzVShlLHQsbixyLGwpe3ZhciBhPXI7aWYoMD09KDEmdCkmJjA9PSgyJnQpJiZudWxsIT09cillOmZvcig7Oyl7aWYobnVsbD09PXIpcmV0dXJuO3ZhciBvPXIudGFnO2lmKDM9PT1vfHw0PT09byl7dmFyIGk9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztpZihpPT09bHx8OD09PWkubm9kZVR5cGUmJmkucGFyZW50Tm9kZT09PWwpYnJlYWs7aWYoND09PW8pZm9yKG89ci5yZXR1cm47bnVsbCE9PW87KXt2YXIgdT1vLnRhZztpZigoMz09PXV8fDQ9PT11KSYmKCh1PW8uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pPT09bHx8OD09PXUubm9kZVR5cGUmJnUucGFyZW50Tm9kZT09PWwpKXJldHVybjtvPW8ucmV0dXJufWZvcig7bnVsbCE9PWk7KXtpZihudWxsPT09KG89ZU0oaSkpKXJldHVybjtpZig1PT09KHU9by50YWcpfHw2PT09dXx8MjY9PT11fHwyNz09PXUpe3I9YT1vO2NvbnRpbnVlIGV9aT1pLnBhcmVudE5vZGV9fXI9ci5yZXR1cm59aVYoZnVuY3Rpb24oKXt2YXIgcj1hLGw9dGgobiksbz1bXTtlOnt2YXIgaT1zeC5nZXQoZSk7aWYodm9pZCAwIT09aSl7dmFyIHU9aTMscz1lO3N3aXRjaChlKXtjYXNlImtleXByZXNzIjppZigwPT09aVcobikpYnJlYWsgZTtjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOnU9dXU7YnJlYWs7Y2FzZSJmb2N1c2luIjpzPSJmb2N1cyIsdT1pOTticmVhaztjYXNlImZvY3Vzb3V0IjpzPSJibHVyIix1PWk5O2JyZWFrO2Nhc2UiYmVmb3JlYmx1ciI6Y2FzZSJhZnRlcmJsdXIiOnU9aTk7YnJlYWs7Y2FzZSJjbGljayI6aWYoMj09PW4uYnV0dG9uKWJyZWFrIGU7Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNldXAiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlImNvbnRleHRtZW51Ijp1PWk1O2JyZWFrO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOnU9aTc7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2UidG91Y2hzdGFydCI6dT11YzticmVhaztjYXNlIHN3OmNhc2Ugc1M6Y2FzZSBzQzp1PXVlO2JyZWFrO2Nhc2Ugc0U6dT11ZjticmVhaztjYXNlInNjcm9sbCI6Y2FzZSJzY3JvbGxlbmQiOnU9aTY7YnJlYWs7Y2FzZSJ3aGVlbCI6dT11ZDticmVhaztjYXNlImNvcHkiOmNhc2UiY3V0IjpjYXNlInBhc3RlIjp1PXV0O2JyZWFrO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOmNhc2UibG9zdHBvaW50ZXJjYXB0dXJlIjpjYXNlInBvaW50ZXJjYW5jZWwiOmNhc2UicG9pbnRlcmRvd24iOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJwb2ludGVydXAiOnU9dXN9dmFyIGM9MCE9KDQmdCksZj0hYyYmKCJzY3JvbGwiPT09ZXx8InNjcm9sbGVuZCI9PT1lKSxkPWM/bnVsbCE9PWk/aSsiQ2FwdHVyZSI6bnVsbDppO2M9W107Zm9yKHZhciBwLG09cjtudWxsIT09bTspe3ZhciBoPW07aWYocD1oLnN0YXRlTm9kZSw1IT09KGg9aC50YWcpJiYyNiE9PWgmJjI3IT09aHx8bnVsbD09PXB8fG51bGw9PT1kfHxudWxsIT0oaD1pUShtLGQpKSYmYy5wdXNoKHNCKG0saCxwKSksZilicmVhazttPW0ucmV0dXJufTA8Yy5sZW5ndGgmJihpPW5ldyB1KGkscyxudWxsLG4sbCksby5wdXNoKHtldmVudDppLGxpc3RlbmVyczpjfSkpfX1pZigwPT0oNyZ0KSl7aWYoaT0ibW91c2VvdmVyIj09PWV8fCJwb2ludGVyb3ZlciI9PT1lLHU9Im1vdXNlb3V0Ij09PWV8fCJwb2ludGVyb3V0Ij09PWUsIShpJiZuIT09dG0mJihzPW4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCkmJihlTShzKXx8c1tlel0pKSYmKHV8fGkpJiYoaT1sLndpbmRvdz09PWw/bDooaT1sLm93bmVyRG9jdW1lbnQpP2kuZGVmYXVsdFZpZXd8fGkucGFyZW50V2luZG93OndpbmRvdyx1PyhzPW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQsdT1yLG51bGwhPT0ocz1zP2VNKHMpOm51bGwpJiYoZj10dyhzKSxjPXMudGFnLHMhPT1mfHw1IT09YyYmMjchPT1jJiY2IT09YykmJihzPW51bGwpKToodT1udWxsLHM9ciksdSE9PXMpKXtpZihjPWk1LGg9Im9uTW91c2VMZWF2ZSIsZD0ib25Nb3VzZUVudGVyIixtPSJtb3VzZSIsKCJwb2ludGVyb3V0Ij09PWV8fCJwb2ludGVyb3ZlciI9PT1lKSYmKGM9dXMsaD0ib25Qb2ludGVyTGVhdmUiLGQ9Im9uUG9pbnRlckVudGVyIixtPSJwb2ludGVyIiksZj1udWxsPT11P2k6ZVIodSkscD1udWxsPT1zP2k6ZVIocyksKGk9bmV3IGMoaCxtKyJsZWF2ZSIsdSxuLGwpKS50YXJnZXQ9ZixpLnJlbGF0ZWRUYXJnZXQ9cCxoPW51bGwsZU0obCk9PT1yJiYoKGM9bmV3IGMoZCxtKyJlbnRlciIscyxuLGwpKS50YXJnZXQ9cCxjLnJlbGF0ZWRUYXJnZXQ9ZixoPWMpLGY9aCx1JiZzKXQ6e2ZvcihjPXUsZD1zLG09MCxwPWM7cDtwPXNRKHApKW0rKztmb3IocD0wLGg9ZDtoO2g9c1EoaCkpcCsrO2Zvcig7MDxtLXA7KWM9c1EoYyksbS0tO2Zvcig7MDxwLW07KWQ9c1EoZCkscC0tO2Zvcig7bS0tOyl7aWYoYz09PWR8fG51bGwhPT1kJiZjPT09ZC5hbHRlcm5hdGUpYnJlYWsgdDtjPXNRKGMpLGQ9c1EoZCl9Yz1udWxsfWVsc2UgYz1udWxsO251bGwhPT11JiZzJChvLGksdSxjLCExKSxudWxsIT09cyYmbnVsbCE9PWYmJnMkKG8sZixzLGMsITApfWU6e2lmKCJzZWxlY3QiPT09KHU9KGk9cj9lUihyKTp3aW5kb3cpLm5vZGVOYW1lJiZpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpfHwiaW5wdXQiPT09dSYmImZpbGUiPT09aS50eXBlKXZhciBnLHk9dTg7ZWxzZSBpZih1MChpKSl7aWYodTUpeT1zYTtlbHNle3k9c3I7dmFyIHY9c259fWVsc2UodT1pLm5vZGVOYW1lKSYmImlucHV0Ij09PXUudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT1pLnR5cGV8fCJyYWRpbyI9PT1pLnR5cGUpJiYoeT1zbCk7aWYoeSYmKHk9eShlLHIpKSl7dTEobyx5LG4sbCk7YnJlYWsgZX12JiZ2KGUsaSxyKSwiZm9jdXNvdXQiPT09ZSYmciYmIm51bWJlciI9PT1pLnR5cGUmJm51bGwhPXIubWVtb2l6ZWRQcm9wcy52YWx1ZSYmdGUoaSwibnVtYmVyIixpLnZhbHVlKX1zd2l0Y2godj1yP2VSKHIpOndpbmRvdyxlKXtjYXNlImZvY3VzaW4iOih1MCh2KXx8InRydWUiPT09di5jb250ZW50RWRpdGFibGUpJiYoc2Y9dixzZD1yLHNwPW51bGwpO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOnNwPXNkPXNmPW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOnNtPSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6Y2FzZSJkcmFnZW5kIjpzbT0hMSxzaChvLG4sbCk7YnJlYWs7Y2FzZSJzZWxlY3Rpb25jaGFuZ2UiOmlmKHNjKWJyZWFrO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6c2gobyxuLGwpfWlmKHVXKXQ6e3N3aXRjaChlKXtjYXNlImNvbXBvc2l0aW9uc3RhcnQiOnZhciBiPSJvbkNvbXBvc2l0aW9uU3RhcnQiO2JyZWFrIHQ7Y2FzZSJjb21wb3NpdGlvbmVuZCI6Yj0ib25Db21wb3NpdGlvbkVuZCI7YnJlYWsgdDtjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpiPSJvbkNvbXBvc2l0aW9uVXBkYXRlIjticmVhayB0fWI9dm9pZCAwfWVsc2UgdVo/dVgoZSxuKSYmKGI9Im9uQ29tcG9zaXRpb25FbmQiKToia2V5ZG93biI9PT1lJiYyMjk9PT1uLmtleUNvZGUmJihiPSJvbkNvbXBvc2l0aW9uU3RhcnQiKTtiJiYodUsmJiJrbyIhPT1uLmxvY2FsZSYmKHVafHwib25Db21wb3NpdGlvblN0YXJ0IiE9PWI/Im9uQ29tcG9zaXRpb25FbmQiPT09YiYmdVomJihnPXUkKCkpOih1Vj0idmFsdWUiaW4odUI9bCk/dUIudmFsdWU6dUIudGV4dENvbnRlbnQsdVo9ITApKSwwPCh2PXNWKHIsYikpLmxlbmd0aCYmKGI9bmV3IHVuKGIsZSxudWxsLG4sbCksby5wdXNoKHtldmVudDpiLGxpc3RlbmVyczp2fSksZz9iLmRhdGE9ZzpudWxsIT09KGc9dUcobikpJiYoYi5kYXRhPWcpKSksKGc9dXE/ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIHVHKHQpO2Nhc2Uia2V5cHJlc3MiOmlmKDMyIT09dC53aGljaClyZXR1cm4gbnVsbDtyZXR1cm4gdVk9ITAsIiAiO2Nhc2UidGV4dElucHV0IjpyZXR1cm4iICI9PT0oZT10LmRhdGEpJiZ1WT9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19KGUsbik6ZnVuY3Rpb24oZSx0KXtpZih1WilyZXR1cm4iY29tcG9zaXRpb25lbmQiPT09ZXx8IXVXJiZ1WChlLHQpPyhlPXUkKCksdVE9dVY9dUI9bnVsbCx1Wj0hMSxlKTpudWxsO3N3aXRjaChlKXtjYXNlInBhc3RlIjpkZWZhdWx0OnJldHVybiBudWxsO2Nhc2Uia2V5cHJlc3MiOmlmKCEodC5jdHJsS2V5fHx0LmFsdEtleXx8dC5tZXRhS2V5KXx8dC5jdHJsS2V5JiZ0LmFsdEtleSl7aWYodC5jaGFyJiYxPHQuY2hhci5sZW5ndGgpcmV0dXJuIHQuY2hhcjtpZih0LndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpfXJldHVybiBudWxsO2Nhc2UiY29tcG9zaXRpb25lbmQiOnJldHVybiB1SyYmImtvIiE9PXQubG9jYWxlP251bGw6dC5kYXRhfX0oZSxuKSkmJjA8KGI9c1Yociwib25CZWZvcmVJbnB1dCIpKS5sZW5ndGgmJih2PW5ldyB1bigib25CZWZvcmVJbnB1dCIsImJlZm9yZWlucHV0IixudWxsLG4sbCksby5wdXNoKHtldmVudDp2LGxpc3RlbmVyczpifSksdi5kYXRhPWcpLGZ1bmN0aW9uKGUsdCxuLHIsbCl7aWYoInN1Ym1pdCI9PT10JiZuJiZuLnN0YXRlTm9kZT09PWwpe3ZhciBhPWVEKGwpLmFjdGlvbixvPXIuc3VibWl0dGVyO2lmKG8mJm51bGwhPSh0PSh0PWVEKG8pKT90LmZvcm1BY3Rpb246by5nZXRBdHRyaWJ1dGUoImZvcm1BY3Rpb24iKSkmJihhPXQsbz1udWxsKSwiZnVuY3Rpb24iPT10eXBlb2YgYSl7dmFyIGk9bmV3IGkzKCJhY3Rpb24iLCJhY3Rpb24iLG51bGwscixsKTtlLnB1c2goe2V2ZW50OmksbGlzdGVuZXJzOlt7aW5zdGFuY2U6bnVsbCxsaXN0ZW5lcjpmdW5jdGlvbigpe2lmKCFyLmRlZmF1bHRQcmV2ZW50ZWQpe2lmKGkucHJldmVudERlZmF1bHQoKSxvKXt2YXIgZT1vLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtlLm5hbWU9by5uYW1lLGUudmFsdWU9by52YWx1ZSxvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsbyk7dmFyIHQ9bmV3IEZvcm1EYXRhKGwpO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX1lbHNlIHQ9bmV3IEZvcm1EYXRhKGwpO2xsKG4se3BlbmRpbmc6ITAsZGF0YTp0LG1ldGhvZDpsLm1ldGhvZCxhY3Rpb246YX0sYSx0KX19LGN1cnJlbnRUYXJnZXQ6bH1dfSl9fX0obyxlLHIsbixsKX1zTShvLHQpfSl9ZnVuY3Rpb24gc0IoZSx0LG4pe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOnQsY3VycmVudFRhcmdldDpufX1mdW5jdGlvbiBzVihlLHQpe2Zvcih2YXIgbj10KyJDYXB0dXJlIixyPVtdO251bGwhPT1lOyl7dmFyIGw9ZSxhPWwuc3RhdGVOb2RlOzUhPT0obD1sLnRhZykmJjI2IT09bCYmMjchPT1sfHxudWxsPT09YXx8KG51bGwhPShsPWlRKGUsbikpJiZyLnVuc2hpZnQoc0IoZSxsLGEpKSxudWxsIT0obD1pUShlLHQpKSYmci5wdXNoKHNCKGUsbCxhKSkpLGU9ZS5yZXR1cm59cmV0dXJuIHJ9ZnVuY3Rpb24gc1EoZSl7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7ZG8gZT1lLnJldHVybjt3aGlsZShlJiY1IT09ZS50YWcmJjI3IT09ZS50YWcpO3JldHVybiBlfHxudWxsfWZ1bmN0aW9uIHMkKGUsdCxuLHIsbCl7Zm9yKHZhciBhPXQuX3JlYWN0TmFtZSxvPVtdO251bGwhPT1uJiZuIT09cjspe3ZhciBpPW4sdT1pLmFsdGVybmF0ZSxzPWkuc3RhdGVOb2RlO2lmKGk9aS50YWcsbnVsbCE9PXUmJnU9PT1yKWJyZWFrOzUhPT1pJiYyNiE9PWkmJjI3IT09aXx8bnVsbD09PXN8fCh1PXMsbD9udWxsIT0ocz1pUShuLGEpKSYmby51bnNoaWZ0KHNCKG4scyx1KSk6bHx8bnVsbCE9KHM9aVEobixhKSkmJm8ucHVzaChzQihuLHMsdSkpKSxuPW4ucmV0dXJufTAhPT1vLmxlbmd0aCYmZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczpvfSl9dmFyIHNqPS9cclxuPy9nLHNXPS9cdTAwMDB8XHVGRkZEL2c7ZnVuY3Rpb24gc0goZSl7cmV0dXJuKCJzdHJpbmciPT10eXBlb2YgZT9lOiIiK2UpLnJlcGxhY2Uoc2osIlxuIikucmVwbGFjZShzVywiIil9ZnVuY3Rpb24gc3EoZSx0LG4pe2lmKHQ9c0godCksc0goZSkhPT10JiZuKXRocm93IEVycm9yKGkoNDI1KSl9ZnVuY3Rpb24gc0soKXt9ZnVuY3Rpb24gc1koZSx0LG4scixsLGEpe3N3aXRjaChuKXtjYXNlImNoaWxkcmVuIjoic3RyaW5nIj09dHlwZW9mIHI/ImJvZHkiPT09dHx8InRleHRhcmVhIj09PXQmJiIiPT09cnx8dHUoZSxyKToibnVtYmVyIj09dHlwZW9mIHImJiJib2R5IiE9PXQmJnR1KGUsIiIrcik7YnJlYWs7Y2FzZSJjbGFzc05hbWUiOmVLKGUsImNsYXNzIixyKTticmVhaztjYXNlInRhYkluZGV4IjplSyhlLCJ0YWJpbmRleCIscik7YnJlYWs7Y2FzZSJkaXIiOmNhc2Uicm9sZSI6Y2FzZSJ2aWV3Qm94IjpjYXNlIndpZHRoIjpjYXNlImhlaWdodCI6ZUsoZSxuLHIpO2JyZWFrO2Nhc2Uic3R5bGUiOnRmKGUscixhKTticmVhaztjYXNlInNyYyI6Y2FzZSJocmVmIjppZihudWxsPT1yfHwiZnVuY3Rpb24iPT10eXBlb2Ygcnx8InN5bWJvbCI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZShuKTticmVha31lLnNldEF0dHJpYnV0ZShuLCIiK3IpO2JyZWFrO2Nhc2UiYWN0aW9uIjpjYXNlImZvcm1BY3Rpb24iOmlmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXtlLnNldEF0dHJpYnV0ZShuLCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcJ3JlIHRyeWluZyB0byB1c2UgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgaW4gYSBzdWJtaXQgZXZlbnQgaGFuZGxlciwgY29uc2lkZXIgYWxzbyBjYWxsaW5nIGV2ZW50LnByZXZlbnREZWZhdWx0KCkuJykiKTticmVha31pZigiZnVuY3Rpb24iPT10eXBlb2YgYSYmKCJmb3JtQWN0aW9uIj09PW4/KCJpbnB1dCIhPT10JiZzWShlLHQsIm5hbWUiLGwubmFtZSxsLG51bGwpLHNZKGUsdCwiZm9ybUVuY1R5cGUiLGwuZm9ybUVuY1R5cGUsbCxudWxsKSxzWShlLHQsImZvcm1NZXRob2QiLGwuZm9ybU1ldGhvZCxsLG51bGwpLHNZKGUsdCwiZm9ybVRhcmdldCIsbC5mb3JtVGFyZ2V0LGwsbnVsbCkpOihzWShlLHQsImVuY1R5cGUiLGwuZW5jVHlwZSxsLG51bGwpLHNZKGUsdCwibWV0aG9kIixsLm1ldGhvZCxsLG51bGwpLHNZKGUsdCwidGFyZ2V0IixsLnRhcmdldCxsLG51bGwpKSksbnVsbD09cnx8InN5bWJvbCI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZShuKTticmVha31lLnNldEF0dHJpYnV0ZShuLCIiK3IpO2JyZWFrO2Nhc2Uib25DbGljayI6bnVsbCE9ciYmKGUub25jbGljaz1zSyk7YnJlYWs7Y2FzZSJvblNjcm9sbCI6bnVsbCE9ciYmc08oInNjcm9sbCIsZSk7YnJlYWs7Y2FzZSJvblNjcm9sbEVuZCI6bnVsbCE9ciYmc08oInNjcm9sbGVuZCIsZSk7YnJlYWs7Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYobnVsbCE9cil7aWYoIm9iamVjdCIhPXR5cGVvZiByfHwhKCJfX2h0bWwiaW4gcikpdGhyb3cgRXJyb3IoaSg2MSkpO2lmKG51bGwhPShyPXIuX19odG1sKSl7aWYobnVsbCE9bC5jaGlsZHJlbil0aHJvdyBFcnJvcihpKDYwKSk7dGkoZSxyKX19YnJlYWs7Y2FzZSJtdWx0aXBsZSI6ZS5tdWx0aXBsZT1yJiYiZnVuY3Rpb24iIT10eXBlb2YgciYmInN5bWJvbCIhPXR5cGVvZiByO2JyZWFrO2Nhc2UibXV0ZWQiOmUubXV0ZWQ9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHImJiJzeW1ib2wiIT10eXBlb2YgcjticmVhaztjYXNlInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyI6Y2FzZSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciOmNhc2UiZGVmYXVsdFZhbHVlIjpjYXNlImRlZmF1bHRDaGVja2VkIjpjYXNlImlubmVySFRNTCI6Y2FzZSJyZWYiOmNhc2UiYXV0b0ZvY3VzIjpicmVhaztjYXNlInhsaW5rSHJlZiI6aWYobnVsbD09cnx8ImZ1bmN0aW9uIj09dHlwZW9mIHJ8fCJib29sZWFuIj09dHlwZW9mIHJ8fCJzeW1ib2wiPT10eXBlb2Ygcil7ZS5yZW1vdmVBdHRyaWJ1dGUoInhsaW5rOmhyZWYiKTticmVha31lLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6aHJlZiIsIiIrcik7YnJlYWs7Y2FzZSJjb250ZW50RWRpdGFibGUiOmNhc2Uic3BlbGxDaGVjayI6Y2FzZSJkcmFnZ2FibGUiOmNhc2UidmFsdWUiOmNhc2UiYXV0b1JldmVyc2UiOmNhc2UiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCI6Y2FzZSJmb2N1c2FibGUiOmNhc2UicHJlc2VydmVBbHBoYSI6bnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHImJiJzeW1ib2wiIT10eXBlb2Ygcj9lLnNldEF0dHJpYnV0ZShuLCIiK3IpOmUucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrO2Nhc2UiYWxsb3dGdWxsU2NyZWVuIjpjYXNlImFzeW5jIjpjYXNlImF1dG9QbGF5IjpjYXNlImNvbnRyb2xzIjpjYXNlImRlZmF1bHQiOmNhc2UiZGVmZXIiOmNhc2UiZGlzYWJsZWQiOmNhc2UiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUiOmNhc2UiZGlzYWJsZVJlbW90ZVBsYXliYWNrIjpjYXNlImZvcm1Ob1ZhbGlkYXRlIjpjYXNlImhpZGRlbiI6Y2FzZSJsb29wIjpjYXNlIm5vTW9kdWxlIjpjYXNlIm5vVmFsaWRhdGUiOmNhc2Uib3BlbiI6Y2FzZSJwbGF5c0lubGluZSI6Y2FzZSJyZWFkT25seSI6Y2FzZSJyZXF1aXJlZCI6Y2FzZSJyZXZlcnNlZCI6Y2FzZSJzY29wZWQiOmNhc2Uic2VhbWxlc3MiOmNhc2UiaXRlbVNjb3BlIjpyJiYiZnVuY3Rpb24iIT10eXBlb2YgciYmInN5bWJvbCIhPXR5cGVvZiByP2Uuc2V0QXR0cmlidXRlKG4sIiIpOmUucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrO2Nhc2UiY2FwdHVyZSI6Y2FzZSJkb3dubG9hZCI6ITA9PT1yP2Uuc2V0QXR0cmlidXRlKG4sIiIpOiExIT09ciYmbnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHImJiJzeW1ib2wiIT10eXBlb2Ygcj9lLnNldEF0dHJpYnV0ZShuLHIpOmUucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrO2Nhc2UiY29scyI6Y2FzZSJyb3dzIjpjYXNlInNpemUiOmNhc2Uic3BhbiI6bnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHImJiJzeW1ib2wiIT10eXBlb2YgciYmIWlzTmFOKHIpJiYxPD1yP2Uuc2V0QXR0cmlidXRlKG4scik6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZSJyb3dTcGFuIjpjYXNlInN0YXJ0IjpudWxsPT1yfHwiZnVuY3Rpb24iPT10eXBlb2Ygcnx8InN5bWJvbCI9PXR5cGVvZiByfHxpc05hTihyKT9lLnJlbW92ZUF0dHJpYnV0ZShuKTplLnNldEF0dHJpYnV0ZShuLHIpO2JyZWFrO2Nhc2UieGxpbmtBY3R1YXRlIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6YWN0dWF0ZSIscik7YnJlYWs7Y2FzZSJ4bGlua0FyY3JvbGUiOmVZKGUsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazphcmNyb2xlIixyKTticmVhaztjYXNlInhsaW5rUm9sZSI6ZVkoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOnJvbGUiLHIpO2JyZWFrO2Nhc2UieGxpbmtTaG93IjplWShlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6c2hvdyIscik7YnJlYWs7Y2FzZSJ4bGlua1RpdGxlIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6dGl0bGUiLHIpO2JyZWFrO2Nhc2UieGxpbmtUeXBlIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6dHlwZSIscik7YnJlYWs7Y2FzZSJ4bWxCYXNlIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6YmFzZSIscik7YnJlYWs7Y2FzZSJ4bWxMYW5nIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6bGFuZyIscik7YnJlYWs7Y2FzZSJ4bWxTcGFjZSI6ZVkoZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIixyKTticmVhaztjYXNlImlzIjplcShlLCJpcyIscik7YnJlYWs7ZGVmYXVsdDoyPG4ubGVuZ3RoJiYoIm8iPT09blswXXx8Ik8iPT09blswXSkmJigibiI9PT1uWzFdfHwiTiI9PT1uWzFdKXx8ZXEoZSxsPXRwLmdldChuKXx8bixyKX19ZnVuY3Rpb24gc1goZSx0LG4scixsLGEpe3N3aXRjaChuKXtjYXNlInN0eWxlIjp0ZihlLHIsYSk7YnJlYWs7Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYobnVsbCE9cil7aWYoIm9iamVjdCIhPXR5cGVvZiByfHwhKCJfX2h0bWwiaW4gcikpdGhyb3cgRXJyb3IoaSg2MSkpO2lmKG51bGwhPSh0PXIuX19odG1sKSl7aWYobnVsbCE9bC5jaGlsZHJlbil0aHJvdyBFcnJvcihpKDYwKSk7dGkoZSx0KX19YnJlYWs7Y2FzZSJjaGlsZHJlbiI6InN0cmluZyI9PXR5cGVvZiByP3R1KGUscik6Im51bWJlciI9PXR5cGVvZiByJiZ0dShlLCIiK3IpO2JyZWFrO2Nhc2Uib25TY3JvbGwiOm51bGwhPXImJnNPKCJzY3JvbGwiLGUpO2JyZWFrO2Nhc2Uib25TY3JvbGxFbmQiOm51bGwhPXImJnNPKCJzY3JvbGxlbmQiLGUpO2JyZWFrO2Nhc2Uib25DbGljayI6bnVsbCE9ciYmKGUub25jbGljaz1zSyk7YnJlYWs7Y2FzZSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciOmNhc2Uic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIjpjYXNlImlubmVySFRNTCI6Y2FzZSJyZWYiOmJyZWFrO2RlZmF1bHQ6ZUIuaGFzT3duUHJvcGVydHkobil8fCgiYm9vbGVhbiI9PXR5cGVvZiByJiYocj0iIityKSxlcShlLG4scikpfX1mdW5jdGlvbiBzRyhlLHQsbil7c3dpdGNoKHQpe2Nhc2UiZGl2IjpjYXNlInNwYW4iOmNhc2Uic3ZnIjpjYXNlInBhdGgiOmNhc2UiYSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UibGkiOmJyZWFrO2Nhc2UiaW5wdXQiOnNPKCJpbnZhbGlkIixlKTt2YXIgcj1udWxsLGw9bnVsbCxhPW51bGwsbz1udWxsLHU9bnVsbCxzPW51bGw7Zm9yKGYgaW4gbilpZihuLmhhc093blByb3BlcnR5KGYpKXt2YXIgYz1uW2ZdO2lmKG51bGwhPWMpc3dpdGNoKGYpe2Nhc2UibmFtZSI6cj1jO2JyZWFrO2Nhc2UidHlwZSI6bD1jO2JyZWFrO2Nhc2UiY2hlY2tlZCI6dT1jO2JyZWFrO2Nhc2UiZGVmYXVsdENoZWNrZWQiOnM9YzticmVhaztjYXNlInZhbHVlIjphPWM7YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOm89YzticmVhaztjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZihudWxsIT1jKXRocm93IEVycm9yKGkoMTM3LHQpKTticmVhaztkZWZhdWx0OnNZKGUsdCxmLGMsbixudWxsKX19ZTkoZSxhLG8sdSxzLGwsciwhMSksZTMoZSk7cmV0dXJuO2Nhc2Uic2VsZWN0IjpzTygiaW52YWxpZCIsZSk7dmFyIGY9bD1hPW51bGw7Zm9yKHIgaW4gbilpZihuLmhhc093blByb3BlcnR5KHIpJiZudWxsIT0obz1uW3JdKSlzd2l0Y2gocil7Y2FzZSJ2YWx1ZSI6YT1vO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpsPW87YnJlYWs7Y2FzZSJtdWx0aXBsZSI6Zj1vO2RlZmF1bHQ6c1koZSx0LHIsbyxuLG51bGwpfXQ9YSxuPWwsZS5tdWx0aXBsZT0hIWYsbnVsbCE9dD90bihlLCEhZix0LCExKTpudWxsIT1uJiZ0bihlLCEhZixuLCEwKTtyZXR1cm47Y2FzZSJ0ZXh0YXJlYSI6Zm9yKGwgaW4gc08oImludmFsaWQiLGUpLGE9cj1mPW51bGwsbilpZihuLmhhc093blByb3BlcnR5KGwpJiZudWxsIT0obz1uW2xdKSlzd2l0Y2gobCl7Y2FzZSJ2YWx1ZSI6Zj1vO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpyPW87YnJlYWs7Y2FzZSJjaGlsZHJlbiI6YT1vO2JyZWFrO2Nhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOmlmKG51bGwhPW8pdGhyb3cgRXJyb3IoaSg5MSkpO2JyZWFrO2RlZmF1bHQ6c1koZSx0LGwsbyxuLG51bGwpfXRsKGUsZixyLGEpLGUzKGUpO3JldHVybjtjYXNlIm9wdGlvbiI6Zm9yKG8gaW4gbiluLmhhc093blByb3BlcnR5KG8pJiZudWxsIT0oZj1uW29dKSYmKCJzZWxlY3RlZCI9PT1vP2Uuc2VsZWN0ZWQ9ZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGYmJiJzeW1ib2wiIT10eXBlb2YgZjpzWShlLHQsbyxmLG4sbnVsbCkpO3JldHVybjtjYXNlImRpYWxvZyI6c08oImNhbmNlbCIsZSksc08oImNsb3NlIixlKTticmVhaztjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOnNPKCJsb2FkIixlKTticmVhaztjYXNlInZpZGVvIjpjYXNlImF1ZGlvIjpmb3IoZj0wO2Y8c0wubGVuZ3RoO2YrKylzTyhzTFtmXSxlKTticmVhaztjYXNlImltYWdlIjpzTygiZXJyb3IiLGUpLHNPKCJsb2FkIixlKTticmVhaztjYXNlImRldGFpbHMiOnNPKCJ0b2dnbGUiLGUpO2JyZWFrO2Nhc2UiZW1iZWQiOmNhc2Uic291cmNlIjpjYXNlImltZyI6Y2FzZSJsaW5rIjpzTygiZXJyb3IiLGUpLHNPKCJsb2FkIixlKTtjYXNlImFyZWEiOmNhc2UiYmFzZSI6Y2FzZSJiciI6Y2FzZSJjb2wiOmNhc2UiaHIiOmNhc2Uia2V5Z2VuIjpjYXNlIm1ldGEiOmNhc2UicGFyYW0iOmNhc2UidHJhY2siOmNhc2Uid2JyIjpjYXNlIm1lbnVpdGVtIjpmb3IodSBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkodSkmJm51bGwhPShmPW5bdV0pKXN3aXRjaCh1KXtjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjp0aHJvdyBFcnJvcihpKDEzNyx0KSk7ZGVmYXVsdDpzWShlLHQsdSxmLG4sbnVsbCl9cmV0dXJuO2RlZmF1bHQ6aWYodGQodCkpe2ZvcihzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9KGY9bltzXSkmJnNYKGUsdCxzLGYsbixudWxsKTtyZXR1cm59fWZvcihhIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShhKSYmbnVsbCE9KGY9blthXSkmJnNZKGUsdCxhLGYsbixudWxsKX1mdW5jdGlvbiBzWihlLHQsbixyKXtzd2l0Y2godCl7Y2FzZSJkaXYiOmNhc2Uic3BhbiI6Y2FzZSJzdmciOmNhc2UicGF0aCI6Y2FzZSJhIjpjYXNlImciOmNhc2UicCI6Y2FzZSJsaSI6YnJlYWs7Y2FzZSJpbnB1dCI6dmFyIGw9bnVsbCxhPW51bGwsbz1udWxsLHU9bnVsbCxzPW51bGwsYz1udWxsLGY9bnVsbDtmb3IobSBpbiBuKXt2YXIgZD1uW21dO2lmKG4uaGFzT3duUHJvcGVydHkobSkmJm51bGwhPWQpc3dpdGNoKG0pe2Nhc2UiY2hlY2tlZCI6Y2FzZSJ2YWx1ZSI6YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOnM9ZDtkZWZhdWx0OnIuaGFzT3duUHJvcGVydHkobSl8fHNZKGUsdCxtLG51bGwscixkKX19Zm9yKHZhciBwIGluIHIpe3ZhciBtPXJbcF07aWYoZD1uW3BdLHIuaGFzT3duUHJvcGVydHkocCkmJihudWxsIT1tfHxudWxsIT1kKSlzd2l0Y2gocCl7Y2FzZSJ0eXBlIjphPW07YnJlYWs7Y2FzZSJuYW1lIjpsPW07YnJlYWs7Y2FzZSJjaGVja2VkIjpjPW07YnJlYWs7Y2FzZSJkZWZhdWx0Q2hlY2tlZCI6Zj1tO2JyZWFrO2Nhc2UidmFsdWUiOm89bTticmVhaztjYXNlImRlZmF1bHRWYWx1ZSI6dT1tO2JyZWFrO2Nhc2UiY2hpbGRyZW4iOmNhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOmlmKG51bGwhPW0pdGhyb3cgRXJyb3IoaSgxMzcsdCkpO2JyZWFrO2RlZmF1bHQ6bSE9PWQmJnNZKGUsdCxwLG0scixkKX19ZTcoZSxvLHUscyxjLGYsYSxsKTtyZXR1cm47Y2FzZSJzZWxlY3QiOmZvcihhIGluIG09bz11PXA9bnVsbCxuKWlmKHM9blthXSxuLmhhc093blByb3BlcnR5KGEpJiZudWxsIT1zKXN3aXRjaChhKXtjYXNlInZhbHVlIjpicmVhaztjYXNlIm11bHRpcGxlIjptPXM7ZGVmYXVsdDpyLmhhc093blByb3BlcnR5KGEpfHxzWShlLHQsYSxudWxsLHIscyl9Zm9yKGwgaW4gcilpZihhPXJbbF0scz1uW2xdLHIuaGFzT3duUHJvcGVydHkobCkmJihudWxsIT1hfHxudWxsIT1zKSlzd2l0Y2gobCl7Y2FzZSJ2YWx1ZSI6cD1hO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjp1PWE7YnJlYWs7Y2FzZSJtdWx0aXBsZSI6bz1hO2RlZmF1bHQ6YSE9PXMmJnNZKGUsdCxsLGEscixzKX10PXUsbj1vLHI9bSxudWxsIT1wP3RuKGUsISFuLHAsITEpOiEhciE9ISFuJiYobnVsbCE9dD90bihlLCEhbix0LCEwKTp0bihlLCEhbixuP1tdOiIiLCExKSk7cmV0dXJuO2Nhc2UidGV4dGFyZWEiOmZvcih1IGluIG09cD1udWxsLG4paWYobD1uW3VdLG4uaGFzT3duUHJvcGVydHkodSkmJm51bGwhPWwmJiFyLmhhc093blByb3BlcnR5KHUpKXN3aXRjaCh1KXtjYXNlInZhbHVlIjpjYXNlImNoaWxkcmVuIjpicmVhaztkZWZhdWx0OnNZKGUsdCx1LG51bGwscixsKX1mb3IobyBpbiByKWlmKGw9cltvXSxhPW5bb10sci5oYXNPd25Qcm9wZXJ0eShvKSYmKG51bGwhPWx8fG51bGwhPWEpKXN3aXRjaChvKXtjYXNlInZhbHVlIjpwPWw7YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOm09bDticmVhaztjYXNlImNoaWxkcmVuIjpicmVhaztjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZihudWxsIT1sKXRocm93IEVycm9yKGkoOTEpKTticmVhaztkZWZhdWx0OmwhPT1hJiZzWShlLHQsbyxsLHIsYSl9dHIoZSxwLG0pO3JldHVybjtjYXNlIm9wdGlvbiI6Zm9yKHZhciBoIGluIG4pcD1uW2hdLG4uaGFzT3duUHJvcGVydHkoaCkmJm51bGwhPXAmJiFyLmhhc093blByb3BlcnR5KGgpJiYoInNlbGVjdGVkIj09PWg/ZS5zZWxlY3RlZD0hMTpzWShlLHQsaCxudWxsLHIscCkpO2ZvcihzIGluIHIpcD1yW3NdLG09bltzXSxyLmhhc093blByb3BlcnR5KHMpJiZwIT09bSYmKG51bGwhPXB8fG51bGwhPW0pJiYoInNlbGVjdGVkIj09PXM/ZS5zZWxlY3RlZD1wJiYiZnVuY3Rpb24iIT10eXBlb2YgcCYmInN5bWJvbCIhPXR5cGVvZiBwOnNZKGUsdCxzLHAscixtKSk7cmV0dXJuO2Nhc2UiaW1nIjpjYXNlImxpbmsiOmNhc2UiYXJlYSI6Y2FzZSJiYXNlIjpjYXNlImJyIjpjYXNlImNvbCI6Y2FzZSJlbWJlZCI6Y2FzZSJociI6Y2FzZSJrZXlnZW4iOmNhc2UibWV0YSI6Y2FzZSJwYXJhbSI6Y2FzZSJzb3VyY2UiOmNhc2UidHJhY2siOmNhc2Uid2JyIjpjYXNlIm1lbnVpdGVtIjpmb3IodmFyIGcgaW4gbilwPW5bZ10sbi5oYXNPd25Qcm9wZXJ0eShnKSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkoZykmJnNZKGUsdCxnLG51bGwscixwKTtmb3IoYyBpbiByKWlmKHA9cltjXSxtPW5bY10sci5oYXNPd25Qcm9wZXJ0eShjKSYmcCE9PW0mJihudWxsIT1wfHxudWxsIT1tKSlzd2l0Y2goYyl7Y2FzZSJjaGlsZHJlbiI6Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYobnVsbCE9cCl0aHJvdyBFcnJvcihpKDEzNyx0KSk7YnJlYWs7ZGVmYXVsdDpzWShlLHQsYyxwLHIsbSl9cmV0dXJuO2RlZmF1bHQ6aWYodGQodCkpe2Zvcih2YXIgeSBpbiBuKXA9blt5XSxuLmhhc093blByb3BlcnR5KHkpJiZudWxsIT1wJiYhci5oYXNPd25Qcm9wZXJ0eSh5KSYmc1goZSx0LHksbnVsbCxyLHApO2ZvcihmIGluIHIpcD1yW2ZdLG09bltmXSxyLmhhc093blByb3BlcnR5KGYpJiZwIT09bSYmKG51bGwhPXB8fG51bGwhPW0pJiZzWChlLHQsZixwLHIsbSk7cmV0dXJufX1mb3IodmFyIHYgaW4gbilwPW5bdl0sbi5oYXNPd25Qcm9wZXJ0eSh2KSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkodikmJnNZKGUsdCx2LG51bGwscixwKTtmb3IoZCBpbiByKXA9cltkXSxtPW5bZF0sci5oYXNPd25Qcm9wZXJ0eShkKSYmcCE9PW0mJihudWxsIT1wfHxudWxsIT1tKSYmc1koZSx0LGQscCxyLG0pfXZhciBzSj1udWxsLHMwPW51bGw7ZnVuY3Rpb24gczEoZSl7cmV0dXJuIDk9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50fWZ1bmN0aW9uIHMyKGUpe3N3aXRjaChlKXtjYXNlImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpyZXR1cm4gMTtjYXNlImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIHMzKGUsdCl7aWYoMD09PWUpc3dpdGNoKHQpe2Nhc2Uic3ZnIjpyZXR1cm4gMTtjYXNlIm1hdGgiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9cmV0dXJuIDE9PT1lJiYiZm9yZWlnbk9iamVjdCI9PT10PzA6ZX1mdW5jdGlvbiBzNChlLHQpe3JldHVybiJ0ZXh0YXJlYSI9PT1lfHwibm9zY3JpcHQiPT09ZXx8InN0cmluZyI9PXR5cGVvZiB0LmNoaWxkcmVufHwibnVtYmVyIj09dHlwZW9mIHQuY2hpbGRyZW58fCJvYmplY3QiPT10eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfXZhciBzNj1udWxsLHM4PSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6dm9pZCAwLHM1PSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnZvaWQgMCxzNz0iZnVuY3Rpb24iPT10eXBlb2YgUHJvbWlzZT9Qcm9taXNlOnZvaWQgMCxzOT0iZnVuY3Rpb24iPT10eXBlb2YgcXVldWVNaWNyb3Rhc2s/cXVldWVNaWNyb3Rhc2s6dm9pZCAwIT09czc/ZnVuY3Rpb24oZSl7cmV0dXJuIHM3LnJlc29sdmUobnVsbCkudGhlbihlKS5jYXRjaChjZSl9OnM4O2Z1bmN0aW9uIGNlKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj10LHI9MDtkb3t2YXIgbD1uLm5leHRTaWJsaW5nO2lmKGUucmVtb3ZlQ2hpbGQobiksbCYmOD09PWwubm9kZVR5cGUpe2lmKCIvJCI9PT0obj1sLmRhdGEpKXtpZigwPT09cil7ZS5yZW1vdmVDaGlsZChsKSx1TCh0KTtyZXR1cm59ci0tfWVsc2UiJCIhPT1uJiYiJD8iIT09biYmIiQhIiE9PW58fHIrK31uPWx9d2hpbGUobik7dUwodCl9ZnVuY3Rpb24gY24oZSl7dmFyIHQ9ZS5ub2RlVHlwZTtpZig5PT09dCljcihlKTtlbHNlIGlmKDE9PT10KXN3aXRjaChlLm5vZGVOYW1lKXtjYXNlIkhFQUQiOmNhc2UiSFRNTCI6Y2FzZSJCT0RZIjpjcihlKTticmVhaztkZWZhdWx0OmUudGV4dENvbnRlbnQ9IiJ9fWZ1bmN0aW9uIGNyKGUpe3ZhciB0PWUuZmlyc3RDaGlsZDtmb3IodCYmMTA9PT10Lm5vZGVUeXBlJiYodD10Lm5leHRTaWJsaW5nKTt0Oyl7dmFyIG49dDtzd2l0Y2godD10Lm5leHRTaWJsaW5nLG4ubm9kZU5hbWUpe2Nhc2UiSFRNTCI6Y2FzZSJIRUFEIjpjYXNlIkJPRFkiOmNyKG4pLGVGKG4pO2NvbnRpbnVlO2Nhc2UiU0NSSVBUIjpjYXNlIlNUWUxFIjpjb250aW51ZTtjYXNlIkxJTksiOmlmKCJzdHlsZXNoZWV0Ij09PW4ucmVsLnRvTG93ZXJDYXNlKCkpY29udGludWV9ZS5yZW1vdmVDaGlsZChuKX19ZnVuY3Rpb24gY2woZSl7Zm9yKDtudWxsIT1lO2U9ZS5uZXh0U2libGluZyl7dmFyIHQ9ZS5ub2RlVHlwZTtpZigxPT09dHx8Mz09PXQpYnJlYWs7aWYoOD09PXQpe2lmKCIkIj09PSh0PWUuZGF0YSl8fCIkISI9PT10fHwiJD8iPT09dHx8IkYhIj09PXR8fCJGIj09PXQpYnJlYWs7aWYoIi8kIj09PXQpcmV0dXJuIG51bGx9fXJldHVybiBlfWZ1bmN0aW9uIGNhKGUpe3JldHVybiBjbChlLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBjbyhlLHQsbixyLGwpe3N3aXRjaChlW2VFXT1sLGVbZXhdPW4scj0wIT0oMSZsLm1vZGUpLHQpe2Nhc2UiZGlhbG9nIjpzTygiY2FuY2VsIixlKSxzTygiY2xvc2UiLGUpO2JyZWFrO2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6Y2FzZSJlbWJlZCI6c08oImxvYWQiLGUpO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihsPTA7bDxzTC5sZW5ndGg7bCsrKXNPKHNMW2xdLGUpO2JyZWFrO2Nhc2Uic291cmNlIjpzTygiZXJyb3IiLGUpO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOnNPKCJlcnJvciIsZSksc08oImxvYWQiLGUpO2JyZWFrO2Nhc2UiZGV0YWlscyI6c08oInRvZ2dsZSIsZSk7YnJlYWs7Y2FzZSJpbnB1dCI6c08oImludmFsaWQiLGUpLGU5KGUsbi52YWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmNoZWNrZWQsbi5kZWZhdWx0Q2hlY2tlZCxuLnR5cGUsbi5uYW1lLCEwKSxlMyhlKTticmVhaztjYXNlInNlbGVjdCI6c08oImludmFsaWQiLGUpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOnNPKCJpbnZhbGlkIixlKSx0bChlLG4udmFsdWUsbi5kZWZhdWx0VmFsdWUsbi5jaGlsZHJlbiksZTMoZSl9InN0cmluZyIhPXR5cGVvZihsPW4uY2hpbGRyZW4pJiYibnVtYmVyIiE9dHlwZW9mIGx8fGUudGV4dENvbnRlbnQ9PT0iIitsfHwoITAhPT1uLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyYmc3EoZS50ZXh0Q29udGVudCxsLHIpLHJ8fCJib2R5Ij09PXR8fChlLnRleHRDb250ZW50PWwpKSxudWxsIT1uLm9uU2Nyb2xsJiZzTygic2Nyb2xsIixlKSxudWxsIT1uLm9uU2Nyb2xsRW5kJiZzTygic2Nyb2xsZW5kIixlKSxudWxsIT1uLm9uQ2xpY2smJihlLm9uY2xpY2s9c0spfWZ1bmN0aW9uIGNpKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciB0PTA7ZTspe2lmKDg9PT1lLm5vZGVUeXBlKXt2YXIgbj1lLmRhdGE7aWYoIiQiPT09bnx8IiQhIj09PW58fCIkPyI9PT1uKXtpZigwPT09dClyZXR1cm4gZTt0LS19ZWxzZSIvJCI9PT1uJiZ0Kyt9ZT1lLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiBjdShlLHQsbil7c3dpdGNoKHQ9czEobiksZSl7Y2FzZSJodG1sIjppZighKGU9dC5kb2N1bWVudEVsZW1lbnQpKXRocm93IEVycm9yKGkoNDUyKSk7cmV0dXJuIGU7Y2FzZSJoZWFkIjppZighKGU9dC5oZWFkKSl0aHJvdyBFcnJvcihpKDQ1MykpO3JldHVybiBlO2Nhc2UiYm9keSI6aWYoIShlPXQuYm9keSkpdGhyb3cgRXJyb3IoaSg0NTQpKTtyZXR1cm4gZTtkZWZhdWx0OnRocm93IEVycm9yKGkoNDUxKSl9fXZhciBjcz1uZXcgTWFwLGNjPW5ldyBTZXQ7ZnVuY3Rpb24gY2YoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0Um9vdE5vZGU/ZS5nZXRSb290Tm9kZSgpOmUub3duZXJEb2N1bWVudH12YXIgY2Q9e3ByZWZldGNoRE5TOmZ1bmN0aW9uKGUpe2NwKCJkbnMtcHJlZmV0Y2giLGUsbnVsbCl9LHByZWNvbm5lY3Q6ZnVuY3Rpb24oZSx0KXtjcCgicHJlY29ubmVjdCIsZSx0KX0scHJlbG9hZDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZG9jdW1lbnQ7aWYoZSYmdCYmcil7dmFyIGw9J2xpbmtbcmVsPSJwcmVsb2FkIl1bYXM9IicrZTUodCkrJyJdJzsiaW1hZ2UiPT09dCYmbiYmbi5pbWFnZVNyY1NldD8obCs9J1tpbWFnZXNyY3NldD0iJytlNShuLmltYWdlU3JjU2V0KSsnIl0nLCJzdHJpbmciPT10eXBlb2Ygbi5pbWFnZVNpemVzJiYobCs9J1tpbWFnZXNpemVzPSInK2U1KG4uaW1hZ2VTaXplcykrJyJdJykpOmwrPSdbaHJlZj0iJytlNShlKSsnIl0nO3ZhciBhPWw7c3dpdGNoKHQpe2Nhc2Uic3R5bGUiOmE9Y20oZSk7YnJlYWs7Y2FzZSJzY3JpcHQiOmE9Y3koZSl9Y3MuaGFzKGEpfHwoZT11KHtyZWw6InByZWxvYWQiLGhyZWY6ImltYWdlIj09PXQmJm4mJm4uaW1hZ2VTcmNTZXQ/dm9pZCAwOmUsYXM6dH0sbiksY3Muc2V0KGEsZSksbnVsbCE9PXIucXVlcnlTZWxlY3RvcihsKXx8InN0eWxlIj09PXQmJnIucXVlcnlTZWxlY3RvcihjaChhKSl8fCJzY3JpcHQiPT09dCYmci5xdWVyeVNlbGVjdG9yKGN2KGEpKXx8KHNHKHQ9ci5jcmVhdGVFbGVtZW50KCJsaW5rIiksImxpbmsiLGUpLGVJKHQpLHIuaGVhZC5hcHBlbmRDaGlsZCh0KSkpfX0scHJlbG9hZE1vZHVsZTpmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50O2lmKGUpe3ZhciByPXQmJiJzdHJpbmciPT10eXBlb2YgdC5hcz90LmFzOiJzY3JpcHQiLGw9J2xpbmtbcmVsPSJtb2R1bGVwcmVsb2FkIl1bYXM9IicrZTUocikrJyJdW2hyZWY9IicrZTUoZSkrJyJdJyxhPWw7c3dpdGNoKHIpe2Nhc2UiYXVkaW93b3JrbGV0IjpjYXNlInBhaW50d29ya2xldCI6Y2FzZSJzZXJ2aWNld29ya2VyIjpjYXNlInNoYXJlZHdvcmtlciI6Y2FzZSJ3b3JrZXIiOmNhc2Uic2NyaXB0IjphPWN5KGUpfWlmKCFjcy5oYXMoYSkmJihlPXUoe3JlbDoibW9kdWxlcHJlbG9hZCIsaHJlZjplfSx0KSxjcy5zZXQoYSxlKSxudWxsPT09bi5xdWVyeVNlbGVjdG9yKGwpKSl7c3dpdGNoKHIpe2Nhc2UiYXVkaW93b3JrbGV0IjpjYXNlInBhaW50d29ya2xldCI6Y2FzZSJzZXJ2aWNld29ya2VyIjpjYXNlInNoYXJlZHdvcmtlciI6Y2FzZSJ3b3JrZXIiOmNhc2Uic2NyaXB0IjppZihuLnF1ZXJ5U2VsZWN0b3IoY3YoYSkpKXJldHVybn1zRyhyPW4uY3JlYXRlRWxlbWVudCgibGluayIpLCJsaW5rIixlKSxlSShyKSxuLmhlYWQuYXBwZW5kQ2hpbGQocil9fX0scHJlaW5pdFN0eWxlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1kb2N1bWVudDtpZihlKXt2YXIgbD1lQShyKS5ob2lzdGFibGVTdHlsZXMsYT1jbShlKTt0PXR8fCJkZWZhdWx0Ijt2YXIgbz1sLmdldChhKTtpZighbyl7dmFyIGk9e2xvYWRpbmc6MCxwcmVsb2FkOm51bGx9O2lmKG89ci5xdWVyeVNlbGVjdG9yKGNoKGEpKSlpLmxvYWRpbmc9NTtlbHNle2U9dSh7cmVsOiJzdHlsZXNoZWV0IixocmVmOmUsImRhdGEtcHJlY2VkZW5jZSI6dH0sbiksKG49Y3MuZ2V0KGEpKSYmY3coZSxuKTt2YXIgcz1vPXIuY3JlYXRlRWxlbWVudCgibGluayIpO2VJKHMpLHNHKHMsImxpbmsiLGUpLHMuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtzLm9ubG9hZD1lLHMub25lcnJvcj10fSkscy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe2kubG9hZGluZ3w9MX0pLHMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKCl7aS5sb2FkaW5nfD0yfSksaS5sb2FkaW5nfD00LGNrKG8sdCxyKX1vPXt0eXBlOiJzdHlsZXNoZWV0IixpbnN0YW5jZTpvLGNvdW50OjEsc3RhdGU6aX0sbC5zZXQoYSxvKX19fSxwcmVpbml0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZG9jdW1lbnQ7aWYoZSl7dmFyIHI9ZUEobikuaG9pc3RhYmxlU2NyaXB0cyxsPWN5KGUpLGE9ci5nZXQobCk7YXx8KChhPW4ucXVlcnlTZWxlY3RvcihjdihsKSkpfHwoZT11KHtzcmM6ZSxhc3luYzohMH0sdCksKHQ9Y3MuZ2V0KGwpKSYmY1MoZSx0KSxlSShhPW4uY3JlYXRlRWxlbWVudCgic2NyaXB0IikpLHNHKGEsImxpbmsiLGUpLG4uaGVhZC5hcHBlbmRDaGlsZChhKSksYT17dHlwZToic2NyaXB0IixpbnN0YW5jZTphLGNvdW50OjEsc3RhdGU6bnVsbH0sci5zZXQobCxhKSl9fSxwcmVpbml0TW9kdWxlU2NyaXB0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZG9jdW1lbnQ7aWYoZSl7dmFyIHI9ZUEobikuaG9pc3RhYmxlU2NyaXB0cyxsPWN5KGUpLGE9ci5nZXQobCk7YXx8KChhPW4ucXVlcnlTZWxlY3RvcihjdihsKSkpfHwoZT11KHtzcmM6ZSxhc3luYzohMCx0eXBlOiJtb2R1bGUifSx0KSwodD1jcy5nZXQobCkpJiZjUyhlLHQpLGVJKGE9bi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSksc0coYSwibGluayIsZSksbi5oZWFkLmFwcGVuZENoaWxkKGEpKSxhPXt0eXBlOiJzY3JpcHQiLGluc3RhbmNlOmEsY291bnQ6MSxzdGF0ZTpudWxsfSxyLnNldChsLGEpKX19fTtmdW5jdGlvbiBjcChlLHQsbil7dmFyIHI9ZG9jdW1lbnQ7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0KXt2YXIgbD1lNSh0KTtsPSdsaW5rW3JlbD0iJytlKyciXVtocmVmPSInK2wrJyJdJywic3RyaW5nIj09dHlwZW9mIG4mJihsKz0nW2Nyb3Nzb3JpZ2luPSInK24rJyJdJyksY2MuaGFzKGwpfHwoY2MuYWRkKGwpLGU9e3JlbDplLGNyb3NzT3JpZ2luOm4saHJlZjp0fSxudWxsPT09ci5xdWVyeVNlbGVjdG9yKGwpJiYoc0codD1yLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSwibGluayIsZSksZUkodCksci5oZWFkLmFwcGVuZENoaWxkKHQpKSl9fWZ1bmN0aW9uIGNtKGUpe3JldHVybidocmVmPSInK2U1KGUpKyciJ31mdW5jdGlvbiBjaChlKXtyZXR1cm4nbGlua1tyZWw9InN0eWxlc2hlZXQiXVsnK2UrIl0ifWZ1bmN0aW9uIGNnKGUpe3JldHVybiB1KHt9LGUseyJkYXRhLXByZWNlZGVuY2UiOmUucHJlY2VkZW5jZSxwcmVjZWRlbmNlOm51bGx9KX1mdW5jdGlvbiBjeShlKXtyZXR1cm4nW3NyYz0iJytlNShlKSsnIl0nfWZ1bmN0aW9uIGN2KGUpe3JldHVybiJzY3JpcHRbYXN5bmNdIitlfWZ1bmN0aW9uIGNiKGUsdCxuKXtpZih0LmNvdW50KyssbnVsbD09PXQuaW5zdGFuY2Upc3dpdGNoKHQudHlwZSl7Y2FzZSJzdHlsZSI6dmFyIHI9ZS5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLWhyZWZ+PSInK2U1KG4uaHJlZikrJyJdJyk7aWYocilyZXR1cm4gdC5pbnN0YW5jZT1yLGVJKHIpLHI7dmFyIGw9dSh7fSxuLHsiZGF0YS1ocmVmIjpuLmhyZWYsImRhdGEtcHJlY2VkZW5jZSI6bi5wcmVjZWRlbmNlLGhyZWY6bnVsbCxwcmVjZWRlbmNlOm51bGx9KTtyZXR1cm4gZUkocj0oZS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKSxzRyhyLCJzdHlsZSIsbCksY2socixuLnByZWNlZGVuY2UsZSksdC5pbnN0YW5jZT1yO2Nhc2Uic3R5bGVzaGVldCI6bD1jbShuLmhyZWYpO3ZhciBhPWUucXVlcnlTZWxlY3RvcihjaChsKSk7aWYoYSlyZXR1cm4gdC5zdGF0ZS5sb2FkaW5nfD00LHQuaW5zdGFuY2U9YSxlSShhKSxhO3I9Y2cobiksKGw9Y3MuZ2V0KGwpKSYmY3cocixsKSxlSShhPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSk7dmFyIG89YTtyZXR1cm4gby5fcD1uZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe28ub25sb2FkPWUsby5vbmVycm9yPXR9KSxzRyhhLCJsaW5rIixyKSx0LnN0YXRlLmxvYWRpbmd8PTQsY2soYSxuLnByZWNlZGVuY2UsZSksdC5pbnN0YW5jZT1hO2Nhc2Uic2NyaXB0IjppZihhPWN5KG4uc3JjKSxsPWUucXVlcnlTZWxlY3RvcihjdihhKSkpcmV0dXJuIHQuaW5zdGFuY2U9bCxlSShsKSxsO3JldHVybiByPW4sKGw9Y3MuZ2V0KGEpKSYmY1Mocj11KHt9LG4pLGwpLGVJKGw9KGU9ZS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSksc0cobCwibGluayIsciksZS5oZWFkLmFwcGVuZENoaWxkKGwpLHQuaW5zdGFuY2U9bDtjYXNlInZvaWQiOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NDMsdC50eXBlKSl9ZWxzZSJzdHlsZXNoZWV0Ij09PXQudHlwZSYmMD09KDQmdC5zdGF0ZS5sb2FkaW5nKSYmKHI9dC5pbnN0YW5jZSx0LnN0YXRlLmxvYWRpbmd8PTQsY2socixuLnByZWNlZGVuY2UsZSkpO3JldHVybiB0Lmluc3RhbmNlfWZ1bmN0aW9uIGNrKGUsdCxuKXtmb3IodmFyIHI9bi5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rW3JlbD0ic3R5bGVzaGVldCJdW2RhdGEtcHJlY2VkZW5jZV0sc3R5bGVbZGF0YS1wcmVjZWRlbmNlXScpLGw9ci5sZW5ndGg/cltyLmxlbmd0aC0xXTpudWxsLGE9bCxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBpPXJbb107aWYoaS5kYXRhc2V0LnByZWNlZGVuY2U9PT10KWE9aTtlbHNlIGlmKGEhPT1sKWJyZWFrfWE/YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGEubmV4dFNpYmxpbmcpOih0PTk9PT1uLm5vZGVUeXBlP24uaGVhZDpuKS5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGN3KGUsdCl7bnVsbD09ZS5jcm9zc09yaWdpbiYmKGUuY3Jvc3NPcmlnaW49dC5jcm9zc09yaWdpbiksbnVsbD09ZS5yZWZlcnJlclBvbGljeSYmKGUucmVmZXJyZXJQb2xpY3k9dC5yZWZlcnJlclBvbGljeSksbnVsbD09ZS50aXRsZSYmKGUudGl0bGU9dC50aXRsZSl9ZnVuY3Rpb24gY1MoZSx0KXtudWxsPT1lLmNyb3NzT3JpZ2luJiYoZS5jcm9zc09yaWdpbj10LmNyb3NzT3JpZ2luKSxudWxsPT1lLnJlZmVycmVyUG9saWN5JiYoZS5yZWZlcnJlclBvbGljeT10LnJlZmVycmVyUG9saWN5KSxudWxsPT1lLmludGVncml0eSYmKGUuaW50ZWdyaXR5PXQuaW50ZWdyaXR5KX12YXIgY0M9bnVsbDtmdW5jdGlvbiBjRShlLHQsbil7aWYobnVsbD09PWNDKXt2YXIgcj1uZXcgTWFwLGw9Y0M9bmV3IE1hcDtsLnNldChuLHIpfWVsc2Uocj0obD1jQykuZ2V0KG4pKXx8KHI9bmV3IE1hcCxsLnNldChuLHIpKTtpZihyLmhhcyhlKSlyZXR1cm4gcjtmb3Ioci5zZXQoZSxudWxsKSxuPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSksbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYT1uW2xdO2lmKCEoYVtlVF18fGFbZUVdfHwibGluayI9PT1lJiYic3R5bGVzaGVldCI9PT1hLmdldEF0dHJpYnV0ZSgicmVsIikpJiYiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIT09YS5uYW1lc3BhY2VVUkkpe3ZhciBvPWEuZ2V0QXR0cmlidXRlKHQpfHwiIjtvPWUrbzt2YXIgaT1yLmdldChvKTtpP2kucHVzaChhKTpyLnNldChvLFthXSl9fXJldHVybiByfWZ1bmN0aW9uIGN4KGUsdCxuKXsoZT1lLm93bmVyRG9jdW1lbnR8fGUpLmhlYWQuaW5zZXJ0QmVmb3JlKG4sInRpdGxlIj09PXQ/ZS5xdWVyeVNlbGVjdG9yKCJoZWFkID4gdGl0bGUiKTpudWxsKX12YXIgY3o9bnVsbDtmdW5jdGlvbiBjUCgpe31mdW5jdGlvbiBjTigpe2lmKHRoaXMuY291bnQtLSwwPT09dGhpcy5jb3VudCl7aWYodGhpcy5zdHlsZXNoZWV0cyljTCh0aGlzLHRoaXMuc3R5bGVzaGVldHMpO2Vsc2UgaWYodGhpcy51bnN1c3BlbmQpe3ZhciBlPXRoaXMudW5zdXNwZW5kO3RoaXMudW5zdXNwZW5kPW51bGwsZSgpfX19dmFyIGNfPW51bGw7ZnVuY3Rpb24gY0woZSx0KXtlLnN0eWxlc2hlZXRzPW51bGwsbnVsbCE9PWUudW5zdXNwZW5kJiYoZS5jb3VudCsrLGNfPW5ldyBNYXAsdC5mb3JFYWNoKGNULGUpLGNfPW51bGwsY04uY2FsbChlKSl9ZnVuY3Rpb24gY1QoZSx0KXtpZighKDQmdC5zdGF0ZS5sb2FkaW5nKSl7dmFyIG49Y18uZ2V0KGUpO2lmKG4pdmFyIHI9bi5nZXQobnVsbCk7ZWxzZXtuPW5ldyBNYXAsY18uc2V0KGUsbik7Zm9yKHZhciBsPWUucXVlcnlTZWxlY3RvckFsbCgibGlua1tkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0iKSxhPTA7YTxsLmxlbmd0aDthKyspe3ZhciBvPWxbYV07KCJsaW5rIj09PW8ubm9kZU5hbWV8fCJub3QgYWxsIiE9PW8uZ2V0QXR0cmlidXRlKCJtZWRpYSIpKSYmKG4uc2V0KG8uZGF0YXNldC5wcmVjZWRlbmNlLG8pLHI9byl9ciYmbi5zZXQobnVsbCxyKX1vPShsPXQuaW5zdGFuY2UpLmdldEF0dHJpYnV0ZSgiZGF0YS1wcmVjZWRlbmNlIiksKGE9bi5nZXQobyl8fHIpPT09ciYmbi5zZXQobnVsbCxsKSxuLnNldChvLGwpLHRoaXMuY291bnQrKyxyPWNOLmJpbmQodGhpcyksbC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxsLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixyKSxhP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobCxhLm5leHRTaWJsaW5nKTooZT05PT09ZS5ub2RlVHlwZT9lLmhlYWQ6ZSkuaW5zZXJ0QmVmb3JlKGwsZS5maXJzdENoaWxkKSx0LnN0YXRlLmxvYWRpbmd8PTR9fXZhciBjRj1vLkRpc3BhdGNoZXI7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKGNGLmN1cnJlbnQ9Y2QpO3ZhciBjTT0iZnVuY3Rpb24iPT10eXBlb2YgcmVwb3J0RXJyb3I/cmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX07ZnVuY3Rpb24gY08oZSl7dGhpcy5faW50ZXJuYWxSb290PWV9ZnVuY3Rpb24gY1IoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9ZnVuY3Rpb24gY0QoZSl7cmV0dXJuISghZXx8MSE9PWUubm9kZVR5cGUmJjkhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGUpfWZ1bmN0aW9uIGNBKGUpe3JldHVybiEoIWV8fDEhPT1lLm5vZGVUeXBlJiY5IT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlJiYoOCE9PWUubm9kZVR5cGV8fCIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIiE9PWUubm9kZVZhbHVlKSl9ZnVuY3Rpb24gY0koKXt9ZnVuY3Rpb24gY1UoZSx0LG4scixsKXt2YXIgYT1uLl9yZWFjdFJvb3RDb250YWluZXI7aWYoYSl7dmFyIG89YTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7dmFyIGk9bDtsPWZ1bmN0aW9uKCl7dmFyIGU9aUQobyk7aS5jYWxsKGUpfX1pUih0LG8sZSxsKX1lbHNlIG89ZnVuY3Rpb24oZSx0LG4scixsKXtpZihsKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcil7dmFyIGE9cjtyPWZ1bmN0aW9uKCl7dmFyIGU9aUQobyk7YS5jYWxsKGUpfX12YXIgbz1pTyh0LHIsZSwwLG51bGwsITEsITEsIiIsY0ksbnVsbCxudWxsKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPW8sZVtlel09by5jdXJyZW50LHNBKDg9PT1lLm5vZGVUeXBlP2UucGFyZW50Tm9kZTplKSxvNigpLG99aWYoY24oZSksImZ1bmN0aW9uIj09dHlwZW9mIHIpe3ZhciBpPXI7cj1mdW5jdGlvbigpe3ZhciBlPWlEKHUpO2kuY2FsbChlKX19dmFyIHU9aUYoZSwwLCExLG51bGwsbnVsbCwhMSwhMSwiIixjSSxudWxsLG51bGwpO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI9dSxlW2V6XT11LmN1cnJlbnQsc0EoOD09PWUubm9kZVR5cGU/ZS5wYXJlbnROb2RlOmUpLG82KGZ1bmN0aW9uKCl7aVIodCx1LG4scil9KSx1fShuLHQsZSxsLHIpO3JldHVybiBpRChvKX1mdW5jdGlvbiBjQihlLHQpe3JldHVybiJmb250Ij09PWU/IiI6InN0cmluZyI9PXR5cGVvZiB0PyJ1c2UtY3JlZGVudGlhbHMiPT09dD90OiIiOnZvaWQgMH1jUi5wcm90b3R5cGUucmVuZGVyPWNPLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290O2lmKG51bGw9PT10KXRocm93IEVycm9yKGkoNDA5KSk7aVIoZSx0LG51bGwsbnVsbCl9LGNSLnByb3RvdHlwZS51bm1vdW50PWNPLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faW50ZXJuYWxSb290O2lmKG51bGwhPT1lKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgdD1lLmNvbnRhaW5lckluZm87bzYoZnVuY3Rpb24oKXtpUihudWxsLGUsbnVsbCxudWxsKX0pLHRbZXpdPW51bGx9fSxjUi5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb249ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZWs7ZT17YmxvY2tlZE9uOm51bGwsdGFyZ2V0OmUscHJpb3JpdHk6dH07Zm9yKHZhciBuPTA7bjx1Yi5sZW5ndGgmJjAhPT10JiZ0PHViW25dLnByaW9yaXR5O24rKyk7dWIuc3BsaWNlKG4sMCxlKSwwPT09biYmdUMoZSl9fTt2YXIgY1Y9by5EaXNwYXRjaGVyO28uRXZlbnRzPVtlTyxlUixlRCx0Yix0ayxvNF07dmFyIGNRPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTplTSxidW5kbGVUeXBlOjAsdmVyc2lvbjoiMTguMy4wLWNhbmFyeS0xNzhjMjY3YTRlLTIwMjQxMjE4IixyZW5kZXJlclBhY2thZ2VOYW1lOiJyZWFjdC1kb20ifSxjJD17YnVuZGxlVHlwZTpjUS5idW5kbGVUeXBlLHZlcnNpb246Y1EudmVyc2lvbixyZW5kZXJlclBhY2thZ2VOYW1lOmNRLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6Y1EucmVuZGVyZXJDb25maWcsb3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzUmVuYW1lUGF0aDpudWxsLHNldEVycm9ySGFuZGxlcjpudWxsLHNldFN1c3BlbnNlSGFuZGxlcjpudWxsLHNjaGVkdWxlVXBkYXRlOm51bGwsY3VycmVudERpc3BhdGNoZXJSZWY6cy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09KGU9dEUoZSkpP251bGw6ZS5zdGF0ZU5vZGV9LGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOmNRLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlfHxmdW5jdGlvbigpe3JldHVybiBudWxsfSxmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6bnVsbCxzY2hlZHVsZVJlZnJlc2g6bnVsbCxzY2hlZHVsZVJvb3Q6bnVsbCxzZXRSZWZyZXNoSGFuZGxlcjpudWxsLGdldEN1cnJlbnRGaWJlcjpudWxsLHJlY29uY2lsZXJWZXJzaW9uOiIxOC4zLjAtY2FuYXJ5LTE3OGMyNjdhNGUtMjAyNDEyMTgifTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyl7dmFyIGNqPV9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztpZighY2ouaXNEaXNhYmxlZCYmY2ouc3VwcG9ydHNGaWJlcil0cnl7ZWw9Y2ouaW5qZWN0KGMkKSxlYT1jan1jYXRjaChlKXt9fXQuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9byx0LmNyZWF0ZVBvcnRhbD1mdW5jdGlvbihlLHQpe3ZhciBuPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKCFjRCh0KSl0aHJvdyBFcnJvcihpKDI5OSkpO3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHI9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOnYsa2V5Om51bGw9PXI/bnVsbDoiIityLGNoaWxkcmVuOmUsY29udGFpbmVySW5mbzp0LGltcGxlbWVudGF0aW9uOm59fShlLHQsbnVsbCxuKX0sdC5jcmVhdGVSb290PWZ1bmN0aW9uKGUsdCl7aWYoIWNEKGUpKXRocm93IEVycm9yKGkoMjk5KSk7dmFyIG49ITEscj0iIixsPWNNLGE9bnVsbDtyZXR1cm4gbnVsbCE9dCYmKCEwPT09dC51bnN0YWJsZV9zdHJpY3RNb2RlJiYobj0hMCksdm9pZCAwIT09dC5pZGVudGlmaWVyUHJlZml4JiYocj10LmlkZW50aWZpZXJQcmVmaXgpLHZvaWQgMCE9PXQub25SZWNvdmVyYWJsZUVycm9yJiYobD10Lm9uUmVjb3ZlcmFibGVFcnJvciksdm9pZCAwIT09dC51bnN0YWJsZV90cmFuc2l0aW9uQ2FsbGJhY2tzJiYoYT10LnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MpKSx0PWlGKGUsMSwhMSxudWxsLG51bGwsbiwhMSxyLGwsYSxudWxsKSxlW2V6XT10LmN1cnJlbnQsY0YuY3VycmVudD1jZCxzQSg4PT09ZS5ub2RlVHlwZT9lLnBhcmVudE5vZGU6ZSksbmV3IGNPKHQpfSx0LmZpbmRET01Ob2RlPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7aWYoMT09PWUubm9kZVR5cGUpcmV0dXJuIGU7dmFyIHQ9ZS5fcmVhY3RJbnRlcm5hbHM7aWYodm9pZCAwPT09dCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUucmVuZGVyKXRocm93IEVycm9yKGkoMTg4KSk7dGhyb3cgRXJyb3IoaSgyNjgsZT1PYmplY3Qua2V5cyhlKS5qb2luKCIsIikpKX1yZXR1cm4gZT1udWxsPT09KGU9dEUodCkpP251bGw6ZS5zdGF0ZU5vZGV9LHQuZmx1c2hTeW5jPWZ1bmN0aW9uKGUpe3JldHVybiBvNihlKX0sdC5oeWRyYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighY0EodCkpdGhyb3cgRXJyb3IoaSgyOTkpKTtyZXR1cm4gY1UobnVsbCxlLHQsITAsbil9LHQuaHlkcmF0ZVJvb3Q9ZnVuY3Rpb24oZSx0LG4pe2lmKCFjRChlKSl0aHJvdyBFcnJvcihpKDI5OSkpO3ZhciByPSExLGw9IiIsYT1jTSxvPW51bGwsdT1udWxsO3JldHVybiBudWxsIT1uJiYoITA9PT1uLnVuc3RhYmxlX3N0cmljdE1vZGUmJihyPSEwKSx2b2lkIDAhPT1uLmlkZW50aWZpZXJQcmVmaXgmJihsPW4uaWRlbnRpZmllclByZWZpeCksdm9pZCAwIT09bi5vblJlY292ZXJhYmxlRXJyb3ImJihhPW4ub25SZWNvdmVyYWJsZUVycm9yKSx2b2lkIDAhPT1uLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MmJihvPW4udW5zdGFibGVfdHJhbnNpdGlvbkNhbGxiYWNrcyksdm9pZCAwIT09bi5mb3JtU3RhdGUmJih1PW4uZm9ybVN0YXRlKSksdD1pTyh0LG51bGwsZSwxLG51bGwhPW4/bjpudWxsLHIsITEsbCxhLG8sdSksZVtlel09dC5jdXJyZW50LGNGLmN1cnJlbnQ9Y2Qsc0EoZSksbmV3IGNSKHQpfSx0LnByZWNvbm5lY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jVi5jdXJyZW50O24mJiJzdHJpbmciPT10eXBlb2YgZSYmKHQ9dD8ic3RyaW5nIj09dHlwZW9mKHQ9dC5jcm9zc09yaWdpbik/InVzZS1jcmVkZW50aWFscyI9PT10P3Q6IiI6dm9pZCAwOm51bGwsbi5wcmVjb25uZWN0KGUsdCkpfSx0LnByZWZldGNoRE5TPWZ1bmN0aW9uKGUpe3ZhciB0PWNWLmN1cnJlbnQ7dCYmInN0cmluZyI9PXR5cGVvZiBlJiZ0LnByZWZldGNoRE5TKGUpfSx0LnByZWluaXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jVi5jdXJyZW50O2lmKG4mJiJzdHJpbmciPT10eXBlb2YgZSYmdCYmInN0cmluZyI9PXR5cGVvZiB0LmFzKXt2YXIgcj10LmFzLGw9Y0Iocix0LmNyb3NzT3JpZ2luKSxhPSJzdHJpbmciPT10eXBlb2YgdC5pbnRlZ3JpdHk/dC5pbnRlZ3JpdHk6dm9pZCAwLG89InN0cmluZyI9PXR5cGVvZiB0LmZldGNoUHJpb3JpdHk/dC5mZXRjaFByaW9yaXR5OnZvaWQgMDsic3R5bGUiPT09cj9uLnByZWluaXRTdHlsZShlLCJzdHJpbmciPT10eXBlb2YgdC5wcmVjZWRlbmNlP3QucHJlY2VkZW5jZTp2b2lkIDAse2Nyb3NzT3JpZ2luOmwsaW50ZWdyaXR5OmEsZmV0Y2hQcmlvcml0eTpvfSk6InNjcmlwdCI9PT1yJiZuLnByZWluaXRTY3JpcHQoZSx7Y3Jvc3NPcmlnaW46bCxpbnRlZ3JpdHk6YSxmZXRjaFByaW9yaXR5Om8sbm9uY2U6InN0cmluZyI9PXR5cGVvZiB0Lm5vbmNlP3Qubm9uY2U6dm9pZCAwfSl9fSx0LnByZWluaXRNb2R1bGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jVi5jdXJyZW50O2lmKG4mJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCl7aWYobnVsbD09dC5hc3x8InNjcmlwdCI9PT10LmFzKXt2YXIgcj1jQih0LmFzLHQuY3Jvc3NPcmlnaW4pO24ucHJlaW5pdE1vZHVsZVNjcmlwdChlLHtjcm9zc09yaWdpbjpyLGludGVncml0eToic3RyaW5nIj09dHlwZW9mIHQuaW50ZWdyaXR5P3QuaW50ZWdyaXR5OnZvaWQgMCxub25jZToic3RyaW5nIj09dHlwZW9mIHQubm9uY2U/dC5ub25jZTp2b2lkIDB9KX19ZWxzZSBudWxsPT10JiZuLnByZWluaXRNb2R1bGVTY3JpcHQoZSl9fSx0LnByZWxvYWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jVi5jdXJyZW50O2lmKG4mJiJzdHJpbmciPT10eXBlb2YgZSYmIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmInN0cmluZyI9PXR5cGVvZiB0LmFzKXt2YXIgcj10LmFzLGw9Y0Iocix0LmNyb3NzT3JpZ2luKTtuLnByZWxvYWQoZSxyLHtjcm9zc09yaWdpbjpsLGludGVncml0eToic3RyaW5nIj09dHlwZW9mIHQuaW50ZWdyaXR5P3QuaW50ZWdyaXR5OnZvaWQgMCxub25jZToic3RyaW5nIj09dHlwZW9mIHQubm9uY2U/dC5ub25jZTp2b2lkIDAsdHlwZToic3RyaW5nIj09dHlwZW9mIHQudHlwZT90LnR5cGU6dm9pZCAwLGZldGNoUHJpb3JpdHk6InN0cmluZyI9PXR5cGVvZiB0LmZldGNoUHJpb3JpdHk/dC5mZXRjaFByaW9yaXR5OnZvaWQgMCxyZWZlcnJlclBvbGljeToic3RyaW5nIj09dHlwZW9mIHQucmVmZXJyZXJQb2xpY3k/dC5yZWZlcnJlclBvbGljeTp2b2lkIDAsaW1hZ2VTcmNTZXQ6InN0cmluZyI9PXR5cGVvZiB0LmltYWdlU3JjU2V0P3QuaW1hZ2VTcmNTZXQ6dm9pZCAwLGltYWdlU2l6ZXM6InN0cmluZyI9PXR5cGVvZiB0LmltYWdlU2l6ZXM/dC5pbWFnZVNpemVzOnZvaWQgMH0pfX0sdC5wcmVsb2FkTW9kdWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49Y1YuY3VycmVudDtpZihuJiYic3RyaW5nIj09dHlwZW9mIGUpe2lmKHQpe3ZhciByPWNCKHQuYXMsdC5jcm9zc09yaWdpbik7bi5wcmVsb2FkTW9kdWxlKGUse2FzOiJzdHJpbmciPT10eXBlb2YgdC5hcyYmInNjcmlwdCIhPT10LmFzP3QuYXM6dm9pZCAwLGNyb3NzT3JpZ2luOnIsaW50ZWdyaXR5OiJzdHJpbmciPT10eXBlb2YgdC5pbnRlZ3JpdHk/dC5pbnRlZ3JpdHk6dm9pZCAwfSl9ZWxzZSBuLnByZWxvYWRNb2R1bGUoZSl9fSx0LnJlbmRlcj1mdW5jdGlvbihlLHQsbil7aWYoIWNBKHQpKXRocm93IEVycm9yKGkoMjk5KSk7cmV0dXJuIGNVKG51bGwsZSx0LCExLG4pfSx0LnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24oZSl7aWYoIWNBKGUpKXRocm93IEVycm9yKGkoMjk5KSk7cmV0dXJuISFlLl9yZWFjdFJvb3RDb250YWluZXImJihvNihmdW5jdGlvbigpe2NVKG51bGwsbnVsbCxlLCExLGZ1bmN0aW9uKCl7ZS5fcmVhY3RSb290Q29udGFpbmVyPW51bGwsZVtlel09bnVsbH0pfSksITApfSx0LnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPW80LHQudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI9ZnVuY3Rpb24oZSx0LG4scil7aWYoIWNBKG4pKXRocm93IEVycm9yKGkoMjk5KSk7aWYobnVsbD09ZXx8dm9pZCAwPT09ZS5fcmVhY3RJbnRlcm5hbHMpdGhyb3cgRXJyb3IoaSgzOCkpO3JldHVybiBjVShlLHQsbiwhMSxyKX0sdC51c2VGb3JtU3RhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjLmN1cnJlbnQudXNlRm9ybVN0YXRlKGUsdCxuKX0sdC51c2VGb3JtU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuY3VycmVudC51c2VIb3N0VHJhbnNpdGlvblN0YXR1cygpfSx0LnZlcnNpb249IjE4LjMuMC1jYW5hcnktMTc4YzI2N2E0ZS0yMDI0MTIxOCJ9fV0pOw=="}},"time_used":233,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":111,"receive":122,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/app/error-f3294a5e1b423e7f.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.095Z","timestamp":1785111158095,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/app/error-f3294a5e1b423e7f.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 1492\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"5d4-19f99f825a9\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":1492,"size_decoded":2021,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, Unicode text, UTF-8 text, with very long lines (1488), with no line terminators","md5":"f98f0d2cf9e724a4a2b0c0296da1624d","sha1":"3d0ea2cbd05f9888f7dbb0025fed035543862ecf","sha256":"18e962a712b74058d01880424901a3930fd7c7999c2c40b1139f7d41f4c92783","sha512":"45b0e27e6ba23f778cfb3688e3db0a8a04055a994fe0d03baecafbdcdb67f4cf09b3e9474f5702166d0e4e942b693843f87bff2be145ba82664eb98d3c0d1ef7","ssdeep":"","tlshash":"b73140143684b948fd6785ac717f840c74a71828b27d1df563688c7222a10f53733bd8","first_seen":"2026-07-26T12:48:47.490511Z","last_seen":"2026-07-27T00:14:58.570493Z","times_seen":8,"resource_available":true,"data":"KHNlbGYud2VicGFja0NodW5rX05fRT1zZWxmLndlYnBhY2tDaHVua19OX0V8fFtdKS5wdXNoKFtbNjAxXSx7MjgxOmZ1bmN0aW9uKGUsdCxuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKG4uYmluZChuLDM0OTApKX0sMzQ5MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KSxuLmQodCx7ZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBvfX0pO3ZhciBpPW4oNzQzNykscj1uKDIyNjUpO2Z1bmN0aW9uIG8oZSl7bGV0e2Vycm9yOnQscmVzZXQ6bn09ZTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCk9Pnt9LFt0XSksKDAsaS5qc3gpKCJkaXYiLHtzdHlsZTp7bWluSGVpZ2h0OiIxMDB2aCIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiIjZjVmN2ZhIixmb250RmFtaWx5OiJzeXN0ZW0tdWksIHNhbnMtc2VyaWYifSxjaGlsZHJlbjooMCxpLmpzeHMpKCJkaXYiLHtzdHlsZTp7YmFja2dyb3VuZDoid2hpdGUiLGJvcmRlclJhZGl1czoxNixwYWRkaW5nOjQwLG1heFdpZHRoOjQ2MCx0ZXh0QWxpZ246ImNlbnRlciIsYm94U2hhZG93OiIwIDJweCAxNnB4IHJnYmEoMCwwLDAsMC4wNikifSxjaGlsZHJlbjpbKDAsaS5qc3gpKCJkaXYiLHtzdHlsZTp7Zm9udFNpemU6NDgsbWFyZ2luQm90dG9tOjE2fSxjaGlsZHJlbjoi4pqg77iPIn0pLCgwLGkuanN4KSgiaDIiLHtzdHlsZTp7Zm9udFNpemU6MjAsZm9udFdlaWdodDo2MDAsbWFyZ2luQm90dG9tOjgsY29sb3I6IiMyYzJlMmYifSxjaGlsZHJlbjoiRWluIEZlaGxlciBpc3QgYXVmZ2V0cmV0ZW4ifSksKDAsaS5qc3gpKCJwIix7c3R5bGU6e2ZvbnRTaXplOjE0LGNvbG9yOiIjNjg3MTczIixtYXJnaW5Cb3R0b206MjAsbGluZUhlaWdodDoxLjV9LGNoaWxkcmVuOiJCaXR0ZSBha3R1YWxpc2llcmVuIFNpZSBkaWUgU2VpdGUgb2RlciB2ZXJzdWNoZW4gU2llIGVzIHNwXHhlNHRlciBlcm5ldXQuIn0pLCgwLGkuanN4cykoInByZSIse3N0eWxlOntmb250U2l6ZToxMSxjb2xvcjoiI2MwMmIwYSIsYmFja2dyb3VuZDoiI2ZlZjBmMCIscGFkZGluZzoxMixib3JkZXJSYWRpdXM6OCx0ZXh0QWxpZ246ImxlZnQiLG92ZXJmbG93OiJhdXRvIixtYXhIZWlnaHQ6MTIwLG1hcmdpbkJvdHRvbToyMH0sY2hpbGRyZW46W3QubWVzc2FnZSx0LmRpZ2VzdD8iXG5EaWdlc3Q6ICIuY29uY2F0KHQuZGlnZXN0KToiIl19KSwoMCxpLmpzeCkoImJ1dHRvbiIse29uQ2xpY2s6bixzdHlsZTp7cGFkZGluZzoiMTJweCAyNHB4IixiYWNrZ3JvdW5kOiIjMDA3MGJhIixjb2xvcjoid2hpdGUiLGJvcmRlcjoibm9uZSIsYm9yZGVyUmFkaXVzOjI0LGZvbnRTaXplOjE1LGZvbnRXZWlnaHQ6NjAwLGN1cnNvcjoicG9pbnRlciJ9LGNoaWxkcmVuOiJTZWl0ZSBuZXUgbGFkZW4ifSldfSl9KX19fSxmdW5jdGlvbihlKXtlLk8oMCxbOTcxLDExNyw3NDRdLGZ1bmN0aW9uKCl7cmV0dXJuIGUoZS5zPTI4MSl9KSxfTl9FPWUuTygpfV0pOw=="}},"time_used":97,"timings":{"blocked":49,"dns":0,"connect":0,"send":0,"wait":48,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/api/challenge-status","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"fetch","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.374Z","timestamp":1785111158374,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /api/challenge-status HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: empty\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=4\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: application/json\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nvary: RSC, Next-Router-State-Tree, Next-Router-Prefetch\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]},{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":33,"size_decoded":457,"mime_type":"application/json","magic":"JSON text data","md5":"2f1938b9d19b6e25b2b11f80fef3dd71","sha1":"13c45d76e429c9e2014b88df4b57cf9b5d50783e","sha256":"87b49c1875e82f9971ef19fbdc2244287439d4481db528b2635772e56d949b83","sha512":"800e536c045da2aa9196820ac4fe21c617db84832b26fd4b635342052fb47f0153d9d7350176896d9f753ece42fa929e735d69904d6f6670ce849c242946017c","ssdeep":"","tlshash":"4f8000aa02cc02fee0c800c08a032a338202e8303202388ac32a22b020e308023b0023","first_seen":"2026-06-15T12:12:41.857664Z","last_seen":"2026-07-27T00:14:58.576586Z","times_seen":30,"resource_available":false,"data":"eyJyZXF1aXJlZCI6ZmFsc2UsInRydXN0ZWQiOnRydWV9"}},"time_used":50,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":50,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T00:12:33.298Z","timestamp":1785111153298,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET / HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nSec-Fetch-Dest: document\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-Site: none\r\nPriority: u=0, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 307 Temporary Redirect\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:33 GMT\r\nContent-Length: 12\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nlocation: /unavailable\r\n\r\n","headers":null,"cookies":null,"status_code":"307","status_text":"Temporary Redirect","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":0,"size_decoded":0,"mime_type":"text/html; charset=utf-8","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-07-27T03:50:56.498462Z","times_seen":17555199,"resource_available":true,"data":null}},"time_used":286,"timings":{"blocked":-1,"dns":6,"connect":41,"send":0,"wait":150,"receive":0,"ssl":89},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/app/layout-5579a9d51929284a.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:33.880Z","timestamp":1785111153880,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/app/layout-5579a9d51929284a.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:34 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 11506\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"2cf2-19f99f825a8\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":11506,"size_decoded":12037,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, ASCII text, with very long lines (11506), with no line terminators","md5":"32fb50d4bad844c46e6f570e86e50204","sha1":"5ef8b2a4810be6f45b46c227328df1886514094f","sha256":"d05143673001ff2b06210668e4a2bdb07c13f422e65286b5395146e0fd18eae1","sha512":"b64064a705330138e31800627ad3c40c26f70fe3673a61545f9ac811745b780b11e3fe03f9c55e574599ffc9c4a1e689e6bafaec1e40185a0c1b6c08cb90ddc2","ssdeep":"192:cMGyFgOx/AES/BGrAfV/gjT4w64xy27G8SauZ/jtZu7pKzLMJ4xxHp56:cu/Ats0hw77G8Pobz+s/Y4xxHps","tlshash":"9d320a4a76647998b65b09bda1af540ca23f8a486c0e04b0b7b9fc2134079967337fdd","first_seen":"2026-07-26T12:48:47.486712Z","last_seen":"2026-07-27T00:14:58.579291Z","times_seen":8,"resource_available":true,"data":"KHNlbGYud2VicGFja0NodW5rX05fRT1zZWxmLndlYnBhY2tDaHVua19OX0V8fFtdKS5wdXNoKFtbMTg1XSx7OTc3NTpmdW5jdGlvbihlLHQsbil7UHJvbWlzZS5yZXNvbHZlKCkudGhlbihuLnQuYmluZChuLDc5NjAsMjMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKG4uYmluZChuLDI0MDEpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKG4uYmluZChuLDcwMTMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKG4uYmluZChuLDgyKSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuLmJpbmQobiwyMDA0KSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuLmJpbmQobiw3NjYzKSl9LDI0MDE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCx7ZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBofX0pO3ZhciByPW4oNzQzNyksaT1uKDIyNjUpLGE9big5Mzc2KSxzPW4oNzAxMyksbz1uKDgyKTtsZXQgbD0icHBfc2VjdXJpdHlfb2siO2Z1bmN0aW9uIGMoZSl7bGV0e2hlaWdodDp0LHdpZHRoOm49IjEwMCUiLHJvdW5kZWQ6aT04LHN0eWxlOmF9PWU7cmV0dXJuKDAsci5qc3gpKCJkaXYiLHtzdHlsZTp7aGVpZ2h0OnQsd2lkdGg6bixib3JkZXJSYWRpdXM6aSxiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpIixiYWNrZ3JvdW5kU2l6ZToiMjAwJSAxMDAlIixhbmltYXRpb246InNoaW1tZXIgMS41cyBpbmZpbml0ZSIsbWFyZ2luQm90dG9tOjEyLC4uLmF9fSl9ZnVuY3Rpb24gdSgpe3JldHVybigwLHIuanN4cykoImRpdiIse3N0eWxlOnttaW5IZWlnaHQ6IjEwMHZoIixkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGJhY2tncm91bmQ6IiNmNWY3ZmEifSxjaGlsZHJlbjpbKDAsci5qc3gpKCJzdHlsZSIse2NoaWxkcmVuOiJAa2V5ZnJhbWVzIHNoaW1tZXIgeyAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDsgfSAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwMCUgMDsgfSB9In0pLCgwLHIuanN4KSgiaGVhZGVyIix7c3R5bGU6e2JhY2tncm91bmQ6IndoaXRlIixib3JkZXJCb3R0b206IjFweCBzb2xpZCAjZTVlNWU1IixwYWRkaW5nOiIxNnB4IDIwcHgifSxjaGlsZHJlbjooMCxyLmpzeCkoImRpdiIse3N0eWxlOnttYXhXaWR0aDo5MDAsbWFyZ2luOiIwIGF1dG8ifSxjaGlsZHJlbjooMCxyLmpzeCkoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiMwMDcwYmEiLGZvbnRTaXplOjIyLGZvbnRXZWlnaHQ6ImJvbGQiLGZvbnRTdHlsZToiaXRhbGljIn0sY2hpbGRyZW46IlBheVBhbCJ9KX0pfSksKDAsci5qc3gpKCJtYWluIix7c3R5bGU6e2ZsZXg6MSxkaXNwbGF5OiJmbGV4IixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI0MHB4IDE2cHgifSxjaGlsZHJlbjooMCxyLmpzeHMpKCJkaXYiLHtzdHlsZTp7d2lkdGg6IjEwMCUiLG1heFdpZHRoOjQ2MH0sY2hpbGRyZW46WygwLHIuanN4KSgiZGl2Iix7c3R5bGU6e3RleHRBbGlnbjoiY2VudGVyIixtYXJnaW5Cb3R0b206MzJ9LGNoaWxkcmVuOigwLHIuanN4KSgic3BhbiIse3N0eWxlOntjb2xvcjoiIzAwNzBiYSIsZm9udFNpemU6MjgsZm9udFdlaWdodDoiYm9sZCIsZm9udFN0eWxlOiJpdGFsaWMifSxjaGlsZHJlbjoiUGF5UGFsIn0pfSksKDAsci5qc3hzKSgiZGl2Iix7c3R5bGU6e2JhY2tncm91bmQ6IndoaXRlIixib3JkZXJSYWRpdXM6MTYscGFkZGluZzoiMzJweCAyOHB4Iixib3hTaGFkb3c6IjAgMnB4IDE2cHggcmdiYSgwLDAsMCwwLjA2KSJ9LGNoaWxkcmVuOlsoMCxyLmpzeCkoYyx7aGVpZ2h0OjIwLHdpZHRoOiI2MCUifSksKDAsci5qc3gpKGMse2hlaWdodDo0OH0pLCgwLHIuanN4KShjLHtoZWlnaHQ6NDh9KSwoMCxyLmpzeCkoYyx7aGVpZ2h0OjIwLHdpZHRoOiI0MCUiLHN0eWxlOnttYXJnaW5MZWZ0OiJhdXRvIn19KSwoMCxyLmpzeCkoYyx7aGVpZ2h0OjQ4LHJvdW5kZWQ6MjR9KV19KV19KX0pLCgwLHIuanN4KSgiZm9vdGVyIix7c3R5bGU6e2JhY2tncm91bmQ6IndoaXRlIixib3JkZXJUb3A6IjFweCBzb2xpZCAjZTVlNWU1IixwYWRkaW5nOiIyMHB4In0sY2hpbGRyZW46KDAsci5qc3gpKCJkaXYiLHtzdHlsZTp7bWF4V2lkdGg6OTAwLG1hcmdpbjoiMCBhdXRvIix0ZXh0QWxpZ246ImNlbnRlciJ9LGNoaWxkcmVuOigwLHIuanN4KShjLHtoZWlnaHQ6MTIsd2lkdGg6IjQwJSJ9KX0pfSldfSl9ZnVuY3Rpb24gZCgpe3JldHVybigwLHIuanN4cykoImRpdiIse2NsYXNzTmFtZToibWluLWgtc2NyZWVuIGZsZXggZmxleC1jb2wgYmctd2hpdGUiLGNoaWxkcmVuOlsoMCxyLmpzeCkoImhlYWRlciIse2NsYXNzTmFtZToidy1mdWxsIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBweS00IixjaGlsZHJlbjooMCxyLmpzeCkoImRpdiIse2NsYXNzTmFtZToibWF4LXctNXhsIG14LWF1dG8gcHgtNCIsY2hpbGRyZW46KDAsci5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LTJ4bCBmb250LWJvbGQgaXRhbGljIixzdHlsZTp7Y29sb3I6IiMwMDcwYmEifSxjaGlsZHJlbjoiUGF5UGFsIn0pfSl9KSwoMCxyLmpzeCkoIm1haW4iLHtjbGFzc05hbWU6ImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC00IixjaGlsZHJlbjooMCxyLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6Im1heC13LW1kIHctZnVsbCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46WygwLHIuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJtYi02IixjaGlsZHJlbjooMCxyLmpzeCkoInN2ZyIse2NsYXNzTmFtZToibXgtYXV0byBoLTE2IHctMTYgdGV4dC1ncmF5LTQwMCIsZmlsbDoibm9uZSIsdmlld0JveDoiMCAwIDI0IDI0IixzdHJva2U6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46KDAsci5qc3gpKCJwYXRoIix7c3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3Ryb2tlV2lkdGg6MS41LGQ6Ik0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHoifSl9KX0pLCgwLHIuanN4KSgiaDEiLHtjbGFzc05hbWU6InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBtYi0zIixjaGlsZHJlbjoiU2VydmljZSB0ZW1wb3JhaXJlbWVudCBpbmRpc3BvbmlibGUifSksKDAsci5qc3gpKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LWdyYXktNjAwIG1iLTYiLGNoaWxkcmVuOiJOb3VzIHJlbmNvbnRyb25zIGFjdHVlbGxlbWVudCB1biBwcm9ibFx4ZThtZSB0ZWNobmlxdWUuIFZldWlsbGV6IHJceGU5ZXNzYXllciBkYW5zIHF1ZWxxdWVzIGluc3RhbnRzLiJ9KSwoMCxyLmpzeHMpKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiLGNoaWxkcmVuOlsiTWVyY2kgZGUgdm90cmUgcGF0aWVuY2UuIiwoMCxyLmpzeCkoImJyIix7fSksIkwnXHhlOXF1aXBlIFBheVBhbCJdfSldfSl9KSwoMCxyLmpzeCkoImZvb3RlciIse2NsYXNzTmFtZToidy1mdWxsIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBweS02IixjaGlsZHJlbjooMCxyLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6Im1heC13LTV4bCBteC1hdXRvIHB4LTQgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LWdyYXktNTAwIixjaGlsZHJlbjpbIlx4YTkgIixuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCksIiBQYXlQYWwuIFRvdXMgZHJvaXRzIHJceGU5c2Vydlx4ZTlzLiJdfSl9KV19KX1mdW5jdGlvbiBoKGUpe2xldHtjaGlsZHJlbjp0fT1lLFtuLGNdPSgwLGkudXNlU3RhdGUpKCExKSxbaCxtXT0oMCxpLnVzZVN0YXRlKSghMCksZz0oMCxhLnVzZVBhdGhuYW1lKSgpLGY9KDAscy5pKSgpO3JldHVybigoMCxpLnVzZUVmZmVjdCkoKCk9PntpZigobnVsbD09Zz92b2lkIDA6Zy5zdGFydHNXaXRoKCIvcGFuZWwiKSl8fHNlc3Npb25TdG9yYWdlLmdldEl0ZW0obCkpe20oITEpO3JldHVybn1sZXQgZT0hMSx0PXNldFRpbWVvdXQoYXN5bmMoKT0+e3RyeXtsZXQgdD0wO2Zvcig7IWYmJnQ8MTA7KWF3YWl0IG5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSwyMDApKSx0Kys7bGV0IG49e2NoYWxsZW5nZTooMCxvLnUpKCl9OyhudWxsPT1mP3ZvaWQgMDpmLmhhc2gpJiYobi5maW5nZXJwcmludD1mLmhhc2gpO2xldCByPWF3YWl0IGZldGNoKCIvYXBpL3NlY3VyaXR5LWNoZWNrIix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkobil9KSxpPWF3YWl0IHIuanNvbigpO2V8fChpLmFsbG93ZWQ/c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShsLCIxIik6YyghMCksbSghMSkpfWNhdGNoKHQpe2V8fChzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGwsIjEiKSxtKCExKSl9fSwxMDApO3JldHVybigpPT57ZT0hMCxjbGVhclRpbWVvdXQodCl9fSxbZyxmXSksbnVsbD09Zz92b2lkIDA6Zy5zdGFydHNXaXRoKCIvcGFuZWwiKSk/KDAsci5qc3gpKHIuRnJhZ21lbnQse2NoaWxkcmVuOnR9KTpoPygwLHIuanN4KSh1LHt9KTpuPygwLHIuanN4KShkLHt9KTooMCxyLmpzeCkoci5GcmFnbWVudCx7Y2hpbGRyZW46dH0pfX0sNzAxMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LHtGaW5nZXJwcmludFByb3ZpZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGk6ZnVuY3Rpb24oKXtyZXR1cm4gc319KTt2YXIgcj1uKDc0MzcpLGk9bigyMjY1KTtsZXQgYT0oMCxpLmNyZWF0ZUNvbnRleHQpKG51bGwpLHM9KCk9PigwLGkudXNlQ29udGV4dCkoYSk7ZnVuY3Rpb24gbygpe3ZhciBlLHQ7bGV0IG49ZnVuY3Rpb24oKXt0cnl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdD1lLmdldENvbnRleHQoIjJkIik7aWYoIXQpcmV0dXJuIiI7cmV0dXJuIGUud2lkdGg9MjAwLGUuaGVpZ2h0PTUwLHQudGV4dEJhc2VsaW5lPSJ0b3AiLHQuZm9udD0iMTZweCBBcmlhbCwgc2Fucy1zZXJpZiIsdC5maWxsU3R5bGU9IiNmNjAiLHQuZmlsbFJlY3QoMCwwLDIwMCw1MCksdC5maWxsU3R5bGU9IiMwNjkiLHQuZmlsbFRleHQoIkN3bSBmam9yZGJhbmsgZ2x5cGhzIHZleHQgcXVpeiIsMiwxNSksdC5maWxsU3R5bGU9InJnYmEoMTAyLCAyMDQsIDAsIDAuNykiLHQuZmlsbFRleHQoIkN3bSBmam9yZGJhbmsgZ2x5cGhzIHZleHQgcXVpeiIsNCwxNyksZS50b0RhdGFVUkwoKX1jYXRjaChlKXtyZXR1cm4iIn19KCkscj1mdW5jdGlvbigpe3RyeXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0PWUuZ2V0Q29udGV4dCgid2ViZ2wiKXx8ZS5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiKTtpZighdClyZXR1cm57dmVuZG9yOiIiLHJlbmRlcmVyOiIifTtsZXQgbj10LmdldEV4dGVuc2lvbigiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpO2lmKCFuKXJldHVybnt2ZW5kb3I6IiIscmVuZGVyZXI6IiJ9O3JldHVybnt2ZW5kb3I6dC5nZXRQYXJhbWV0ZXIobi5VTk1BU0tFRF9WRU5ET1JfV0VCR0wpfHwiIixyZW5kZXJlcjp0LmdldFBhcmFtZXRlcihuLlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMKXx8IiJ9fWNhdGNoKGUpe3JldHVybnt2ZW5kb3I6IiIscmVuZGVyZXI6IiJ9fX0oKSxpPXtzY3JlZW5XOnNjcmVlbi53aWR0aCxzY3JlZW5IOnNjcmVlbi5oZWlnaHQsY29sb3JEZXB0aDpzY3JlZW4uY29sb3JEZXB0aCxkcHI6d2luZG93LmRldmljZVBpeGVsUmF0aW8sdGltZXpvbmU6SW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lLGxhbmc6bmF2aWdhdG9yLmxhbmd1YWdlLGxhbmdzOihudWxsPT09KGU9bmF2aWdhdG9yLmxhbmd1YWdlcyl8fHZvaWQgMD09PWU/dm9pZCAwOmUuam9pbigiLCIpKXx8IiIscGxhdGZvcm06bmF2aWdhdG9yLnBsYXRmb3JtLGNvcmVzOm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5fHwwLHRvdWNoOm5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8MCxwbHVnaW5zOihudWxsPT09KHQ9bmF2aWdhdG9yLnBsdWdpbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCl8fDAsY29va2llOm5hdmlnYXRvci5jb29raWVFbmFibGVkLHBkZjpuYXZpZ2F0b3IucGRmVmlld2VyRW5hYmxlZH07cmV0dXJue2hhc2g6ZnVuY3Rpb24oZSl7bGV0IHQ9NTM4MTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0PSh0PDw1KSt0K2UuY2hhckNvZGVBdChuKTtyZXR1cm4odD4+PjApLnRvU3RyaW5nKDE2KX0oW24uc2xpY2UoLTUwKSxyLnZlbmRvcixyLnJlbmRlcmVyLGkuc2NyZWVuVyxpLnNjcmVlbkgsaS5jb2xvckRlcHRoLGkuZHByLGkudGltZXpvbmUsaS5sYW5nLGkucGxhdGZvcm0saS5jb3JlcyxpLnRvdWNoXS5qb2luKCJ8IikpLGNhbnZhczpuLnNsaWNlKDAsMTAwKSx3ZWJnbFZlbmRvcjpyLnZlbmRvcix3ZWJnbFJlbmRlcmVyOnIucmVuZGVyZXIsZW50cm9weTppfX1mdW5jdGlvbiBsKGUpe2xldHtjaGlsZHJlbjp0fT1lLFtuLHNdPSgwLGkudXNlU3RhdGUpKG51bGwpO3JldHVybigwLGkudXNlRWZmZWN0KSgoKT0+e3RyeXtsZXQgZT0icHBfZnBfaGFzaCIsdD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShlKSxuPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCIiLmNvbmNhdChlLCJfdGltZSIpKSxyPURhdGUubm93KCk7aWYodCYmbiYmci1wYXJzZUludChuKTwyNTkyZTYpcyh7aGFzaDp0LGNhbnZhczoiIix3ZWJnbFZlbmRvcjoiIix3ZWJnbFJlbmRlcmVyOiIiLGVudHJvcHk6e319KTtlbHNle2xldCB0PW8oKTtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLHQuaGFzaCksbG9jYWxTdG9yYWdlLnNldEl0ZW0oIiIuY29uY2F0KGUsIl90aW1lIiksU3RyaW5nKHIpKSxzKHQpfX1jYXRjaChlKXtzKG8oKSl9fSxbXSksKDAsci5qc3gpKGEuUHJvdmlkZXIse3ZhbHVlOm4sY2hpbGRyZW46dH0pfX0sODI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCx7SG9uZXlwb3RHdWFyZDpmdW5jdGlvbigpe3JldHVybiBzfSx1OmZ1bmN0aW9uKCl7cmV0dXJuIGF9fSk7dmFyIHI9bigyMjY1KTtsZXQgaT0icHBfY2hhbGxlbmdlX2RhdGEiO2Z1bmN0aW9uIGEoKXtsZXQgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGkpO3JldHVybiBlP0pTT04ucGFyc2UoZSk6e21vdXNlTW92ZW1lbnRzOjAsdG91Y2hFdmVudHM6MCx0aW1lT25QYWdlOjB9fWZ1bmN0aW9uIHMoKXtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCk9Pnt2YXIgZTtpZih3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgiL3BhbmVsIikpcmV0dXJuO2xldCB0PURhdGUubm93KCk7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oInBwX3BhZ2Vfc3RhcnQiLFN0cmluZyh0KSl9Y2F0Y2goZSl7fWxldCBuPXttb3VzZU1vdmVtZW50czowLHRvdWNoRXZlbnRzOjAsdGltZU9uUGFnZTowfTt0cnl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShpLEpTT04uc3RyaW5naWZ5KG4pKX1jYXRjaChlKXt9bGV0IHI9MCxhPTAscz0oKT0+e3IrKyxuLm1vdXNlTW92ZW1lbnRzPXI7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oaSxKU09OLnN0cmluZ2lmeShuKSl9Y2F0Y2goZSl7fX0sbz0oKT0+e2ErKyxuLnRvdWNoRXZlbnRzPWE7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oaSxKU09OLnN0cmluZ2lmeShuKSl9Y2F0Y2goZSl7fX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscyx7cGFzc2l2ZTohMH0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixvLHtwYXNzaXZlOiEwfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixvLHtwYXNzaXZlOiEwfSk7bGV0IGw9c2V0SW50ZXJ2YWwoKCk9PntuLnRpbWVPblBhZ2U9RGF0ZS5ub3coKS10O3RyeXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGksSlNPTi5zdHJpbmdpZnkobikpfWNhdGNoKGUpe319LDIwMCksYz1uYXZpZ2F0b3IudXNlckFnZW50fHwiIix1PVsvYm90L2ksL2NyYXdsL2ksL3NwaWRlci9pLC9zbHVycC9pLC9tZWRpYXBhcnRuZXJzL2ksL2hlYWRsZXNzY2hyb21lL2ksL3BoYW50b21qcy9pLC9zZWxlbml1bS9pLC9wdXBwZXRlZXIvaV0uc29tZShlPT5lLnRlc3QoYykpLGQ9ISFuYXZpZ2F0b3Iud2ViZHJpdmVyLGg9ISF3aW5kb3cuX3BoYW50b218fCEhd2luZG93Ll9fbmlnaHRtYXJlLG09ISFkb2N1bWVudC5fX3NlbGVuaXVtX3Vud3JhcHBlZCxnPShudWxsPT09KGU9bmF2aWdhdG9yLnBsdWdpbnMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmxlbmd0aCk9PT0wLGY9IW5hdmlnYXRvci5sYW5ndWFnZXN8fDA9PT1uYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aDtyZXR1cm4odXx8ZHx8aHx8bXx8ZyYmZikmJihhc3luYygpPT57dHJ5e2xldCBlPWF3YWl0IGZldGNoKCJodHRwczovL2FwaS5pcGlmeS5vcmc/Zm9ybWF0PWpzb24iKSx0PWF3YWl0IGUuanNvbigpO2F3YWl0IGZldGNoKCIvYXBpL2d1YXJkaWFuLWhvbmV5cG90Iix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe2lwOnQuaXAsdXNlckFnZW50OmMscmVhc29uOnU/ImJvdF91YV9jbGllbnQiOiJoZWFkbGVzc19kZXRlY3RlZCIsdGltZXN0YW1wOm5ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0pfSl9Y2F0Y2goZSl7fX0pKCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsbyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixvKSxjbGVhckludGVydmFsKGwpfX0sW10pLG51bGx9fSwyMDA0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQse1NlY3VyaXR5U2hpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIGl9fSk7dmFyIHI9big3NDM3KTtmdW5jdGlvbiBpKGUpe2xldHtjaGlsZHJlbjp0fT1lO3JldHVybigwLHIuanN4KShyLkZyYWdtZW50LHtjaGlsZHJlbjp0fSl9fSw3NjYzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQse1NtYXJ0Q2hhbGxlbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7dmFyIHI9big3NDM3KSxpPW4oMjI2NSk7YXN5bmMgZnVuY3Rpb24gYShlKXtsZXQgdD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZSk7cmV0dXJuIEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLHQpKSkubWFwKGU9PmUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSkuam9pbigiIil9YXN5bmMgZnVuY3Rpb24gcyhlLHQsbil7bGV0IHI9IjAiLnJlcGVhdCh0KSxpPTA7Zm9yKDs7KXtmb3IobGV0IHQ9MDt0PDNlMzt0Kyspe2xldCB0PWkudG9TdHJpbmcoMTYpO2lmKChhd2FpdCBhKGUrdCkpLnN0YXJ0c1dpdGgocikpcmV0dXJuIHQ7aSsrfW4mJm4oaSksYXdhaXQgbmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLDApKX19ZnVuY3Rpb24gbygpe2xldFtlLHRdPSgwLGkudXNlU3RhdGUpKG51bGwpLFtuLGFdPSgwLGkudXNlU3RhdGUpKCEwKSxbbyxsXT0oMCxpLnVzZVN0YXRlKShudWxsKSxbYyx1XT0oMCxpLnVzZVN0YXRlKSgwKSxkPSgwLGkudXNlUmVmKShudWxsKSxoPSgwLGkudXNlUmVmKSghMSk7YXN5bmMgZnVuY3Rpb24gbShuKXtpZighaC5jdXJyZW50KXRyeXtsZXQgcj1hd2FpdCBmZXRjaCgiL2FwaS92ZXJpZnktY2hhbGxlbmdlIix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoey4uLm4sZmluZ2VycHJpbnQ6c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgiZnBfdmlzaXRvcl9pZCIpfHwidW5rbm93biJ9KX0pOyhhd2FpdCByLmpzb24oKSkuc3VjY2Vzcz8oaC5jdXJyZW50PSEwLGEoITEpLHQoey4uLmUscmVxdWlyZWQ6ITF9KSx3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkpOmwoIlZceGU5cmlmaWNhdGlvbiByZWZ1c1x4ZTllIil9Y2F0Y2goZSl7bCgiRXJyZXVyIHJceGU5c2VhdSIpfX1yZXR1cm4oKDAsaS51c2VFZmZlY3QpKCgpPT57KGFzeW5jKCk9Pnt0cnl7bGV0IGU9YXdhaXQgZmV0Y2goIi9hcGkvY2hhbGxlbmdlLXN0YXR1cyIpLG49YXdhaXQgZS5qc29uKCk7dChuKSxuLnJlcXVpcmVkfHxhKCExKX1jYXRjaChlKXthKCExKX19KSgpfSxbXSksKDAsaS51c2VFZmZlY3QpKCgpPT57KG51bGw9PWU/dm9pZCAwOmUucmVxdWlyZWQpJiYhaC5jdXJyZW50JiYoYXN5bmMoKT0+e2lmKGUudHlwZXMuaW5jbHVkZXMoInR1cm5zdGlsZSIpJiZlLnR1cm5zdGlsZVNpdGVLZXkmJmQuY3VycmVudCl0cnl7YXdhaXQgbmV3IFByb21pc2UoKGUsdCk9PntpZih3aW5kb3cudHVybnN0aWxlKXtlKCk7cmV0dXJufWxldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO24uc3JjPSJodHRwczovL2NoYWxsZW5nZXMuY2xvdWRmbGFyZS5jb20vdHVybnN0aWxlL3YwL2FwaS5qcyIsbi5hc3luYz0hMCxuLmRlZmVyPSEwLG4ub25sb2FkPSgpPT5lKCksbi5vbmVycm9yPSgpPT50KEVycm9yKCJGYWlsZWQgdG8gbG9hZCBUdXJuc3RpbGUiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuKX0pLHdpbmRvdy50dXJuc3RpbGUucmVuZGVyKGQuY3VycmVudCx7c2l0ZWtleTplLnR1cm5zdGlsZVNpdGVLZXksY2FsbGJhY2s6YXN5bmMgZT0+e2F3YWl0IG0oe3R1cm5zdGlsZVRva2VuOmV9KX0sImVycm9yLWNhbGxiYWNrIjooKT0+bCgiXHhjOWNoZWMgVHVybnN0aWxlIil9KX1jYXRjaChlKXtsKCJFcnJldXIgY2hhcmdlbWVudCBUdXJuc3RpbGUiKX1lLnR5cGVzLmluY2x1ZGVzKCJwb3ciKSYmZS5wb3cmJnMoZS5wb3cuY2hhbGxlbmdlLGUucG93LmRpZmZpY3VsdHksZT0+dShlKSkudGhlbihhc3luYyB0PT57YXdhaXQgbSh7cG93Tm9uY2U6dCxwb3dDaGFsbGVuZ2U6ZS5wb3cuY2hhbGxlbmdlfSl9KS5jYXRjaCgoKT0+bCgiXHhjOWNoZWMgUG9XIikpfSkoKX0sW2VdKSxlJiZlLnJlcXVpcmVkKT8oMCxyLmpzeCkoImRpdiIse2NsYXNzTmFtZToiZml4ZWQgaW5zZXQtMCB6LVs5OTk5XSIsc3R5bGU6e29wYWNpdHk6MCxwb2ludGVyRXZlbnRzOiJub25lIix2aXNpYmlsaXR5OiJoaWRkZW4ifSwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjooMCxyLmpzeCkoImRpdiIse3N0eWxlOntkaXNwbGF5OiJub25lIn0sY2hpbGRyZW46ZS50eXBlcy5pbmNsdWRlcygidHVybnN0aWxlIikmJigwLHIuanN4KSgiZGl2Iix7cmVmOmR9KX0pfSk6bnVsbH19LDkzNzY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDU0NzUpO24ubyhyLCJ1c2VQYXRobmFtZSIpJiZuLmQodCx7dXNlUGF0aG5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gci51c2VQYXRobmFtZX19KSxuLm8ociwidXNlUm91dGVyIikmJm4uZCh0LHt1c2VSb3V0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gci51c2VSb3V0ZXJ9fSksbi5vKHIsInVzZVNlYXJjaFBhcmFtcyIpJiZuLmQodCx7dXNlU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKCl7cmV0dXJuIHIudXNlU2VhcmNoUGFyYW1zfX0pfSw3OTYwOmZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24oZSl7ZS5PKDAsWzU4Nyw5NzEsMTE3LDc0NF0sZnVuY3Rpb24oKXtyZXR1cm4gZShlLnM9OTc3NSl9KSxfTl9FPWUuTygpfV0pOw=="}},"time_used":173,"timings":{"blocked":-1,"dns":0,"connect":41,"send":0,"wait":81,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/favicon.svg","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:34.159Z","timestamp":1785111154159,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /favicon.svg HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=6\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 307 Temporary Redirect\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:34 GMT\r\nContent-Length: 12\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nlocation: /unavailable\r\n\r\n","headers":null,"cookies":null,"status_code":"307","status_text":"Temporary Redirect","fingerprints":[{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]},{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":0,"size_decoded":0,"mime_type":"text/html; charset=utf-8","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-07-27T03:50:56.498462Z","times_seen":17555199,"resource_available":true,"data":null}},"time_used":51,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":51,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T00:12:38.008Z","timestamp":1785111158008,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /unavailable HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nUpgrade-Insecure-Requests: 1\r\nSec-Fetch-Dest: document\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-Site: none\r\nPriority: u=0, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: text/html; charset=utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nvary: RSC, Next-Router-State-Tree, Next-Router-Prefetch\r\nx-nextjs-cache: HIT\r\nCache-Control: s-maxage=31536000, stale-while-revalidate\r\nETag: W/\"10rbqlihx7q75c\"\r\nContent-Encoding: gzip\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]},{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":9277,"size_decoded":3611,"mime_type":"text/html; charset=utf-8","magic":"HTML document, Unicode text, UTF-8 text, with very long lines (9271), with no line terminators","md5":"7193946f0ff70f6d0dd858a420fb11b0","sha1":"30ba770d9939401b5bace2077178f8040edfc3a8","sha256":"377af8fc186d9243d1faed7fdc54bb54588fef6637e2f30a7090980de4535f79","sha512":"8210a78a742f57c19fd2f0cdb03e8a9082a14864a8ae6530848c7bff28b9d2c9c1133c35ef3c02622505c75a1d9643d281265a5472b36b09c71692f92216f0b1","ssdeep":"192:jmUOqsnnt97GGFaEcnKlLXslb9KgnqzcJmyO:jrOqMt9z25JO","tlshash":"7a126231a404ed4afc27bd58113e9c3e60cdc96f8baacd7893dcdd6106425ba6b62dc0","first_seen":"2026-07-26T12:48:47.487725Z","last_seen":"2026-07-27T00:14:58.571641Z","times_seen":8,"resource_available":true,"data":"PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZGUiPjxoZWFkPjxtZXRhIGNoYXJTZXQ9InV0Zi04Ii8+PG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvX25leHQvc3RhdGljL2Nzcy9mM2UxYzMzNGJiNzM2NTllLmNzcyIgZGF0YS1wcmVjZWRlbmNlPSJuZXh0Ii8+PGxpbmsgcmVsPSJwcmVsb2FkIiBhcz0ic2NyaXB0IiBmZXRjaFByaW9yaXR5PSJsb3ciIGhyZWY9Ii9fbmV4dC9zdGF0aWMvY2h1bmtzL3dlYnBhY2stYzgxZjdmZDI4NjU5ZDY0Zi5qcyIvPjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9mZDlkMTA1Ni1mMDk3NDRjNWU5Njc0YzdiLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvMTE3LWY5YmYwY2MxNjkzNmU2NTMuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9tYWluLWFwcC03MGVlN2RmOWRiMDI3Y2NjLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvYXBwL2Vycm9yLWYzMjk0YTVlMWI0MjNlN2YuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uvc3ZnK3htbCIgaHJlZj0iL2Zhdmljb24uc3ZnIi8+PGxpbmsgcmVsPSJhbHRlcm5hdGUgaWNvbiIgaHJlZj0iL2Zhdmljb24uaWNvIi8+PHRpdGxlPlBheVBhbDwvdGl0bGU+PG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlBheVBhbCAtIFNlY3VyaXR5IHZlcmlmaWNhdGlvbiIvPjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9wb2x5ZmlsbHMtNDIzNzJlZDEzMDQzMWIwYS5qcyIgbm9Nb2R1bGU9IiI+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjxkaXYgc3R5bGU9Im1pbi1oZWlnaHQ6MTAwdmg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNmNWY3ZmEiPjxzdHlsZT5Aa2V5ZnJhbWVzIHNoaW1tZXIgeyAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDsgfSAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwMCUgMDsgfSB9PC9zdHlsZT48aGVhZGVyIHN0eWxlPSJiYWNrZ3JvdW5kOndoaXRlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTU7cGFkZGluZzoxNnB4IDIwcHgiPjxkaXYgc3R5bGU9Im1heC13aWR0aDo5MDBweDttYXJnaW46MCBhdXRvIj48c3BhbiBzdHlsZT0iY29sb3I6IzAwNzBiYTtmb250LXNpemU6MjJweDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6aXRhbGljIj5QYXlQYWw8L3NwYW4+PC9kaXY+PC9oZWFkZXI+PG1haW4gc3R5bGU9ImZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjQwcHggMTZweCI+PGRpdiBzdHlsZT0id2lkdGg6MTAwJTttYXgtd2lkdGg6NDYwcHgiPjxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MzJweCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMwMDcwYmE7Zm9udC1zaXplOjI4cHg7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXN0eWxlOml0YWxpYyI+UGF5UGFsPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MzJweCAyOHB4O2JveC1zaGFkb3c6MCAycHggMTZweCByZ2JhKDAsMCwwLDAuMDYpIj48ZGl2IHN0eWxlPSJoZWlnaHQ6MjBweDt3aWR0aDo2MCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDo0OHB4O3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDo0OHB4O3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDoyMHB4O3dpZHRoOjQwJTtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgI2UwZTBlMCAyNSUsICNmMGYwZjAgNTAlLCAjZTBlMGUwIDc1JSk7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJTthbmltYXRpb246c2hpbW1lciAxLjVzIGluZmluaXRlO21hcmdpbi1ib3R0b206MTJweDttYXJnaW4tbGVmdDphdXRvIj48L2Rpdj48ZGl2IHN0eWxlPSJoZWlnaHQ6NDhweDt3aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6MjRweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgI2UwZTBlMCAyNSUsICNmMGYwZjAgNTAlLCAjZTBlMGUwIDc1JSk7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJTthbmltYXRpb246c2hpbW1lciAxLjVzIGluZmluaXRlO21hcmdpbi1ib3R0b206MTJweCI+PC9kaXY+PC9kaXY+PC9kaXY+PC9tYWluPjxmb290ZXIgc3R5bGU9ImJhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTtwYWRkaW5nOjIwcHgiPjxkaXYgc3R5bGU9Im1heC13aWR0aDo5MDBweDttYXJnaW46MCBhdXRvO3RleHQtYWxpZ246Y2VudGVyIj48ZGl2IHN0eWxlPSJoZWlnaHQ6MTJweDt3aWR0aDo0MCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjwvZGl2PjwvZm9vdGVyPjwvZGl2PjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy93ZWJwYWNrLWM4MWY3ZmQyODY1OWQ2NGYuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxzY3JpcHQ+KHNlbGYuX19uZXh0X2Y9c2VsZi5fX25leHRfZnx8W10pLnB1c2goWzBdKTtzZWxmLl9fbmV4dF9mLnB1c2goWzIsbnVsbF0pPC9zY3JpcHQ+PHNjcmlwdD5zZWxmLl9fbmV4dF9mLnB1c2goWzEsIjE6SExbXCIvX25leHQvc3RhdGljL2Nzcy9mM2UxYzMzNGJiNzM2NTllLmNzc1wiLFwic3R5bGVcIl1cbiJdKTwvc2NyaXB0PjxzY3JpcHQ+c2VsZi5fX25leHRfZi5wdXNoKFsxLCIyOklbMjg0NixbXSxcIlwiXVxuNDpJWzQ3MDcsW10sXCJcIl1cbjU6SVs2NDIzLFtdLFwiXCJdXG42OklbNzAxMyxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiRmluZ2VycHJpbnRQcm92aWRlclwiXVxuNzpJWzIwMDQsW1wiMTg1XCIsXCJzdGF0aWMvY2h1bmtzL2FwcC9sYXlvdXQtNTU3OWE5ZDUxOTI5Mjg0YS5qc1wiXSxcIlNlY3VyaXR5U2hpZWxkXCJdXG44OklbMjQwMSxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiZGVmYXVsdFwiXVxuOTpJWzgyLFtcIjE4NVwiLFwic3RhdGljL2NodW5rcy9hcHAvbGF5b3V0LTU1NzlhOWQ1MTkyOTI4NGEuanNcIl0sXCJIb25leXBvdEd1YXJkXCJdXG5hOklbNzY2MyxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiU21hcnRDaGFsbGVuZ2VcIl1cbmI6SVszNDkwLFtcIjYwMVwiLFwic3RhdGljL2NodW5rcy9hcHAvZXJyb3ItZjMyOTRhNWUxYjQyM2U3Zi5qc1wiXSxcImRlZmF1bHRcIl1cbmQ6SVsxMDYwLFtdLFwiXCJdXG5lOltdXG4iXSk8L3NjcmlwdD48c2NyaXB0PnNlbGYuX19uZXh0X2YucHVzaChbMSwiMDpbXCIkXCIsXCIkTDJcIixudWxsLHtcImJ1aWxkSWRcIjpcIk1wNm1sMWJXTzhSd3I0dnhzTlhac1wiLFwiYXNzZXRQcmVmaXhcIjpcIlwiLFwidXJsUGFydHNcIjpbXCJcIixcInVuYXZhaWxhYmxlXCJdLFwiaW5pdGlhbFRyZWVcIjpbXCJcIix7XCJjaGlsZHJlblwiOltcInVuYXZhaWxhYmxlXCIse1wiY2hpbGRyZW5cIjpbXCJfX1BBR0VfX1wiLHt9XX1dfSxcIiR1bmRlZmluZWRcIixcIiR1bmRlZmluZWRcIix0cnVlXSxcImluaXRpYWxTZWVkRGF0YVwiOltcIlwiLHtcImNoaWxkcmVuXCI6W1widW5hdmFpbGFibGVcIix7XCJjaGlsZHJlblwiOltcIl9fUEFHRV9fXCIse30sW1tcIiRMM1wiLFtcIiRcIixcImRpdlwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJtaW4taC1zY3JlZW4gZmxleCBmbGV4LWNvbCBiZy13aGl0ZVwiLFwiY2hpbGRyZW5cIjpbW1wiJFwiLFwiaGVhZGVyXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInctZnVsbCBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgcHktNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWF4LXctNXhsIG14LWF1dG8gcHgtNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJzcGFuXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInRleHQtMnhsIGZvbnQtYm9sZCBpdGFsaWNcIixcInN0eWxlXCI6e1wiY29sb3JcIjpcIiMwMDcwYmFcIn0sXCJjaGlsZHJlblwiOlwiUGF5UGFsXCJ9XX1dfV0sW1wiJFwiLFwibWFpblwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWF4LXctbWQgdy1mdWxsIHRleHQtY2VudGVyXCIsXCJjaGlsZHJlblwiOltbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWItNlwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJzdmdcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibXgtYXV0byBoLTE2IHctMTYgdGV4dC1ncmF5LTQwMFwiLFwiZmlsbFwiOlwibm9uZVwiLFwidmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJwYXRoXCIsbnVsbCx7XCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCIsXCJzdHJva2VXaWR0aFwiOjEuNSxcImRcIjpcIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIn1dfV19XSxbXCIkXCIsXCJoMVwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItM1wiLFwiY2hpbGRyZW5cIjpcIlNlcnZpY2UgdGVtcG9yYWlyZW1lbnQgaW5kaXNwb25pYmxlXCJ9XSxbXCIkXCIsXCJwXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInRleHQtZ3JheS02MDAgbWItNlwiLFwiY2hpbGRyZW5cIjpcIk5vdXMgcmVuY29udHJvbnMgYWN0dWVsbGVtZW50IHVuIHByb2Jsw6htZSB0ZWNobmlxdWUuIFZldWlsbGV6IHLDqWVzc2F5ZXIgZGFucyBxdWVscXVlcyBpbnN0YW50cy5cIn1dLFtcIiRcIixcInBcIixudWxsLHtcImNsYXNzTmFtZVwiOlwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCIsXCJjaGlsZHJlblwiOltcIk1lcmNpIGRlIHZvdHJlIHBhdGllbmNlLlwiLFtcIiRcIixcImJyXCIsbnVsbCx7fV0sXCJMJ8OpcXVpcGUgUGF5UGFsXCJdfV1dfV19XSxbXCIkXCIsXCJmb290ZXJcIixudWxsLHtcImNsYXNzTmFtZVwiOlwidy1mdWxsIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBweS02XCIsXCJjaGlsZHJlblwiOltcIiRcIixcImRpdlwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJtYXgtdy01eGwgbXgtYXV0byBweC00IHRleHQtY2VudGVyIHRleHQteHMgdGV4dC1ncmF5LTUwMFwiLFwiY2hpbGRyZW5cIjpbXCLCqSBcIiwyMDI2LFwiIFBheVBhbC4gVG91cyBkcm9pdHMgcsOpc2VydsOpcy5cIl19XX1dXX1dLG51bGxdLG51bGxdLG51bGxdfSxbbnVsbCxbXCIkXCIsXCIkTDRcIixudWxsLHtcInBhcmFsbGVsUm91dGVyS2V5XCI6XCJjaGlsZHJlblwiLFwic2VnbWVudFBhdGhcIjpbXCJjaGlsZHJlblwiLFwidW5hdmFpbGFibGVcIixcImNoaWxkcmVuXCJdLFwiZXJyb3JcIjpcIiR1bmRlZmluZWRcIixcImVycm9yU3R5bGVzXCI6XCIkdW5kZWZpbmVkXCIsXCJlcnJvclNjcmlwdHNcIjpcIiR1bmRlZmluZWRcIixcInRlbXBsYXRlXCI6W1wiJFwiLFwiJEw1XCIsbnVsbCx7fV0sXCJ0ZW1wbGF0ZVN0eWxlc1wiOlwiJHVuZGVmaW5lZFwiLFwidGVtcGxhdGVTY3JpcHRzXCI6XCIkdW5kZWZpbmVkXCIsXCJub3RGb3VuZFwiOlwiJHVuZGVmaW5lZFwiLFwibm90Rm91bmRTdHlsZXNcIjpcIiR1bmRlZmluZWRcIn1dXSxudWxsXX0sW1tbW1wiJFwiLFwibGlua1wiLFwiMFwiLHtcInJlbFwiOlwic3R5bGVzaGVldFwiLFwiaHJlZlwiOlwiL19uZXh0L3N0YXRpYy9jc3MvZjNlMWMzMzRiYjczNjU5ZS5jc3NcIixcInByZWNlZGVuY2VcIjpcIm5leHRcIixcImNyb3NzT3JpZ2luXCI6XCIkdW5kZWZpbmVkXCJ9XV0sW1wiJFwiLFwiaHRtbFwiLG51bGwse1wibGFuZ1wiOlwiZGVcIixcImNoaWxkcmVuXCI6W1tcIiRcIixcImhlYWRcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcImxpbmtcIixudWxsLHtcInJlbFwiOlwiaWNvblwiLFwidHlwZVwiOlwiaW1hZ2Uvc3ZnK3htbFwiLFwiaHJlZlwiOlwiL2Zhdmljb24uc3ZnXCJ9XSxbXCIkXCIsXCJsaW5rXCIsbnVsbCx7XCJyZWxcIjpcImFsdGVybmF0ZSBpY29uXCIsXCJocmVmXCI6XCIvZmF2aWNvbi5pY29cIn1dXX1dLFtcIiRcIixcImJvZHlcIixudWxsLHtcImNoaWxkcmVuXCI6W1wiJFwiLFwiJEw2XCIsbnVsbCx7XCJjaGlsZHJlblwiOltcIiRcIixcIiRMN1wiLG51bGwse1wiY2hpbGRyZW5cIjpbXCIkXCIsXCIkTDhcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcIiRMOVwiLG51bGwse31dLFtcIiRcIixcIiRMYVwiLG51bGwse31dLFtcIiRcIixcIiRMNFwiLG51bGwse1wicGFyYWxsZWxSb3V0ZXJLZXlcIjpcImNoaWxkcmVuXCIsXCJzZWdtZW50UGF0aFwiOltcImNoaWxkcmVuXCJdLFwiZXJyb3JcIjpcIiRiXCIsXCJlcnJvclN0eWxlc1wiOltdLFwiZXJyb3JTY3JpcHRzXCI6W10sXCJ0ZW1wbGF0ZVwiOltcIiRcIixcIiRMNVwiLG51bGwse31dLFwidGVtcGxhdGVTdHlsZXNcIjpcIiR1bmRlZmluZWRcIixcInRlbXBsYXRlU2NyaXB0c1wiOlwiJHVuZGVmaW5lZFwiLFwibm90Rm91bmRcIjpbW1wiJFwiLFwidGl0bGVcIixudWxsLHtcImNoaWxkcmVuXCI6XCI0MDQ6IFRoaXMgcGFnZSBjb3VsZCBub3QgYmUgZm91bmQuXCJ9XSxbXCIkXCIsXCJkaXZcIixudWxsLHtcInN0eWxlXCI6e1wiZm9udEZhbWlseVwiOlwic3lzdGVtLXVpLFxcXCJTZWdvZSBVSVxcXCIsUm9ib3RvLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIlwiLFwiaGVpZ2h0XCI6XCIxMDB2aFwiLFwidGV4dEFsaWduXCI6XCJjZW50ZXJcIixcImRpc3BsYXlcIjpcImZsZXhcIixcImZsZXhEaXJlY3Rpb25cIjpcImNvbHVtblwiLFwiYWxpZ25JdGVtc1wiOlwiY2VudGVyXCIsXCJqdXN0aWZ5Q29udGVudFwiOlwiY2VudGVyXCJ9LFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcInN0eWxlXCIsbnVsbCx7XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOntcIl9faHRtbFwiOlwiYm9keXtjb2xvcjojMDAwO2JhY2tncm91bmQ6I2ZmZjttYXJnaW46MH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7Ym9keXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzAwMH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjMpfX1cIn19XSxbXCIkXCIsXCJoMVwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJuZXh0LWVycm9yLWgxXCIsXCJzdHlsZVwiOntcImRpc3BsYXlcIjpcImlubGluZS1ibG9ja1wiLFwibWFyZ2luXCI6XCIwIDIwcHggMCAwXCIsXCJwYWRkaW5nXCI6XCIwIDIzcHggMCAwXCIsXCJmb250U2l6ZVwiOjI0LFwiZm9udFdlaWdodFwiOjUwMCxcInZlcnRpY2FsQWxpZ25cIjpcInRvcFwiLFwibGluZUhlaWdodFwiOlwiNDlweFwifSxcImNoaWxkcmVuXCI6XCI0MDRcIn1dLFtcIiRcIixcImRpdlwiLG51bGwse1wic3R5bGVcIjp7XCJkaXNwbGF5XCI6XCJpbmxpbmUtYmxvY2tcIn0sXCJjaGlsZHJlblwiOltcIiRcIixcImgyXCIsbnVsbCx7XCJzdHlsZVwiOntcImZvbnRTaXplXCI6MTQsXCJmb250V2VpZ2h0XCI6NDAwLFwibGluZUhlaWdodFwiOlwiNDlweFwiLFwibWFyZ2luXCI6MH0sXCJjaGlsZHJlblwiOlwiVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZC5cIn1dfV1dfV19XV0sXCJub3RGb3VuZFN0eWxlc1wiOltdfV1dfV19XX1dfV1dfV1dLG51bGxdLG51bGxdLFwiY291bGRCZUludGVyY2VwdGVkXCI6ZmFsc2UsXCJpbml0aWFsSGVhZFwiOltudWxsLFwiJExjXCJdLFwiZ2xvYmFsRXJyb3JDb21wb25lbnRcIjpcIiRkXCIsXCJtaXNzaW5nU2xvdHNcIjpcIiRXZVwifV1cbiJdKTwvc2NyaXB0PjxzY3JpcHQ+c2VsZi5fX25leHRfZi5wdXNoKFsxLCJjOltbXCIkXCIsXCJtZXRhXCIsXCIwXCIse1wibmFtZVwiOlwidmlld3BvcnRcIixcImNvbnRlbnRcIjpcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCJ9XSxbXCIkXCIsXCJtZXRhXCIsXCIxXCIse1wiY2hhclNldFwiOlwidXRmLThcIn1dLFtcIiRcIixcInRpdGxlXCIsXCIyXCIse1wiY2hpbGRyZW5cIjpcIlBheVBhbFwifV0sW1wiJFwiLFwibWV0YVwiLFwiM1wiLHtcIm5hbWVcIjpcImRlc2NyaXB0aW9uXCIsXCJjb250ZW50XCI6XCJQYXlQYWwgLSBTZWN1cml0eSB2ZXJpZmljYXRpb25cIn1dXVxuMzpudWxsXG4iXSk8L3NjcmlwdD48L2JvZHk+PC9odG1sPg=="}},"time_used":51,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":51,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/css/f3e1c334bb73659e.css","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.088Z","timestamp":1785111158088,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/css/f3e1c334bb73659e.css HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/css,*/*;q=0.1\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=2\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: text/css; charset=UTF-8\r\nContent-Length: 11258\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"2bfa-19f99f825bb\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]},{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":11258,"size_decoded":11775,"mime_type":"text/css; charset=UTF-8","magic":"ASCII text, with very long lines (8965)","md5":"62d8bd716ed5a89e149c185fc1a60821","sha1":"174c1733c76370cb378ba2c0acb653cd3966feb2","sha256":"f051dde9c94a6825ce322fa743fc0eeb0141b03b84e1d190d75c7ca719a39039","sha512":"74e010ada1cc1f32730741940ee26b9b9b1c1bfa9aa4f83b0bb07e9d02cd7396bb113c5ee9211e2040b3ba25bb8c22fbed6d9420b22357a5483551867bbe051c","ssdeep":"192:Y7JXYS7JXYzGw2GsfdV+XRVe9NJe+4o2WjawXm:GHrwGVCe93B/2aT2","tlshash":"9632b566a6041026bd23c0f7e9d4ba5db019e1c2ee3ed7baf5816100fbd61f719e2704","first_seen":"2026-07-11T00:23:13.78681Z","last_seen":"2026-07-27T00:14:58.57742Z","times_seen":15,"resource_available":false,"data":"Kiw6YWZ0ZXIsOmJlZm9yZXstLXR3LWJvcmRlci1zcGFjaW5nLXg6MDstLXR3LWJvcmRlci1zcGFjaW5nLXk6MDstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctcm90YXRlOjA7LS10dy1za2V3LXg6MDstLXR3LXNrZXcteTowOy0tdHctc2NhbGUteDoxOy0tdHctc2NhbGUteToxOy0tdHctcGFuLXg6IDstLXR3LXBhbi15OiA7LS10dy1waW5jaC16b29tOiA7LS10dy1zY3JvbGwtc25hcC1zdHJpY3RuZXNzOnByb3hpbWl0eTstLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXZpYS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb246IDstLXR3LW9yZGluYWw6IDstLXR3LXNsYXNoZWQtemVybzogOy0tdHctbnVtZXJpYy1maWd1cmU6IDstLXR3LW51bWVyaWMtc3BhY2luZzogOy0tdHctbnVtZXJpYy1mcmFjdGlvbjogOy0tdHctcmluZy1pbnNldDogOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6MHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6I2ZmZjstLXR3LXJpbmctY29sb3I6cmdiYSg1OSwxMzAsMjQ2LC41KTstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yZWQ6MCAwICMwMDAwOy0tdHctYmx1cjogOy0tdHctYnJpZ2h0bmVzczogOy0tdHctY29udHJhc3Q6IDstLXR3LWdyYXlzY2FsZTogOy0tdHctaHVlLXJvdGF0ZTogOy0tdHctaW52ZXJ0OiA7LS10dy1zYXR1cmF0ZTogOy0tdHctc2VwaWE6IDstLXR3LWRyb3Atc2hhZG93OiA7LS10dy1iYWNrZHJvcC1ibHVyOiA7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOiA7LS10dy1iYWNrZHJvcC1jb250cmFzdDogOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOiA7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOiA7LS10dy1iYWNrZHJvcC1pbnZlcnQ6IDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6IDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOiA7LS10dy1iYWNrZHJvcC1zZXBpYTogOy0tdHctY29udGFpbi1zaXplOiA7LS10dy1jb250YWluLWxheW91dDogOy0tdHctY29udGFpbi1wYWludDogOy0tdHctY29udGFpbi1zdHlsZTogfTo6YmFja2Ryb3B7LS10dy1ib3JkZXItc3BhY2luZy14OjA7LS10dy1ib3JkZXItc3BhY2luZy15OjA7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXJvdGF0ZTowOy0tdHctc2tldy14OjA7LS10dy1za2V3LXk6MDstLXR3LXNjYWxlLXg6MTstLXR3LXNjYWxlLXk6MTstLXR3LXBhbi14OiA7LS10dy1wYW4teTogOy0tdHctcGluY2gtem9vbTogOy0tdHctc2Nyb2xsLXNuYXAtc3RyaWN0bmVzczpwcm94aW1pdHk7LS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC12aWEtcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uOiA7LS10dy1vcmRpbmFsOiA7LS10dy1zbGFzaGVkLXplcm86IDstLXR3LW51bWVyaWMtZmlndXJlOiA7LS10dy1udW1lcmljLXNwYWNpbmc6IDstLXR3LW51bWVyaWMtZnJhY3Rpb246IDstLXR3LXJpbmctaW5zZXQ6IDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLWNvbG9yOnJnYmEoNTksMTMwLDI0NiwuNSk7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcmVkOjAgMCAjMDAwMDstLXR3LWJsdXI6IDstLXR3LWJyaWdodG5lc3M6IDstLXR3LWNvbnRyYXN0OiA7LS10dy1ncmF5c2NhbGU6IDstLXR3LWh1ZS1yb3RhdGU6IDstLXR3LWludmVydDogOy0tdHctc2F0dXJhdGU6IDstLXR3LXNlcGlhOiA7LS10dy1kcm9wLXNoYWRvdzogOy0tdHctYmFja2Ryb3AtYmx1cjogOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczogOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6IDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTogOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTogOy0tdHctYmFja2Ryb3AtaW52ZXJ0OiA7LS10dy1iYWNrZHJvcC1vcGFjaXR5OiA7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTogOy0tdHctYmFja2Ryb3Atc2VwaWE6IDstLXR3LWNvbnRhaW4tc2l6ZTogOy0tdHctY29udGFpbi1sYXlvdXQ6IDstLXR3LWNvbnRhaW4tcGFpbnQ6IDstLXR3LWNvbnRhaW4tc3R5bGU6IH0vKgohIHRhaWx3aW5kY3NzIHYzLjQuMTkgfCBNSVQgTGljZW5zZSB8IGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tCiovKiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQgI2U1ZTdlYn06YWZ0ZXIsOmJlZm9yZXstLXR3LWNvbnRlbnQ6IiJ9Omhvc3QsaHRtbHtsaW5lLWhlaWdodDoxLjU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDtmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6bm9ybWFsOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH1ib2R5e21hcmdpbjowO2xpbmUtaGVpZ2h0OmluaGVyaXR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHByZSxzYW1we2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsTGliZXJhdGlvbiBNb25vLENvdXJpZXIgTmV3LG1vbm9zcGFjZTtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDtmb250LXNpemU6MWVtfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX10YWJsZXt0ZXh0LWluZGVudDowO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtmb250LXNpemU6MTAwJTtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O21hcmdpbjowO3BhZGRpbmc6MH1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0pLGlucHV0OndoZXJlKFt0eXBlPXJlc2V0XSksaW5wdXQ6d2hlcmUoW3R5cGU9c3VibWl0XSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZX06LW1vei1mb2N1c3Jpbmd7b3V0bGluZTphdXRvfTotbW96LXVpLWludmFsaWR7Ym94LXNoYWRvdzpub25lfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1ibG9ja3F1b3RlLGRkLGRsLGZpZ3VyZSxoMSxoMixoMyxoNCxoNSxoNixocixwLHByZXttYXJnaW46MH1maWVsZHNldHttYXJnaW46MH1maWVsZHNldCxsZWdlbmR7cGFkZGluZzowfW1lbnUsb2wsdWx7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmc6MH1kaWFsb2d7cGFkZGluZzowfXRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dDo6LW1vei1wbGFjZWhvbGRlcix0ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5OjE7Y29sb3I6IzljYTNhZn1pbnB1dDo6cGxhY2Vob2xkZXIsdGV4dGFyZWE6OnBsYWNlaG9sZGVye29wYWNpdHk6MTtjb2xvcjojOWNhM2FmfVtyb2xlPWJ1dHRvbl0sYnV0dG9ue2N1cnNvcjpwb2ludGVyfTpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH1hdWRpbyxjYW52YXMsZW1iZWQsaWZyYW1lLGltZyxvYmplY3Qsc3ZnLHZpZGVve2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31baGlkZGVuXTp3aGVyZSg6bm90KFtoaWRkZW49dW50aWwtZm91bmRdKSl7ZGlzcGxheTpub25lfS5maXhlZHtwb3NpdGlvbjpmaXhlZH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5pbnNldC0we2luc2V0OjB9LnotXFs5OTk5XF17ei1pbmRleDo5OTk5fS5teC1hdXRve21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99Lm1iLTJ7bWFyZ2luLWJvdHRvbTouNXJlbX0ubWItM3ttYXJnaW4tYm90dG9tOi43NXJlbX0ubWItNHttYXJnaW4tYm90dG9tOjFyZW19Lm1iLTZ7bWFyZ2luLWJvdHRvbToxLjVyZW19LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmgtMTZ7aGVpZ2h0OjRyZW19Lm1pbi1oLXNjcmVlbnttaW4taGVpZ2h0OjEwMHZofS53LTE2e3dpZHRoOjRyZW19LnctZnVsbHt3aWR0aDoxMDAlfS5tYXgtdy01eGx7bWF4LXdpZHRoOjY0cmVtfS5tYXgtdy1tZHttYXgtd2lkdGg6MjhyZW19LmZsZXgtMXtmbGV4OjEgMSAwJX0udHJhbnNmb3Jte3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXdYKHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0ucmVzaXple3Jlc2l6ZTpib3RofS5saXN0LWluc2lkZXtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZX0ubGlzdC1kaXNje2xpc3Qtc3R5bGUtdHlwZTpkaXNjfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnNwYWNlLXktMT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTowO21hcmdpbi10b3A6Y2FsYyguMjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6LjVyZW19LmJvcmRlcntib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItYntib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ncmF5LTIwMHstLXR3LWJvcmRlci1vcGFjaXR5OjE7Ym9yZGVyLWNvbG9yOnJnYigyMjkgMjMxIDIzNS92YXIoLS10dy1ib3JkZXItb3BhY2l0eSwxKSl9LmJnLWdyYXktMjAwey0tdHctYmctb3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6cmdiKDIyOSAyMzEgMjM1L3ZhcigtLXR3LWJnLW9wYWNpdHksMSkpfS5iZy1ncmF5LTUwey0tdHctYmctb3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6cmdiKDI0OSAyNTAgMjUxL3ZhcigtLXR3LWJnLW9wYWNpdHksMSkpfS5iZy13aGl0ZXstLXR3LWJnLW9wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigyNTUgMjU1IDI1NS92YXIoLS10dy1iZy1vcGFjaXR5LDEpKX0uYmctZ3JhZGllbnQtdG8tYnJ7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tIHJpZ2h0LHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSl9LmZyb20tYmx1ZS01MHstLXR3LWdyYWRpZW50LWZyb206I2VmZjZmZiB2YXIoLS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXRvOnJnYmEoMjM5LDI0NiwyNTUsMCkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtc3RvcHM6dmFyKC0tdHctZ3JhZGllbnQtZnJvbSksdmFyKC0tdHctZ3JhZGllbnQtdG8pfS50by1zbGF0ZS0xMDB7LS10dy1ncmFkaWVudC10bzojZjFmNWY5IHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKX0ucC00e3BhZGRpbmc6MXJlbX0ucC04e3BhZGRpbmc6MnJlbX0ucHgtMXtwYWRkaW5nLWxlZnQ6LjI1cmVtO3BhZGRpbmctcmlnaHQ6LjI1cmVtfS5weC00e3BhZGRpbmctbGVmdDoxcmVtO3BhZGRpbmctcmlnaHQ6MXJlbX0ucHktNHtwYWRkaW5nLXRvcDoxcmVtO3BhZGRpbmctYm90dG9tOjFyZW19LnB5LTZ7cGFkZGluZy10b3A6MS41cmVtO3BhZGRpbmctYm90dG9tOjEuNXJlbX0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtMnhse2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MnJlbX0udGV4dC1zbXtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjI1cmVtfS50ZXh0LXhze2ZvbnQtc2l6ZTouNzVyZW07bGluZS1oZWlnaHQ6MXJlbX0uZm9udC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZm9udC1zZW1pYm9sZHtmb250LXdlaWdodDo2MDB9LnVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lml0YWxpY3tmb250LXN0eWxlOml0YWxpY30udGV4dC1ncmF5LTQwMHstLXR3LXRleHQtb3BhY2l0eToxO2NvbG9yOnJnYigxNTYgMTYzIDE3NS92YXIoLS10dy10ZXh0LW9wYWNpdHksMSkpfS50ZXh0LWdyYXktNTAwey0tdHctdGV4dC1vcGFjaXR5OjE7Y29sb3I6cmdiKDEwNyAxMTQgMTI4L3ZhcigtLXR3LXRleHQtb3BhY2l0eSwxKSl9LnRleHQtZ3JheS02MDB7LS10dy10ZXh0LW9wYWNpdHk6MTtjb2xvcjpyZ2IoNzUgODUgOTkvdmFyKC0tdHctdGV4dC1vcGFjaXR5LDEpKX0udGV4dC1ncmF5LTcwMHstLXR3LXRleHQtb3BhY2l0eToxO2NvbG9yOnJnYig1NSA2NSA4MS92YXIoLS10dy10ZXh0LW9wYWNpdHksMSkpfS50ZXh0LWdyYXktOTAwey0tdHctdGV4dC1vcGFjaXR5OjE7Y29sb3I6cmdiKDE3IDI0IDM5L3ZhcigtLXR3LXRleHQtb3BhY2l0eSwxKSl9LnRleHQtcmVkLTUwMHstLXR3LXRleHQtb3BhY2l0eToxO2NvbG9yOnJnYigyMzkgNjggNjgvdmFyKC0tdHctdGV4dC1vcGFjaXR5LDEpKX0udW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX0uc2hhZG93LXhsey0tdHctc2hhZG93OjAgMjBweCAyNXB4IC01cHggcmdiYSgwLDAsMCwuMSksMCA4cHggMTBweCAtNnB4IHJnYmEoMCwwLDAsLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6MCAyMHB4IDI1cHggLTVweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLDAgOHB4IDEwcHggLTZweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5vdXRsaW5le291dGxpbmUtc3R5bGU6c29saWR9LmJsdXJ7LS10dy1ibHVyOmJsdXIoOHB4KX0uYmx1ciwuZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sZmlsdGVyLGJhY2tkcm9wLWZpbHRlcjt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9KnttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhO2NvbG9yOiMyYzJlMmY7bWluLWhlaWdodDoxMDB2aDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5wcC1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE2cHg7Ym94LXNoYWRvdzowIDJweCAxMnB4IHJnYmEoMCwwLDAsLjA4KTttYXgtd2lkdGg6NDAwcHg7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvO3BhZGRpbmc6MzJweCAyNHB4fS5wcC1idG4tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDcwYmE7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjI0cHg7cGFkZGluZzoxNHB4IDI0cHg7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2dhcDo4cHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4yc30ucHAtYnRuLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1ZWE2fS5wcC1idG4tcHJpbWFyeTpkaXNhYmxlZHtvcGFjaXR5Oi43O2N1cnNvcjpub3QtYWxsb3dlZH0ucHAtYnRuLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMwMDcwYmE7Ym9yZGVyOjJweCBzb2xpZCAjMDA3MGJhO2JvcmRlci1yYWRpdXM6MjRweDtwYWRkaW5nOjE0cHggMjRweDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzfS5wcC1idG4tc2Vjb25kYXJ5OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2YwZjhmZn0ucHAtaW5wdXR7d2lkdGg6MTAwJTtwYWRkaW5nOjE0cHggMTZweDtib3JkZXI6MXB4IHNvbGlkICNiN2I3Yjc7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE2cHg7b3V0bGluZTpub25lO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4yc30ucHAtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDcwYmF9LnBwLWNvZGUtaW5wdXR7d2lkdGg6MTAwJTtwYWRkaW5nOjE2cHg7Ym9yZGVyOjFweCBzb2xpZCAjYjdiN2I3O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToyNHB4O3RleHQtYWxpZ246Y2VudGVyO2xldHRlci1zcGFjaW5nOjEycHg7b3V0bGluZTpub25lO2ZvbnQtd2VpZ2h0OjYwMH0ucHAtY29kZS1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAwNzBiYX0ucHAtbGlua3tjb2xvcjojMDA3MGJhO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxNHB4O2N1cnNvcjpwb2ludGVyfS5wcC1saW5rOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnBwLWRpdmlkZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDttYXJnaW46MTZweCAwO2NvbG9yOiM2YzczNzg7Zm9udC1zaXplOjE0cHh9LnBwLWRpdmlkZXI6YWZ0ZXIsLnBwLWRpdmlkZXI6YmVmb3Jle2NvbnRlbnQ6IiI7ZmxleDoxO2hlaWdodDoxcHg7YmFja2dyb3VuZDojZGZlM2U4fS5wcC1kb3Rze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxNnB4fS5wcC1kb3R7d2lkdGg6OHB4O2hlaWdodDo4cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojY2JkMmQ2fS5wcC1kb3QuYWN0aXZle2JhY2tncm91bmQ6IzAwNzBiYX0ucHAtc3Bpbm5lcnt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2JvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NTAlO2FuaW1hdGlvbjpzcGluIC44cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBzcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0ucHAtZm9vdGVye3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjRweCAxNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YzczNzg7bWFyZ2luLXRvcDphdXRvfS5wcC1mb290ZXIgYXtjb2xvcjojMDA3MGJhO3RleHQtZGVjb3JhdGlvbjpub25lO21hcmdpbjowIDhweH0ucHAtbG9nb3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjI0cHh9LnBwLWVycm9ye2JhY2tncm91bmQ6I2ZkZjBmMDtib3JkZXI6MXB4IHNvbGlkICNlNmE2YTY7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7Y29sb3I6I2MwMmIwYTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjE2cHh9Lmxhbmctc2VsZWN0b3J7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjRweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjE2cHg7Zm9udC1zaXplOjEzcHh9Lmxhbmctc2VsZWN0b3IgYnV0dG9ue2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjb2xvcjojMDA3MGJhO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MnB4IDZweDtmb250LXNpemU6MTNweH0ubGFuZy1zZWxlY3RvciBidXR0b24uYWN0aXZle2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5sYW5nLXNlbGVjdG9yIHNwYW57Y29sb3I6I2NjY30="}},"time_used":56,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":56,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/webpack-c81f7fd28659d64f.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.089Z","timestamp":1785111158089,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/webpack-c81f7fd28659d64f.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=4\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 3557\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"de5-19f99f825b6\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]},{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":3557,"size_decoded":4086,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, ASCII text, with very long lines (3557), with no line terminators","md5":"48a0efa196e3561eba1491f20e632cbb","sha1":"b385022103992d75cfb2027770d4539bf9a918ef","sha256":"1bdb0dd87714cecd54db2509fc17767ce17b4606ee0eec9faca0871ab8fd87ca","sha512":"8e540715546e6692a68eda2cc987c811c2428e2250cf32864ed201364c34f1f9c2e99150aec534e7668a092424dcd4b23f929c0dac9c48ed7b8be73d7f724bc3","ssdeep":"","tlshash":"5e7196dd71a1f8ba1783a4a1043f9456f23f28b2281ee4a0cb25d8f5fc355488513fa8","first_seen":"2025-03-01T02:35:14.23303Z","last_seen":"2026-07-27T00:14:58.575499Z","times_seen":159,"resource_available":true,"data":"IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlLHQsbixyLG8sdSxpLGMsZixhPXt9LGw9e307ZnVuY3Rpb24gZChlKXt2YXIgdD1sW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj1sW2VdPXtleHBvcnRzOnt9fSxyPSEwO3RyeXthW2VdKG4sbi5leHBvcnRzLGQpLHI9ITF9ZmluYWxseXtyJiZkZWxldGUgbFtlXX1yZXR1cm4gbi5leHBvcnRzfWQubT1hLGU9W10sZC5PPWZ1bmN0aW9uKHQsbixyLG8pe2lmKG4pe289b3x8MDtmb3IodmFyIHU9ZS5sZW5ndGg7dT4wJiZlW3UtMV1bMl0+bzt1LS0pZVt1XT1lW3UtMV07ZVt1XT1bbixyLG9dO3JldHVybn1mb3IodmFyIGk9MS8wLHU9MDt1PGUubGVuZ3RoO3UrKyl7Zm9yKHZhciBuPWVbdV1bMF0scj1lW3VdWzFdLG89ZVt1XVsyXSxjPSEwLGY9MDtmPG4ubGVuZ3RoO2YrKylpPj1vJiZPYmplY3Qua2V5cyhkLk8pLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBkLk9bZV0obltmXSl9KT9uLnNwbGljZShmLS0sMSk6KGM9ITEsbzxpJiYoaT1vKSk7aWYoYyl7ZS5zcGxpY2UodS0tLDEpO3ZhciBhPXIoKTt2b2lkIDAhPT1hJiYodD1hKX19cmV0dXJuIHR9LGQubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gZC5kKHQse2E6dH0pLHR9LG49T2JqZWN0LmdldFByb3RvdHlwZU9mP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX30sZC50PWZ1bmN0aW9uKGUscil7aWYoMSZyJiYoZT10aGlzKGUpKSw4JnJ8fCJvYmplY3QiPT10eXBlb2YgZSYmZSYmKDQmciYmZS5fX2VzTW9kdWxlfHwxNiZyJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50aGVuKSlyZXR1cm4gZTt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO2QucihvKTt2YXIgdT17fTt0PXR8fFtudWxsLG4oe30pLG4oW10pLG4obildO2Zvcih2YXIgaT0yJnImJmU7Im9iamVjdCI9PXR5cGVvZiBpJiYhfnQuaW5kZXhPZihpKTtpPW4oaSkpT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaSkuZm9yRWFjaChmdW5jdGlvbih0KXt1W3RdPWZ1bmN0aW9uKCl7cmV0dXJuIGVbdF19fSk7cmV0dXJuIHUuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBlfSxkLmQobyx1KSxvfSxkLmQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClkLm8odCxuKSYmIWQubyhlLG4pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9LGQuZj17fSxkLmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKE9iamVjdC5rZXlzKGQuZikucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGQuZltuXShlLHQpLHR9LFtdKSl9LGQudT1mdW5jdGlvbihlKXt9LGQubWluaUNzc0Y9ZnVuY3Rpb24oZSl7fSxkLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHI9e30sbz0iX05fRToiLGQubD1mdW5jdGlvbihlLHQsbix1KXtpZihyW2VdKXtyW2VdLnB1c2godCk7cmV0dXJufWlmKHZvaWQgMCE9PW4pZm9yKHZhciBpLGMsZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksYT0wO2E8Zi5sZW5ndGg7YSsrKXt2YXIgbD1mW2FdO2lmKGwuZ2V0QXR0cmlidXRlKCJzcmMiKT09ZXx8bC5nZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIpPT1vK24pe2k9bDticmVha319aXx8KGM9ITAsKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IikpLmNoYXJzZXQ9InV0Zi04IixpLnRpbWVvdXQ9MTIwLGQubmMmJmkuc2V0QXR0cmlidXRlKCJub25jZSIsZC5uYyksaS5zZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIsbytuKSxpLnNyYz1kLnR1KGUpKSxyW2VdPVt0XTt2YXIgcz1mdW5jdGlvbih0LG4pe2kub25lcnJvcj1pLm9ubG9hZD1udWxsLGNsZWFyVGltZW91dChwKTt2YXIgbz1yW2VdO2lmKGRlbGV0ZSByW2VdLGkucGFyZW50Tm9kZSYmaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpLG8mJm8uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZShuKX0pLHQpcmV0dXJuIHQobil9LHA9c2V0VGltZW91dChzLmJpbmQobnVsbCx2b2lkIDAse3R5cGU6InRpbWVvdXQiLHRhcmdldDppfSksMTJlNCk7aS5vbmVycm9yPXMuYmluZChudWxsLGkub25lcnJvciksaS5vbmxvYWQ9cy5iaW5kKG51bGwsaS5vbmxvYWQpLGMmJmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaSl9LGQucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxkLnR0PWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXUmJih1PXtjcmVhdGVTY3JpcHRVUkw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSwidW5kZWZpbmVkIiE9dHlwZW9mIHRydXN0ZWRUeXBlcyYmdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSYmKHU9dHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgibmV4dGpzI2J1bmRsZXIiLHUpKSksdX0sZC50dT1mdW5jdGlvbihlKXtyZXR1cm4gZC50dCgpLmNyZWF0ZVNjcmlwdFVSTChlKX0sZC5wPSIvX25leHQvIixpPXsyNzI6MCw1ODc6MH0sZC5mLmo9ZnVuY3Rpb24oZSx0KXt2YXIgbj1kLm8oaSxlKT9pW2VdOnZvaWQgMDtpZigwIT09bil7aWYobil0LnB1c2goblsyXSk7ZWxzZSBpZigvXigyNzJ8NTg3KSQvLnRlc3QoZSkpaVtlXT0wO2Vsc2V7dmFyIHI9bmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtuPWlbZV09W3Qscl19KTt0LnB1c2goblsyXT1yKTt2YXIgbz1kLnArZC51KGUpLHU9RXJyb3IoKTtkLmwobyxmdW5jdGlvbih0KXtpZihkLm8oaSxlKSYmKDAhPT0obj1pW2VdKSYmKGlbZV09dm9pZCAwKSxuKSl7dmFyIHI9dCYmKCJsb2FkIj09PXQudHlwZT8ibWlzc2luZyI6dC50eXBlKSxvPXQmJnQudGFyZ2V0JiZ0LnRhcmdldC5zcmM7dS5tZXNzYWdlPSJMb2FkaW5nIGNodW5rICIrZSsiIGZhaWxlZC5cbigiK3IrIjogIitvKyIpIix1Lm5hbWU9IkNodW5rTG9hZEVycm9yIix1LnR5cGU9cix1LnJlcXVlc3Q9byxuWzFdKHUpfX0sImNodW5rLSIrZSxlKX19fSxkLk8uaj1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWlbZV19LGM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89dFswXSx1PXRbMV0sYz10WzJdLGY9MDtpZihvLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1pW2VdfSkpe2ZvcihuIGluIHUpZC5vKHUsbikmJihkLm1bbl09dVtuXSk7aWYoYyl2YXIgYT1jKGQpfWZvcihlJiZlKHQpO2Y8by5sZW5ndGg7ZisrKXI9b1tmXSxkLm8oaSxyKSYmaVtyXSYmaVtyXVswXSgpLGlbcl09MDtyZXR1cm4gZC5PKGEpfSwoZj1zZWxmLndlYnBhY2tDaHVua19OX0U9c2VsZi53ZWJwYWNrQ2h1bmtfTl9FfHxbXSkuZm9yRWFjaChjLmJpbmQobnVsbCwwKSksZi5wdXNoPWMuYmluZChudWxsLGYucHVzaC5iaW5kKGYpKX0oKTs="}},"time_used":60,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":60,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/117-f9bf0cc16936e653.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.092Z","timestamp":1785111158092,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/117-f9bf0cc16936e653.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 124362\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"1e5ca-19f99f825b7\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":124362,"size_decoded":124895,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, ASCII text, with very long lines (65536), with no line terminators","md5":"793be48b503ddc3b5bcaba96361c7e84","sha1":"035410aa1815f8fcd8ce8bd99f18655bde3819a3","sha256":"4b9abd79e3e16a44cbc1a96e14bddb9f31e8c3b66e6332a251d6b77b4531b05f","sha512":"9af5a5347cce2b30a2d812ea4642654998634b88aac676c58f626789f95c4e79424472d85091af92f9d2be806d6f9a9c1b9ff3e2136cedc301fd8acde81b0b23","ssdeep":"768:fO9P55eNwbSlPftVDK//d9icrEAKH1ag8xxqKjj3fOpDKdlr/NaO8Qr93UsGoROz:Uiw2l+Wc3mY5jFdl/iPsibn2kJ51oCv7","tlshash":"6bc3d8ba71d0f8e2079744e5843b400af3791c3b146f70a0a7a5cdd9b5a44eea1a3f5e","first_seen":"2026-02-10T12:48:53.828874Z","last_seen":"2026-07-27T00:14:58.57841Z","times_seen":67,"resource_available":true,"data":"KHNlbGYud2VicGFja0NodW5rX05fRT1zZWxmLndlYnBhY2tDaHVua19OX0V8fFtdKS5wdXNoKFtbMTE3XSx7NTE1NzpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7cmV0dXJuIiJ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pfSwxNTcyOmZ1bmN0aW9uKCl7InRyaW1TdGFydCJpbiBTdHJpbmcucHJvdG90eXBlfHwoU3RyaW5nLnByb3RvdHlwZS50cmltU3RhcnQ9U3RyaW5nLnByb3RvdHlwZS50cmltTGVmdCksInRyaW1FbmQiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbUVuZD1TdHJpbmcucHJvdG90eXBlLnRyaW1SaWdodCksImRlc2NyaXB0aW9uImluIFN5bWJvbC5wcm90b3R5cGV8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTeW1ib2wucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgZT0vXCgoLiopXCkvLmV4ZWModGhpcy50b1N0cmluZygpKTtyZXR1cm4gZT9lWzFdOnZvaWQgMH19KSxBcnJheS5wcm90b3R5cGUuZmxhdHx8KEFycmF5LnByb3RvdHlwZS5mbGF0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dGhpcy5jb25jYXQuYXBwbHkoW10sdGhpcyksZT4xJiZ0LnNvbWUoQXJyYXkuaXNBcnJheSk/dC5mbGF0KGUtMSk6dH0sQXJyYXkucHJvdG90eXBlLmZsYXRNYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tYXAoZSx0KS5mbGF0KCl9KSxQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5fHwoUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gdGhpcy50aGVuKGUsZSk7dmFyIHQ9dGhpcy5jb25zdHJ1Y3Rvcnx8UHJvbWlzZTtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiB0LnJlc29sdmUoZSgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24obil7cmV0dXJuIHQucmVzb2x2ZShlKCkpLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyBufSl9KX0pLE9iamVjdC5mcm9tRW50cmllc3x8KE9iamVjdC5mcm9tRW50cmllcz1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0WzBdXT10WzFdLGV9LHt9KX0pLEFycmF5LnByb3RvdHlwZS5hdHx8KEFycmF5LnByb3RvdHlwZS5hdD1mdW5jdGlvbihlKXt2YXIgdD1NYXRoLnRydW5jKGUpfHwwO2lmKHQ8MCYmKHQrPXRoaXMubGVuZ3RoKSwhKHQ8MHx8dD49dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzW3RdfSksT2JqZWN0Lmhhc093bnx8KE9iamVjdC5oYXNPd249ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPYmplY3QoZSksdCl9KSwiY2FuUGFyc2UiaW4gVVJMfHwoVVJMLmNhblBhcnNlPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBuZXcgVVJMKGUsdCksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSl9LDE2MzQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFkZEJhc2VQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX19KTtsZXQgcj1uKDg0OTgpLG89big4NTIxKTtmdW5jdGlvbiB1KGUsdCl7cmV0dXJuKDAsby5ub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCkoKDAsci5hZGRQYXRoUHJlZml4KShlLCIiKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNTI2NjpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3ZhciB0LG47dD1zZWxmLl9fbmV4dF9zLG49KCk9PntlKCl9LHQmJnQubGVuZ3RoP3QucmVkdWNlKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gZS50aGVuKCgpPT5uZXcgUHJvbWlzZSgoZSx0KT0+e2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKHIpZm9yKGxldCBlIGluIHIpImNoaWxkcmVuIiE9PWUmJm8uc2V0QXR0cmlidXRlKGUscltlXSk7bj8oby5zcmM9bixvLm9ubG9hZD0oKT0+ZSgpLG8ub25lcnJvcj10KTpyJiYoby5pbm5lckhUTUw9ci5jaGlsZHJlbixzZXRUaW1lb3V0KGUpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG8pfSkpfSxQcm9taXNlLnJlc29sdmUoKSkuY2F0Y2goZT0+e2NvbnNvbGUuZXJyb3IoZSl9KS50aGVuKCgpPT57bigpfSk6bigpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXBwQm9vdHN0cmFwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KSx3aW5kb3cubmV4dD17dmVyc2lvbjoiMTQuMi4zNSIsYXBwRGlyOiEwfSwoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwzMDc5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYWxsU2VydmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDI4NDYpO2FzeW5jIGZ1bmN0aW9uIG8oZSx0KXtsZXQgbj0oMCxyLmdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXIpKCk7aWYoIW4pdGhyb3cgRXJyb3IoIkludmFyaWFudDogbWlzc2luZyBhY3Rpb24gZGlzcGF0Y2hlci4iKTtyZXR1cm4gbmV3IFByb21pc2UoKHIsbyk9PntuKHthY3Rpb25JZDplLGFjdGlvbkFyZ3M6dCxyZXNvbHZlOnIscmVqZWN0Om99KX0pfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDIzMDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtsZXQgcixvO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaHlkcmF0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEN9fSk7bGV0IHU9big3MDQzKSxsPW4oMzA5OSksYT1uKDc0MzcpO24oMTU3Mik7bGV0IGk9dS5fKG4oNDA0MCkpLGM9bC5fKG4oMjI2NSkpLHM9big2NjcxKSxmPW4oODcwMSksZD11Ll8obigxNDA0KSkscD1uKDMwNzkpLGg9big5NzIxKSx5PW4oMjEwMyk7big2NDcpO2xldCBfPXdpbmRvdy5jb25zb2xlLmVycm9yO3dpbmRvdy5jb25zb2xlLmVycm9yPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTsoMCxoLmlzTmV4dFJvdXRlckVycm9yKSh0WzBdKXx8Xy5hcHBseSh3aW5kb3cuY29uc29sZSx0KX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixlPT57aWYoKDAsaC5pc05leHRSb3V0ZXJFcnJvcikoZS5lcnJvcikpe2UucHJldmVudERlZmF1bHQoKTtyZXR1cm59fSk7bGV0IHY9ZG9jdW1lbnQsYj1uZXcgVGV4dEVuY29kZXIsZz0hMSxtPSExLFI9bnVsbDtmdW5jdGlvbiBQKGUpe2lmKDA9PT1lWzBdKXI9W107ZWxzZSBpZigxPT09ZVswXSl7aWYoIXIpdGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQgc2VydmVyIGRhdGE6IG1pc3NpbmcgYm9vdHN0cmFwIHNjcmlwdC4iKTtvP28uZW5xdWV1ZShiLmVuY29kZShlWzFdKSk6ci5wdXNoKGVbMV0pfWVsc2UgMj09PWVbMF0mJihSPWVbMV0pfWxldCBqPWZ1bmN0aW9uKCl7byYmIW0mJihvLmNsb3NlKCksbT0hMCxyPXZvaWQgMCksZz0hMH07ImxvYWRpbmciPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixqLCExKTpqKCk7bGV0IE89c2VsZi5fX25leHRfZj1zZWxmLl9fbmV4dF9mfHxbXTtPLmZvckVhY2goUCksTy5wdXNoPVA7bGV0IEU9bmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydChlKXtyJiYoci5mb3JFYWNoKHQ9PntlLmVucXVldWUoYi5lbmNvZGUodCkpfSksZyYmIW0mJihlLmNsb3NlKCksbT0hMCxyPXZvaWQgMCkpLG89ZX19KSxTPSgwLHMuY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtKShFLHtjYWxsU2VydmVyOnAuY2FsbFNlcnZlcn0pO2Z1bmN0aW9uIHcoKXtyZXR1cm4oMCxjLnVzZSkoUyl9bGV0IE09Yy5kZWZhdWx0LkZyYWdtZW50O2Z1bmN0aW9uIFQoZSl7bGV0e2NoaWxkcmVuOnR9PWU7cmV0dXJuIHR9ZnVuY3Rpb24gQygpe2xldCBlPSgwLHkuY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlKSgpLHQ9KDAsYS5qc3gpKE0se2NoaWxkcmVuOigwLGEuanN4KShmLkhlYWRNYW5hZ2VyQ29udGV4dC5Qcm92aWRlcix7dmFsdWU6e2FwcERpcjohMH0sY2hpbGRyZW46KDAsYS5qc3gpKHkuQWN0aW9uUXVldWVDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTplLGNoaWxkcmVuOigwLGEuanN4KShULHtjaGlsZHJlbjooMCxhLmpzeCkodyx7fSl9KX0pfSl9KSxuPXdpbmRvdy5fX25leHRfcm9vdF9sYXlvdXRfbWlzc2luZ190YWdzLHI9ISEobnVsbD09bj92b2lkIDA6bi5sZW5ndGgpLG89e29uUmVjb3ZlcmFibGVFcnJvcjpkLmRlZmF1bHR9OyJfX25leHRfZXJyb3JfXyI9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaWR8fHI/aS5kZWZhdWx0LmNyZWF0ZVJvb3QodixvKS5yZW5kZXIodCk6Yy5kZWZhdWx0LnN0YXJ0VHJhbnNpdGlvbigoKT0+aS5kZWZhdWx0Lmh5ZHJhdGVSb290KHYsdCx7Li4ubyxmb3JtU3RhdGU6Un0pKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw0Mjc4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4oOTUwNiksKDAsbig1MjY2KS5hcHBCb290c3RyYXApKCgpPT57bGV0e2h5ZHJhdGU6ZX09bigyMzA0KTtuKDI4NDYpLG4oNDcwNyksZSgpfSksKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sOTUwNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxuKDUxNTcpO3tsZXQgZT1uLnU7bi51PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZW5jb2RlVVJJKGUoLi4ubikpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwyOTU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFjdGlvbkFzeW5jU3RvcmFnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuYWN0aW9uQXN5bmNTdG9yYWdlfX0pO2xldCByPW4oNzE0OSk7KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNjQ5NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQXBwUm91dGVyQW5ub3VuY2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH19KTtsZXQgcj1uKDIyNjUpLG89big0ODg3KSx1PSJuZXh0LXJvdXRlLWFubm91bmNlciI7ZnVuY3Rpb24gbChlKXtsZXR7dHJlZTp0fT1lLFtuLGxdPSgwLHIudXNlU3RhdGUpKG51bGwpOygwLHIudXNlRWZmZWN0KSgoKT0+KGwoZnVuY3Rpb24oKXt2YXIgZTtsZXQgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSh1KVswXTtpZihudWxsPT10P3ZvaWQgMDpudWxsPT0oZT10LnNoYWRvd1Jvb3QpP3ZvaWQgMDplLmNoaWxkTm9kZXNbMF0pcmV0dXJuIHQuc2hhZG93Um9vdC5jaGlsZE5vZGVzWzBdO3tsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHUpO2Uuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGUiO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmFyaWFMaXZlPSJhc3NlcnRpdmUiLHQuaWQ9Il9fbmV4dC1yb3V0ZS1hbm5vdW5jZXJfXyIsdC5yb2xlPSJhbGVydCIsdC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MDt3aWR0aDoxcHg7Y2xpcDpyZWN0KDAgMCAwIDApO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbCIsZS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSkuYXBwZW5kQ2hpbGQodCksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSx0fX0oKSksKCk9PntsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSh1KVswXTsobnVsbD09ZT92b2lkIDA6ZS5pc0Nvbm5lY3RlZCkmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSl9KSxbXSk7bGV0W2EsaV09KDAsci51c2VTdGF0ZSkoIiIpLGM9KDAsci51c2VSZWYpKCk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgpPT57bGV0IGU9IiI7aWYoZG9jdW1lbnQudGl0bGUpZT1kb2N1bWVudC50aXRsZTtlbHNle2xldCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImgxIik7dCYmKGU9dC5pbm5lclRleHR8fHQudGV4dENvbnRlbnR8fCIiKX12b2lkIDAhPT1jLmN1cnJlbnQmJmMuY3VycmVudCE9PWUmJmkoZSksYy5jdXJyZW50PWV9LFt0XSksbj8oMCxvLmNyZWF0ZVBvcnRhbCkoYSxuKTpudWxsfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDY4NjY6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtBQ1RJT046ZnVuY3Rpb24oKXtyZXR1cm4gcn0sRkxJR0hUX1BBUkFNRVRFUlM6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUjpmdW5jdGlvbigpe3JldHVybiB1fSxORVhUX1JPVVRFUl9TVEFURV9UUkVFOmZ1bmN0aW9uKCl7cmV0dXJuIG99LE5FWFRfUlNDX1VOSU9OX1FVRVJZOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LE5FWFRfVVJMOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LFJTQ19DT05URU5UX1RZUEVfSEVBREVSOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LFJTQ19IRUFERVI6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KTtsZXQgbj0iUlNDIixyPSJOZXh0LUFjdGlvbiIsbz0iTmV4dC1Sb3V0ZXItU3RhdGUtVHJlZSIsdT0iTmV4dC1Sb3V0ZXItUHJlZmV0Y2giLGw9Ik5leHQtVXJsIixhPSJ0ZXh0L3gtY29tcG9uZW50IixpPVtbbl0sW29dLFt1XV0sYz0iX3JzYyIscz0ieC1uZXh0anMtcG9zdHBvbmVkIjsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwyODQ2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtjcmVhdGVFbXB0eUNhY2hlTm9kZTpmdW5jdGlvbigpe3JldHVybiB4fSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIEl9LGdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXI6ZnVuY3Rpb24oKXtyZXR1cm4gU30sdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyOmZ1bmN0aW9uKCl7cmV0dXJuIE19fSk7bGV0IHI9bigzMDk5KSxvPW4oNzQzNyksdT1yLl8obigyMjY1KSksbD1uKDE5NTYpLGE9big0NjczKSxpPW4oMzQ1NiksYz1uKDkwNjApLHM9big3NzQ0KSxmPW4oMTA2MCksZD1uKDI5NTIpLHA9big2MTQ2KSxoPW4oMTYzNCkseT1uKDY0OTUpLF89big0MTIzKSx2PW4oOTMyMCksYj1uKDgxMzcpLGc9big2ODY2KSxtPW4oNTA3NiksUj1uKDEyODMpLFA9big0NTQxKSxqPSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93LE89aj9udWxsOm5ldyBNYXAsRT1udWxsO2Z1bmN0aW9uIFMoKXtyZXR1cm4gRX1sZXQgdz17fTtmdW5jdGlvbiBNKGUpe2xldCB0PW5ldyBVUkwoZSxsb2NhdGlvbi5vcmlnaW4pO3JldHVybiB0LnNlYXJjaFBhcmFtcy5kZWxldGUoZy5ORVhUX1JTQ19VTklPTl9RVUVSWSksdH1mdW5jdGlvbiBUKGUpe3JldHVybiBlLm9yaWdpbiE9PXdpbmRvdy5sb2NhdGlvbi5vcmlnaW59ZnVuY3Rpb24gQyhlKXtsZXR7YXBwUm91dGVyU3RhdGU6dCxzeW5jOm59PWU7cmV0dXJuKDAsdS51c2VJbnNlcnRpb25FZmZlY3QpKCgpPT57bGV0e3RyZWU6ZSxwdXNoUmVmOnIsY2Fub25pY2FsVXJsOm99PXQsdT17Li4uci5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZT93aW5kb3cuaGlzdG9yeS5zdGF0ZTp7fSxfX05BOiEwLF9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU6ZX07ci5wZW5kaW5nUHVzaCYmKDAsaS5jcmVhdGVIcmVmRnJvbVVybCkobmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikpIT09bz8oci5wZW5kaW5nUHVzaD0hMSx3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUodSwiIixvKSk6d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHUsIiIsbyksbih0KX0sW3Qsbl0pLG51bGx9ZnVuY3Rpb24geCgpe3JldHVybntsYXp5RGF0YTpudWxsLHJzYzpudWxsLHByZWZldGNoUnNjOm51bGwsaGVhZDpudWxsLHByZWZldGNoSGVhZDpudWxsLHBhcmFsbGVsUm91dGVzOm5ldyBNYXAsbGF6eURhdGFSZXNvbHZlZDohMSxsb2FkaW5nOm51bGx9fWZ1bmN0aW9uIEEoZSl7bnVsbD09ZSYmKGU9e30pO2xldCB0PXdpbmRvdy5oaXN0b3J5LnN0YXRlLG49bnVsbD09dD92b2lkIDA6dC5fX05BO24mJihlLl9fTkE9bik7bGV0IHI9bnVsbD09dD92b2lkIDA6dC5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFO3JldHVybiByJiYoZS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFPXIpLGV9ZnVuY3Rpb24gTihlKXtsZXR7aGVhZENhY2hlTm9kZTp0fT1lLG49bnVsbCE9PXQ/dC5oZWFkOm51bGwscj1udWxsIT09dD90LnByZWZldGNoSGVhZDpudWxsLG89bnVsbCE9PXI/cjpuO3JldHVybigwLHUudXNlRGVmZXJyZWRWYWx1ZSkobixvKX1mdW5jdGlvbiBEKGUpe2xldCB0LHtidWlsZElkOm4saW5pdGlhbEhlYWQ6cixpbml0aWFsVHJlZTppLHVybFBhcnRzOmYsaW5pdGlhbFNlZWREYXRhOmcsY291bGRCZUludGVyY2VwdGVkOlMsYXNzZXRQcmVmaXg6TSxtaXNzaW5nU2xvdHM6eH09ZSxEPSgwLHUudXNlTWVtbykoKCk9PigwLGQuY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlKSh7YnVpbGRJZDpuLGluaXRpYWxTZWVkRGF0YTpnLHVybFBhcnRzOmYsaW5pdGlhbFRyZWU6aSxpbml0aWFsUGFyYWxsZWxSb3V0ZXM6Tyxsb2NhdGlvbjpqP251bGw6d2luZG93LmxvY2F0aW9uLGluaXRpYWxIZWFkOnIsY291bGRCZUludGVyY2VwdGVkOlN9KSxbbixnLGYsaSxyLFNdKSxbSSxVLGtdPSgwLHMudXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzKShEKTsoMCx1LnVzZUVmZmVjdCkoKCk9PntPPW51bGx9LFtdKTtsZXR7Y2Fub25pY2FsVXJsOkZ9PSgwLHMudXNlVW53cmFwU3RhdGUpKEkpLHtzZWFyY2hQYXJhbXM6TCxwYXRobmFtZTpIfT0oMCx1LnVzZU1lbW8pKCgpPT57bGV0IGU9bmV3IFVSTChGLCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PyJodHRwOi8vbiI6d2luZG93LmxvY2F0aW9uLmhyZWYpO3JldHVybntzZWFyY2hQYXJhbXM6ZS5zZWFyY2hQYXJhbXMscGF0aG5hbWU6KDAsUi5oYXNCYXNlUGF0aCkoZS5wYXRobmFtZSk/KDAsbS5yZW1vdmVCYXNlUGF0aCkoZS5wYXRobmFtZSk6ZS5wYXRobmFtZX19LFtGXSksRz0oMCx1LnVzZUNhbGxiYWNrKShlPT57bGV0e3ByZXZpb3VzVHJlZTp0LHNlcnZlclJlc3BvbnNlOm59PWU7KDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57VSh7dHlwZTphLkFDVElPTl9TRVJWRVJfUEFUQ0gscHJldmlvdXNUcmVlOnQsc2VydmVyUmVzcG9uc2U6bn0pfSl9LFtVXSksJD0oMCx1LnVzZUNhbGxiYWNrKSgoZSx0LG4pPT57bGV0IHI9bmV3IFVSTCgoMCxoLmFkZEJhc2VQYXRoKShlKSxsb2NhdGlvbi5ocmVmKTtyZXR1cm4gVSh7dHlwZTphLkFDVElPTl9OQVZJR0FURSx1cmw6cixpc0V4dGVybmFsVXJsOlQociksbG9jYXRpb25TZWFyY2g6bG9jYXRpb24uc2VhcmNoLHNob3VsZFNjcm9sbDpudWxsPT1ufHxuLG5hdmlnYXRlVHlwZTp0fSl9LFtVXSk7RT0oMCx1LnVzZUNhbGxiYWNrKShlPT57KDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57VSh7Li4uZSx0eXBlOmEuQUNUSU9OX1NFUlZFUl9BQ1RJT059KX0pfSxbVV0pO2xldCB6PSgwLHUudXNlTWVtbykoKCk9Pih7YmFjazooKT0+d2luZG93Lmhpc3RvcnkuYmFjaygpLGZvcndhcmQ6KCk9PndpbmRvdy5oaXN0b3J5LmZvcndhcmQoKSxwcmVmZXRjaDooZSx0KT0+e2xldCBuO2lmKCEoMCxwLmlzQm90KSh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkpe3RyeXtuPW5ldyBVUkwoKDAsaC5hZGRCYXNlUGF0aCkoZSksd2luZG93LmxvY2F0aW9uLmhyZWYpfWNhdGNoKHQpe3Rocm93IEVycm9yKCJDYW5ub3QgcHJlZmV0Y2ggJyIrZSsiJyBiZWNhdXNlIGl0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBVUkwuIil9VChuKXx8KDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57dmFyIGU7VSh7dHlwZTphLkFDVElPTl9QUkVGRVRDSCx1cmw6bixraW5kOm51bGwhPShlPW51bGw9PXQ/dm9pZCAwOnQua2luZCk/ZTphLlByZWZldGNoS2luZC5GVUxMfSl9KX19LHJlcGxhY2U6KGUsdCk9Pnt2b2lkIDA9PT10JiYodD17fSksKDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57dmFyIG47JChlLCJyZXBsYWNlIixudWxsPT0obj10LnNjcm9sbCl8fG4pfSl9LHB1c2g6KGUsdCk9Pnt2b2lkIDA9PT10JiYodD17fSksKDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57dmFyIG47JChlLCJwdXNoIixudWxsPT0obj10LnNjcm9sbCl8fG4pfSl9LHJlZnJlc2g6KCk9PnsoMCx1LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntVKHt0eXBlOmEuQUNUSU9OX1JFRlJFU0gsb3JpZ2luOndpbmRvdy5sb2NhdGlvbi5vcmlnaW59KX0pfSxmYXN0UmVmcmVzaDooKT0+e3Rocm93IEVycm9yKCJmYXN0UmVmcmVzaCBjYW4gb25seSBiZSB1c2VkIGluIGRldmVsb3BtZW50IG1vZGUuIFBsZWFzZSB1c2UgcmVmcmVzaCBpbnN0ZWFkLiIpfX0pLFtVLCRdKTsoMCx1LnVzZUVmZmVjdCkoKCk9Pnt3aW5kb3cubmV4dCYmKHdpbmRvdy5uZXh0LnJvdXRlcj16KX0sW3pdKSwoMCx1LnVzZUVmZmVjdCkoKCk9PntmdW5jdGlvbiBlKGUpe3ZhciB0O2UucGVyc2lzdGVkJiYobnVsbD09KHQ9d2luZG93Lmhpc3Rvcnkuc3RhdGUpP3ZvaWQgMDp0Ll9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUpJiYody5wZW5kaW5nTXBhUGF0aD12b2lkIDAsVSh7dHlwZTphLkFDVElPTl9SRVNUT1JFLHVybDpuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSx0cmVlOndpbmRvdy5oaXN0b3J5LnN0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUV9KSl9cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlc2hvdyIsZSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZXNob3ciLGUpfX0sW1VdKTtsZXR7cHVzaFJlZjpCfT0oMCxzLnVzZVVud3JhcFN0YXRlKShJKTtpZihCLm1wYU5hdmlnYXRpb24pe2lmKHcucGVuZGluZ01wYVBhdGghPT1GKXtsZXQgZT13aW5kb3cubG9jYXRpb247Qi5wZW5kaW5nUHVzaD9lLmFzc2lnbihGKTplLnJlcGxhY2UoRiksdy5wZW5kaW5nTXBhUGF0aD1GfSgwLHUudXNlKShiLnVucmVzb2x2ZWRUaGVuYWJsZSl9KDAsdS51c2VFZmZlY3QpKCgpPT57bGV0IGU9d2luZG93Lmhpc3RvcnkucHVzaFN0YXRlLmJpbmQod2luZG93Lmhpc3RvcnkpLHQ9d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlLmJpbmQod2luZG93Lmhpc3RvcnkpLG49ZT0+e3ZhciB0O2xldCBuPXdpbmRvdy5sb2NhdGlvbi5ocmVmLHI9bnVsbD09KHQ9d2luZG93Lmhpc3Rvcnkuc3RhdGUpP3ZvaWQgMDp0Ll9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU7KDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57VSh7dHlwZTphLkFDVElPTl9SRVNUT1JFLHVybDpuZXcgVVJMKG51bGwhPWU/ZTpuLG4pLHRyZWU6cn0pfSl9O3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZT1mdW5jdGlvbih0LHIsbyl7cmV0dXJuKG51bGw9PXQ/dm9pZCAwOnQuX19OQSl8fChudWxsPT10P3ZvaWQgMDp0Ll9OKXx8KHQ9QSh0KSxvJiZuKG8pKSxlKHQscixvKX0sd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKGUscixvKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS5fX05BKXx8KG51bGw9PWU/dm9pZCAwOmUuX04pfHwoZT1BKGUpLG8mJm4obykpLHQoZSxyLG8pfTtsZXQgcj1lPT57bGV0e3N0YXRlOnR9PWU7aWYodCl7aWYoIXQuX19OQSl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO3JldHVybn0oMCx1LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntVKHt0eXBlOmEuQUNUSU9OX1JFU1RPUkUsdXJsOm5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHRyZWU6dC5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFfSl9KX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHIpLCgpPT57d2luZG93Lmhpc3RvcnkucHVzaFN0YXRlPWUsd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlPXQsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixyKX19LFtVXSk7bGV0e2NhY2hlOkssdHJlZTpXLG5leHRVcmw6Vixmb2N1c0FuZFNjcm9sbFJlZjpZfT0oMCxzLnVzZVVud3JhcFN0YXRlKShJKSxYPSgwLHUudXNlTWVtbykoKCk9PigwLHYuZmluZEhlYWRJbkNhY2hlKShLLFdbMV0pLFtLLFddKSxxPSgwLHUudXNlTWVtbykoKCk9PihmdW5jdGlvbiBlKHQsbil7Zm9yKGxldCByIG9mKHZvaWQgMD09PW4mJihuPXt9KSxPYmplY3QudmFsdWVzKHRbMV0pKSl7bGV0IHQ9clswXSxvPUFycmF5LmlzQXJyYXkodCksdT1vP3RbMV06dDshdXx8dS5zdGFydHNXaXRoKFAuUEFHRV9TRUdNRU5UX0tFWSl8fChvJiYoImMiPT09dFsyXXx8Im9jIj09PXRbMl0pP25bdFswXV09dFsxXS5zcGxpdCgiLyIpOm8mJihuW3RbMF1dPXRbMV0pLG49ZShyLG4pKX1yZXR1cm4gbn0pKFcpLFtXXSk7aWYobnVsbCE9PVgpe2xldFtlLG5dPVg7dD0oMCxvLmpzeCkoTix7aGVhZENhY2hlTm9kZTplfSxuKX1lbHNlIHQ9bnVsbDtsZXQgSj0oMCxvLmpzeHMpKF8uUmVkaXJlY3RCb3VuZGFyeSx7Y2hpbGRyZW46W3QsSy5yc2MsKDAsby5qc3gpKHkuQXBwUm91dGVyQW5ub3VuY2VyLHt0cmVlOld9KV19KTtyZXR1cm4oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeCkoQyx7YXBwUm91dGVyU3RhdGU6KDAscy51c2VVbndyYXBTdGF0ZSkoSSksc3luYzprfSksKDAsby5qc3gpKGMuUGF0aFBhcmFtc0NvbnRleHQuUHJvdmlkZXIse3ZhbHVlOnEsY2hpbGRyZW46KDAsby5qc3gpKGMuUGF0aG5hbWVDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTpILGNoaWxkcmVuOigwLG8uanN4KShjLlNlYXJjaFBhcmFtc0NvbnRleHQuUHJvdmlkZXIse3ZhbHVlOkwsY2hpbGRyZW46KDAsby5qc3gpKGwuR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dC5Qcm92aWRlcix7dmFsdWU6e2J1aWxkSWQ6bixjaGFuZ2VCeVNlcnZlclJlc3BvbnNlOkcsdHJlZTpXLGZvY3VzQW5kU2Nyb2xsUmVmOlksbmV4dFVybDpWfSxjaGlsZHJlbjooMCxvLmpzeCkobC5BcHBSb3V0ZXJDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTp6LGNoaWxkcmVuOigwLG8uanN4KShsLkxheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXIse3ZhbHVlOntjaGlsZE5vZGVzOksucGFyYWxsZWxSb3V0ZXMsdHJlZTpXLHVybDpGLGxvYWRpbmc6Sy5sb2FkaW5nfSxjaGlsZHJlbjpKfSl9KX0pfSl9KX0pXX0pfWZ1bmN0aW9uIEkoZSl7bGV0e2dsb2JhbEVycm9yQ29tcG9uZW50OnQsLi4ubn09ZTtyZXR1cm4oMCxvLmpzeCkoZi5FcnJvckJvdW5kYXJ5LHtlcnJvckNvbXBvbmVudDp0LGNoaWxkcmVuOigwLG8uanN4KShELHsuLi5ufSl9KX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw2MTQ5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJiYWlsb3V0VG9DbGllbnRSZW5kZXJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oODk5Myksbz1uKDE4NDUpO2Z1bmN0aW9uIHUoZSl7bGV0IHQ9by5zdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7aWYoKG51bGw9PXR8fCF0LmZvcmNlU3RhdGljKSYmKG51bGw9PXQ/dm9pZCAwOnQuaXNTdGF0aWNHZW5lcmF0aW9uKSl0aHJvdyBuZXcgci5CYWlsb3V0VG9DU1JFcnJvcihlKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw5MTA3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDbGllbnRQYWdlUm9vdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSk7bGV0IHI9big3NDM3KSxvPW4oNDUzNSk7ZnVuY3Rpb24gdShlKXtsZXR7Q29tcG9uZW50OnQscHJvcHM6bn09ZTtyZXR1cm4gbi5zZWFyY2hQYXJhbXM9KDAsby5jcmVhdGVEeW5hbWljYWxseVRyYWNrZWRTZWFyY2hQYXJhbXMpKG4uc2VhcmNoUGFyYW1zfHx7fSksKDAsci5qc3gpKHQsey4uLm59KX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwxMDYwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtFcnJvckJvdW5kYXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIGh9LEVycm9yQm91bmRhcnlIYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LEdsb2JhbEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gcH19KTtsZXQgcj1uKDcwNDMpLG89big3NDM3KSx1PXIuXyhuKDIyNjUpKSxsPW4oNTQ3NSksYT1uKDk3MjEpLGk9bigxODQ1KSxjPXtlcnJvcjp7Zm9udEZhbWlseTonc3lzdGVtLXVpLCJTZWdvZSBVSSIsUm9ib3RvLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIicsaGVpZ2h0OiIxMDB2aCIsdGV4dEFsaWduOiJjZW50ZXIiLGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sdGV4dDp7Zm9udFNpemU6IjE0cHgiLGZvbnRXZWlnaHQ6NDAwLGxpbmVIZWlnaHQ6IjI4cHgiLG1hcmdpbjoiMCA4cHgifX07ZnVuY3Rpb24gcyhlKXtsZXR7ZXJyb3I6dH09ZSxuPWkuc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZS5nZXRTdG9yZSgpO2lmKChudWxsPT1uP3ZvaWQgMDpuLmlzUmV2YWxpZGF0ZSl8fChudWxsPT1uP3ZvaWQgMDpuLmlzU3RhdGljR2VuZXJhdGlvbikpdGhyb3cgY29uc29sZS5lcnJvcih0KSx0O3JldHVybiBudWxsfWNsYXNzIGYgZXh0ZW5kcyB1LmRlZmF1bHQuQ29tcG9uZW50e3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZSl7aWYoKDAsYS5pc05leHRSb3V0ZXJFcnJvcikoZSkpdGhyb3cgZTtyZXR1cm57ZXJyb3I6ZX19c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhlLHQpe3JldHVybiBlLnBhdGhuYW1lIT09dC5wcmV2aW91c1BhdGhuYW1lJiZ0LmVycm9yP3tlcnJvcjpudWxsLHByZXZpb3VzUGF0aG5hbWU6ZS5wYXRobmFtZX06e2Vycm9yOnQuZXJyb3IscHJldmlvdXNQYXRobmFtZTplLnBhdGhuYW1lfX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5zdGF0ZS5lcnJvcj8oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeCkocyx7ZXJyb3I6dGhpcy5zdGF0ZS5lcnJvcn0pLHRoaXMucHJvcHMuZXJyb3JTdHlsZXMsdGhpcy5wcm9wcy5lcnJvclNjcmlwdHMsKDAsby5qc3gpKHRoaXMucHJvcHMuZXJyb3JDb21wb25lbnQse2Vycm9yOnRoaXMuc3RhdGUuZXJyb3IscmVzZXQ6dGhpcy5yZXNldH0pXX0pOnRoaXMucHJvcHMuY2hpbGRyZW59Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5yZXNldD0oKT0+e3RoaXMuc2V0U3RhdGUoe2Vycm9yOm51bGx9KX0sdGhpcy5zdGF0ZT17ZXJyb3I6bnVsbCxwcmV2aW91c1BhdGhuYW1lOnRoaXMucHJvcHMucGF0aG5hbWV9fX1mdW5jdGlvbiBkKGUpe2xldHtlcnJvcjp0fT1lLG49bnVsbD09dD92b2lkIDA6dC5kaWdlc3Q7cmV0dXJuKDAsby5qc3hzKSgiaHRtbCIse2lkOiJfX25leHRfZXJyb3JfXyIsY2hpbGRyZW46WygwLG8uanN4KSgiaGVhZCIse30pLCgwLG8uanN4cykoImJvZHkiLHtjaGlsZHJlbjpbKDAsby5qc3gpKHMse2Vycm9yOnR9KSwoMCxvLmpzeCkoImRpdiIse3N0eWxlOmMuZXJyb3IsY2hpbGRyZW46KDAsby5qc3hzKSgiZGl2Iix7Y2hpbGRyZW46WygwLG8uanN4KSgiaDIiLHtzdHlsZTpjLnRleHQsY2hpbGRyZW46IkFwcGxpY2F0aW9uIGVycm9yOiBhICIrKG4/InNlcnZlciI6ImNsaWVudCIpKyItc2lkZSBleGNlcHRpb24gaGFzIG9jY3VycmVkIChzZWUgdGhlICIrKG4/InNlcnZlciBsb2dzIjoiYnJvd3NlciBjb25zb2xlIikrIiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuIn0pLG4/KDAsby5qc3gpKCJwIix7c3R5bGU6Yy50ZXh0LGNoaWxkcmVuOiJEaWdlc3Q6ICIrbn0pOm51bGxdfSl9KV19KV19KX1sZXQgcD1kO2Z1bmN0aW9uIGgoZSl7bGV0e2Vycm9yQ29tcG9uZW50OnQsZXJyb3JTdHlsZXM6bixlcnJvclNjcmlwdHM6cixjaGlsZHJlbjp1fT1lLGE9KDAsbC51c2VQYXRobmFtZSkoKTtyZXR1cm4gdD8oMCxvLmpzeCkoZix7cGF0aG5hbWU6YSxlcnJvckNvbXBvbmVudDp0LGVycm9yU3R5bGVzOm4sZXJyb3JTY3JpcHRzOnIsY2hpbGRyZW46dX0pOigwLG8uanN4KShvLkZyYWdtZW50LHtjaGlsZHJlbjp1fSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNjE3NzpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse0R5bmFtaWNTZXJ2ZXJFcnJvcjpmdW5jdGlvbigpe3JldHVybiByfSxpc0R5bmFtaWNTZXJ2ZXJFcnJvcjpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCBuPSJEWU5BTUlDX1NFUlZFUl9VU0FHRSI7Y2xhc3MgciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJEeW5hbWljIHNlcnZlciB1c2FnZTogIitlKSx0aGlzLmRlc2NyaXB0aW9uPWUsdGhpcy5kaWdlc3Q9bn19ZnVuY3Rpb24gbyhlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiYiZGlnZXN0ImluIGUmJiJzdHJpbmciPT10eXBlb2YgZS5kaWdlc3QmJmUuZGlnZXN0PT09bn0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw5NzIxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc05leHRSb3V0ZXJFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSk7bGV0IHI9big4MjAwKSxvPW4oODk2OCk7ZnVuY3Rpb24gdShlKXtyZXR1cm4gZSYmZS5kaWdlc3QmJigoMCxvLmlzUmVkaXJlY3RFcnJvcikoZSl8fCgwLHIuaXNOb3RGb3VuZEVycm9yKShlKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNDcwNzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEV9fSk7bGV0IHI9big3MDQzKSxvPW4oMzA5OSksdT1uKDc0MzcpLGw9by5fKG4oMjI2NSkpLGE9ci5fKG4oNDg4NykpLGk9bigxOTU2KSxjPW4oNDg0OCkscz1uKDgxMzcpLGY9bigxMDYwKSxkPW4oNjAxNSkscD1uKDcwOTIpLGg9big0MTIzKSx5PW4oODApLF89bigzMTcxKSx2PW4oODUwNSksYj1uKDgwNzcpLGc9WyJib3R0b20iLCJoZWlnaHQiLCJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJ3aWR0aCIsIngiLCJ5Il07ZnVuY3Rpb24gbShlLHQpe2xldCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4udG9wPj0wJiZuLnRvcDw9dH1jbGFzcyBSIGV4dGVuZHMgbC5kZWZhdWx0LkNvbXBvbmVudHtjb21wb25lbnREaWRNb3VudCgpe3RoaXMuaGFuZGxlUG90ZW50aWFsU2Nyb2xsKCl9Y29tcG9uZW50RGlkVXBkYXRlKCl7dGhpcy5wcm9wcy5mb2N1c0FuZFNjcm9sbFJlZi5hcHBseSYmdGhpcy5oYW5kbGVQb3RlbnRpYWxTY3JvbGwoKX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbn1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLmhhbmRsZVBvdGVudGlhbFNjcm9sbD0oKT0+e2xldHtmb2N1c0FuZFNjcm9sbFJlZjplLHNlZ21lbnRQYXRoOnR9PXRoaXMucHJvcHM7aWYoZS5hcHBseSl7dmFyIG47aWYoMCE9PWUuc2VnbWVudFBhdGhzLmxlbmd0aCYmIWUuc2VnbWVudFBhdGhzLnNvbWUoZT0+dC5ldmVyeSgodCxuKT0+KDAsZC5tYXRjaFNlZ21lbnQpKHQsZVtuXSkpKSlyZXR1cm47bGV0IHI9bnVsbCxvPWUuaGFzaEZyYWdtZW50O2lmKG8mJihyPSJ0b3AiPT09bz9kb2N1bWVudC5ib2R5Om51bGwhPShuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG8pKT9uOmRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKG8pWzBdKSxyfHwocj0idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz9udWxsOmEuZGVmYXVsdC5maW5kRE9NTm9kZSh0aGlzKSksIShyIGluc3RhbmNlb2YgRWxlbWVudCkpcmV0dXJuO2Zvcig7IShyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpfHxmdW5jdGlvbihlKXtpZihbInN0aWNreSIsImZpeGVkIl0uaW5jbHVkZXMoZ2V0Q29tcHV0ZWRTdHlsZShlKS5wb3NpdGlvbikpcmV0dXJuITA7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZy5ldmVyeShlPT4wPT09dFtlXSl9KHIpOyl7aWYobnVsbD09PXIubmV4dEVsZW1lbnRTaWJsaW5nKXJldHVybjtyPXIubmV4dEVsZW1lbnRTaWJsaW5nfWUuYXBwbHk9ITEsZS5oYXNoRnJhZ21lbnQ9bnVsbCxlLnNlZ21lbnRQYXRocz1bXSwoMCxwLmhhbmRsZVNtb290aFNjcm9sbCkoKCk9PntpZihvKXtyLnNjcm9sbEludG9WaWV3KCk7cmV0dXJufWxldCBlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0PWUuY2xpZW50SGVpZ2h0OyFtKHIsdCkmJihlLnNjcm9sbFRvcD0wLG0ocix0KXx8ci5zY3JvbGxJbnRvVmlldygpKX0se2RvbnRGb3JjZUxheW91dDohMCxvbmx5SGFzaENoYW5nZTplLm9ubHlIYXNoQ2hhbmdlfSksZS5vbmx5SGFzaENoYW5nZT0hMSxyLmZvY3VzKCl9fX19ZnVuY3Rpb24gUChlKXtsZXR7c2VnbWVudFBhdGg6dCxjaGlsZHJlbjpufT1lLHI9KDAsbC51c2VDb250ZXh0KShpLkdsb2JhbExheW91dFJvdXRlckNvbnRleHQpO2lmKCFyKXRocm93IEVycm9yKCJpbnZhcmlhbnQgZ2xvYmFsIGxheW91dCByb3V0ZXIgbm90IG1vdW50ZWQiKTtyZXR1cm4oMCx1LmpzeCkoUix7c2VnbWVudFBhdGg6dCxmb2N1c0FuZFNjcm9sbFJlZjpyLmZvY3VzQW5kU2Nyb2xsUmVmLGNoaWxkcmVuOm59KX1mdW5jdGlvbiBqKGUpe2xldHtwYXJhbGxlbFJvdXRlcktleTp0LHVybDpuLGNoaWxkTm9kZXM6cixzZWdtZW50UGF0aDpvLHRyZWU6YSxjYWNoZUtleTpmfT1lLHA9KDAsbC51c2VDb250ZXh0KShpLkdsb2JhbExheW91dFJvdXRlckNvbnRleHQpO2lmKCFwKXRocm93IEVycm9yKCJpbnZhcmlhbnQgZ2xvYmFsIGxheW91dCByb3V0ZXIgbm90IG1vdW50ZWQiKTtsZXR7YnVpbGRJZDpoLGNoYW5nZUJ5U2VydmVyUmVzcG9uc2U6eSx0cmVlOl99PXAsdj1yLmdldChmKTtpZih2b2lkIDA9PT12KXtsZXQgZT17bGF6eURhdGE6bnVsbCxyc2M6bnVsbCxwcmVmZXRjaFJzYzpudWxsLGhlYWQ6bnVsbCxwcmVmZXRjaEhlYWQ6bnVsbCxwYXJhbGxlbFJvdXRlczpuZXcgTWFwLGxhenlEYXRhUmVzb2x2ZWQ6ITEsbG9hZGluZzpudWxsfTt2PWUsci5zZXQoZixlKX1sZXQgZz1udWxsIT09di5wcmVmZXRjaFJzYz92LnByZWZldGNoUnNjOnYucnNjLG09KDAsbC51c2VEZWZlcnJlZFZhbHVlKSh2LnJzYyxnKSxSPSJvYmplY3QiPT10eXBlb2YgbSYmbnVsbCE9PW0mJiJmdW5jdGlvbiI9PXR5cGVvZiBtLnRoZW4/KDAsbC51c2UpKG0pOm07aWYoIVIpe2xldCBlPXYubGF6eURhdGE7aWYobnVsbD09PWUpe2xldCB0PWZ1bmN0aW9uIGUodCxuKXtpZih0KXtsZXRbcixvXT10LHU9Mj09PXQubGVuZ3RoO2lmKCgwLGQubWF0Y2hTZWdtZW50KShuWzBdLHIpJiZuWzFdLmhhc093blByb3BlcnR5KG8pKXtpZih1KXtsZXQgdD1lKHZvaWQgMCxuWzFdW29dKTtyZXR1cm5bblswXSx7Li4ublsxXSxbb106W3RbMF0sdFsxXSx0WzJdLCJyZWZldGNoIl19XX1yZXR1cm5bblswXSx7Li4ublsxXSxbb106ZSh0LnNsaWNlKDIpLG5bMV1bb10pfV19fXJldHVybiBufShbIiIsLi4ub10sXykscj0oMCxiLmhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSkoXyk7di5sYXp5RGF0YT1lPSgwLGMuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkobmV3IFVSTChuLGxvY2F0aW9uLm9yaWdpbiksdCxyP3AubmV4dFVybDpudWxsLGgpLHYubGF6eURhdGFSZXNvbHZlZD0hMX1sZXQgdD0oMCxsLnVzZSkoZSk7di5sYXp5RGF0YVJlc29sdmVkfHwoc2V0VGltZW91dCgoKT0+eygwLGwuc3RhcnRUcmFuc2l0aW9uKSgoKT0+e3koe3ByZXZpb3VzVHJlZTpfLHNlcnZlclJlc3BvbnNlOnR9KX0pfSksdi5sYXp5RGF0YVJlc29sdmVkPSEwKSwoMCxsLnVzZSkocy51bnJlc29sdmVkVGhlbmFibGUpfXJldHVybigwLHUuanN4KShpLkxheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXIse3ZhbHVlOnt0cmVlOmFbMV1bdF0sY2hpbGROb2Rlczp2LnBhcmFsbGVsUm91dGVzLHVybDpuLGxvYWRpbmc6di5sb2FkaW5nfSxjaGlsZHJlbjpSfSl9ZnVuY3Rpb24gTyhlKXtsZXR7Y2hpbGRyZW46dCxoYXNMb2FkaW5nOm4sbG9hZGluZzpyLGxvYWRpbmdTdHlsZXM6byxsb2FkaW5nU2NyaXB0czphfT1lO3JldHVybiBuPygwLHUuanN4KShsLlN1c3BlbnNlLHtmYWxsYmFjazooMCx1LmpzeHMpKHUuRnJhZ21lbnQse2NoaWxkcmVuOltvLGEscl19KSxjaGlsZHJlbjp0fSk6KDAsdS5qc3gpKHUuRnJhZ21lbnQse2NoaWxkcmVuOnR9KX1mdW5jdGlvbiBFKGUpe2xldHtwYXJhbGxlbFJvdXRlcktleTp0LHNlZ21lbnRQYXRoOm4sZXJyb3I6cixlcnJvclN0eWxlczpvLGVycm9yU2NyaXB0czphLHRlbXBsYXRlU3R5bGVzOmMsdGVtcGxhdGVTY3JpcHRzOnMsdGVtcGxhdGU6ZCxub3RGb3VuZDpwLG5vdEZvdW5kU3R5bGVzOmJ9PWUsZz0oMCxsLnVzZUNvbnRleHQpKGkuTGF5b3V0Um91dGVyQ29udGV4dCk7aWYoIWcpdGhyb3cgRXJyb3IoImludmFyaWFudCBleHBlY3RlZCBsYXlvdXQgcm91dGVyIHRvIGJlIG1vdW50ZWQiKTtsZXR7Y2hpbGROb2RlczptLHRyZWU6Uix1cmw6RSxsb2FkaW5nOlN9PWcsdz1tLmdldCh0KTt3fHwodz1uZXcgTWFwLG0uc2V0KHQsdykpO2xldCBNPVJbMV1bdF1bMF0sVD0oMCxfLmdldFNlZ21lbnRWYWx1ZSkoTSksQz1bTV07cmV0dXJuKDAsdS5qc3gpKHUuRnJhZ21lbnQse2NoaWxkcmVuOkMubWFwKGU9PntsZXQgbD0oMCxfLmdldFNlZ21lbnRWYWx1ZSkoZSksZz0oMCx2LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShlKTtyZXR1cm4oMCx1LmpzeHMpKGkuVGVtcGxhdGVDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTooMCx1LmpzeCkoUCx7c2VnbWVudFBhdGg6bixjaGlsZHJlbjooMCx1LmpzeCkoZi5FcnJvckJvdW5kYXJ5LHtlcnJvckNvbXBvbmVudDpyLGVycm9yU3R5bGVzOm8sZXJyb3JTY3JpcHRzOmEsY2hpbGRyZW46KDAsdS5qc3gpKE8se2hhc0xvYWRpbmc6ISFTLGxvYWRpbmc6bnVsbD09Uz92b2lkIDA6U1swXSxsb2FkaW5nU3R5bGVzOm51bGw9PVM/dm9pZCAwOlNbMV0sbG9hZGluZ1NjcmlwdHM6bnVsbD09Uz92b2lkIDA6U1syXSxjaGlsZHJlbjooMCx1LmpzeCkoeS5Ob3RGb3VuZEJvdW5kYXJ5LHtub3RGb3VuZDpwLG5vdEZvdW5kU3R5bGVzOmIsY2hpbGRyZW46KDAsdS5qc3gpKGguUmVkaXJlY3RCb3VuZGFyeSx7Y2hpbGRyZW46KDAsdS5qc3gpKGose3BhcmFsbGVsUm91dGVyS2V5OnQsdXJsOkUsdHJlZTpSLGNoaWxkTm9kZXM6dyxzZWdtZW50UGF0aDpuLGNhY2hlS2V5OmcsaXNBY3RpdmU6VD09PWx9KX0pfSl9KX0pfSksY2hpbGRyZW46W2MscyxkXX0sKDAsdi5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoZSwhMCkpfSl9KX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw2MDE1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtjYW5TZWdtZW50QmVPdmVycmlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHV9LG1hdGNoU2VnbWVudDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oNzQxNyksbz0oZSx0KT0+InN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciPT10eXBlb2YgdCYmZT09PXQ6InN0cmluZyIhPXR5cGVvZiB0JiZlWzBdPT09dFswXSYmZVsxXT09PXRbMV0sdT0oZSx0KT0+e3ZhciBuO3JldHVybiFBcnJheS5pc0FycmF5KGUpJiYhIUFycmF5LmlzQXJyYXkodCkmJihudWxsPT0obj0oMCxyLmdldFNlZ21lbnRQYXJhbSkoZSkpP3ZvaWQgMDpuLnBhcmFtKT09PXRbMF19OygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDU0NzU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse1JlYWRvbmx5VVJMU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKCl7cmV0dXJuIGkuUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXN9LFJlZGlyZWN0VHlwZTpmdW5jdGlvbigpe3JldHVybiBpLlJlZGlyZWN0VHlwZX0sU2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBjLlNlcnZlckluc2VydGVkSFRNTENvbnRleHR9LG5vdEZvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIGkubm90Rm91bmR9LHBlcm1hbmVudFJlZGlyZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucGVybWFuZW50UmVkaXJlY3R9LHJlZGlyZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucmVkaXJlY3R9LHVzZVBhcmFtczpmdW5jdGlvbigpe3JldHVybiBwfSx1c2VQYXRobmFtZTpmdW5jdGlvbigpe3JldHVybiBmfSx1c2VSb3V0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdXNlU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudDpmdW5jdGlvbigpe3JldHVybiB5fSx1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LHVzZVNlcnZlckluc2VydGVkSFRNTDpmdW5jdGlvbigpe3JldHVybiBjLnVzZVNlcnZlckluc2VydGVkSFRNTH19KTtsZXQgcj1uKDIyNjUpLG89bigxOTU2KSx1PW4oOTA2MCksbD1uKDMxNzEpLGE9big0NTQxKSxpPW4oMjY0NiksYz1uKDU1MDEpO2Z1bmN0aW9uIHMoKXtsZXQgZT0oMCxyLnVzZUNvbnRleHQpKHUuU2VhcmNoUGFyYW1zQ29udGV4dCksdD0oMCxyLnVzZU1lbW8pKCgpPT5lP25ldyBpLlJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zKGUpOm51bGwsW2VdKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyl7bGV0e2JhaWxvdXRUb0NsaWVudFJlbmRlcmluZzplfT1uKDYxNDkpO2UoInVzZVNlYXJjaFBhcmFtcygpIil9cmV0dXJuIHR9ZnVuY3Rpb24gZigpe3JldHVybigwLHIudXNlQ29udGV4dCkodS5QYXRobmFtZUNvbnRleHQpfWZ1bmN0aW9uIGQoKXtsZXQgZT0oMCxyLnVzZUNvbnRleHQpKG8uQXBwUm91dGVyQ29udGV4dCk7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoImludmFyaWFudCBleHBlY3RlZCBhcHAgcm91dGVyIHRvIGJlIG1vdW50ZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBwKCl7cmV0dXJuKDAsci51c2VDb250ZXh0KSh1LlBhdGhQYXJhbXNDb250ZXh0KX1mdW5jdGlvbiBoKGUpe3ZvaWQgMD09PWUmJihlPSJjaGlsZHJlbiIpO2xldCB0PSgwLHIudXNlQ29udGV4dCkoby5MYXlvdXRSb3V0ZXJDb250ZXh0KTtyZXR1cm4gdD9mdW5jdGlvbiBlKHQsbixyLG8pe2xldCB1O2lmKHZvaWQgMD09PXImJihyPSEwKSx2b2lkIDA9PT1vJiYobz1bXSkscil1PXRbMV1bbl07ZWxzZXt2YXIgaTtsZXQgZT10WzFdO3U9bnVsbCE9KGk9ZS5jaGlsZHJlbik/aTpPYmplY3QudmFsdWVzKGUpWzBdfWlmKCF1KXJldHVybiBvO2xldCBjPXVbMF0scz0oMCxsLmdldFNlZ21lbnRWYWx1ZSkoYyk7cmV0dXJuIXN8fHMuc3RhcnRzV2l0aChhLlBBR0VfU0VHTUVOVF9LRVkpP286KG8ucHVzaChzKSxlKHUsbiwhMSxvKSl9KHQudHJlZSxlKTpudWxsfWZ1bmN0aW9uIHkoZSl7dm9pZCAwPT09ZSYmKGU9ImNoaWxkcmVuIik7bGV0IHQ9aChlKTtpZighdHx8MD09PXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuPSJjaGlsZHJlbiI9PT1lP3RbMF06dFt0Lmxlbmd0aC0xXTtyZXR1cm4gbj09PWEuREVGQVVMVF9TRUdNRU5UX0tFWT9udWxsOm59KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMjY0NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7UmVhZG9ubHlVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sUmVkaXJlY3RUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHIuUmVkaXJlY3RUeXBlfSxub3RGb3VuZDpmdW5jdGlvbigpe3JldHVybiBvLm5vdEZvdW5kfSxwZXJtYW5lbnRSZWRpcmVjdDpmdW5jdGlvbigpe3JldHVybiByLnBlcm1hbmVudFJlZGlyZWN0fSxyZWRpcmVjdDpmdW5jdGlvbigpe3JldHVybiByLnJlZGlyZWN0fX0pO2xldCByPW4oODk2OCksbz1uKDgyMDApO2NsYXNzIHUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJNZXRob2QgdW5hdmFpbGFibGUgb24gYFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zYC4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXNlYXJjaC1wYXJhbXMjdXBkYXRpbmctc2VhcmNocGFyYW1zIil9fWNsYXNzIGwgZXh0ZW5kcyBVUkxTZWFyY2hQYXJhbXN7YXBwZW5kKCl7dGhyb3cgbmV3IHV9ZGVsZXRlKCl7dGhyb3cgbmV3IHV9c2V0KCl7dGhyb3cgbmV3IHV9c29ydCgpe3Rocm93IG5ldyB1fX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw4MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTm90Rm91bmRCb3VuZGFyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9fSk7bGV0IHI9bigzMDk5KSxvPW4oNzQzNyksdT1yLl8obigyMjY1KSksbD1uKDU0NzUpLGE9big4MjAwKTtuKDE3NjUpO2xldCBpPW4oMTk1Nik7Y2xhc3MgYyBleHRlbmRzIHUuZGVmYXVsdC5Db21wb25lbnR7Y29tcG9uZW50RGlkQ2F0Y2goKXt9c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlKXtpZigoMCxhLmlzTm90Rm91bmRFcnJvcikoZSkpcmV0dXJue25vdEZvdW5kVHJpZ2dlcmVkOiEwfTt0aHJvdyBlfXN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoZSx0KXtyZXR1cm4gZS5wYXRobmFtZSE9PXQucHJldmlvdXNQYXRobmFtZSYmdC5ub3RGb3VuZFRyaWdnZXJlZD97bm90Rm91bmRUcmlnZ2VyZWQ6ITEscHJldmlvdXNQYXRobmFtZTplLnBhdGhuYW1lfTp7bm90Rm91bmRUcmlnZ2VyZWQ6dC5ub3RGb3VuZFRyaWdnZXJlZCxwcmV2aW91c1BhdGhuYW1lOmUucGF0aG5hbWV9fXJlbmRlcigpe3JldHVybiB0aGlzLnN0YXRlLm5vdEZvdW5kVHJpZ2dlcmVkPygwLG8uanN4cykoby5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KSgibWV0YSIse25hbWU6InJvYm90cyIsY29udGVudDoibm9pbmRleCJ9KSwhMSx0aGlzLnByb3BzLm5vdEZvdW5kU3R5bGVzLHRoaXMucHJvcHMubm90Rm91bmRdfSk6dGhpcy5wcm9wcy5jaGlsZHJlbn1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXRlPXtub3RGb3VuZFRyaWdnZXJlZDohIWUuYXNOb3RGb3VuZCxwcmV2aW91c1BhdGhuYW1lOmUucGF0aG5hbWV9fX1mdW5jdGlvbiBzKGUpe2xldHtub3RGb3VuZDp0LG5vdEZvdW5kU3R5bGVzOm4sYXNOb3RGb3VuZDpyLGNoaWxkcmVuOmF9PWUscz0oMCxsLnVzZVBhdGhuYW1lKSgpLGY9KDAsdS51c2VDb250ZXh0KShpLk1pc3NpbmdTbG90Q29udGV4dCk7cmV0dXJuIHQ/KDAsby5qc3gpKGMse3BhdGhuYW1lOnMsbm90Rm91bmQ6dCxub3RGb3VuZFN0eWxlczpuLGFzTm90Rm91bmQ6cixtaXNzaW5nU2xvdHM6ZixjaGlsZHJlbjphfSk6KDAsby5qc3gpKG8uRnJhZ21lbnQse2NoaWxkcmVuOmF9KX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw4MjAwOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7aXNOb3RGb3VuZEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99LG5vdEZvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fSk7bGV0IG49Ik5FWFRfTk9UX0ZPVU5EIjtmdW5jdGlvbiByKCl7bGV0IGU9RXJyb3Iobik7dGhyb3cgZS5kaWdlc3Q9bixlfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmImRpZ2VzdCJpbiBlJiZlLmRpZ2VzdD09PW59KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sOTc0NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUHJvbWlzZVF1ZXVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTtsZXQgcj1uKDI1MjIpLG89big2NzUpO3ZhciB1PW8uXygiX21heENvbmN1cnJlbmN5IiksbD1vLl8oIl9ydW5uaW5nQ291bnQiKSxhPW8uXygiX3F1ZXVlIiksaT1vLl8oIl9wcm9jZXNzTmV4dCIpO2NsYXNzIGN7ZW5xdWV1ZShlKXtsZXQgdCxuO2xldCBvPW5ldyBQcm9taXNlKChlLHIpPT57dD1lLG49cn0pLHU9YXN5bmMoKT0+e3RyeXtyLl8odGhpcyxsKVtsXSsrO2xldCBuPWF3YWl0IGUoKTt0KG4pfWNhdGNoKGUpe24oZSl9ZmluYWxseXtyLl8odGhpcyxsKVtsXS0tLHIuXyh0aGlzLGkpW2ldKCl9fTtyZXR1cm4gci5fKHRoaXMsYSlbYV0ucHVzaCh7cHJvbWlzZUZuOm8sdGFzazp1fSksci5fKHRoaXMsaSlbaV0oKSxvfWJ1bXAoZSl7bGV0IHQ9ci5fKHRoaXMsYSlbYV0uZmluZEluZGV4KHQ9PnQucHJvbWlzZUZuPT09ZSk7aWYodD4tMSl7bGV0IGU9ci5fKHRoaXMsYSlbYV0uc3BsaWNlKHQsMSlbMF07ci5fKHRoaXMsYSlbYV0udW5zaGlmdChlKSxyLl8odGhpcyxpKVtpXSghMCl9fWNvbnN0cnVjdG9yKGU9NSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsaSx7dmFsdWU6c30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGwse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHIuXyh0aGlzLHUpW3VdPWUsci5fKHRoaXMsbClbbF09MCxyLl8odGhpcyxhKVthXT1bXX19ZnVuY3Rpb24gcyhlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksKHIuXyh0aGlzLGwpW2xdPHIuXyh0aGlzLHUpW3VdfHxlKSYmci5fKHRoaXMsYSlbYV0ubGVuZ3RoPjApe3ZhciB0O251bGw9PSh0PXIuXyh0aGlzLGEpW2FdLnNoaWZ0KCkpfHx0LnRhc2soKX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNDEyMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7UmVkaXJlY3RCb3VuZGFyeTpmdW5jdGlvbigpe3JldHVybiBzfSxSZWRpcmVjdEVycm9yQm91bmRhcnk6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTtsZXQgcj1uKDMwOTkpLG89big3NDM3KSx1PXIuXyhuKDIyNjUpKSxsPW4oNTQ3NSksYT1uKDg5NjgpO2Z1bmN0aW9uIGkoZSl7bGV0e3JlZGlyZWN0OnQscmVzZXQ6bixyZWRpcmVjdFR5cGU6cn09ZSxvPSgwLGwudXNlUm91dGVyKSgpO3JldHVybigwLHUudXNlRWZmZWN0KSgoKT0+e3UuZGVmYXVsdC5zdGFydFRyYW5zaXRpb24oKCk9PntyPT09YS5SZWRpcmVjdFR5cGUucHVzaD9vLnB1c2godCx7fSk6by5yZXBsYWNlKHQse30pLG4oKX0pfSxbdCxyLG4sb10pLG51bGx9Y2xhc3MgYyBleHRlbmRzIHUuZGVmYXVsdC5Db21wb25lbnR7c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlKXtpZigoMCxhLmlzUmVkaXJlY3RFcnJvcikoZSkpcmV0dXJue3JlZGlyZWN0OigwLGEuZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IpKGUpLHJlZGlyZWN0VHlwZTooMCxhLmdldFJlZGlyZWN0VHlwZUZyb21FcnJvcikoZSl9O3Rocm93IGV9cmVuZGVyKCl7bGV0e3JlZGlyZWN0OmUscmVkaXJlY3RUeXBlOnR9PXRoaXMuc3RhdGU7cmV0dXJuIG51bGwhPT1lJiZudWxsIT09dD8oMCxvLmpzeCkoaSx7cmVkaXJlY3Q6ZSxyZWRpcmVjdFR5cGU6dCxyZXNldDooKT0+dGhpcy5zZXRTdGF0ZSh7cmVkaXJlY3Q6bnVsbH0pfSk6dGhpcy5wcm9wcy5jaGlsZHJlbn1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXRlPXtyZWRpcmVjdDpudWxsLHJlZGlyZWN0VHlwZTpudWxsfX19ZnVuY3Rpb24gcyhlKXtsZXR7Y2hpbGRyZW46dH09ZSxuPSgwLGwudXNlUm91dGVyKSgpO3JldHVybigwLG8uanN4KShjLHtyb3V0ZXI6bixjaGlsZHJlbjp0fSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNTAwMTpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixyO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVkaXJlY3RTdGF0dXNDb2RlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KSwocj1ufHwobj17fSkpW3IuU2VlT3RoZXI9MzAzXT0iU2VlT3RoZXIiLHJbci5UZW1wb3JhcnlSZWRpcmVjdD0zMDddPSJUZW1wb3JhcnlSZWRpcmVjdCIscltyLlBlcm1hbmVudFJlZGlyZWN0PTMwOF09IlBlcm1hbmVudFJlZGlyZWN0IiwoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw4OTY4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbztPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse1JlZGlyZWN0VHlwZTpmdW5jdGlvbigpe3JldHVybiByfSxnZXRSZWRpcmVjdEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGdldFJlZGlyZWN0U3RhdHVzQ29kZUZyb21FcnJvcjpmdW5jdGlvbigpe3JldHVybiB5fSxnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gcH0saXNSZWRpcmVjdEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LHBlcm1hbmVudFJlZGlyZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHJlZGlyZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9fSk7bGV0IHU9big1NDQpLGw9bigyOTUpLGE9big1MDAxKSxpPSJORVhUX1JFRElSRUNUIjtmdW5jdGlvbiBjKGUsdCxuKXt2b2lkIDA9PT1uJiYobj1hLlJlZGlyZWN0U3RhdHVzQ29kZS5UZW1wb3JhcnlSZWRpcmVjdCk7bGV0IHI9RXJyb3IoaSk7ci5kaWdlc3Q9aSsiOyIrdCsiOyIrZSsiOyIrbisiOyI7bGV0IG89dS5yZXF1ZXN0QXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7cmV0dXJuIG8mJihyLm11dGFibGVDb29raWVzPW8ubXV0YWJsZUNvb2tpZXMpLHJ9ZnVuY3Rpb24gcyhlLHQpe3ZvaWQgMD09PXQmJih0PSJyZXBsYWNlIik7bGV0IG49bC5hY3Rpb25Bc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKTt0aHJvdyBjKGUsdCwobnVsbD09bj92b2lkIDA6bi5pc0FjdGlvbik/YS5SZWRpcmVjdFN0YXR1c0NvZGUuU2VlT3RoZXI6YS5SZWRpcmVjdFN0YXR1c0NvZGUuVGVtcG9yYXJ5UmVkaXJlY3QpfWZ1bmN0aW9uIGYoZSx0KXt2b2lkIDA9PT10JiYodD0icmVwbGFjZSIpO2xldCBuPWwuYWN0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7dGhyb3cgYyhlLHQsKG51bGw9PW4/dm9pZCAwOm4uaXNBY3Rpb24pP2EuUmVkaXJlY3RTdGF0dXNDb2RlLlNlZU90aGVyOmEuUmVkaXJlY3RTdGF0dXNDb2RlLlBlcm1hbmVudFJlZGlyZWN0KX1mdW5jdGlvbiBkKGUpe2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWV8fCEoImRpZ2VzdCJpbiBlKXx8InN0cmluZyIhPXR5cGVvZiBlLmRpZ2VzdClyZXR1cm4hMTtsZXRbdCxuLHIsb109ZS5kaWdlc3Quc3BsaXQoIjsiLDQpLHU9TnVtYmVyKG8pO3JldHVybiB0PT09aSYmKCJyZXBsYWNlIj09PW58fCJwdXNoIj09PW4pJiYic3RyaW5nIj09dHlwZW9mIHImJiFpc05hTih1KSYmdSBpbiBhLlJlZGlyZWN0U3RhdHVzQ29kZX1mdW5jdGlvbiBwKGUpe3JldHVybiBkKGUpP2UuZGlnZXN0LnNwbGl0KCI7IiwzKVsyXTpudWxsfWZ1bmN0aW9uIGgoZSl7aWYoIWQoZSkpdGhyb3cgRXJyb3IoIk5vdCBhIHJlZGlyZWN0IGVycm9yIik7cmV0dXJuIGUuZGlnZXN0LnNwbGl0KCI7IiwyKVsxXX1mdW5jdGlvbiB5KGUpe2lmKCFkKGUpKXRocm93IEVycm9yKCJOb3QgYSByZWRpcmVjdCBlcnJvciIpO3JldHVybiBOdW1iZXIoZS5kaWdlc3Quc3BsaXQoIjsiLDQpWzNdKX0obz1yfHwocj17fSkpLnB1c2g9InB1c2giLG8ucmVwbGFjZT0icmVwbGFjZSIsKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNjQyMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9fSk7bGV0IHI9bigzMDk5KSxvPW4oNzQzNyksdT1yLl8obigyMjY1KSksbD1uKDE5NTYpO2Z1bmN0aW9uIGEoKXtsZXQgZT0oMCx1LnVzZUNvbnRleHQpKGwuVGVtcGxhdGVDb250ZXh0KTtyZXR1cm4oMCxvLmpzeCkoby5GcmFnbWVudCx7Y2hpbGRyZW46ZX0pfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDU0NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7Z2V0RXhwZWN0ZWRSZXF1ZXN0U3RvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gb30scmVxdWVzdEFzeW5jU3RvcmFnZTpmdW5jdGlvbigpe3JldHVybiByLnJlcXVlc3RBc3luY1N0b3JhZ2V9fSk7bGV0IHI9big5MTM0KTtmdW5jdGlvbiBvKGUpe2xldCB0PXIucmVxdWVzdEFzeW5jU3RvcmFnZS5nZXRTdG9yZSgpO2lmKHQpcmV0dXJuIHQ7dGhyb3cgRXJyb3IoImAiK2UrImAgd2FzIGNhbGxlZCBvdXRzaWRlIGEgcmVxdWVzdCBzY29wZS4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uZXh0LWR5bmFtaWMtYXBpLXdyb25nLWNvbnRleHQiKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwyMzU2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhcHBseUZsaWdodERhdGEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oNzQyMCksbz1uKDI1NzYpO2Z1bmN0aW9uIHUoZSx0LG4sdSl7bGV0W2wsYSxpXT1uLnNsaWNlKC0zKTtpZihudWxsPT09YSlyZXR1cm4hMTtpZigzPT09bi5sZW5ndGgpe2xldCBuPWFbMl0sbz1hWzNdO3QubG9hZGluZz1vLHQucnNjPW4sdC5wcmVmZXRjaFJzYz1udWxsLCgwLHIuZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQpKHQsZSxsLGEsaSx1KX1lbHNlIHQucnNjPWUucnNjLHQucHJlZmV0Y2hSc2M9ZS5wcmVmZXRjaFJzYyx0LnBhcmFsbGVsUm91dGVzPW5ldyBNYXAoZS5wYXJhbGxlbFJvdXRlcyksdC5sb2FkaW5nPWUubG9hZGluZywoMCxvLmZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YSkodCxlLG4sdSk7cmV0dXJuITB9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMTkzNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4scixhKXtsZXQgaTtsZXRbYyxzLGYsZCxwXT1uO2lmKDE9PT10Lmxlbmd0aCl7bGV0IGU9bChuLHIsdCk7cmV0dXJuKDAsdS5hZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzKShlLGEpLGV9bGV0W2gseV09dDtpZighKDAsby5tYXRjaFNlZ21lbnQpKGgsYykpcmV0dXJuIG51bGw7aWYoMj09PXQubGVuZ3RoKWk9bChzW3ldLHIsdCk7ZWxzZSBpZihudWxsPT09KGk9ZSh0LnNsaWNlKDIpLHNbeV0scixhKSkpcmV0dXJuIG51bGw7bGV0IF89W3RbMF0sey4uLnMsW3ldOml9LGYsZF07cmV0dXJuIHAmJihfWzRdPSEwKSwoMCx1LmFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMpKF8sYSksX319fSk7bGV0IHI9big0NTQxKSxvPW4oNjAxNSksdT1uKDIzMik7ZnVuY3Rpb24gbChlLHQsbil7bGV0W3UsYV09ZSxbaSxjXT10O2lmKGk9PT1yLkRFRkFVTFRfU0VHTUVOVF9LRVkmJnUhPT1yLkRFRkFVTFRfU0VHTUVOVF9LRVkpcmV0dXJuIGU7aWYoKDAsby5tYXRjaFNlZ21lbnQpKHUsaSkpe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBhKXZvaWQgMCE9PWNbZV0/dFtlXT1sKGFbZV0sY1tlXSxuKTp0W2VdPWFbZV07Zm9yKGxldCBlIGluIGMpdFtlXXx8KHRbZV09Y1tlXSk7bGV0IHI9W3UsdF07cmV0dXJuIGVbMl0mJihyWzJdPWVbMl0pLGVbM10mJihyWzNdPWVbM10pLGVbNF0mJihyWzRdPWVbNF0pLHJ9cmV0dXJuIHR9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNTU1NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2xlYXJDYWNoZU5vZGVEYXRhRm9yU2VnbWVudFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQsbixvKXtsZXQgdT1vLmxlbmd0aDw9MixbbCxhXT1vLGk9KDAsci5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoYSksYz1uLnBhcmFsbGVsUm91dGVzLmdldChsKSxzPXQucGFyYWxsZWxSb3V0ZXMuZ2V0KGwpO3MmJnMhPT1jfHwocz1uZXcgTWFwKGMpLHQucGFyYWxsZWxSb3V0ZXMuc2V0KGwscykpO2xldCBmPW51bGw9PWM/dm9pZCAwOmMuZ2V0KGkpLGQ9cy5nZXQoaSk7aWYodSl7ZCYmZC5sYXp5RGF0YSYmZCE9PWZ8fHMuc2V0KGkse2xhenlEYXRhOm51bGwscnNjOm51bGwscHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcCxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6bnVsbH0pO3JldHVybn1pZighZHx8IWYpe2R8fHMuc2V0KGkse2xhenlEYXRhOm51bGwscnNjOm51bGwscHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcCxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6bnVsbH0pO3JldHVybn1yZXR1cm4gZD09PWYmJihkPXtsYXp5RGF0YTpkLmxhenlEYXRhLHJzYzpkLnJzYyxwcmVmZXRjaFJzYzpkLnByZWZldGNoUnNjLGhlYWQ6ZC5oZWFkLHByZWZldGNoSGVhZDpkLnByZWZldGNoSGVhZCxwYXJhbGxlbFJvdXRlczpuZXcgTWFwKGQucGFyYWxsZWxSb3V0ZXMpLGxhenlEYXRhUmVzb2x2ZWQ6ZC5sYXp5RGF0YVJlc29sdmVkLGxvYWRpbmc6ZC5sb2FkaW5nfSxzLnNldChpLGQpKSxlKGQsZixvLnNsaWNlKDIpKX19fSk7bGV0IHI9big4NTA1KTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw1NDEwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtjb21wdXRlQ2hhbmdlZFBhdGg6ZnVuY3Rpb24oKXtyZXR1cm4gc30sZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTtsZXQgcj1uKDExODIpLG89big0NTQxKSx1PW4oNjAxNSksbD1lPT4iLyI9PT1lWzBdP2Uuc2xpY2UoMSk6ZSxhPWU9PiJzdHJpbmciPT10eXBlb2YgZT8iY2hpbGRyZW4iPT09ZT8iIjplOmVbMV07ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5yZWR1Y2UoKGUsdCk9PiIiPT09KHQ9bCh0KSl8fCgwLG8uaXNHcm91cFNlZ21lbnQpKHQpP2U6ZSsiLyIrdCwiIil8fCIvIn1mdW5jdGlvbiBjKGUpe3ZhciB0O2xldCBuPUFycmF5LmlzQXJyYXkoZVswXSk/ZVswXVsxXTplWzBdO2lmKG49PT1vLkRFRkFVTFRfU0VHTUVOVF9LRVl8fHIuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuc29tZShlPT5uLnN0YXJ0c1dpdGgoZSkpKXJldHVybjtpZihuLnN0YXJ0c1dpdGgoby5QQUdFX1NFR01FTlRfS0VZKSlyZXR1cm4iIjtsZXQgdT1bYShuKV0sbD1udWxsIT0odD1lWzFdKT90Ont9LHM9bC5jaGlsZHJlbj9jKGwuY2hpbGRyZW4pOnZvaWQgMDtpZih2b2lkIDAhPT1zKXUucHVzaChzKTtlbHNlIGZvcihsZXRbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGwpKXtpZigiY2hpbGRyZW4iPT09ZSljb250aW51ZTtsZXQgbj1jKHQpO3ZvaWQgMCE9PW4mJnUucHVzaChuKX1yZXR1cm4gaSh1KX1mdW5jdGlvbiBzKGUsdCl7bGV0IG49ZnVuY3Rpb24gZSh0LG4pe2xldFtvLGxdPXQsW2ksc109bixmPWEobyksZD1hKGkpO2lmKHIuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuc29tZShlPT5mLnN0YXJ0c1dpdGgoZSl8fGQuc3RhcnRzV2l0aChlKSkpcmV0dXJuIiI7aWYoISgwLHUubWF0Y2hTZWdtZW50KShvLGkpKXt2YXIgcDtyZXR1cm4gbnVsbCE9KHA9YyhuKSk/cDoiIn1mb3IobGV0IHQgaW4gbClpZihzW3RdKXtsZXQgbj1lKGxbdF0sc1t0XSk7aWYobnVsbCE9PW4pcmV0dXJuIGEoaSkrIi8iK259cmV0dXJuIG51bGx9KGUsdCk7cmV0dXJuIG51bGw9PW58fCIvIj09PW4/bjppKG4uc3BsaXQoIi8iKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMzQ1NjpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSxlLnBhdGhuYW1lK2Uuc2VhcmNoKyh0P2UuaGFzaDoiIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVIcmVmRnJvbVVybCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59fSksKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMjk1MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTtsZXQgcj1uKDM0NTYpLG89big3NDIwKSx1PW4oNTQxMCksbD1uKDMwNSksYT1uKDQ2NzMpLGk9bigyMzIpO2Z1bmN0aW9uIGMoZSl7dmFyIHQ7bGV0e2J1aWxkSWQ6bixpbml0aWFsVHJlZTpjLGluaXRpYWxTZWVkRGF0YTpzLHVybFBhcnRzOmYsaW5pdGlhbFBhcmFsbGVsUm91dGVzOmQsbG9jYXRpb246cCxpbml0aWFsSGVhZDpoLGNvdWxkQmVJbnRlcmNlcHRlZDp5fT1lLF89Zi5qb2luKCIvIiksdj0hcCxiPXtsYXp5RGF0YTpudWxsLHJzYzpzWzJdLHByZWZldGNoUnNjOm51bGwsaGVhZDpudWxsLHByZWZldGNoSGVhZDpudWxsLHBhcmFsbGVsUm91dGVzOnY/bmV3IE1hcDpkLGxhenlEYXRhUmVzb2x2ZWQ6ITEsbG9hZGluZzpzWzNdfSxnPXA/KDAsci5jcmVhdGVIcmVmRnJvbVVybCkocCk6XzsoMCxpLmFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMpKGMsZyk7bGV0IG09bmV3IE1hcDsobnVsbD09PWR8fDA9PT1kLnNpemUpJiYoMCxvLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKShiLHZvaWQgMCxjLHMsaCk7bGV0IFI9e2J1aWxkSWQ6bix0cmVlOmMsY2FjaGU6YixwcmVmZXRjaENhY2hlOm0scHVzaFJlZjp7cGVuZGluZ1B1c2g6ITEsbXBhTmF2aWdhdGlvbjohMSxwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZTohMH0sZm9jdXNBbmRTY3JvbGxSZWY6e2FwcGx5OiExLG9ubHlIYXNoQ2hhbmdlOiExLGhhc2hGcmFnbWVudDpudWxsLHNlZ21lbnRQYXRoczpbXX0sY2Fub25pY2FsVXJsOmcsbmV4dFVybDpudWxsIT0odD0oMCx1LmV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKShjKXx8KG51bGw9PXA/dm9pZCAwOnAucGF0aG5hbWUpKT90Om51bGx9O2lmKHApe2xldCBlPW5ldyBVUkwoIiIrcC5wYXRobmFtZStwLnNlYXJjaCxwLm9yaWdpbiksdD1bWyIiLGMsbnVsbCxudWxsXV07KDAsbC5jcmVhdGVQcmVmZXRjaENhY2hlRW50cnlGb3JJbml0aWFsTG9hZCkoe3VybDplLGtpbmQ6YS5QcmVmZXRjaEtpbmQuQVVUTyxkYXRhOlt0LHZvaWQgMCwhMSx5XSx0cmVlOlIudHJlZSxwcmVmZXRjaENhY2hlOlIucHJlZmV0Y2hDYWNoZSxuZXh0VXJsOlIubmV4dFVybH0pfXJldHVybiBSfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDg1MDU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNyZWF0ZVJvdXRlckNhY2hlS2V5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDQ1NDEpO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4odm9pZCAwPT09dCYmKHQ9ITEpLEFycmF5LmlzQXJyYXkoZSkpP2VbMF0rInwiK2VbMV0rInwiK2VbMl06dCYmZS5zdGFydHNXaXRoKHIuUEFHRV9TRUdNRU5UX0tFWSk/ci5QQUdFX1NFR01FTlRfS0VZOmV9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNDg0ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9fSk7bGV0IHI9big2ODY2KSxvPW4oMjg0NiksdT1uKDMwNzkpLGw9big0NjczKSxhPW4oNzIwNyksaT1uKDEzMTEpLHtjcmVhdGVGcm9tRmV0Y2g6Y309big2NjcxKTtmdW5jdGlvbiBzKGUpe3JldHVyblsoMCxvLnVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcikoZSkudG9TdHJpbmcoKSx2b2lkIDAsITEsITFdfWFzeW5jIGZ1bmN0aW9uIGYoZSx0LG4sZixkKXtsZXQgcD17W3IuUlNDX0hFQURFUl06IjEiLFtyLk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVdOigwLGkucHJlcGFyZUZsaWdodFJvdXRlclN0YXRlRm9yUmVxdWVzdCkodCl9O2Q9PT1sLlByZWZldGNoS2luZC5BVVRPJiYocFtyLk5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl09IjEiKSxuJiYocFtyLk5FWFRfVVJMXT1uKTtsZXQgaD0oMCxhLmhleEhhc2gpKFtwW3IuTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSXXx8IjAiLHBbci5ORVhUX1JPVVRFUl9TVEFURV9UUkVFXSxwW3IuTkVYVF9VUkxdXS5qb2luKCIsIikpO3RyeXt2YXIgeTtsZXQgdD1uZXcgVVJMKGUpO3Quc2VhcmNoUGFyYW1zLnNldChyLk5FWFRfUlNDX1VOSU9OX1FVRVJZLGgpO2xldCBuPWF3YWl0IGZldGNoKHQse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiIsaGVhZGVyczpwfSksbD0oMCxvLnVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcikobi51cmwpLGE9bi5yZWRpcmVjdGVkP2w6dm9pZCAwLGk9bi5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCIiLGQ9ISFuLmhlYWRlcnMuZ2V0KHIuTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSKSxfPSEhKG51bGw9PSh5PW4uaGVhZGVycy5nZXQoInZhcnkiKSk/dm9pZCAwOnkuaW5jbHVkZXMoci5ORVhUX1VSTCkpO2lmKGkhPT1yLlJTQ19DT05URU5UX1RZUEVfSEVBREVSfHwhbi5vaylyZXR1cm4gZS5oYXNoJiYobC5oYXNoPWUuaGFzaCkscyhsLnRvU3RyaW5nKCkpO2xldFt2LGJdPWF3YWl0IGMoUHJvbWlzZS5yZXNvbHZlKG4pLHtjYWxsU2VydmVyOnUuY2FsbFNlcnZlcn0pO2lmKGYhPT12KXJldHVybiBzKG4udXJsKTtyZXR1cm5bYixhLGQsX119Y2F0Y2godCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBmZXRjaCBSU0MgcGF5bG9hZCBmb3IgIitlKyIuIEZhbGxpbmcgYmFjayB0byBicm93c2VyIG5hdmlnYXRpb24uIix0KSxbZS50b1N0cmluZygpLHZvaWQgMCwhMSwhMV19fSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDI1NzY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLGwsYSl7bGV0IGk9bC5sZW5ndGg8PTUsW2Msc109bCxmPSgwLHUuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKHMpLGQ9bi5wYXJhbGxlbFJvdXRlcy5nZXQoYyk7aWYoIWQpcmV0dXJuO2xldCBwPXQucGFyYWxsZWxSb3V0ZXMuZ2V0KGMpO3AmJnAhPT1kfHwocD1uZXcgTWFwKGQpLHQucGFyYWxsZWxSb3V0ZXMuc2V0KGMscCkpO2xldCBoPWQuZ2V0KGYpLHk9cC5nZXQoZik7aWYoaSl7aWYoIXl8fCF5LmxhenlEYXRhfHx5PT09aCl7bGV0IGU9bFszXTt5PXtsYXp5RGF0YTpudWxsLHJzYzplWzJdLHByZWZldGNoUnNjOm51bGwsaGVhZDpudWxsLHByZWZldGNoSGVhZDpudWxsLGxvYWRpbmc6ZVszXSxwYXJhbGxlbFJvdXRlczpoP25ldyBNYXAoaC5wYXJhbGxlbFJvdXRlcyk6bmV3IE1hcCxsYXp5RGF0YVJlc29sdmVkOiExfSxoJiYoMCxyLmludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGUpKHksaCxsWzJdKSwoMCxvLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKSh5LGgsbFsyXSxlLGxbNF0sYSkscC5zZXQoZix5KX1yZXR1cm59eSYmaCYmKHk9PT1oJiYoeT17bGF6eURhdGE6eS5sYXp5RGF0YSxyc2M6eS5yc2MscHJlZmV0Y2hSc2M6eS5wcmVmZXRjaFJzYyxoZWFkOnkuaGVhZCxwcmVmZXRjaEhlYWQ6eS5wcmVmZXRjaEhlYWQscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcCh5LnBhcmFsbGVsUm91dGVzKSxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6eS5sb2FkaW5nfSxwLnNldChmLHkpKSxlKHksaCxsLnNsaWNlKDIpLGEpKX19fSk7bGV0IHI9big0Mzc3KSxvPW4oNzQyMCksdT1uKDg1MDUpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDc0MjA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4sdSxsLGEsaSl7aWYoMD09PU9iamVjdC5rZXlzKHVbMV0pLmxlbmd0aCl7dC5oZWFkPWE7cmV0dXJufWZvcihsZXQgYyBpbiB1WzFdKXtsZXQgcztsZXQgZj11WzFdW2NdLGQ9ZlswXSxwPSgwLHIuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKGQpLGg9bnVsbCE9PWwmJnZvaWQgMCE9PWxbMV1bY10/bFsxXVtjXTpudWxsO2lmKG4pe2xldCByPW4ucGFyYWxsZWxSb3V0ZXMuZ2V0KGMpO2lmKHIpe2xldCBuO2xldCB1PShudWxsPT1pP3ZvaWQgMDppLmtpbmQpPT09ImF1dG8iJiZpLnN0YXR1cz09PW8uUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnJldXNhYmxlLGw9bmV3IE1hcChyKSxzPWwuZ2V0KHApO249bnVsbCE9PWg/e2xhenlEYXRhOm51bGwscnNjOmhbMl0scHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwsbG9hZGluZzpoWzNdLHBhcmFsbGVsUm91dGVzOm5ldyBNYXAobnVsbD09cz92b2lkIDA6cy5wYXJhbGxlbFJvdXRlcyksbGF6eURhdGFSZXNvbHZlZDohMX06dSYmcz97bGF6eURhdGE6cy5sYXp5RGF0YSxyc2M6cy5yc2MscHJlZmV0Y2hSc2M6cy5wcmVmZXRjaFJzYyxoZWFkOnMuaGVhZCxwcmVmZXRjaEhlYWQ6cy5wcmVmZXRjaEhlYWQscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcChzLnBhcmFsbGVsUm91dGVzKSxsYXp5RGF0YVJlc29sdmVkOnMubGF6eURhdGFSZXNvbHZlZCxsb2FkaW5nOnMubG9hZGluZ306e2xhenlEYXRhOm51bGwscnNjOm51bGwscHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcChudWxsPT1zP3ZvaWQgMDpzLnBhcmFsbGVsUm91dGVzKSxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6bnVsbH0sbC5zZXQocCxuKSxlKG4scyxmLGh8fG51bGwsYSxpKSx0LnBhcmFsbGVsUm91dGVzLnNldChjLGwpO2NvbnRpbnVlfX1pZihudWxsIT09aCl7bGV0IGU9aFsyXSx0PWhbM107cz17bGF6eURhdGE6bnVsbCxyc2M6ZSxwcmVmZXRjaFJzYzpudWxsLGhlYWQ6bnVsbCxwcmVmZXRjaEhlYWQ6bnVsbCxwYXJhbGxlbFJvdXRlczpuZXcgTWFwLGxhenlEYXRhUmVzb2x2ZWQ6ITEsbG9hZGluZzp0fX1lbHNlIHM9e2xhenlEYXRhOm51bGwscnNjOm51bGwscHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcCxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6bnVsbH07bGV0IHk9dC5wYXJhbGxlbFJvdXRlcy5nZXQoYyk7eT95LnNldChwLHMpOnQucGFyYWxsZWxSb3V0ZXMuc2V0KGMsbmV3IE1hcChbW3Asc11dKSksZShzLHZvaWQgMCxmLGgsYSxpKX19fX0pO2xldCByPW4oODUwNSksbz1uKDQ2NzMpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDQ1MTA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImhhbmRsZU11dGFibGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oNTQxMCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdm9pZCAwIT09ZX1mdW5jdGlvbiB1KGUsdCl7dmFyIG4sdSxsO2xldCBhPW51bGw9PSh1PXQuc2hvdWxkU2Nyb2xsKXx8dSxpPWUubmV4dFVybDtpZihvKHQucGF0Y2hlZFRyZWUpKXtsZXQgbj0oMCxyLmNvbXB1dGVDaGFuZ2VkUGF0aCkoZS50cmVlLHQucGF0Y2hlZFRyZWUpO24/aT1uOml8fChpPWUuY2Fub25pY2FsVXJsKX1yZXR1cm57YnVpbGRJZDplLmJ1aWxkSWQsY2Fub25pY2FsVXJsOm8odC5jYW5vbmljYWxVcmwpP3QuY2Fub25pY2FsVXJsPT09ZS5jYW5vbmljYWxVcmw/ZS5jYW5vbmljYWxVcmw6dC5jYW5vbmljYWxVcmw6ZS5jYW5vbmljYWxVcmwscHVzaFJlZjp7cGVuZGluZ1B1c2g6byh0LnBlbmRpbmdQdXNoKT90LnBlbmRpbmdQdXNoOmUucHVzaFJlZi5wZW5kaW5nUHVzaCxtcGFOYXZpZ2F0aW9uOm8odC5tcGFOYXZpZ2F0aW9uKT90Lm1wYU5hdmlnYXRpb246ZS5wdXNoUmVmLm1wYU5hdmlnYXRpb24scHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6byh0LnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlKT90LnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlOmUucHVzaFJlZi5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZX0sZm9jdXNBbmRTY3JvbGxSZWY6e2FwcGx5OiEhYSYmKCEhbyhudWxsPT10P3ZvaWQgMDp0LnNjcm9sbGFibGVTZWdtZW50cyl8fGUuZm9jdXNBbmRTY3JvbGxSZWYuYXBwbHkpLG9ubHlIYXNoQ2hhbmdlOiEhdC5oYXNoRnJhZ21lbnQmJmUuY2Fub25pY2FsVXJsLnNwbGl0KCIjIiwxKVswXT09PShudWxsPT0obj10LmNhbm9uaWNhbFVybCk/dm9pZCAwOm4uc3BsaXQoIiMiLDEpWzBdKSxoYXNoRnJhZ21lbnQ6YT90Lmhhc2hGcmFnbWVudCYmIiIhPT10Lmhhc2hGcmFnbWVudD9kZWNvZGVVUklDb21wb25lbnQodC5oYXNoRnJhZ21lbnQuc2xpY2UoMSkpOmUuZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50Om51bGwsc2VnbWVudFBhdGhzOmE/bnVsbCE9KGw9bnVsbD09dD92b2lkIDA6dC5zY3JvbGxhYmxlU2VnbWVudHMpP2w6ZS5mb2N1c0FuZFNjcm9sbFJlZi5zZWdtZW50UGF0aHM6W119LGNhY2hlOnQuY2FjaGU/dC5jYWNoZTplLmNhY2hlLHByZWZldGNoQ2FjaGU6dC5wcmVmZXRjaENhY2hlP3QucHJlZmV0Y2hDYWNoZTplLnByZWZldGNoQ2FjaGUsdHJlZTpvKHQucGF0Y2hlZFRyZWUpP3QucGF0Y2hlZFRyZWU6ZS50cmVlLG5leHRVcmw6aX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNzgzMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGFuZGxlU2VnbWVudE1pc21hdGNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDU5NjcpO2Z1bmN0aW9uIG8oZSx0LG4pe3JldHVybigwLHIuaGFuZGxlRXh0ZXJuYWxVcmwpKGUse30sZS5jYW5vbmljYWxVcmwsITApfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDcwNTg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQsbixvKXtsZXQgdT1vLmxlbmd0aDw9MixbbCxhXT1vLGk9KDAsci5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoYSksYz1uLnBhcmFsbGVsUm91dGVzLmdldChsKTtpZighYylyZXR1cm47bGV0IHM9dC5wYXJhbGxlbFJvdXRlcy5nZXQobCk7aWYocyYmcyE9PWN8fChzPW5ldyBNYXAoYyksdC5wYXJhbGxlbFJvdXRlcy5zZXQobCxzKSksdSl7cy5kZWxldGUoaSk7cmV0dXJufWxldCBmPWMuZ2V0KGkpLGQ9cy5nZXQoaSk7ZCYmZiYmKGQ9PT1mJiYoZD17bGF6eURhdGE6ZC5sYXp5RGF0YSxyc2M6ZC5yc2MscHJlZmV0Y2hSc2M6ZC5wcmVmZXRjaFJzYyxoZWFkOmQuaGVhZCxwcmVmZXRjaEhlYWQ6ZC5wcmVmZXRjaEhlYWQscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcChkLnBhcmFsbGVsUm91dGVzKSxsYXp5RGF0YVJlc29sdmVkOmQubGF6eURhdGFSZXNvbHZlZH0scy5zZXQoaSxkKSksZShkLGYsby5zbGljZSgyKSkpfX19KTtsZXQgcj1uKDg1MDUpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDQzNzc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oODUwNSk7ZnVuY3Rpb24gbyhlLHQsbil7Zm9yKGxldCBvIGluIG5bMV0pe2xldCB1PW5bMV1bb11bMF0sbD0oMCxyLmNyZWF0ZVJvdXRlckNhY2hlS2V5KSh1KSxhPXQucGFyYWxsZWxSb3V0ZXMuZ2V0KG8pO2lmKGEpe2xldCB0PW5ldyBNYXAoYSk7dC5kZWxldGUobCksZS5wYXJhbGxlbFJvdXRlcy5zZXQobyx0KX19fSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDMyMzc6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQsbil7bGV0IHI9dFswXSxvPW5bMF07aWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShvKSl7aWYoclswXSE9PW9bMF18fHJbMl0hPT1vWzJdKXJldHVybiEwfWVsc2UgaWYociE9PW8pcmV0dXJuITA7aWYodFs0XSlyZXR1cm4hbls0XTtpZihuWzRdKXJldHVybiEwO2xldCB1PU9iamVjdC52YWx1ZXModFsxXSlbMF0sbD1PYmplY3QudmFsdWVzKG5bMV0pWzBdO3JldHVybiF1fHwhbHx8ZSh1LGwpfX19KSwoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw2MTE4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHthYm9ydFRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gY30sbGlzdGVuRm9yRHluYW1pY1JlcXVlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLGEsYyxzKXtsZXQgZj1uWzFdLGQ9YVsxXSxwPWNbMV0saD10LnBhcmFsbGVsUm91dGVzLHk9bmV3IE1hcChoKSxfPXt9LHY9bnVsbDtmb3IobGV0IHQgaW4gZCl7bGV0IG47bGV0IGE9ZFt0XSxjPWZbdF0sYj1oLmdldCh0KSxnPXBbdF0sbT1hWzBdLFI9KDAsdS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkobSksUD12b2lkIDAhPT1jP2NbMF06dm9pZCAwLGo9dm9pZCAwIT09Yj9iLmdldChSKTp2b2lkIDA7aWYobnVsbCE9PShuPW09PT1yLlBBR0VfU0VHTUVOVF9LRVk/bChhLHZvaWQgMCE9PWc/ZzpudWxsLHMpOm09PT1yLkRFRkFVTFRfU0VHTUVOVF9LRVk/dm9pZCAwIT09Yz97cm91dGU6Yyxub2RlOm51bGwsY2hpbGRyZW46bnVsbH06bChhLHZvaWQgMCE9PWc/ZzpudWxsLHMpOnZvaWQgMCE9PVAmJigwLG8ubWF0Y2hTZWdtZW50KShtLFApJiZ2b2lkIDAhPT1qJiZ2b2lkIDAhPT1jP251bGwhPWc/ZShqLGMsYSxnLHMpOmZ1bmN0aW9uKGUpe2xldCB0PWkoZSxudWxsLG51bGwpO3JldHVybntyb3V0ZTplLG5vZGU6dCxjaGlsZHJlbjpudWxsfX0oYSk6bChhLHZvaWQgMCE9PWc/ZzpudWxsLHMpKSl7bnVsbD09PXYmJih2PW5ldyBNYXApLHYuc2V0KHQsbik7bGV0IGU9bi5ub2RlO2lmKG51bGwhPT1lKXtsZXQgbj1uZXcgTWFwKGIpO24uc2V0KFIsZSkseS5zZXQodCxuKX1fW3RdPW4ucm91dGV9ZWxzZSBfW3RdPWF9aWYobnVsbD09PXYpcmV0dXJuIG51bGw7bGV0IGI9e2xhenlEYXRhOm51bGwscnNjOnQucnNjLHByZWZldGNoUnNjOnQucHJlZmV0Y2hSc2MsaGVhZDp0LmhlYWQscHJlZmV0Y2hIZWFkOnQucHJlZmV0Y2hIZWFkLGxvYWRpbmc6dC5sb2FkaW5nLHBhcmFsbGVsUm91dGVzOnksbGF6eURhdGFSZXNvbHZlZDohMX07cmV0dXJue3JvdXRlOmZ1bmN0aW9uKGUsdCl7bGV0IG49W2VbMF0sdF07cmV0dXJuIDIgaW4gZSYmKG5bMl09ZVsyXSksMyBpbiBlJiYoblszXT1lWzNdKSw0IGluIGUmJihuWzRdPWVbNF0pLG59KGEsXyksbm9kZTpiLGNoaWxkcmVuOnZ9fX0sdXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtsZXQgcj1uWzFdLG89dC5wYXJhbGxlbFJvdXRlcyxsPW5ldyBNYXAobyk7Zm9yKGxldCB0IGluIHIpe2xldCBuPXJbdF0sYT1uWzBdLGk9KDAsdS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoYSksYz1vLmdldCh0KTtpZih2b2lkIDAhPT1jKXtsZXQgcj1jLmdldChpKTtpZih2b2lkIDAhPT1yKXtsZXQgbz1lKHIsbiksdT1uZXcgTWFwKGMpO3Uuc2V0KGksbyksbC5zZXQodCx1KX19fWxldCBhPXQucnNjLGk9ZChhKSYmInBlbmRpbmciPT09YS5zdGF0dXM7cmV0dXJue2xhenlEYXRhOm51bGwscnNjOmEsaGVhZDp0LmhlYWQscHJlZmV0Y2hIZWFkOmk/dC5wcmVmZXRjaEhlYWQ6bnVsbCxwcmVmZXRjaFJzYzppP3QucHJlZmV0Y2hSc2M6bnVsbCxsb2FkaW5nOmk/dC5sb2FkaW5nOm51bGwscGFyYWxsZWxSb3V0ZXM6bCxsYXp5RGF0YVJlc29sdmVkOiExfX19fSk7bGV0IHI9big0NTQxKSxvPW4oNjAxNSksdT1uKDg1MDUpO2Z1bmN0aW9uIGwoZSx0LG4pe2xldCByPWkoZSx0LG4pO3JldHVybntyb3V0ZTplLG5vZGU6cixjaGlsZHJlbjpudWxsfX1mdW5jdGlvbiBhKGUsdCl7dC50aGVuKHQ9Pntmb3IobGV0IG4gb2YgdFswXSl7bGV0IHQ9bi5zbGljZSgwLC0zKSxyPW5bbi5sZW5ndGgtM10sbD1uW24ubGVuZ3RoLTJdLGE9bltuLmxlbmd0aC0xXTsic3RyaW5nIiE9dHlwZW9mIHQmJmZ1bmN0aW9uKGUsdCxuLHIsbCl7bGV0IGE9ZTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrPTIpe2xldCBuPXRbZV0scj10W2UrMV0sdT1hLmNoaWxkcmVuO2lmKG51bGwhPT11KXtsZXQgZT11LmdldChuKTtpZih2b2lkIDAhPT1lKXtsZXQgdD1lLnJvdXRlWzBdO2lmKCgwLG8ubWF0Y2hTZWdtZW50KShyLHQpKXthPWU7Y29udGludWV9fX1yZXR1cm59IWZ1bmN0aW9uIGUodCxuLHIsbCl7bGV0IGE9dC5jaGlsZHJlbixpPXQubm9kZTtpZihudWxsPT09YSl7bnVsbCE9PWkmJihmdW5jdGlvbiBlKHQsbixyLGwsYSl7bGV0IGk9blsxXSxjPXJbMV0sZj1sWzFdLHA9dC5wYXJhbGxlbFJvdXRlcztmb3IobGV0IHQgaW4gaSl7bGV0IG49aVt0XSxyPWNbdF0sbD1mW3RdLGQ9cC5nZXQodCksaD1uWzBdLHk9KDAsdS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoaCksXz12b2lkIDAhPT1kP2QuZ2V0KHkpOnZvaWQgMDt2b2lkIDAhPT1fJiYodm9pZCAwIT09ciYmKDAsby5tYXRjaFNlZ21lbnQpKGgsclswXSkmJm51bGwhPWw/ZShfLG4scixsLGEpOnMobixfLG51bGwpKX1sZXQgaD10LnJzYyx5PWxbMl07bnVsbD09PWg/dC5yc2M9eTpkKGgpJiZoLnJlc29sdmUoeSk7bGV0IF89dC5oZWFkO2QoXykmJl8ucmVzb2x2ZShhKX0oaSx0LnJvdXRlLG4scixsKSx0Lm5vZGU9bnVsbCk7cmV0dXJufWxldCBjPW5bMV0sZj1yWzFdO2ZvcihsZXQgdCBpbiBuKXtsZXQgbj1jW3RdLHI9Zlt0XSx1PWEuZ2V0KHQpO2lmKHZvaWQgMCE9PXUpe2xldCB0PXUucm91dGVbMF07aWYoKDAsby5tYXRjaFNlZ21lbnQpKG5bMF0sdCkmJm51bGwhPXIpcmV0dXJuIGUodSxuLHIsbCl9fX0oYSxuLHIsbCl9KGUsdCxyLGwsYSl9YyhlLG51bGwpfSx0PT57YyhlLHQpfSl9ZnVuY3Rpb24gaShlLHQsbil7bGV0IHI9ZVsxXSxvPW51bGwhPT10P3RbMV06bnVsbCxsPW5ldyBNYXA7Zm9yKGxldCBlIGluIHIpe2xldCB0PXJbZV0sYT1udWxsIT09bz9vW2VdOm51bGwsYz10WzBdLHM9KDAsdS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoYyksZj1pKHQsdm9pZCAwPT09YT9udWxsOmEsbiksZD1uZXcgTWFwO2Quc2V0KHMsZiksbC5zZXQoZSxkKX1sZXQgYT0wPT09bC5zaXplLGM9bnVsbCE9PXQ/dFsyXTpudWxsLHM9bnVsbCE9PXQ/dFszXTpudWxsO3JldHVybntsYXp5RGF0YTpudWxsLHBhcmFsbGVsUm91dGVzOmwscHJlZmV0Y2hSc2M6dm9pZCAwIT09Yz9jOm51bGwscHJlZmV0Y2hIZWFkOmE/bjpudWxsLGxvYWRpbmc6dm9pZCAwIT09cz9zOm51bGwscnNjOnAoKSxoZWFkOmE/cCgpOm51bGwsbGF6eURhdGFSZXNvbHZlZDohMX19ZnVuY3Rpb24gYyhlLHQpe2xldCBuPWUubm9kZTtpZihudWxsPT09bilyZXR1cm47bGV0IHI9ZS5jaGlsZHJlbjtpZihudWxsPT09cilzKGUucm91dGUsbix0KTtlbHNlIGZvcihsZXQgZSBvZiByLnZhbHVlcygpKWMoZSx0KTtlLm5vZGU9bnVsbH1mdW5jdGlvbiBzKGUsdCxuKXtsZXQgcj1lWzFdLG89dC5wYXJhbGxlbFJvdXRlcztmb3IobGV0IGUgaW4gcil7bGV0IHQ9cltlXSxsPW8uZ2V0KGUpO2lmKHZvaWQgMD09PWwpY29udGludWU7bGV0IGE9dFswXSxpPSgwLHUuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKGEpLGM9bC5nZXQoaSk7dm9pZCAwIT09YyYmcyh0LGMsbil9bGV0IGw9dC5yc2M7ZChsKSYmKG51bGw9PT1uP2wucmVzb2x2ZShudWxsKTpsLnJlamVjdChuKSk7bGV0IGE9dC5oZWFkO2QoYSkmJmEucmVzb2x2ZShudWxsKX1sZXQgZj1TeW1ib2woKTtmdW5jdGlvbiBkKGUpe3JldHVybiBlJiZlLnRhZz09PWZ9ZnVuY3Rpb24gcCgpe2xldCBlLHQ7bGV0IG49bmV3IFByb21pc2UoKG4scik9PntlPW4sdD1yfSk7cmV0dXJuIG4uc3RhdHVzPSJwZW5kaW5nIixuLnJlc29sdmU9dD0+eyJwZW5kaW5nIj09PW4uc3RhdHVzJiYobi5zdGF0dXM9ImZ1bGZpbGxlZCIsbi52YWx1ZT10LGUodCkpfSxuLnJlamVjdD1lPT57InBlbmRpbmciPT09bi5zdGF0dXMmJihuLnN0YXR1cz0icmVqZWN0ZWQiLG4ucmVhc29uPWUsdChlKSl9LG4udGFnPWYsbn0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwzMDU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse2NyZWF0ZVByZWZldGNoQ2FjaGVFbnRyeUZvckluaXRpYWxMb2FkOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHBydW5lUHJlZmV0Y2hDYWNoZTpmdW5jdGlvbigpe3JldHVybiBmfX0pO2xldCByPW4oMzQ1Niksbz1uKDQ4NDgpLHU9big0NjczKSxsPW4oNDgxOSk7ZnVuY3Rpb24gYShlLHQpe2xldCBuPSgwLHIuY3JlYXRlSHJlZkZyb21VcmwpKGUsITEpO3JldHVybiB0P3QrIiUiK246bn1mdW5jdGlvbiBpKGUpe2xldCB0LHt1cmw6bixuZXh0VXJsOnIsdHJlZTpvLGJ1aWxkSWQ6bCxwcmVmZXRjaENhY2hlOmksa2luZDpjfT1lLGY9YShuLHIpLGQ9aS5nZXQoZik7aWYoZCl0PWQ7ZWxzZXtsZXQgZT1hKG4pLHI9aS5nZXQoZSk7ciYmKHQ9cil9cmV0dXJuIHQ/KHQuc3RhdHVzPWgodCksdC5raW5kIT09dS5QcmVmZXRjaEtpbmQuRlVMTCYmYz09PXUuUHJlZmV0Y2hLaW5kLkZVTEwpP3Moe3RyZWU6byx1cmw6bixidWlsZElkOmwsbmV4dFVybDpyLHByZWZldGNoQ2FjaGU6aSxraW5kOm51bGwhPWM/Yzp1LlByZWZldGNoS2luZC5URU1QT1JBUll9KTooYyYmdC5raW5kPT09dS5QcmVmZXRjaEtpbmQuVEVNUE9SQVJZJiYodC5raW5kPWMpLHQpOnMoe3RyZWU6byx1cmw6bixidWlsZElkOmwsbmV4dFVybDpyLHByZWZldGNoQ2FjaGU6aSxraW5kOmN8fHUuUHJlZmV0Y2hLaW5kLlRFTVBPUkFSWX0pfWZ1bmN0aW9uIGMoZSl7bGV0e25leHRVcmw6dCx0cmVlOm4scHJlZmV0Y2hDYWNoZTpyLHVybDpvLGtpbmQ6bCxkYXRhOml9PWUsWywsLGNdPWkscz1jP2Eobyx0KTphKG8pLGY9e3RyZWVBdFRpbWVPZlByZWZldGNoOm4sZGF0YTpQcm9taXNlLnJlc29sdmUoaSksa2luZDpsLHByZWZldGNoVGltZTpEYXRlLm5vdygpLGxhc3RVc2VkVGltZTpEYXRlLm5vdygpLGtleTpzLHN0YXR1czp1LlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5mcmVzaH07cmV0dXJuIHIuc2V0KHMsZiksZn1mdW5jdGlvbiBzKGUpe2xldHt1cmw6dCxraW5kOm4sdHJlZTpyLG5leHRVcmw6aSxidWlsZElkOmMscHJlZmV0Y2hDYWNoZTpzfT1lLGY9YSh0KSxkPWwucHJlZmV0Y2hRdWV1ZS5lbnF1ZXVlKCgpPT4oMCxvLmZldGNoU2VydmVyUmVzcG9uc2UpKHQscixpLGMsbikudGhlbihlPT57bGV0WywsLG5dPWU7cmV0dXJuIG4mJmZ1bmN0aW9uKGUpe2xldHt1cmw6dCxuZXh0VXJsOm4scHJlZmV0Y2hDYWNoZTpyfT1lLG89YSh0KSx1PXIuZ2V0KG8pO2lmKCF1KXJldHVybjtsZXQgbD1hKHQsbik7ci5zZXQobCx1KSxyLmRlbGV0ZShvKX0oe3VybDp0LG5leHRVcmw6aSxwcmVmZXRjaENhY2hlOnN9KSxlfSkpLHA9e3RyZWVBdFRpbWVPZlByZWZldGNoOnIsZGF0YTpkLGtpbmQ6bixwcmVmZXRjaFRpbWU6RGF0ZS5ub3coKSxsYXN0VXNlZFRpbWU6bnVsbCxrZXk6ZixzdGF0dXM6dS5QcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuZnJlc2h9O3JldHVybiBzLnNldChmLHApLHB9ZnVuY3Rpb24gZihlKXtmb3IobGV0W3Qsbl1vZiBlKWgobik9PT11LlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5leHBpcmVkJiZlLmRlbGV0ZSh0KX1sZXQgZD0xZTMqTnVtYmVyKCIzMCIpLHA9MWUzKk51bWJlcigiMzAwIik7ZnVuY3Rpb24gaChlKXtsZXR7a2luZDp0LHByZWZldGNoVGltZTpuLGxhc3RVc2VkVGltZTpyfT1lO3JldHVybiBEYXRlLm5vdygpPChudWxsIT1yP3I6bikrZD9yP3UuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnJldXNhYmxlOnUuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmZyZXNoOiJhdXRvIj09PXQmJkRhdGUubm93KCk8bitwP3UuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnN0YWxlOiJmdWxsIj09PXQmJkRhdGUubm93KCk8bitwP3UuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnJldXNhYmxlOnUuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmV4cGlyZWR9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNDUyOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmFzdFJlZnJlc2hSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KSxuKDQ4NDgpLG4oMzQ1NiksbigxOTM1KSxuKDMyMzcpLG4oNTk2Nyksbig0NTEwKSxuKDIzNTYpLG4oMjg0Niksbig3ODMxKSxuKDgwNzcpO2xldCByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9OygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDkzMjA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbmRIZWFkSW5DYWNoZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7bGV0IHI9big4NTA1KTtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLG8pe2lmKDA9PT1PYmplY3Qua2V5cyhuKS5sZW5ndGgpcmV0dXJuW3Qsb107Zm9yKGxldCB1IGluIG4pe2xldFtsLGFdPW5bdV0saT10LnBhcmFsbGVsUm91dGVzLmdldCh1KTtpZighaSljb250aW51ZTtsZXQgYz0oMCxyLmNyZWF0ZVJvdXRlckNhY2hlS2V5KShsKSxzPWkuZ2V0KGMpO2lmKCFzKWNvbnRpbnVlO2xldCBmPWUocyxhLG8rIi8iK2MpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9KGUsdCwiIil9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMzE3MTpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2VbMV06ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldFNlZ21lbnRWYWx1ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59fSksKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sODA3NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0KXtsZXRbbixvXT10O2lmKEFycmF5LmlzQXJyYXkobikmJigiZGkiPT09blsyXXx8ImNpIj09PW5bMl0pfHwic3RyaW5nIj09dHlwZW9mIG4mJigwLHIuaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgpKG4pKXJldHVybiEwO2lmKG8pe2ZvcihsZXQgdCBpbiBvKWlmKGUob1t0XSkpcmV0dXJuITB9cmV0dXJuITF9fX0pO2xldCByPW4oMTE4Mik7KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNTk2NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7aGFuZGxlRXh0ZXJuYWxVcmw6ZnVuY3Rpb24oKXtyZXR1cm4gX30sbmF2aWdhdGVSZWR1Y2VyOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9fSksbig0ODQ4KTtsZXQgcj1uKDM0NTYpLG89big3MDU4KSx1PW4oMTkzNSksbD1uKDM3MjgpLGE9bigzMjM3KSxpPW4oNDY3MyksYz1uKDQ1MTApLHM9bigyMzU2KSxmPW4oNDgxOSksZD1uKDI4NDYpLHA9big0NTQxKTtuKDYxMTgpO2xldCBoPW4oMzA1KSx5PW4oNTU1Nik7ZnVuY3Rpb24gXyhlLHQsbixyKXtyZXR1cm4gdC5tcGFOYXZpZ2F0aW9uPSEwLHQuY2Fub25pY2FsVXJsPW4sdC5wZW5kaW5nUHVzaD1yLHQuc2Nyb2xsYWJsZVNlZ21lbnRzPXZvaWQgMCwoMCxjLmhhbmRsZU11dGFibGUpKGUsdCl9ZnVuY3Rpb24gdihlKXtsZXQgdD1bXSxbbixyXT1lO2lmKDA9PT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpcmV0dXJuW1tuXV07Zm9yKGxldFtlLG9db2YgT2JqZWN0LmVudHJpZXMocikpZm9yKGxldCByIG9mIHYobykpIiI9PT1uP3QucHVzaChbZSwuLi5yXSk6dC5wdXNoKFtuLGUsLi4ucl0pO3JldHVybiB0fWxldCBiPWZ1bmN0aW9uKGUsdCl7bGV0e3VybDpuLGlzRXh0ZXJuYWxVcmw6YixuYXZpZ2F0ZVR5cGU6ZyxzaG91bGRTY3JvbGw6bX09dCxSPXt9LHtoYXNoOlB9PW4saj0oMCxyLmNyZWF0ZUhyZWZGcm9tVXJsKShuKSxPPSJwdXNoIj09PWc7aWYoKDAsaC5wcnVuZVByZWZldGNoQ2FjaGUpKGUucHJlZmV0Y2hDYWNoZSksUi5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZT0hMSxiKXJldHVybiBfKGUsUixuLnRvU3RyaW5nKCksTyk7bGV0IEU9KDAsaC5nZXRPckNyZWF0ZVByZWZldGNoQ2FjaGVFbnRyeSkoe3VybDpuLG5leHRVcmw6ZS5uZXh0VXJsLHRyZWU6ZS50cmVlLGJ1aWxkSWQ6ZS5idWlsZElkLHByZWZldGNoQ2FjaGU6ZS5wcmVmZXRjaENhY2hlfSkse3RyZWVBdFRpbWVPZlByZWZldGNoOlMsZGF0YTp3fT1FO3JldHVybiBmLnByZWZldGNoUXVldWUuYnVtcCh3KSx3LnRoZW4odD0+e2xldFtuLGZdPXQsaD0hMTtpZihFLmxhc3RVc2VkVGltZXx8KEUubGFzdFVzZWRUaW1lPURhdGUubm93KCksaD0hMCksInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBfKGUsUixuLE8pO2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX25leHQtcGFnZS1yZWRpcmVjdCIpKXJldHVybiBfKGUsUixqLE8pO2xldCBiPWUudHJlZSxnPWUuY2FjaGUsdz1bXTtmb3IobGV0IHQgb2Ygbil7bGV0IG49dC5zbGljZSgwLC00KSxyPXQuc2xpY2UoLTMpWzBdLGM9WyIiLC4uLm5dLGY9KDAsdS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUpKGMsYixyLGopO2lmKG51bGw9PT1mJiYoZj0oMCx1LmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSkoYyxTLHIsaikpLG51bGwhPT1mKXtpZigoMCxhLmlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCkoYixmKSlyZXR1cm4gXyhlLFIsaixPKTtsZXQgdT0oMCxkLmNyZWF0ZUVtcHR5Q2FjaGVOb2RlKSgpLG09ITE7Zm9yKGxldCBlIG9mKEUuc3RhdHVzIT09aS5QcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuc3RhbGV8fGg/bT0oMCxzLmFwcGx5RmxpZ2h0RGF0YSkoZyx1LHQsRSk6KG09ZnVuY3Rpb24oZSx0LG4scil7bGV0IG89ITE7Zm9yKGxldCB1IG9mKGUucnNjPXQucnNjLGUucHJlZmV0Y2hSc2M9dC5wcmVmZXRjaFJzYyxlLmxvYWRpbmc9dC5sb2FkaW5nLGUucGFyYWxsZWxSb3V0ZXM9bmV3IE1hcCh0LnBhcmFsbGVsUm91dGVzKSx2KHIpLm1hcChlPT5bLi4ubiwuLi5lXSkpKSgwLHkuY2xlYXJDYWNoZU5vZGVEYXRhRm9yU2VnbWVudFBhdGgpKGUsdCx1KSxvPSEwO3JldHVybiBvfSh1LGcsbixyKSxFLmxhc3RVc2VkVGltZT1EYXRlLm5vdygpKSwoMCxsLnNob3VsZEhhcmROYXZpZ2F0ZSkoYyxiKT8odS5yc2M9Zy5yc2MsdS5wcmVmZXRjaFJzYz1nLnByZWZldGNoUnNjLCgwLG8uaW52YWxpZGF0ZUNhY2hlQmVsb3dGbGlnaHRTZWdtZW50UGF0aCkodSxnLG4pLFIuY2FjaGU9dSk6bSYmKFIuY2FjaGU9dSxnPXUpLGI9Zix2KHIpKSl7bGV0IHQ9Wy4uLm4sLi4uZV07dFt0Lmxlbmd0aC0xXSE9PXAuREVGQVVMVF9TRUdNRU5UX0tFWSYmdy5wdXNoKHQpfX19cmV0dXJuIFIucGF0Y2hlZFRyZWU9YixSLmNhbm9uaWNhbFVybD1mPygwLHIuY3JlYXRlSHJlZkZyb21VcmwpKGYpOmosUi5wZW5kaW5nUHVzaD1PLFIuc2Nyb2xsYWJsZVNlZ21lbnRzPXcsUi5oYXNoRnJhZ21lbnQ9UCxSLnNob3VsZFNjcm9sbD1tLCgwLGMuaGFuZGxlTXV0YWJsZSkoZSxSKX0sKCk9PmUpfTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw0ODE5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtwcmVmZXRjaFF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHByZWZldGNoUmVkdWNlcjpmdW5jdGlvbigpe3JldHVybiBhfX0pO2xldCByPW4oNjg2Niksbz1uKDk3NDQpLHU9bigzMDUpLGw9bmV3IG8uUHJvbWlzZVF1ZXVlKDUpO2Z1bmN0aW9uIGEoZSx0KXsoMCx1LnBydW5lUHJlZmV0Y2hDYWNoZSkoZS5wcmVmZXRjaENhY2hlKTtsZXR7dXJsOm59PXQ7cmV0dXJuIG4uc2VhcmNoUGFyYW1zLmRlbGV0ZShyLk5FWFRfUlNDX1VOSU9OX1FVRVJZKSwoMCx1LmdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5KSh7dXJsOm4sbmV4dFVybDplLm5leHRVcmwscHJlZmV0Y2hDYWNoZTplLnByZWZldGNoQ2FjaGUsa2luZDp0LmtpbmQsdHJlZTplLnRyZWUsYnVpbGRJZDplLmJ1aWxkSWR9KSxlfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDk2MDE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlZnJlc2hSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH19KTtsZXQgcj1uKDQ4NDgpLG89bigzNDU2KSx1PW4oMTkzNSksbD1uKDMyMzcpLGE9big1OTY3KSxpPW4oNDUxMCksYz1uKDc0MjApLHM9bigyODQ2KSxmPW4oNzgzMSksZD1uKDgwNzcpLHA9bigyMzIpO2Z1bmN0aW9uIGgoZSx0KXtsZXR7b3JpZ2luOm59PXQsaD17fSx5PWUuY2Fub25pY2FsVXJsLF89ZS50cmVlO2gucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU9ITE7bGV0IHY9KDAscy5jcmVhdGVFbXB0eUNhY2hlTm9kZSkoKSxiPSgwLGQuaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlKShlLnRyZWUpO3JldHVybiB2LmxhenlEYXRhPSgwLHIuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkobmV3IFVSTCh5LG4pLFtfWzBdLF9bMV0sX1syXSwicmVmZXRjaCJdLGI/ZS5uZXh0VXJsOm51bGwsZS5idWlsZElkKSx2LmxhenlEYXRhLnRoZW4oYXN5bmMgbj0+e2xldFtyLHNdPW47aWYoInN0cmluZyI9PXR5cGVvZiByKXJldHVybigwLGEuaGFuZGxlRXh0ZXJuYWxVcmwpKGUsaCxyLGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7Zm9yKGxldCBuIG9mKHYubGF6eURhdGE9bnVsbCxyKSl7aWYoMyE9PW4ubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiUkVGUkVTSCBGQUlMRUQiKSxlO2xldFtyXT1uLGk9KDAsdS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUpKFsiIl0sXyxyLGUuY2Fub25pY2FsVXJsKTtpZihudWxsPT09aSlyZXR1cm4oMCxmLmhhbmRsZVNlZ21lbnRNaXNtYXRjaCkoZSx0LHIpO2lmKCgwLGwuaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KShfLGkpKXJldHVybigwLGEuaGFuZGxlRXh0ZXJuYWxVcmwpKGUsaCx5LGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7bGV0IGQ9cz8oMCxvLmNyZWF0ZUhyZWZGcm9tVXJsKShzKTp2b2lkIDA7cyYmKGguY2Fub25pY2FsVXJsPWQpO2xldFtnLG1dPW4uc2xpY2UoLTIpO2lmKG51bGwhPT1nKXtsZXQgZT1nWzJdO3YucnNjPWUsdi5wcmVmZXRjaFJzYz1udWxsLCgwLGMuZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQpKHYsdm9pZCAwLHIsZyxtKSxoLnByZWZldGNoQ2FjaGU9bmV3IE1hcH1hd2FpdCAoMCxwLnJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHMpKHtzdGF0ZTplLHVwZGF0ZWRUcmVlOmksdXBkYXRlZENhY2hlOnYsaW5jbHVkZU5leHRVcmw6YixjYW5vbmljYWxVcmw6aC5jYW5vbmljYWxVcmx8fGUuY2Fub25pY2FsVXJsfSksaC5jYWNoZT12LGgucGF0Y2hlZFRyZWU9aSxoLmNhbm9uaWNhbFVybD15LF89aX1yZXR1cm4oMCxpLmhhbmRsZU11dGFibGUpKGUsaCl9LCgpPT5lKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw3Nzg0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyZXN0b3JlUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSk7bGV0IHI9bigzNDU2KSxvPW4oNTQxMCk7ZnVuY3Rpb24gdShlLHQpe3ZhciBuO2xldHt1cmw6dSx0cmVlOmx9PXQsYT0oMCxyLmNyZWF0ZUhyZWZGcm9tVXJsKSh1KSxpPWx8fGUudHJlZSxjPWUuY2FjaGU7cmV0dXJue2J1aWxkSWQ6ZS5idWlsZElkLGNhbm9uaWNhbFVybDphLHB1c2hSZWY6e3BlbmRpbmdQdXNoOiExLG1wYU5hdmlnYXRpb246ITEscHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6ITB9LGZvY3VzQW5kU2Nyb2xsUmVmOmUuZm9jdXNBbmRTY3JvbGxSZWYsY2FjaGU6YyxwcmVmZXRjaENhY2hlOmUucHJlZmV0Y2hDYWNoZSx0cmVlOmksbmV4dFVybDpudWxsIT0obj0oMCxvLmV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKShpKSk/bjp1LnBhdGhuYW1lfX1uKDYxMTgpLCgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDM3MjI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNlcnZlckFjdGlvblJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtfX0pO2xldCByPW4oMzA3OSksbz1uKDY4NjYpLHU9bigxNjM0KSxsPW4oMzQ1NiksYT1uKDU5NjcpLGk9bigxOTM1KSxjPW4oMzIzNykscz1uKDQ1MTApLGY9big3NDIwKSxkPW4oMjg0NikscD1uKDgwNzcpLGg9big3ODMxKSx5PW4oMjMyKSxfPW4oMTMxMSkse2NyZWF0ZUZyb21GZXRjaDp2LGVuY29kZVJlcGx5OmJ9PW4oNjY3MSk7YXN5bmMgZnVuY3Rpb24gZyhlLHQsbil7bGV0IGwse2FjdGlvbklkOmEsYWN0aW9uQXJnczppfT1uLGM9YXdhaXQgYihpKSxzPWF3YWl0IGZldGNoKCIiLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6e0FjY2VwdDpvLlJTQ19DT05URU5UX1RZUEVfSEVBREVSLFtvLkFDVElPTl06YSxbby5ORVhUX1JPVVRFUl9TVEFURV9UUkVFXTooMCxfLnByZXBhcmVGbGlnaHRSb3V0ZXJTdGF0ZUZvclJlcXVlc3QpKGUudHJlZSksLi4udD97W28uTkVYVF9VUkxdOnR9Ont9fSxib2R5OmN9KSxmPXMuaGVhZGVycy5nZXQoIngtYWN0aW9uLXJlZGlyZWN0Iik7dHJ5e2xldCBlPUpTT04ucGFyc2Uocy5oZWFkZXJzLmdldCgieC1hY3Rpb24tcmV2YWxpZGF0ZWQiKXx8IltbXSwwLDBdIik7bD17cGF0aHM6ZVswXXx8W10sdGFnOiEhZVsxXSxjb29raWU6ZVsyXX19Y2F0Y2goZSl7bD17cGF0aHM6W10sdGFnOiExLGNvb2tpZTohMX19bGV0IGQ9Zj9uZXcgVVJMKCgwLHUuYWRkQmFzZVBhdGgpKGYpLG5ldyBVUkwoZS5jYW5vbmljYWxVcmwsd2luZG93LmxvY2F0aW9uLmhyZWYpKTp2b2lkIDA7aWYocy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik9PT1vLlJTQ19DT05URU5UX1RZUEVfSEVBREVSKXtsZXQgZT1hd2FpdCB2KFByb21pc2UucmVzb2x2ZShzKSx7Y2FsbFNlcnZlcjpyLmNhbGxTZXJ2ZXJ9KTtpZihmKXtsZXRbLHRdPW51bGwhPWU/ZTpbXTtyZXR1cm57YWN0aW9uRmxpZ2h0RGF0YTp0LHJlZGlyZWN0TG9jYXRpb246ZCxyZXZhbGlkYXRlZFBhcnRzOmx9fWxldFt0LFssbl1dPW51bGwhPWU/ZTpbXTtyZXR1cm57YWN0aW9uUmVzdWx0OnQsYWN0aW9uRmxpZ2h0RGF0YTpuLHJlZGlyZWN0TG9jYXRpb246ZCxyZXZhbGlkYXRlZFBhcnRzOmx9fXJldHVybntyZWRpcmVjdExvY2F0aW9uOmQscmV2YWxpZGF0ZWRQYXJ0czpsfX1mdW5jdGlvbiBtKGUsdCl7bGV0e3Jlc29sdmU6bixyZWplY3Q6cn09dCxvPXt9LHU9ZS5jYW5vbmljYWxVcmwsXz1lLnRyZWU7by5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZT0hMTtsZXQgdj1lLm5leHRVcmwmJigwLHAuaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlKShlLnRyZWUpP2UubmV4dFVybDpudWxsO3JldHVybiBvLmluRmxpZ2h0U2VydmVyQWN0aW9uPWcoZSx2LHQpLG8uaW5GbGlnaHRTZXJ2ZXJBY3Rpb24udGhlbihhc3luYyByPT57bGV0e2FjdGlvblJlc3VsdDpwLGFjdGlvbkZsaWdodERhdGE6YixyZWRpcmVjdExvY2F0aW9uOmd9PXI7aWYoZyYmKGUucHVzaFJlZi5wZW5kaW5nUHVzaD0hMCxvLnBlbmRpbmdQdXNoPSEwKSwhYilyZXR1cm4obihwKSxnKT8oMCxhLmhhbmRsZUV4dGVybmFsVXJsKShlLG8sZy5ocmVmLGUucHVzaFJlZi5wZW5kaW5nUHVzaCk6ZTtpZigic3RyaW5nIj09dHlwZW9mIGIpcmV0dXJuKDAsYS5oYW5kbGVFeHRlcm5hbFVybCkoZSxvLGIsZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtpZihvLmluRmxpZ2h0U2VydmVyQWN0aW9uPW51bGwsZyl7bGV0IGU9KDAsbC5jcmVhdGVIcmVmRnJvbVVybCkoZywhMSk7by5jYW5vbmljYWxVcmw9ZX1mb3IobGV0IG4gb2YgYil7aWYoMyE9PW4ubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiU0VSVkVSIEFDVElPTiBBUFBMWSBGQUlMRUQiKSxlO2xldFtyXT1uLHM9KDAsaS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUpKFsiIl0sXyxyLGc/KDAsbC5jcmVhdGVIcmVmRnJvbVVybCkoZyk6ZS5jYW5vbmljYWxVcmwpO2lmKG51bGw9PT1zKXJldHVybigwLGguaGFuZGxlU2VnbWVudE1pc21hdGNoKShlLHQscik7aWYoKDAsYy5pc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQpKF8scykpcmV0dXJuKDAsYS5oYW5kbGVFeHRlcm5hbFVybCkoZSxvLHUsZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtsZXRbcCxiXT1uLnNsaWNlKC0yKSxtPW51bGwhPT1wP3BbMl06bnVsbDtpZihudWxsIT09bSl7bGV0IHQ9KDAsZC5jcmVhdGVFbXB0eUNhY2hlTm9kZSkoKTt0LnJzYz1tLHQucHJlZmV0Y2hSc2M9bnVsbCwoMCxmLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKSh0LHZvaWQgMCxyLHAsYiksYXdhaXQgKDAseS5yZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzKSh7c3RhdGU6ZSx1cGRhdGVkVHJlZTpzLHVwZGF0ZWRDYWNoZTp0LGluY2x1ZGVOZXh0VXJsOiEhdixjYW5vbmljYWxVcmw6by5jYW5vbmljYWxVcmx8fGUuY2Fub25pY2FsVXJsfSksby5jYWNoZT10LG8ucHJlZmV0Y2hDYWNoZT1uZXcgTWFwfW8ucGF0Y2hlZFRyZWU9cyxfPXN9cmV0dXJuIG4ocCksKDAscy5oYW5kbGVNdXRhYmxlKShlLG8pfSx0PT4ocih0KSxlKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sODQ0ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2VydmVyUGF0Y2hSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn19KTtsZXQgcj1uKDM0NTYpLG89bigxOTM1KSx1PW4oMzIzNyksbD1uKDU5NjcpLGE9bigyMzU2KSxpPW4oNDUxMCksYz1uKDI4NDYpLHM9big3ODMxKTtmdW5jdGlvbiBmKGUsdCl7bGV0e3NlcnZlclJlc3BvbnNlOm59PXQsW2YsZF09bixwPXt9O2lmKHAucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU9ITEsInN0cmluZyI9PXR5cGVvZiBmKXJldHVybigwLGwuaGFuZGxlRXh0ZXJuYWxVcmwpKGUscCxmLGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7bGV0IGg9ZS50cmVlLHk9ZS5jYWNoZTtmb3IobGV0IG4gb2YgZil7bGV0IGk9bi5zbGljZSgwLC00KSxbZl09bi5zbGljZSgtMywtMiksXz0oMCxvLmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSkoWyIiLC4uLmldLGgsZixlLmNhbm9uaWNhbFVybCk7aWYobnVsbD09PV8pcmV0dXJuKDAscy5oYW5kbGVTZWdtZW50TWlzbWF0Y2gpKGUsdCxmKTtpZigoMCx1LmlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCkoaCxfKSlyZXR1cm4oMCxsLmhhbmRsZUV4dGVybmFsVXJsKShlLHAsZS5jYW5vbmljYWxVcmwsZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtsZXQgdj1kPygwLHIuY3JlYXRlSHJlZkZyb21VcmwpKGQpOnZvaWQgMDt2JiYocC5jYW5vbmljYWxVcmw9dik7bGV0IGI9KDAsYy5jcmVhdGVFbXB0eUNhY2hlTm9kZSkoKTsoMCxhLmFwcGx5RmxpZ2h0RGF0YSkoeSxiLG4pLHAucGF0Y2hlZFRyZWU9XyxwLmNhY2hlPWIseT1iLGg9X31yZXR1cm4oMCxpLmhhbmRsZU11dGFibGUpKGUscCl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMjMyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHthZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtsZXRbcixvLCxsXT10O2ZvcihsZXQgYSBpbiByLmluY2x1ZGVzKHUuUEFHRV9TRUdNRU5UX0tFWSkmJiJyZWZyZXNoIiE9PWwmJih0WzJdPW4sdFszXT0icmVmcmVzaCIpLG8pZShvW2FdLG4pfX0scmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50czpmdW5jdGlvbigpe3JldHVybiBsfX0pO2xldCByPW4oMjM1Niksbz1uKDQ4NDgpLHU9big0NTQxKTthc3luYyBmdW5jdGlvbiBsKGUpe2xldCB0PW5ldyBTZXQ7YXdhaXQgYSh7Li4uZSxyb290VHJlZTplLnVwZGF0ZWRUcmVlLGZldGNoZWRTZWdtZW50czp0fSl9YXN5bmMgZnVuY3Rpb24gYShlKXtsZXR7c3RhdGU6dCx1cGRhdGVkVHJlZTpuLHVwZGF0ZWRDYWNoZTp1LGluY2x1ZGVOZXh0VXJsOmwsZmV0Y2hlZFNlZ21lbnRzOmkscm9vdFRyZWU6Yz1uLGNhbm9uaWNhbFVybDpzfT1lLFssZixkLHBdPW4saD1bXTtpZihkJiZkIT09cyYmInJlZnJlc2giPT09cCYmIWkuaGFzKGQpKXtpLmFkZChkKTtsZXQgZT0oMCxvLmZldGNoU2VydmVyUmVzcG9uc2UpKG5ldyBVUkwoZCxsb2NhdGlvbi5vcmlnaW4pLFtjWzBdLGNbMV0sY1syXSwicmVmZXRjaCJdLGw/dC5uZXh0VXJsOm51bGwsdC5idWlsZElkKS50aGVuKGU9PntsZXQgdD1lWzBdO2lmKCJzdHJpbmciIT10eXBlb2YgdClmb3IobGV0IGUgb2YgdCkoMCxyLmFwcGx5RmxpZ2h0RGF0YSkodSx1LGUpfSk7aC5wdXNoKGUpfWZvcihsZXQgZSBpbiBmKXtsZXQgbj1hKHtzdGF0ZTp0LHVwZGF0ZWRUcmVlOmZbZV0sdXBkYXRlZENhY2hlOnUsaW5jbHVkZU5leHRVcmw6bCxmZXRjaGVkU2VnbWVudHM6aSxyb290VHJlZTpjLGNhbm9uaWNhbFVybDpzfSk7aC5wdXNoKG4pfWF3YWl0IFByb21pc2UuYWxsKGgpfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDQ2NzM6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG4scixvLHU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtBQ1RJT05fRkFTVF9SRUZSRVNIOmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LEFDVElPTl9OQVZJR0FURTpmdW5jdGlvbigpe3JldHVybiBhfSxBQ1RJT05fUFJFRkVUQ0g6ZnVuY3Rpb24oKXtyZXR1cm4gc30sQUNUSU9OX1JFRlJFU0g6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sQUNUSU9OX1JFU1RPUkU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sQUNUSU9OX1NFUlZFUl9BQ1RJT046ZnVuY3Rpb24oKXtyZXR1cm4gZH0sQUNUSU9OX1NFUlZFUl9QQVRDSDpmdW5jdGlvbigpe3JldHVybiBjfSxQcmVmZXRjaENhY2hlRW50cnlTdGF0dXM6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sUHJlZmV0Y2hLaW5kOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGlzVGhlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gcH19KTtsZXQgbD0icmVmcmVzaCIsYT0ibmF2aWdhdGUiLGk9InJlc3RvcmUiLGM9InNlcnZlci1wYXRjaCIscz0icHJlZmV0Y2giLGY9ImZhc3QtcmVmcmVzaCIsZD0ic2VydmVyLWFjdGlvbiI7ZnVuY3Rpb24gcChlKXtyZXR1cm4gZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50aGVufShvPW58fChuPXt9KSkuQVVUTz0iYXV0byIsby5GVUxMPSJmdWxsIixvLlRFTVBPUkFSWT0idGVtcG9yYXJ5IiwodT1yfHwocj17fSkpLmZyZXNoPSJmcmVzaCIsdS5yZXVzYWJsZT0icmV1c2FibGUiLHUuZXhwaXJlZD0iZXhwaXJlZCIsdS5zdGFsZT0ic3RhbGUiLCgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDE0NTA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmfX0pO2xldCByPW4oNDY3Myksbz1uKDU5NjcpLHU9big4NDQ4KSxsPW4oNzc4NCksYT1uKDk2MDEpLGk9big0ODE5KSxjPW4oNDUyOSkscz1uKDM3MjIpLGY9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX06ZnVuY3Rpb24oZSx0KXtzd2l0Y2godC50eXBlKXtjYXNlIHIuQUNUSU9OX05BVklHQVRFOnJldHVybigwLG8ubmF2aWdhdGVSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fU0VSVkVSX1BBVENIOnJldHVybigwLHUuc2VydmVyUGF0Y2hSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fUkVTVE9SRTpyZXR1cm4oMCxsLnJlc3RvcmVSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fUkVGUkVTSDpyZXR1cm4oMCxhLnJlZnJlc2hSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fRkFTVF9SRUZSRVNIOnJldHVybigwLGMuZmFzdFJlZnJlc2hSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fUFJFRkVUQ0g6cmV0dXJuKDAsaS5wcmVmZXRjaFJlZHVjZXIpKGUsdCk7Y2FzZSByLkFDVElPTl9TRVJWRVJfQUNUSU9OOnJldHVybigwLHMuc2VydmVyQWN0aW9uUmVkdWNlcikoZSx0KTtkZWZhdWx0OnRocm93IEVycm9yKCJVbmtub3duIGFjdGlvbiIpfX07KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMzcyODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hvdWxkSGFyZE5hdmlnYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4pe2xldFtvLHVdPW4sW2wsYV09dDtyZXR1cm4oMCxyLm1hdGNoU2VnbWVudCkobCxvKT8hKHQubGVuZ3RoPD0yKSYmZSh0LnNsaWNlKDIpLHVbYV0pOiEhQXJyYXkuaXNBcnJheShsKX19fSk7bGV0IHI9big2MDE1KTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw0NTM1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtjcmVhdGVEeW5hbWljYWxseVRyYWNrZWRTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sY3JlYXRlVW50cmFja2VkU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKCl7cmV0dXJuIGx9fSk7bGV0IHI9bigxODQ1KSxvPW4oNjk5OSksdT1uKDY1MCk7ZnVuY3Rpb24gbChlKXtsZXQgdD1yLnN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKTtyZXR1cm4gdCYmdC5mb3JjZVN0YXRpYz97fTplfWZ1bmN0aW9uIGEoZSl7bGV0IHQ9ci5zdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7cmV0dXJuIHQ/dC5mb3JjZVN0YXRpYz97fTp0LmlzU3RhdGljR2VuZXJhdGlvbnx8dC5keW5hbWljU2hvdWxkRXJyb3I/bmV3IFByb3h5KHt9LHtnZXQ6KGUsbixyKT0+KCJzdHJpbmciPT10eXBlb2YgbiYmKDAsby50cmFja0R5bmFtaWNEYXRhQWNjZXNzZWQpKHQsInNlYXJjaFBhcmFtcy4iK24pLHUuUmVmbGVjdEFkYXB0ZXIuZ2V0KGUsbixyKSksaGFzOihlLG4pPT4oInN0cmluZyI9PXR5cGVvZiBuJiYoMCxvLnRyYWNrRHluYW1pY0RhdGFBY2Nlc3NlZCkodCwic2VhcmNoUGFyYW1zLiIrbiksUmVmbGVjdC5oYXMoZSxuKSksb3duS2V5czplPT4oKDAsby50cmFja0R5bmFtaWNEYXRhQWNjZXNzZWQpKHQsInNlYXJjaFBhcmFtcyIpLFJlZmxlY3Qub3duS2V5cyhlKSl9KTplOmV9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMTg0NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZX19KTtsZXQgcj1uKDMwKTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw2ODY0OmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7U3RhdGljR2VuQmFpbG91dEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGlzU3RhdGljR2VuQmFpbG91dEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7bGV0IG49Ik5FWFRfU1RBVElDX0dFTl9CQUlMT1VUIjtjbGFzcyByIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSksdGhpcy5jb2RlPW59fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmImNvZGUiaW4gZSYmZS5jb2RlPT09bn0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw4MTM3OmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidW5yZXNvbHZlZFRoZW5hYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KTtsZXQgbj17dGhlbjooKT0+e319OygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDc3NDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse3VzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29sczpmdW5jdGlvbigpe3JldHVybiBpfSx1c2VVbndyYXBTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBhfX0pO2xldCByPW4oMzA5OSkuXyhuKDIyNjUpKSxvPW4oNDY3MyksdT1uKDIxMDMpO2Z1bmN0aW9uIGwoZSl7aWYoZSBpbnN0YW5jZW9mIE1hcCl7bGV0IHQ9e307Zm9yKGxldFtuLHJdb2YgZS5lbnRyaWVzKCkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXt0W25dPSJmbigpIjtjb250aW51ZX1pZigib2JqZWN0Ij09dHlwZW9mIHImJm51bGwhPT1yKXtpZihyLiQkdHlwZW9mKXt0W25dPXIuJCR0eXBlb2YudG9TdHJpbmcoKTtjb250aW51ZX1pZihyLl9idW5kbGVyQ29uZmlnKXt0W25dPSJGbGlnaHREYXRhIjtjb250aW51ZX19dFtuXT1sKHIpfXJldHVybiB0fWlmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKXtsZXQgcj1lW25dO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXt0W25dPSJmbigpIjtjb250aW51ZX1pZigib2JqZWN0Ij09dHlwZW9mIHImJm51bGwhPT1yKXtpZihyLiQkdHlwZW9mKXt0W25dPXIuJCR0eXBlb2YudG9TdHJpbmcoKTtjb250aW51ZX1pZihyLmhhc093blByb3BlcnR5KCJfYnVuZGxlckNvbmZpZyIpKXt0W25dPSJGbGlnaHREYXRhIjtjb250aW51ZX19dFtuXT1sKHIpfXJldHVybiB0fXJldHVybiBBcnJheS5pc0FycmF5KGUpP2UubWFwKGwpOmV9ZnVuY3Rpb24gYShlKXtyZXR1cm4oMCxvLmlzVGhlbmFibGUpKGUpPygwLHIudXNlKShlKTplfWxldCBpPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P2Z1bmN0aW9uKGUpe2xldFt0LG5dPXIuZGVmYXVsdC51c2VTdGF0ZShlKSxvPSgwLHIudXNlQ29udGV4dCkodS5BY3Rpb25RdWV1ZUNvbnRleHQpO2lmKCFvKXRocm93IEVycm9yKCJJbnZhcmlhbnQ6IE1pc3NpbmcgQWN0aW9uUXVldWVDb250ZXh0Iik7bGV0IGE9KDAsci51c2VSZWYpKCksaT0oMCxyLnVzZVJlZikoKTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCk9PntpZighYS5jdXJyZW50JiYhMSE9PWkuY3VycmVudCl7aWYodm9pZCAwPT09aS5jdXJyZW50JiZ2b2lkIDA9PT13aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyl7aS5jdXJyZW50PSExO3JldHVybn1yZXR1cm4gYS5jdXJyZW50PXdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fLmNvbm5lY3Qoe2luc3RhbmNlSWQ6OGUzLG5hbWU6Im5leHQtcm91dGVyIn0pLGEuY3VycmVudCYmKGEuY3VycmVudC5pbml0KGwoZSkpLG8mJihvLmRldlRvb2xzSW5zdGFuY2U9YS5jdXJyZW50KSksKCk9PnthLmN1cnJlbnQ9dm9pZCAwfX19LFtlLG9dKSxbdCwoMCxyLnVzZUNhbGxiYWNrKSh0PT57by5zdGF0ZXx8KG8uc3RhdGU9ZSksby5kaXNwYXRjaCh0LG4pfSxbbyxlXSksKDAsci51c2VDYWxsYmFjaykoZT0+e2EuY3VycmVudCYmYS5jdXJyZW50LnNlbmQoe3R5cGU6IlJFTkRFUl9TWU5DIn0sbChlKSl9LFtdKV19OmZ1bmN0aW9uKGUpe3JldHVybltlLCgpPT57fSwoKT0+e31dfTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwxMzExOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcmVwYXJlRmxpZ2h0Um91dGVyU3RhdGVGb3JSZXF1ZXN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDQ1NDEpO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gdD9lbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZSkpOmVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShmdW5jdGlvbiBlKHQpe2xldFtuLG8sLHUsbF09dCxhPSJzdHJpbmciPT10eXBlb2YgbiYmbi5zdGFydHNXaXRoKHIuUEFHRV9TRUdNRU5UX0tFWSsiPyIpP3IuUEFHRV9TRUdNRU5UX0tFWTpuLGk9e307Zm9yKGxldFt0LG5db2YgT2JqZWN0LmVudHJpZXMobykpaVt0XT1lKG4pO2xldCBjPVthLGksbnVsbCx1JiYicmVmcmVzaCIhPT11P3U6bnVsbF07cmV0dXJuIHZvaWQgMCE9PWwmJihjWzRdPWwpLGN9KGUpKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMTI4MzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGFzQmFzZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oNTgwKTtmdW5jdGlvbiBvKGUpe3JldHVybigwLHIucGF0aEhhc1ByZWZpeCkoZSwiIil9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sODUyMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oNjY3NCksbz1uKDMzODEpLHU9ZT0+e2lmKCFlLnN0YXJ0c1dpdGgoIi8iKSlyZXR1cm4gZTtsZXR7cGF0aG5hbWU6dCxxdWVyeTpuLGhhc2g6dX09KDAsby5wYXJzZVBhdGgpKGUpO3JldHVybiIiKygwLHIucmVtb3ZlVHJhaWxpbmdTbGFzaCkodCkrbit1fTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwxNDA0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDg5OTMpO2Z1bmN0aW9uIG8oZSl7bGV0IHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcG9ydEVycm9yP3JlcG9ydEVycm9yOmU9Pnt3aW5kb3cuY29uc29sZS5lcnJvcihlKX07KDAsci5pc0JhaWxvdXRUb0NTUkVycm9yKShlKXx8dChlKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw1MDc2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlbW92ZUJhc2VQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KSxuKDEyODMpLCgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDIwMTA6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3ZhciBuPWUubGVuZ3RoO2ZvcihlLnB1c2godCk7MDxuOyl7dmFyIHI9bi0xPj4+MSxvPWVbcl07aWYoMDx1KG8sdCkpZVtyXT10LGVbbl09byxuPXI7ZWxzZSBicmVha319ZnVuY3Rpb24gcihlKXtyZXR1cm4gMD09PWUubGVuZ3RoP251bGw6ZVswXX1mdW5jdGlvbiBvKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgdD1lWzBdLG49ZS5wb3AoKTtpZihuIT09dCl7ZVswXT1uO2Zvcih2YXIgcj0wLG89ZS5sZW5ndGgsbD1vPj4+MTtyPGw7KXt2YXIgYT0yKihyKzEpLTEsaT1lW2FdLGM9YSsxLHM9ZVtjXTtpZigwPnUoaSxuKSljPG8mJjA+dShzLGkpPyhlW3JdPXMsZVtjXT1uLHI9Yyk6KGVbcl09aSxlW2FdPW4scj1hKTtlbHNlIGlmKGM8byYmMD51KHMsbikpZVtyXT1zLGVbY109bixyPWM7ZWxzZSBicmVha319cmV0dXJuIHR9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPWUuc29ydEluZGV4LXQuc29ydEluZGV4O3JldHVybiAwIT09bj9uOmUuaWQtdC5pZH1pZih0LnVuc3RhYmxlX25vdz12b2lkIDAsIm9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIHBlcmZvcm1hbmNlLm5vdyl7dmFyIGwsYT1wZXJmb3JtYW5jZTt0LnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBhLm5vdygpfX1lbHNle3ZhciBpPURhdGUsYz1pLm5vdygpO3QudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGkubm93KCktY319dmFyIHM9W10sZj1bXSxkPTEscD1udWxsLGg9Myx5PSExLF89ITEsdj0hMSxiPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bnVsbCxnPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Om51bGwsbT0idW5kZWZpbmVkIiE9dHlwZW9mIHNldEltbWVkaWF0ZT9zZXRJbW1lZGlhdGU6bnVsbDtmdW5jdGlvbiBSKGUpe2Zvcih2YXIgdD1yKGYpO251bGwhPT10Oyl7aWYobnVsbD09PXQuY2FsbGJhY2spbyhmKTtlbHNlIGlmKHQuc3RhcnRUaW1lPD1lKW8oZiksdC5zb3J0SW5kZXg9dC5leHBpcmF0aW9uVGltZSxuKHMsdCk7ZWxzZSBicmVhazt0PXIoZil9fWZ1bmN0aW9uIFAoZSl7aWYodj0hMSxSKGUpLCFfKXtpZihudWxsIT09cihzKSlfPSEwLHgoKTtlbHNle3ZhciB0PXIoZik7bnVsbCE9PXQmJkEoUCx0LnN0YXJ0VGltZS1lKX19fSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZ2b2lkIDAhPT1uYXZpZ2F0b3Iuc2NoZWR1bGluZyYmdm9pZCAwIT09bmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcmJm5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nLmJpbmQobmF2aWdhdG9yLnNjaGVkdWxpbmcpO3ZhciBqPSExLE89LTEsRT01LFM9LTE7ZnVuY3Rpb24gdygpe3JldHVybiEodC51bnN0YWJsZV9ub3coKS1TPEUpfWZ1bmN0aW9uIE0oKXtpZihqKXt2YXIgZT10LnVuc3RhYmxlX25vdygpO1M9ZTt2YXIgbj0hMDt0cnl7ZTp7Xz0hMSx2JiYodj0hMSxnKE8pLE89LTEpLHk9ITA7dmFyIHU9aDt0cnl7dDp7Zm9yKFIoZSkscD1yKHMpO251bGwhPT1wJiYhKHAuZXhwaXJhdGlvblRpbWU+ZSYmdygpKTspe3ZhciBhPXAuY2FsbGJhY2s7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpe3AuY2FsbGJhY2s9bnVsbCxoPXAucHJpb3JpdHlMZXZlbDt2YXIgaT1hKHAuZXhwaXJhdGlvblRpbWU8PWUpO2lmKGU9dC51bnN0YWJsZV9ub3coKSwiZnVuY3Rpb24iPT10eXBlb2YgaSl7cC5jYWxsYmFjaz1pLFIoZSksbj0hMDticmVhayB0fXA9PT1yKHMpJiZvKHMpLFIoZSl9ZWxzZSBvKHMpO3A9cihzKX1pZihudWxsIT09cCluPSEwO2Vsc2V7dmFyIGM9cihmKTtudWxsIT09YyYmQShQLGMuc3RhcnRUaW1lLWUpLG49ITF9fWJyZWFrIGV9ZmluYWxseXtwPW51bGwsaD11LHk9ITF9bj12b2lkIDB9fWZpbmFsbHl7bj9sKCk6aj0hMX19fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBtKWw9ZnVuY3Rpb24oKXttKE0pfTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwpe3ZhciBUPW5ldyBNZXNzYWdlQ2hhbm5lbCxDPVQucG9ydDI7VC5wb3J0MS5vbm1lc3NhZ2U9TSxsPWZ1bmN0aW9uKCl7Qy5wb3N0TWVzc2FnZShudWxsKX19ZWxzZSBsPWZ1bmN0aW9uKCl7YihNLDApfTtmdW5jdGlvbiB4KCl7anx8KGo9ITAsbCgpKX1mdW5jdGlvbiBBKGUsbil7Tz1iKGZ1bmN0aW9uKCl7ZSh0LnVuc3RhYmxlX25vdygpKX0sbil9dC51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NSx0LnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTEsdC51bnN0YWJsZV9Mb3dQcmlvcml0eT00LHQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9Myx0LnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsLHQudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9Mix0LnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKGUpe2UuY2FsbGJhY2s9bnVsbH0sdC51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe198fHl8fChfPSEwLHgoKSl9LHQudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oZSl7MD5lfHwxMjU8ZT9jb25zb2xlLmVycm9yKCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQiKTpFPTA8ZT9NYXRoLmZsb29yKDFlMy9lKTo1fSx0LnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGh9LHQudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gcihzKX0sdC51bnN0YWJsZV9uZXh0PWZ1bmN0aW9uKGUpe3N3aXRjaChoKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzp2YXIgdD0zO2JyZWFrO2RlZmF1bHQ6dD1ofXZhciBuPWg7aD10O3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7aD1ufX0sdC51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbj1mdW5jdGlvbigpe30sdC51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ9ZnVuY3Rpb24oKXt9LHQudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDplPTN9dmFyIG49aDtoPWU7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtoPW59fSx0LnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24oZSxvLHUpe3ZhciBsPXQudW5zdGFibGVfbm93KCk7c3dpdGNoKHU9Im9iamVjdCI9PXR5cGVvZiB1JiZudWxsIT09dSYmIm51bWJlciI9PXR5cGVvZih1PXUuZGVsYXkpJiYwPHU/bCt1OmwsZSl7Y2FzZSAxOnZhciBhPS0xO2JyZWFrO2Nhc2UgMjphPTI1MDticmVhaztjYXNlIDU6YT0xMDczNzQxODIzO2JyZWFrO2Nhc2UgNDphPTFlNDticmVhaztkZWZhdWx0OmE9NWUzfXJldHVybiBhPXUrYSxlPXtpZDpkKyssY2FsbGJhY2s6byxwcmlvcml0eUxldmVsOmUsc3RhcnRUaW1lOnUsZXhwaXJhdGlvblRpbWU6YSxzb3J0SW5kZXg6LTF9LHU+bD8oZS5zb3J0SW5kZXg9dSxuKGYsZSksbnVsbD09PXIocykmJmU9PT1yKGYpJiYodj8oZyhPKSxPPS0xKTp2PSEwLEEoUCx1LWwpKSk6KGUuc29ydEluZGV4PWEsbihzLGUpLF98fHl8fChfPSEwLHgoKSkpLGV9LHQudW5zdGFibGVfc2hvdWxkWWllbGQ9dyx0LnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD1oO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWg7aD10O3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtoPW59fX19LDE3Njc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigyMDEwKX0sOTM0OmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7Z2V0UGF0aG5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gcn0saXNGdWxsU3RyaW5nVXJsOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHBhcnNlVXJsOmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSk7bGV0IG49Imh0dHA6Ly9uIjtmdW5jdGlvbiByKGUpe3JldHVybiBuZXcgVVJMKGUsbikucGF0aG5hbWV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4vaHR0cHM/OlwvXC8vLnRlc3QoZSl9ZnVuY3Rpb24gdShlKXtsZXQgdDt0cnl7dD1uZXcgVVJMKGUsbil9Y2F0Y2h7fXJldHVybiB0fX0sNjk5OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7UG9zdHBvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sY3JlYXRlUG9zdHBvbmVkQWJvcnRTaWduYWw6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sY3JlYXRlUHJlcmVuZGVyU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sZm9ybWF0RHluYW1pY0FQSUFjY2Vzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIF99LG1hcmtDdXJyZW50U2NvcGVBc0R5bmFtaWM6ZnVuY3Rpb24oKXtyZXR1cm4gc30sdHJhY2tEeW5hbWljRGF0YUFjY2Vzc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHRyYWNrRHluYW1pY0ZldGNoOmZ1bmN0aW9uKCl7cmV0dXJuIHB9LHVzZWREeW5hbWljQVBJczpmdW5jdGlvbigpe3JldHVybiB5fX0pO2xldCBvPShyPW4oMjI2NSkpJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfSx1PW4oNjE3NyksbD1uKDY4NjQpLGE9big5MzQpLGk9ImZ1bmN0aW9uIj09dHlwZW9mIG8uZGVmYXVsdC51bnN0YWJsZV9wb3N0cG9uZTtmdW5jdGlvbiBjKGUpe3JldHVybntpc0RlYnVnU2tlbGV0b246ZSxkeW5hbWljQWNjZXNzZXM6W119fWZ1bmN0aW9uIHMoZSx0KXtsZXQgbj0oMCxhLmdldFBhdGhuYW1lKShlLnVybFBhdGhuYW1lKTtpZighZS5pc1Vuc3RhYmxlQ2FjaGVDYWxsYmFjayl7aWYoZS5keW5hbWljU2hvdWxkRXJyb3IpdGhyb3cgbmV3IGwuU3RhdGljR2VuQmFpbG91dEVycm9yKGBSb3V0ZSAke259IHdpdGggXGBkeW5hbWljID0gImVycm9yIlxgIGNvdWxkbid0IGJlIHJlbmRlcmVkIHN0YXRpY2FsbHkgYmVjYXVzZSBpdCB1c2VkIFxgJHt0fVxgLiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9zdGF0aWMtYW5kLWR5bmFtaWMjZHluYW1pYy1yZW5kZXJpbmdgKTtpZihlLnByZXJlbmRlclN0YXRlKWgoZS5wcmVyZW5kZXJTdGF0ZSx0LG4pO2Vsc2UgaWYoZS5yZXZhbGlkYXRlPTAsZS5pc1N0YXRpY0dlbmVyYXRpb24pe2xldCByPW5ldyB1LkR5bmFtaWNTZXJ2ZXJFcnJvcihgUm91dGUgJHtufSBjb3VsZG4ndCBiZSByZW5kZXJlZCBzdGF0aWNhbGx5IGJlY2F1c2UgaXQgdXNlZCAke3R9LiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2R5bmFtaWMtc2VydmVyLWVycm9yYCk7dGhyb3cgZS5keW5hbWljVXNhZ2VEZXNjcmlwdGlvbj10LGUuZHluYW1pY1VzYWdlU3RhY2s9ci5zdGFjayxyfX19ZnVuY3Rpb24gZihlLHQpe2xldCBuPSgwLGEuZ2V0UGF0aG5hbWUpKGUudXJsUGF0aG5hbWUpO2lmKGUuaXNVbnN0YWJsZUNhY2hlQ2FsbGJhY2spdGhyb3cgRXJyb3IoYFJvdXRlICR7bn0gdXNlZCAiJHt0fSIgaW5zaWRlIGEgZnVuY3Rpb24gY2FjaGVkIHdpdGggInVuc3RhYmxlX2NhY2hlKC4uLikiLiBBY2Nlc3NpbmcgRHluYW1pYyBkYXRhIHNvdXJjZXMgaW5zaWRlIGEgY2FjaGUgc2NvcGUgaXMgbm90IHN1cHBvcnRlZC4gSWYgeW91IG5lZWQgdGhpcyBkYXRhIGluc2lkZSBhIGNhY2hlZCBmdW5jdGlvbiB1c2UgIiR7dH0iIG91dHNpZGUgb2YgdGhlIGNhY2hlZCBmdW5jdGlvbiBhbmQgcGFzcyB0aGUgcmVxdWlyZWQgZHluYW1pYyBkYXRhIGluIGFzIGFuIGFyZ3VtZW50LiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91bnN0YWJsZV9jYWNoZWApO2lmKGUuZHluYW1pY1Nob3VsZEVycm9yKXRocm93IG5ldyBsLlN0YXRpY0dlbkJhaWxvdXRFcnJvcihgUm91dGUgJHtufSB3aXRoIFxgZHluYW1pYyA9ICJlcnJvciJcYCBjb3VsZG4ndCBiZSByZW5kZXJlZCBzdGF0aWNhbGx5IGJlY2F1c2UgaXQgdXNlZCBcYCR7dH1cYC4gU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc3RhdGljLWFuZC1keW5hbWljI2R5bmFtaWMtcmVuZGVyaW5nYCk7aWYoZS5wcmVyZW5kZXJTdGF0ZSloKGUucHJlcmVuZGVyU3RhdGUsdCxuKTtlbHNlIGlmKGUucmV2YWxpZGF0ZT0wLGUuaXNTdGF0aWNHZW5lcmF0aW9uKXtsZXQgcj1uZXcgdS5EeW5hbWljU2VydmVyRXJyb3IoYFJvdXRlICR7bn0gY291bGRuJ3QgYmUgcmVuZGVyZWQgc3RhdGljYWxseSBiZWNhdXNlIGl0IHVzZWQgXGAke3R9XGAuIFNlZSBtb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZHluYW1pYy1zZXJ2ZXItZXJyb3JgKTt0aHJvdyBlLmR5bmFtaWNVc2FnZURlc2NyaXB0aW9uPXQsZS5keW5hbWljVXNhZ2VTdGFjaz1yLnN0YWNrLHJ9fWZ1bmN0aW9uIGQoe3JlYXNvbjplLHByZXJlbmRlclN0YXRlOnQscGF0aG5hbWU6bn0pe2godCxlLG4pfWZ1bmN0aW9uIHAoZSx0KXtlLnByZXJlbmRlclN0YXRlJiZoKGUucHJlcmVuZGVyU3RhdGUsdCxlLnVybFBhdGhuYW1lKX1mdW5jdGlvbiBoKGUsdCxuKXt2KCk7bGV0IHI9YFJvdXRlICR7bn0gbmVlZHMgdG8gYmFpbCBvdXQgb2YgcHJlcmVuZGVyaW5nIGF0IHRoaXMgcG9pbnQgYmVjYXVzZSBpdCB1c2VkICR7dH0uIFJlYWN0IHRocm93cyB0aGlzIHNwZWNpYWwgb2JqZWN0IHRvIGluZGljYXRlIHdoZXJlLiBJdCBzaG91bGQgbm90IGJlIGNhdWdodCBieSB5b3VyIG93biB0cnkvY2F0Y2guIExlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3Bwci1jYXVnaHQtZXJyb3JgO2UuZHluYW1pY0FjY2Vzc2VzLnB1c2goe3N0YWNrOmUuaXNEZWJ1Z1NrZWxldG9uP0Vycm9yKCkuc3RhY2s6dm9pZCAwLGV4cHJlc3Npb246dH0pLG8uZGVmYXVsdC51bnN0YWJsZV9wb3N0cG9uZShyKX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLmR5bmFtaWNBY2Nlc3Nlcy5sZW5ndGg+MH1mdW5jdGlvbiBfKGUpe3JldHVybiBlLmR5bmFtaWNBY2Nlc3Nlcy5maWx0ZXIoZT0+InN0cmluZyI9PXR5cGVvZiBlLnN0YWNrJiZlLnN0YWNrLmxlbmd0aD4wKS5tYXAoKHtleHByZXNzaW9uOmUsc3RhY2s6dH0pPT4odD10LnNwbGl0KCJcbiIpLnNsaWNlKDQpLmZpbHRlcihlPT4hKGUuaW5jbHVkZXMoIm5vZGVfbW9kdWxlcy9uZXh0LyIpfHxlLmluY2x1ZGVzKCIgKDxhbm9ueW1vdXM+KSIpfHxlLmluY2x1ZGVzKCIgKG5vZGU6IikpKS5qb2luKCJcbiIpLGBEeW5hbWljIEFQSSBVc2FnZSBEZWJ1ZyAtICR7ZX06CiR7dH1gKSl9ZnVuY3Rpb24gdigpe2lmKCFpKXRocm93IEVycm9yKCJJbnZhcmlhbnQ6IFJlYWN0LnVuc3RhYmxlX3Bvc3Rwb25lIGlzIG5vdCBkZWZpbmVkLiBUaGlzIHN1Z2dlc3RzIHRoZSB3cm9uZyB2ZXJzaW9uIG9mIFJlYWN0IHdhcyBsb2FkZWQuIFRoaXMgaXMgYSBidWcgaW4gTmV4dC5qcyIpfWZ1bmN0aW9uIGIoZSl7digpO2xldCB0PW5ldyBBYm9ydENvbnRyb2xsZXI7dHJ5e28uZGVmYXVsdC51bnN0YWJsZV9wb3N0cG9uZShlKX1jYXRjaChlKXt0LmFib3J0KGUpfXJldHVybiB0LnNpZ25hbH19LDc0MTc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldFNlZ21lbnRQYXJhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7bGV0IHI9bigxMTgyKTtmdW5jdGlvbiBvKGUpe2xldCB0PXIuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCh0PT5lLnN0YXJ0c1dpdGgodCkpO3JldHVybih0JiYoZT1lLnNsaWNlKHQubGVuZ3RoKSksZS5zdGFydHNXaXRoKCJbWy4uLiIpJiZlLmVuZHNXaXRoKCJdXSIpKT97dHlwZToib3B0aW9uYWwtY2F0Y2hhbGwiLHBhcmFtOmUuc2xpY2UoNSwtMil9OmUuc3RhcnRzV2l0aCgiWy4uLiIpJiZlLmVuZHNXaXRoKCJdIik/e3R5cGU6dD8iY2F0Y2hhbGwtaW50ZXJjZXB0ZWQiOiJjYXRjaGFsbCIscGFyYW06ZS5zbGljZSg0LC0xKX06ZS5zdGFydHNXaXRoKCJbIikmJmUuZW5kc1dpdGgoIl0iKT97dHlwZTp0PyJkeW5hbWljLWludGVyY2VwdGVkIjoiZHluYW1pYyIscGFyYW06ZS5zbGljZSgxLC0xKX06bnVsbH19LDY0NzpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixyO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KSwocj1ufHwobj17fSkpLkFEREVEX1BBR0U9ImFkZGVkUGFnZSIsci5SRU1PVkVEX1BBR0U9InJlbW92ZWRQYWdlIixyLlJFTE9BRF9QQUdFPSJyZWxvYWRQYWdlIixyLlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUz0ic2VydmVyQ29tcG9uZW50Q2hhbmdlcyIsci5NSURETEVXQVJFX0NIQU5HRVM9Im1pZGRsZXdhcmVDaGFuZ2VzIixyLkNMSUVOVF9DSEFOR0VTPSJjbGllbnRDaGFuZ2VzIixyLlNFUlZFUl9PTkxZX0NIQU5HRVM9InNlcnZlck9ubHlDaGFuZ2VzIixyLlNZTkM9InN5bmMiLHIuQlVJTFQ9ImJ1aWx0IixyLkJVSUxESU5HPSJidWlsZGluZyIsci5ERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFPSJkZXZQYWdlc01hbmlmZXN0VXBkYXRlIixyLlRVUkJPUEFDS19NRVNTQUdFPSJ0dXJib3BhY2stbWVzc2FnZSIsci5TRVJWRVJfRVJST1I9InNlcnZlckVycm9yIixyLlRVUkJPUEFDS19DT05ORUNURUQ9InR1cmJvcGFjay1jb25uZWN0ZWQifSwxMTgyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUzpmdW5jdGlvbigpe3JldHVybiBvfSxleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjpmdW5jdGlvbigpe3JldHVybiBsfSxpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oOTI2KSxvPVsiKC4uKSguLikiLCIoLikiLCIoLi4pIiwiKC4uLikiXTtmdW5jdGlvbiB1KGUpe3JldHVybiB2b2lkIDAhPT1lLnNwbGl0KCIvIikuZmluZChlPT5vLmZpbmQodD0+ZS5zdGFydHNXaXRoKHQpKSl9ZnVuY3Rpb24gbChlKXtsZXQgdCxuLHU7Zm9yKGxldCByIG9mIGUuc3BsaXQoIi8iKSlpZihuPW8uZmluZChlPT5yLnN0YXJ0c1dpdGgoZSkpKXtbdCx1XT1lLnNwbGl0KG4sMik7YnJlYWt9aWYoIXR8fCFufHwhdSl0aHJvdyBFcnJvcihgSW52YWxpZCBpbnRlcmNlcHRpb24gcm91dGU6ICR7ZX0uIE11c3QgYmUgaW4gdGhlIGZvcm1hdCAvPGludGVyY2VwdGluZyByb3V0ZT4vKC4ufC4uLnwuLikoLi4pLzxpbnRlcmNlcHRlZCByb3V0ZT5gKTtzd2l0Y2godD0oMCxyLm5vcm1hbGl6ZUFwcFBhdGgpKHQpLG4pe2Nhc2UiKC4pIjp1PSIvIj09PXQ/YC8ke3V9YDp0KyIvIit1O2JyZWFrO2Nhc2UiKC4uKSI6aWYoIi8iPT09dCl0aHJvdyBFcnJvcihgSW52YWxpZCBpbnRlcmNlcHRpb24gcm91dGU6ICR7ZX0uIENhbm5vdCB1c2UgKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwsIHVzZSAoLikgaW5zdGVhZC5gKTt1PXQuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25jYXQodSkuam9pbigiLyIpO2JyZWFrO2Nhc2UiKC4uLikiOnU9Ii8iK3U7YnJlYWs7Y2FzZSIoLi4pKC4uKSI6bGV0IGw9dC5zcGxpdCgiLyIpO2lmKGwubGVuZ3RoPD0yKXRocm93IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtlfS4gQ2Fubm90IHVzZSAoLi4pKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwgb3Igb25lIGxldmVsIHVwLmApO3U9bC5zbGljZSgwLC0yKS5jb25jYXQodSkuam9pbigiLyIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIkludmFyaWFudDogdW5leHBlY3RlZCBtYXJrZXIiKX1yZXR1cm57aW50ZXJjZXB0aW5nUm91dGU6dCxpbnRlcmNlcHRlZFJvdXRlOnV9fX0sNjUwOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVmbGVjdEFkYXB0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pO2NsYXNzIG57c3RhdGljIGdldChlLHQsbil7bGV0IHI9UmVmbGVjdC5nZXQoZSx0LG4pO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYmluZChlKTpyfXN0YXRpYyBzZXQoZSx0LG4scil7cmV0dXJuIFJlZmxlY3Quc2V0KGUsdCxuLHIpfXN0YXRpYyBoYXMoZSx0KXtyZXR1cm4gUmVmbGVjdC5oYXMoZSx0KX1zdGF0aWMgZGVsZXRlUHJvcGVydHkoZSx0KXtyZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShlLHQpfX19LDE5NTY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse0FwcFJvdXRlckNvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBsfSxMYXlvdXRSb3V0ZXJDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9LE1pc3NpbmdTbG90Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiBpfSxUZW1wbGF0ZUNvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX19KTtsZXQgcj1uKDcwNDMpLl8obigyMjY1KSksbz1yLmRlZmF1bHQuY3JlYXRlQ29udGV4dChudWxsKSx1PXIuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG51bGwpLGw9ci5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobnVsbCksYT1yLmRlZmF1bHQuY3JlYXRlQ29udGV4dChudWxsKSxpPXIuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG5ldyBTZXQpfSw3MjA3OmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7bGV0IHQ9NTM4MTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0PSh0PDw1KSt0K2UuY2hhckNvZGVBdChuKSY0Mjk0OTY3Mjk1O3JldHVybiB0Pj4+MH1mdW5jdGlvbiByKGUpe3JldHVybiBuKGUpLnRvU3RyaW5nKDM2KS5zbGljZSgwLDUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7ZGpiMkhhc2g6ZnVuY3Rpb24oKXtyZXR1cm4gbn0saGV4SGFzaDpmdW5jdGlvbigpe3JldHVybiByfX0pfSw4NzAxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJIZWFkTWFuYWdlckNvbnRleHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByfX0pO2xldCByPW4oNzA0MykuXyhuKDIyNjUpKS5kZWZhdWx0LmNyZWF0ZUNvbnRleHQoe30pfSw5MDYwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtQYXRoUGFyYW1zQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBsfSxQYXRobmFtZUNvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sU2VhcmNoUGFyYW1zQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oMjI2NSksbz0oMCxyLmNyZWF0ZUNvbnRleHQpKG51bGwpLHU9KDAsci5jcmVhdGVDb250ZXh0KShudWxsKSxsPSgwLHIuY3JlYXRlQ29udGV4dCkobnVsbCl9LDg5OTM6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtCYWlsb3V0VG9DU1JFcnJvcjpmdW5jdGlvbigpe3JldHVybiByfSxpc0JhaWxvdXRUb0NTUkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7bGV0IG49IkJBSUxPVVRfVE9fQ0xJRU5UX1NJREVfUkVOREVSSU5HIjtjbGFzcyByIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoIkJhaWwgb3V0IHRvIGNsaWVudC1zaWRlIHJlbmRlcmluZzogIitlKSx0aGlzLnJlYXNvbj1lLHRoaXMuZGlnZXN0PW59fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmImRpZ2VzdCJpbiBlJiZlLmRpZ2VzdD09PW59fSw4MTYyOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiLyIpP2U6Ii8iK2V9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJlbnN1cmVMZWFkaW5nU2xhc2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pfSwyMTAzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtBY3Rpb25RdWV1ZUNvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIHN9fSk7bGV0IHI9bigzMDk5KSxvPW4oNDY3MyksdT1uKDE0NTApLGw9ci5fKG4oMjI2NSkpLGE9bC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobnVsbCk7ZnVuY3Rpb24gaShlLHQpe251bGwhPT1lLnBlbmRpbmcmJihlLnBlbmRpbmc9ZS5wZW5kaW5nLm5leHQsbnVsbCE9PWUucGVuZGluZz9jKHthY3Rpb25RdWV1ZTplLGFjdGlvbjplLnBlbmRpbmcsc2V0U3RhdGU6dH0pOmUubmVlZHNSZWZyZXNoJiYoZS5uZWVkc1JlZnJlc2g9ITEsZS5kaXNwYXRjaCh7dHlwZTpvLkFDVElPTl9SRUZSRVNILG9yaWdpbjp3aW5kb3cubG9jYXRpb24ub3JpZ2lufSx0KSkpfWFzeW5jIGZ1bmN0aW9uIGMoZSl7bGV0e2FjdGlvblF1ZXVlOnQsYWN0aW9uOm4sc2V0U3RhdGU6cn09ZSx1PXQuc3RhdGU7aWYoIXUpdGhyb3cgRXJyb3IoIkludmFyaWFudDogUm91dGVyIHN0YXRlIG5vdCBpbml0aWFsaXplZCIpO3QucGVuZGluZz1uO2xldCBsPW4ucGF5bG9hZCxhPXQuYWN0aW9uKHUsbCk7ZnVuY3Rpb24gYyhlKXtuLmRpc2NhcmRlZHx8KHQuc3RhdGU9ZSx0LmRldlRvb2xzSW5zdGFuY2UmJnQuZGV2VG9vbHNJbnN0YW5jZS5zZW5kKGwsZSksaSh0LHIpLG4ucmVzb2x2ZShlKSl9KDAsby5pc1RoZW5hYmxlKShhKT9hLnRoZW4oYyxlPT57aSh0LHIpLG4ucmVqZWN0KGUpfSk6YyhhKX1mdW5jdGlvbiBzKCl7bGV0IGU9e3N0YXRlOm51bGwsZGlzcGF0Y2g6KHQsbik9PihmdW5jdGlvbihlLHQsbil7bGV0IHI9e3Jlc29sdmU6bixyZWplY3Q6KCk9Pnt9fTtpZih0LnR5cGUhPT1vLkFDVElPTl9SRVNUT1JFKXtsZXQgZT1uZXcgUHJvbWlzZSgoZSx0KT0+e3I9e3Jlc29sdmU6ZSxyZWplY3Q6dH19KTsoMCxsLnN0YXJ0VHJhbnNpdGlvbikoKCk9PntuKGUpfSl9bGV0IHU9e3BheWxvYWQ6dCxuZXh0Om51bGwscmVzb2x2ZTpyLnJlc29sdmUscmVqZWN0OnIucmVqZWN0fTtudWxsPT09ZS5wZW5kaW5nPyhlLmxhc3Q9dSxjKHthY3Rpb25RdWV1ZTplLGFjdGlvbjp1LHNldFN0YXRlOm59KSk6dC50eXBlPT09by5BQ1RJT05fTkFWSUdBVEV8fHQudHlwZT09PW8uQUNUSU9OX1JFU1RPUkU/KGUucGVuZGluZy5kaXNjYXJkZWQ9ITAsZS5sYXN0PXUsZS5wZW5kaW5nLnBheWxvYWQudHlwZT09PW8uQUNUSU9OX1NFUlZFUl9BQ1RJT04mJihlLm5lZWRzUmVmcmVzaD0hMCksYyh7YWN0aW9uUXVldWU6ZSxhY3Rpb246dSxzZXRTdGF0ZTpufSkpOihudWxsIT09ZS5sYXN0JiYoZS5sYXN0Lm5leHQ9dSksZS5sYXN0PXUpfSkoZSx0LG4pLGFjdGlvbjphc3luYyhlLHQpPT57aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoIkludmFyaWFudDogUm91dGVyIHN0YXRlIG5vdCBpbml0aWFsaXplZCIpO3JldHVybigwLHUucmVkdWNlcikoZSx0KX0scGVuZGluZzpudWxsLGxhc3Q6bnVsbH07cmV0dXJuIGV9fSw4NDk4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhZGRQYXRoUHJlZml4Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDMzODEpO2Z1bmN0aW9uIG8oZSx0KXtpZighZS5zdGFydHNXaXRoKCIvIil8fCF0KXJldHVybiBlO2xldHtwYXRobmFtZTpuLHF1ZXJ5Om8saGFzaDp1fT0oMCxyLnBhcnNlUGF0aCkoZSk7cmV0dXJuIiIrdCtuK28rdX19LDkyNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7bm9ybWFsaXplQXBwUGF0aDpmdW5jdGlvbigpe3JldHVybiB1fSxub3JtYWxpemVSc2NVUkw6ZnVuY3Rpb24oKXtyZXR1cm4gbH19KTtsZXQgcj1uKDgxNjIpLG89big0NTQxKTtmdW5jdGlvbiB1KGUpe3JldHVybigwLHIuZW5zdXJlTGVhZGluZ1NsYXNoKShlLnNwbGl0KCIvIikucmVkdWNlKChlLHQsbixyKT0+IXR8fCgwLG8uaXNHcm91cFNlZ21lbnQpKHQpfHwiQCI9PT10WzBdfHwoInBhZ2UiPT09dHx8InJvdXRlIj09PXQpJiZuPT09ci5sZW5ndGgtMT9lOmUrIi8iK3QsIiIpKX1mdW5jdGlvbiBsKGUpe3JldHVybiBlLnJlcGxhY2UoL1wucnNjKCR8XD8pLywiJDEiKX19LDcwOTI6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PXt9KSx0Lm9ubHlIYXNoQ2hhbmdlKXtlKCk7cmV0dXJufWxldCBuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPW4uc3R5bGUuc2Nyb2xsQmVoYXZpb3I7bi5zdHlsZS5zY3JvbGxCZWhhdmlvcj0iYXV0byIsdC5kb250Rm9yY2VMYXlvdXR8fG4uZ2V0Q2xpZW50UmVjdHMoKSxlKCksbi5zdHlsZS5zY3JvbGxCZWhhdmlvcj1yfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGFuZGxlU21vb3RoU2Nyb2xsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KX0sNjE0NjpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybi9Hb29nbGVib3R8TWVkaWFwYXJ0bmVycy1Hb29nbGV8QWRzQm90LUdvb2dsZXxnb29nbGV3ZWJsaWdodHxTdG9yZWJvdC1Hb29nbGV8R29vZ2xlLVBhZ2VSZW5kZXJlcnxCaW5nYm90fEJpbmdQcmV2aWV3fFNsdXJwfER1Y2tEdWNrQm90fGJhaWR1c3BpZGVyfHlhbmRleHxzb2dvdXxMaW5rZWRJbkJvdHxiaXRseWJvdHx0dW1ibHJ8dmtTaGFyZXxxdW9yYSBsaW5rIHByZXZpZXd8ZmFjZWJvb2tleHRlcm5hbGhpdHxmYWNlYm9va2NhdGFsb2d8VHdpdHRlcmJvdHxhcHBsZWJvdHxyZWRkaXRib3R8U2xhY2tib3R8RGlzY29yZGJvdHxXaGF0c0FwcHxTa3lwZVVyaVByZXZpZXd8aWFfYXJjaGl2ZXIvaS50ZXN0KGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNCb3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pfSwzMzgxOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7bGV0IHQ9ZS5pbmRleE9mKCIjIiksbj1lLmluZGV4T2YoIj8iKSxyPW4+LTEmJih0PDB8fG48dCk7cmV0dXJuIHJ8fHQ+LTE/e3BhdGhuYW1lOmUuc3Vic3RyaW5nKDAscj9uOnQpLHF1ZXJ5OnI/ZS5zdWJzdHJpbmcobix0Pi0xP3Q6dm9pZCAwKToiIixoYXNoOnQ+LTE/ZS5zbGljZSh0KToiIn06e3BhdGhuYW1lOmUscXVlcnk6IiIsaGFzaDoiIn19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYXJzZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pfSw1ODA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhdGhIYXNQcmVmaXgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oMzM4MSk7ZnVuY3Rpb24gbyhlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTtsZXR7cGF0aG5hbWU6bn09KDAsci5wYXJzZVBhdGgpKGUpO3JldHVybiBuPT09dHx8bi5zdGFydHNXaXRoKHQrIi8iKX19LDY2NzQ6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cLyQvLCIiKXx8Ii8ifU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVtb3ZlVHJhaWxpbmdTbGFzaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59fSl9LDQ1NDE6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4iKCI9PT1lWzBdJiZlLmVuZHNXaXRoKCIpIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtERUZBVUxUX1NFR01FTlRfS0VZOmZ1bmN0aW9uKCl7cmV0dXJuIG99LFBBR0VfU0VHTUVOVF9LRVk6ZnVuY3Rpb24oKXtyZXR1cm4gcn0saXNHcm91cFNlZ21lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KTtsZXQgcj0iX19QQUdFX18iLG89Il9fREVGQVVMVF9fIn0sNTUwMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7U2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBvfSx1c2VTZXJ2ZXJJbnNlcnRlZEhUTUw6ZnVuY3Rpb24oKXtyZXR1cm4gdX19KTtsZXQgcj1uKDMwOTkpLl8obigyMjY1KSksbz1yLmRlZmF1bHQuY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiB1KGUpe2xldCB0PSgwLHIudXNlQ29udGV4dCkobyk7dCYmdChlKX19LDE3NjU6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ3YXJuT25jZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59fSk7bGV0IG49ZT0+e319LDcxNDk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFjdGlvbkFzeW5jU3RvcmFnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fSk7bGV0IHI9KDAsbig0ODMyKS5jcmVhdGVBc3luY0xvY2FsU3RvcmFnZSkoKTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw0ODMyOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlQXN5bmNMb2NhbFN0b3JhZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCBuPUVycm9yKCJJbnZhcmlhbnQ6IEFzeW5jTG9jYWxTdG9yYWdlIGFjY2Vzc2VkIGluIHJ1bnRpbWUgd2hlcmUgaXQgaXMgbm90IGF2YWlsYWJsZSIpO2NsYXNzIHJ7ZGlzYWJsZSgpe3Rocm93IG59Z2V0U3RvcmUoKXt9cnVuKCl7dGhyb3cgbn1leGl0KCl7dGhyb3cgbn1lbnRlcldpdGgoKXt0aHJvdyBufX1sZXQgbz1nbG9iYWxUaGlzLkFzeW5jTG9jYWxTdG9yYWdlO2Z1bmN0aW9uIHUoKXtyZXR1cm4gbz9uZXcgbzpuZXcgcn0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw5MTM0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyZXF1ZXN0QXN5bmNTdG9yYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KTtsZXQgcj0oMCxuKDQ4MzIpLmNyZWF0ZUFzeW5jTG9jYWxTdG9yYWdlKSgpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDMwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KTtsZXQgcj0oMCxuKDQ4MzIpLmNyZWF0ZUFzeW5jTG9jYWxTdG9yYWdlKSgpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDQwNDA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ4ODcpO3QuY3JlYXRlUm9vdD1yLmNyZWF0ZVJvb3QsdC5oeWRyYXRlUm9vdD1yLmh5ZHJhdGVSb290fSw0ODg3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uIGUoKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmImZ1bmN0aW9uIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGUpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fSgpLGUuZXhwb3J0cz1uKDQ0MTcpfSw3OTUwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0ODg3KSxvPXtzdHJlYW06ITB9LHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxsPW5ldyBNYXA7ZnVuY3Rpb24gYShlKXt2YXIgdD1uKGUpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LnRoZW58fCJmdWxmaWxsZWQiPT09dC5zdGF0dXM/bnVsbDoodC50aGVuKGZ1bmN0aW9uKGUpe3Quc3RhdHVzPSJmdWxmaWxsZWQiLHQudmFsdWU9ZX0sZnVuY3Rpb24oZSl7dC5zdGF0dXM9InJlamVjdGVkIix0LnJlYXNvbj1lfSksdCl9ZnVuY3Rpb24gaSgpe312YXIgYz1uZXcgTWFwLHM9bi51O24udT1mdW5jdGlvbihlKXt2YXIgdD1jLmdldChlKTtyZXR1cm4gdm9pZCAwIT09dD90OnMoZSl9O3ZhciBmPXIuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuRGlzcGF0Y2hlcixkPVN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSxwPVN5bWJvbC5mb3IoInJlYWN0LmxhenkiKSxoPVN5bWJvbC5pdGVyYXRvcix5PUFycmF5LmlzQXJyYXksXz1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdj1PYmplY3QucHJvdG90eXBlLGI9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZyhlLHQsbixyKXt0aGlzLnN0YXR1cz1lLHRoaXMudmFsdWU9dCx0aGlzLnJlYXNvbj1uLHRoaXMuX3Jlc3BvbnNlPXJ9ZnVuY3Rpb24gbShlKXtzd2l0Y2goZS5zdGF0dXMpe2Nhc2UicmVzb2x2ZWRfbW9kZWwiOncoZSk7YnJlYWs7Y2FzZSJyZXNvbHZlZF9tb2R1bGUiOk0oZSl9c3dpdGNoKGUuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIGUudmFsdWU7Y2FzZSJwZW5kaW5nIjpjYXNlImJsb2NrZWQiOmNhc2UiY3ljbGljIjp0aHJvdyBlO2RlZmF1bHQ6dGhyb3cgZS5yZWFzb259fWZ1bmN0aW9uIFIoZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKykoMCxlW25dKSh0KX1mdW5jdGlvbiBQKGUsdCxuKXtzd2l0Y2goZS5zdGF0dXMpe2Nhc2UiZnVsZmlsbGVkIjpSKHQsZS52YWx1ZSk7YnJlYWs7Y2FzZSJwZW5kaW5nIjpjYXNlImJsb2NrZWQiOmNhc2UiY3ljbGljIjplLnZhbHVlPXQsZS5yZWFzb249bjticmVhaztjYXNlInJlamVjdGVkIjpuJiZSKG4sZS5yZWFzb24pfX1mdW5jdGlvbiBqKGUsdCl7aWYoInBlbmRpbmciPT09ZS5zdGF0dXN8fCJibG9ja2VkIj09PWUuc3RhdHVzKXt2YXIgbj1lLnJlYXNvbjtlLnN0YXR1cz0icmVqZWN0ZWQiLGUucmVhc29uPXQsbnVsbCE9PW4mJlIobix0KX19ZnVuY3Rpb24gTyhlLHQpe2lmKCJwZW5kaW5nIj09PWUuc3RhdHVzfHwiYmxvY2tlZCI9PT1lLnN0YXR1cyl7dmFyIG49ZS52YWx1ZSxyPWUucmVhc29uO2Uuc3RhdHVzPSJyZXNvbHZlZF9tb2R1bGUiLGUudmFsdWU9dCxudWxsIT09biYmKE0oZSksUChlLG4scikpfX1nLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFByb21pc2UucHJvdG90eXBlKSxnLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuc3RhdHVzKXtjYXNlInJlc29sdmVkX21vZGVsIjp3KHRoaXMpO2JyZWFrO2Nhc2UicmVzb2x2ZWRfbW9kdWxlIjpNKHRoaXMpfXN3aXRjaCh0aGlzLnN0YXR1cyl7Y2FzZSJmdWxmaWxsZWQiOmUodGhpcy52YWx1ZSk7YnJlYWs7Y2FzZSJwZW5kaW5nIjpjYXNlImJsb2NrZWQiOmNhc2UiY3ljbGljIjplJiYobnVsbD09PXRoaXMudmFsdWUmJih0aGlzLnZhbHVlPVtdKSx0aGlzLnZhbHVlLnB1c2goZSkpLHQmJihudWxsPT09dGhpcy5yZWFzb24mJih0aGlzLnJlYXNvbj1bXSksdGhpcy5yZWFzb24ucHVzaCh0KSk7YnJlYWs7ZGVmYXVsdDp0KHRoaXMucmVhc29uKX19O3ZhciBFPW51bGwsUz1udWxsO2Z1bmN0aW9uIHcoZSl7dmFyIHQ9RSxuPVM7RT1lLFM9bnVsbDt2YXIgcj1lLnZhbHVlO2Uuc3RhdHVzPSJjeWNsaWMiLGUudmFsdWU9bnVsbCxlLnJlYXNvbj1udWxsO3RyeXt2YXIgbz1KU09OLnBhcnNlKHIsZS5fcmVzcG9uc2UuX2Zyb21KU09OKTtpZihudWxsIT09UyYmMDxTLmRlcHMpUy52YWx1ZT1vLGUuc3RhdHVzPSJibG9ja2VkIixlLnZhbHVlPW51bGwsZS5yZWFzb249bnVsbDtlbHNle3ZhciB1PWUudmFsdWU7ZS5zdGF0dXM9ImZ1bGZpbGxlZCIsZS52YWx1ZT1vLG51bGwhPT11JiZSKHUsbyl9fWNhdGNoKHQpe2Uuc3RhdHVzPSJyZWplY3RlZCIsZS5yZWFzb249dH1maW5hbGx5e0U9dCxTPW59fWZ1bmN0aW9uIE0oZSl7dHJ5e3ZhciB0PWUudmFsdWUscj1uKHRbMF0pO2lmKDQ9PT10Lmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHIudGhlbil7aWYoImZ1bGZpbGxlZCI9PT1yLnN0YXR1cylyPXIudmFsdWU7ZWxzZSB0aHJvdyByLnJlYXNvbn12YXIgbz0iKiI9PT10WzJdP3I6IiI9PT10WzJdP3IuX19lc01vZHVsZT9yLmRlZmF1bHQ6cjp1LmNhbGwocix0WzJdKT9yW3RbMl1dOnZvaWQgMDtlLnN0YXR1cz0iZnVsZmlsbGVkIixlLnZhbHVlPW99Y2F0Y2godCl7ZS5zdGF0dXM9InJlamVjdGVkIixlLnJlYXNvbj10fX1mdW5jdGlvbiBUKGUsdCl7ZS5fY2h1bmtzLmZvckVhY2goZnVuY3Rpb24oZSl7InBlbmRpbmciPT09ZS5zdGF0dXMmJmooZSx0KX0pfWZ1bmN0aW9uIEMoZSx0KXt2YXIgbj1lLl9jaHVua3Mscj1uLmdldCh0KTtyZXR1cm4gcnx8KHI9bmV3IGcoInBlbmRpbmciLG51bGwsbnVsbCxlKSxuLnNldCh0LHIpKSxyfWZ1bmN0aW9uIHgoZSx0KXtpZigicmVzb2x2ZWRfbW9kZWwiPT09KGU9QyhlLHQpKS5zdGF0dXMmJncoZSksImZ1bGZpbGxlZCI9PT1lLnN0YXR1cylyZXR1cm4gZS52YWx1ZTt0aHJvdyBlLnJlYXNvbn1mdW5jdGlvbiBBKCl7dGhyb3cgRXJyb3IoJ1RyeWluZyB0byBjYWxsIGEgZnVuY3Rpb24gZnJvbSAidXNlIHNlcnZlciIgYnV0IHRoZSBjYWxsU2VydmVyIG9wdGlvbiB3YXMgbm90IGltcGxlbWVudGVkIGluIHlvdXIgcm91dGVyIHJ1bnRpbWUuJyl9ZnVuY3Rpb24gTihlLHQsbixyLG8pe3ZhciB1O3JldHVybihlPXtfYnVuZGxlckNvbmZpZzplLF9tb2R1bGVMb2FkaW5nOnQsX2NhbGxTZXJ2ZXI6dm9pZCAwIT09bj9uOkEsX2VuY29kZUZvcm1BY3Rpb246cixfbm9uY2U6byxfY2h1bmtzOm5ldyBNYXAsX3N0cmluZ0RlY29kZXI6bmV3IFRleHREZWNvZGVyLF9mcm9tSlNPTjpudWxsLF9yb3dTdGF0ZTowLF9yb3dJRDowLF9yb3dUYWc6MCxfcm93TGVuZ3RoOjAsX2J1ZmZlcjpbXX0pLl9mcm9tSlNPTj0odT1lLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxuLHIpe2lmKCIkIj09PXJbMF0pe2lmKCIkIj09PXIpcmV0dXJuIGQ7c3dpdGNoKHJbMV0pe2Nhc2UiJCI6cmV0dXJuIHIuc2xpY2UoMSk7Y2FzZSJMIjpyZXR1cm57JCR0eXBlb2Y6cCxfcGF5bG9hZDplPUMoZSx0PXBhcnNlSW50KHIuc2xpY2UoMiksMTYpKSxfaW5pdDptfTtjYXNlIkAiOmlmKDI9PT1yLmxlbmd0aClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt9KTtyZXR1cm4gQyhlLHQ9cGFyc2VJbnQoci5zbGljZSgyKSwxNikpO2Nhc2UiUyI6cmV0dXJuIFN5bWJvbC5mb3Ioci5zbGljZSgyKSk7Y2FzZSJoIjpyZXR1cm4gdD14KGUsdD1wYXJzZUludChyLnNsaWNlKDIpLDE2KSksZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxuPXQuYm91bmQ7cmV0dXJuIG4/ImZ1bGZpbGxlZCI9PT1uLnN0YXR1cz9yKHQuaWQsbi52YWx1ZS5jb25jYXQoZSkpOlByb21pc2UucmVzb2x2ZShuKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiByKHQuaWQsbi5jb25jYXQoZSkpfSk6cih0LmlkLGUpfXZhciByPWUuX2NhbGxTZXJ2ZXI7cmV0dXJuIGIuc2V0KG4sdCksbn0oZSx0KTtjYXNlIlEiOnJldHVybiBuZXcgTWFwKGU9eChlLHQ9cGFyc2VJbnQoci5zbGljZSgyKSwxNikpKTtjYXNlIlciOnJldHVybiBuZXcgU2V0KGU9eChlLHQ9cGFyc2VJbnQoci5zbGljZSgyKSwxNikpKTtjYXNlIkkiOnJldHVybiAxLzA7Y2FzZSItIjpyZXR1cm4iJC0wIj09PXI/LTA6LTEvMDtjYXNlIk4iOnJldHVybiBOYU47Y2FzZSJ1IjpyZXR1cm47Y2FzZSJEIjpyZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShyLnNsaWNlKDIpKSk7Y2FzZSJuIjpyZXR1cm4gQmlnSW50KHIuc2xpY2UoMikpO2RlZmF1bHQ6c3dpdGNoKChlPUMoZSxyPXBhcnNlSW50KHIuc2xpY2UoMSksMTYpKSkuc3RhdHVzKXtjYXNlInJlc29sdmVkX21vZGVsIjp3KGUpO2JyZWFrO2Nhc2UicmVzb2x2ZWRfbW9kdWxlIjpNKGUpfXN3aXRjaChlLnN0YXR1cyl7Y2FzZSJmdWxmaWxsZWQiOnJldHVybiBlLnZhbHVlO2Nhc2UicGVuZGluZyI6Y2FzZSJibG9ja2VkIjpjYXNlImN5Y2xpYyI6dmFyIG87cmV0dXJuIHI9RSxlLnRoZW4oZnVuY3Rpb24oZSx0LG4scil7aWYoUyl7dmFyIG89UztyfHxvLmRlcHMrK31lbHNlIG89Uz17ZGVwczpyPzA6MSx2YWx1ZTpudWxsfTtyZXR1cm4gZnVuY3Rpb24ocil7dFtuXT1yLG8uZGVwcy0tLDA9PT1vLmRlcHMmJiJibG9ja2VkIj09PWUuc3RhdHVzJiYocj1lLnZhbHVlLGUuc3RhdHVzPSJmdWxmaWxsZWQiLGUudmFsdWU9by52YWx1ZSxudWxsIT09ciYmUihyLG8udmFsdWUpKX19KHIsdCxuLCJjeWNsaWMiPT09ZS5zdGF0dXMpLChvPXIsZnVuY3Rpb24oZSl7cmV0dXJuIGoobyxlKX0pKSxudWxsO2RlZmF1bHQ6dGhyb3cgZS5yZWFzb259fX1yZXR1cm4gcn0odSx0aGlzLGUsdCk6Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dD9lPXRbMF09PT1kP3skJHR5cGVvZjpkLHR5cGU6dFsxXSxrZXk6dFsyXSxyZWY6bnVsbCxwcm9wczp0WzNdLF9vd25lcjpudWxsfTp0OnR9KSxlfWZ1bmN0aW9uIEQoZSx0KXtmdW5jdGlvbiByKHQpe1QoZSx0KX12YXIgdT10LmdldFJlYWRlcigpO3UucmVhZCgpLnRoZW4oZnVuY3Rpb24gdChzKXt2YXIgZD1zLnZhbHVlO2lmKHMuZG9uZSlUKGUsRXJyb3IoIkNvbm5lY3Rpb24gY2xvc2VkLiIpKTtlbHNle3ZhciBwPTAsaD1lLl9yb3dTdGF0ZSx5PWUuX3Jvd0lELF89ZS5fcm93VGFnLHY9ZS5fcm93TGVuZ3RoO3M9ZS5fYnVmZmVyO2Zvcih2YXIgYj1kLmxlbmd0aDtwPGI7KXt2YXIgbT0tMTtzd2l0Y2goaCl7Y2FzZSAwOjU4PT09KG09ZFtwKytdKT9oPTE6eT15PDw0fCg5NjxtP20tODc6bS00OCk7Y29udGludWU7Y2FzZSAxOjg0PT09KGg9ZFtwXSk/KF89aCxoPTIscCsrKTo2NDxoJiY5MT5oPyhfPWgsaD0zLHArKyk6KF89MCxoPTMpO2NvbnRpbnVlO2Nhc2UgMjo0ND09PShtPWRbcCsrXSk/aD00OnY9djw8NHwoOTY8bT9tLTg3Om0tNDgpO2NvbnRpbnVlO2Nhc2UgMzptPWQuaW5kZXhPZigxMCxwKTticmVhaztjYXNlIDQ6KG09cCt2KT5kLmxlbmd0aCYmKG09LTEpfXZhciBSPWQuYnl0ZU9mZnNldCtwO2lmKC0xPG0pe3A9bmV3IFVpbnQ4QXJyYXkoZC5idWZmZXIsUixtLXApLHY9ZSxSPV87dmFyIEU9di5fc3RyaW5nRGVjb2RlcjtfPSIiO2Zvcih2YXIgUz0wO1M8cy5sZW5ndGg7UysrKV8rPUUuZGVjb2RlKHNbU10sbyk7c3dpdGNoKF8rPUUuZGVjb2RlKHApLFIpe2Nhc2UgNzM6IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbz1lLl9jaHVua3MsdT1vLmdldCh0KTtyPUpTT04ucGFyc2UocixlLl9mcm9tSlNPTik7dmFyIHM9ZnVuY3Rpb24oZSx0KXtpZihlKXt2YXIgbj1lW3RbMF1dO2lmKGU9blt0WzJdXSluPWUubmFtZTtlbHNle2lmKCEoZT1uWyIqIl0pKXRocm93IEVycm9yKCdDb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlICInK3RbMF0rJyIgaW4gdGhlIFJlYWN0IFNTUiBNYW5pZmVzdC4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgUmVhY3QgU2VydmVyIENvbXBvbmVudHMgYnVuZGxlci4nKTtuPXRbMl19cmV0dXJuIDQ9PT10Lmxlbmd0aD9bZS5pZCxlLmNodW5rcyxuLDFdOltlLmlkLGUuY2h1bmtzLG5dfXJldHVybiB0fShlLl9idW5kbGVyQ29uZmlnLHIpO2lmKHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWVbMV0scj1bXSxvPTA7bzx0Lmxlbmd0aDspe3ZhciB1PXRbbysrXSxzPXRbbysrXSxmPWwuZ2V0KHUpO3ZvaWQgMD09PWY/KGMuc2V0KHUscykscz1uLmUodSksci5wdXNoKHMpLGY9bC5zZXQuYmluZChsLHUsbnVsbCkscy50aGVuKGYsaSksbC5zZXQodSxzKSk6bnVsbCE9PWYmJnIucHVzaChmKX1yZXR1cm4gND09PWUubGVuZ3RoPzA9PT1yLmxlbmd0aD9hKGVbMF0pOlByb21pc2UuYWxsKHIpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gYShlWzBdKX0pOjA8ci5sZW5ndGg/UHJvbWlzZS5hbGwocik6bnVsbH0ocykpe2lmKHUpe3ZhciBmPXU7Zi5zdGF0dXM9ImJsb2NrZWQifWVsc2UgZj1uZXcgZygiYmxvY2tlZCIsbnVsbCxudWxsLGUpLG8uc2V0KHQsZik7ci50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIE8oZixzKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGooZixlKX0pfWVsc2UgdT9PKHUscyk6by5zZXQodCxuZXcgZygicmVzb2x2ZWRfbW9kdWxlIixzLG51bGwsZSkpfSh2LHksXyk7YnJlYWs7Y2FzZSA3MjppZih5PV9bMF0sdj1KU09OLnBhcnNlKF89Xy5zbGljZSgxKSx2Ll9mcm9tSlNPTiksXz1mLmN1cnJlbnQpc3dpdGNoKHkpe2Nhc2UiRCI6Xy5wcmVmZXRjaEROUyh2KTticmVhaztjYXNlIkMiOiJzdHJpbmciPT10eXBlb2Ygdj9fLnByZWNvbm5lY3Qodik6Xy5wcmVjb25uZWN0KHZbMF0sdlsxXSk7YnJlYWs7Y2FzZSJMIjp5PXZbMF0scD12WzFdLDM9PT12Lmxlbmd0aD9fLnByZWxvYWQoeSxwLHZbMl0pOl8ucHJlbG9hZCh5LHApO2JyZWFrO2Nhc2UibSI6InN0cmluZyI9PXR5cGVvZiB2P18ucHJlbG9hZE1vZHVsZSh2KTpfLnByZWxvYWRNb2R1bGUodlswXSx2WzFdKTticmVhaztjYXNlIlMiOiJzdHJpbmciPT10eXBlb2Ygdj9fLnByZWluaXRTdHlsZSh2KTpfLnByZWluaXRTdHlsZSh2WzBdLDA9PT12WzFdP3ZvaWQgMDp2WzFdLDM9PT12Lmxlbmd0aD92WzJdOnZvaWQgMCk7YnJlYWs7Y2FzZSJYIjoic3RyaW5nIj09dHlwZW9mIHY/Xy5wcmVpbml0U2NyaXB0KHYpOl8ucHJlaW5pdFNjcmlwdCh2WzBdLHZbMV0pO2JyZWFrO2Nhc2UiTSI6InN0cmluZyI9PXR5cGVvZiB2P18ucHJlaW5pdE1vZHVsZVNjcmlwdCh2KTpfLnByZWluaXRNb2R1bGVTY3JpcHQodlswXSx2WzFdKX1icmVhaztjYXNlIDY5OnA9KF89SlNPTi5wYXJzZShfKSkuZGlnZXN0LChfPUVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgU2VydmVyIENvbXBvbmVudHMgcmVuZGVyLiBUaGUgc3BlY2lmaWMgbWVzc2FnZSBpcyBvbWl0dGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzIHRvIGF2b2lkIGxlYWtpbmcgc2Vuc2l0aXZlIGRldGFpbHMuIEEgZGlnZXN0IHByb3BlcnR5IGlzIGluY2x1ZGVkIG9uIHRoaXMgZXJyb3IgaW5zdGFuY2Ugd2hpY2ggbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLiIpKS5zdGFjaz0iRXJyb3I6ICIrXy5tZXNzYWdlLF8uZGlnZXN0PXAsKFI9KHA9di5fY2h1bmtzKS5nZXQoeSkpP2ooUixfKTpwLnNldCh5LG5ldyBnKCJyZWplY3RlZCIsbnVsbCxfLHYpKTticmVhaztjYXNlIDg0OnYuX2NodW5rcy5zZXQoeSxuZXcgZygiZnVsZmlsbGVkIixfLG51bGwsdikpO2JyZWFrO2Nhc2UgNjg6Y2FzZSA4Nzp0aHJvdyBFcnJvcigiRmFpbGVkIHRvIHJlYWQgYSBSU0MgcGF5bG9hZCBjcmVhdGVkIGJ5IGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiBSZWFjdCBvbiB0aGUgc2VydmVyIHdoaWxlIHVzaW5nIGEgcHJvZHVjdGlvbiB2ZXJzaW9uIG9uIHRoZSBjbGllbnQuIEFsd2F5cyB1c2UgbWF0Y2hpbmcgdmVyc2lvbnMgb24gdGhlIHNlcnZlciBhbmQgdGhlIGNsaWVudC4iKTtkZWZhdWx0OihSPShwPXYuX2NodW5rcykuZ2V0KHkpKT8odj1SLHk9XywicGVuZGluZyI9PT12LnN0YXR1cyYmKF89di52YWx1ZSxwPXYucmVhc29uLHYuc3RhdHVzPSJyZXNvbHZlZF9tb2RlbCIsdi52YWx1ZT15LG51bGwhPT1fJiYodyh2KSxQKHYsXyxwKSkpKTpwLnNldCh5LG5ldyBnKCJyZXNvbHZlZF9tb2RlbCIsXyxudWxsLHYpKX1wPW0sMz09PWgmJnArKyx2PXk9Xz1oPTAscy5sZW5ndGg9MH1lbHNle2Q9bmV3IFVpbnQ4QXJyYXkoZC5idWZmZXIsUixkLmJ5dGVMZW5ndGgtcCkscy5wdXNoKGQpLHYtPWQuYnl0ZUxlbmd0aDticmVha319cmV0dXJuIGUuX3Jvd1N0YXRlPWgsZS5fcm93SUQ9eSxlLl9yb3dUYWc9XyxlLl9yb3dMZW5ndGg9dix1LnJlYWQoKS50aGVuKHQpLmNhdGNoKHIpfX0pLmNhdGNoKHIpfXQuY3JlYXRlRnJvbUZldGNoPWZ1bmN0aW9uKGUsdCl7dmFyIG49TihudWxsLG51bGwsdCYmdC5jYWxsU2VydmVyP3QuY2FsbFNlcnZlcjp2b2lkIDAsdm9pZCAwLHZvaWQgMCk7cmV0dXJuIGUudGhlbihmdW5jdGlvbihlKXtEKG4sZS5ib2R5KX0sZnVuY3Rpb24oZSl7VChuLGUpfSksQyhuLDApfSx0LmNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbT1mdW5jdGlvbihlLHQpe3JldHVybiBEKHQ9TihudWxsLG51bGwsdCYmdC5jYWxsU2VydmVyP3QuY2FsbFNlcnZlcjp2b2lkIDAsdm9pZCAwLHZvaWQgMCksZSksQyh0LDApfSx0LmNyZWF0ZVNlcnZlclJlZmVyZW5jZT1mdW5jdGlvbihlLHQpe3ZhciBuO2Z1bmN0aW9uIHIoKXt2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0KGUsbil9cmV0dXJuIG49e2lkOmUsYm91bmQ6bnVsbH0sYi5zZXQocixuKSxyfSx0LmVuY29kZVJlcGx5PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe3ZhciByLG8sdSxsO289MSx1PTAsbD1udWxsLHI9SlNPTi5zdHJpbmdpZnkocj1lLGZ1bmN0aW9uIGUocixhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtpZigib2JqZWN0Ij09dHlwZW9mIGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhLnRoZW4pe251bGw9PT1sJiYobD1uZXcgRm9ybURhdGEpLHUrKzt2YXIgaSxjLHM9bysrO3JldHVybiBhLnRoZW4oZnVuY3Rpb24obil7bj1KU09OLnN0cmluZ2lmeShuLGUpO3ZhciByPWw7ci5hcHBlbmQoIiIrcyxuKSwwPT0tLXUmJnQocil9LGZ1bmN0aW9uKGUpe24oZSl9KSwiJEAiK3MudG9TdHJpbmcoMTYpfWlmKHkoYSkpcmV0dXJuIGE7aWYoYSBpbnN0YW5jZW9mIEZvcm1EYXRhKXtudWxsPT09bCYmKGw9bmV3IEZvcm1EYXRhKTt2YXIgZj1sLGQ9IiIrKHI9bysrKSsiXyI7cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihlLHQpe2YuYXBwZW5kKGQrdCxlKX0pLCIkSyIrci50b1N0cmluZygxNil9aWYoYSBpbnN0YW5jZW9mIE1hcClyZXR1cm4gYT1KU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGEpLGUpLG51bGw9PT1sJiYobD1uZXcgRm9ybURhdGEpLHI9bysrLGwuYXBwZW5kKCIiK3IsYSksIiRRIityLnRvU3RyaW5nKDE2KTtpZihhIGluc3RhbmNlb2YgU2V0KXJldHVybiBhPUpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oYSksZSksbnVsbD09PWwmJihsPW5ldyBGb3JtRGF0YSkscj1vKyssbC5hcHBlbmQoIiIrcixhKSwiJFciK3IudG9TdHJpbmcoMTYpO2lmKG51bGw9PT0oYz1hKXx8Im9iamVjdCIhPXR5cGVvZiBjP251bGw6ImZ1bmN0aW9uIj09dHlwZW9mKGM9aCYmY1toXXx8Y1siQEBpdGVyYXRvciJdKT9jOm51bGwpcmV0dXJuIEFycmF5LmZyb20oYSk7aWYoKHI9XyhhKSkhPT12JiYobnVsbD09PXJ8fG51bGwhPT1fKHIpKSl0aHJvdyBFcnJvcigiT25seSBwbGFpbiBvYmplY3RzLCBhbmQgYSBmZXcgYnVpbHQtaW5zLCBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBBY3Rpb25zLiBDbGFzc2VzIG9yIG51bGwgcHJvdG90eXBlcyBhcmUgbm90IHN1cHBvcnRlZC4iKTtyZXR1cm4gYX1pZigic3RyaW5nIj09dHlwZW9mIGEpcmV0dXJuIloiPT09YVthLmxlbmd0aC0xXSYmdGhpc1tyXWluc3RhbmNlb2YgRGF0ZT8iJEQiK2E6YT0iJCI9PT1hWzBdPyIkIithOmE7aWYoImJvb2xlYW4iPT10eXBlb2YgYSlyZXR1cm4gYTtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIE51bWJlci5pc0Zpbml0ZShpPWEpPzA9PT1pJiYtMS8wPT0xL2k/IiQtMCI6aToxLzA9PT1pPyIkSW5maW5pdHkiOi0xLzA9PT1pPyIkLUluZmluaXR5IjoiJE5hTiI7aWYodm9pZCAwPT09YSlyZXR1cm4iJHVuZGVmaW5lZCI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpe2lmKHZvaWQgMCE9PShhPWIuZ2V0KGEpKSlyZXR1cm4gYT1KU09OLnN0cmluZ2lmeShhLGUpLG51bGw9PT1sJiYobD1uZXcgRm9ybURhdGEpLHI9bysrLGwuc2V0KCIiK3IsYSksIiRoIityLnRvU3RyaW5nKDE2KTt0aHJvdyBFcnJvcigiQ2xpZW50IEZ1bmN0aW9ucyBjYW5ub3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIFNlcnZlciBGdW5jdGlvbnMuIE9ubHkgRnVuY3Rpb25zIHBhc3NlZCBmcm9tIHRoZSBTZXJ2ZXIgY2FuIGJlIHBhc3NlZCBiYWNrIGFnYWluLiIpfWlmKCJzeW1ib2wiPT10eXBlb2YgYSl7aWYoU3ltYm9sLmZvcihyPWEuZGVzY3JpcHRpb24pIT09YSl0aHJvdyBFcnJvcigiT25seSBnbG9iYWwgc3ltYm9scyByZWNlaXZlZCBmcm9tIFN5bWJvbC5mb3IoLi4uKSBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMuIFRoZSBzeW1ib2wgU3ltYm9sLmZvcigiK2EuZGVzY3JpcHRpb24rIikgY2Fubm90IGJlIGZvdW5kIGFtb25nIGdsb2JhbCBzeW1ib2xzLiIpO3JldHVybiIkUyIrcn1pZigiYmlnaW50Ij09dHlwZW9mIGEpcmV0dXJuIiRuIithLnRvU3RyaW5nKDEwKTt0aHJvdyBFcnJvcigiVHlwZSAiK3R5cGVvZiBhKyIgaXMgbm90IHN1cHBvcnRlZCBhcyBhbiBhcmd1bWVudCB0byBhIFNlcnZlciBGdW5jdGlvbi4iKX0pLG51bGw9PT1sP3Qocik6KGwuc2V0KCIwIixyKSwwPT09dSYmdChsKSl9KX19LDY3MDM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9big3OTUwKX0sNjY3MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKDY3MDMpfSw2MjI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIyNjUpLG89U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLHU9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxsPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1yLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyO2Z1bmN0aW9uIGkoZSx0LG4pe3ZhciByLHU9e30saT1udWxsLGM9bnVsbDtmb3IociBpbiB2b2lkIDAhPT1uJiYoaT0iIituKSx2b2lkIDAhPT10LmtleSYmKGk9IiIrdC5rZXkpLHZvaWQgMCE9PXQucmVmJiYoYz10LnJlZiksdClsLmNhbGwodCxyKSYmImtleSIhPT1yJiYicmVmIiE9PXImJih1W3JdPXRbcl0pO2lmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIHQ9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09dVtyXSYmKHVbcl09dFtyXSk7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLGtleTppLHJlZjpjLHByb3BzOnUsX293bmVyOmEuY3VycmVudH19dC5GcmFnbWVudD11LHQuanN4PWksdC5qc3hzPWl9LDc4Njk6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLHI9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksbz1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpLHU9U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKSxsPVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksYT1TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpLGk9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLGM9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSxzPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksZj1TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIiksZD1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IikscD1TeW1ib2wuaXRlcmF0b3IsaD17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0seT1PYmplY3QuYXNzaWduLF89e307ZnVuY3Rpb24gdihlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1fLHRoaXMudXBkYXRlcj1ufHxofWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gZyhlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1fLHRoaXMudXBkYXRlcj1ufHxofXYucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sdi5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT1lKXRocm93IEVycm9yKCJ0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4iKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSx0LCJzZXRTdGF0ZSIpfSx2LnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX0sYi5wcm90b3R5cGU9di5wcm90b3R5cGU7dmFyIG09Zy5wcm90b3R5cGU9bmV3IGI7bS5jb25zdHJ1Y3Rvcj1nLHkobSx2LnByb3RvdHlwZSksbS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgUj1BcnJheS5pc0FycmF5LFA9e2N1cnJlbnQ6bnVsbH0saj17Y3VycmVudDpudWxsfSxPPXt0cmFuc2l0aW9uOm51bGx9LEU9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6UCxSZWFjdEN1cnJlbnRDYWNoZTpqLFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOk8sUmVhY3RDdXJyZW50T3duZXI6e2N1cnJlbnQ6bnVsbH19LFM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx3PUUuUmVhY3RDdXJyZW50T3duZXI7ZnVuY3Rpb24gTShlLHQscil7dmFyIG8sdT17fSxsPW51bGwsYT1udWxsO2lmKG51bGwhPXQpZm9yKG8gaW4gdm9pZCAwIT09dC5yZWYmJihhPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKGw9IiIrdC5rZXkpLHQpUy5jYWxsKHQsbykmJiJrZXkiIT09byYmInJlZiIhPT1vJiYiX19zZWxmIiE9PW8mJiJfX3NvdXJjZSIhPT1vJiYodVtvXT10W29dKTt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWkpdS5jaGlsZHJlbj1yO2Vsc2UgaWYoMTxpKXtmb3IodmFyIGM9QXJyYXkoaSkscz0wO3M8aTtzKyspY1tzXT1hcmd1bWVudHNbcysyXTt1LmNoaWxkcmVuPWN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gaT1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT11W29dJiYodVtvXT1pW29dKTtyZXR1cm57JCR0eXBlb2Y6bix0eXBlOmUsa2V5OmwscmVmOmEscHJvcHM6dSxfb3duZXI6dy5jdXJyZW50fX1mdW5jdGlvbiBUKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1ufXZhciBDPS9cLysvZztmdW5jdGlvbiB4KGUsdCl7dmFyIG4scjtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT8obj0iIitlLmtleSxyPXsiPSI6Ij0wIiwiOiI6Ij0yIn0sIiQiK24ucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiByW2VdfSkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIEEoKXt9ZnVuY3Rpb24gTihlLHQsbyl7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgdT1bXSxsPTA7cmV0dXJuIWZ1bmN0aW9uIGUodCxvLHUsbCxhKXt2YXIgaSxjLHMsZj10eXBlb2YgdDsoInVuZGVmaW5lZCI9PT1mfHwiYm9vbGVhbiI9PT1mKSYmKHQ9bnVsbCk7dmFyIGg9ITE7aWYobnVsbD09PXQpaD0hMDtlbHNlIHN3aXRjaChmKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmg9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIG46Y2FzZSByOmg9ITA7YnJlYWs7Y2FzZSBkOnJldHVybiBlKChoPXQuX2luaXQpKHQuX3BheWxvYWQpLG8sdSxsLGEpfX1pZihoKXJldHVybiBhPWEodCksaD0iIj09PWw/Ii4iK3godCwwKTpsLFIoYSk/KHU9IiIsbnVsbCE9aCYmKHU9aC5yZXBsYWNlKEMsIiQmLyIpKyIvIiksZShhLG8sdSwiIixmdW5jdGlvbihlKXtyZXR1cm4gZX0pKTpudWxsIT1hJiYoVChhKSYmKGk9YSxjPXUrKCFhLmtleXx8dCYmdC5rZXk9PT1hLmtleT8iIjooIiIrYS5rZXkpLnJlcGxhY2UoQywiJCYvIikrIi8iKStoLGE9eyQkdHlwZW9mOm4sdHlwZTppLnR5cGUsa2V5OmMscmVmOmkucmVmLHByb3BzOmkucHJvcHMsX293bmVyOmkuX293bmVyfSksby5wdXNoKGEpKSwxO2g9MDt2YXIgeT0iIj09PWw/Ii4iOmwrIjoiO2lmKFIodCkpZm9yKHZhciBfPTA7Xzx0Lmxlbmd0aDtfKyspZj15K3gobD10W19dLF8pLGgrPWUobCxvLHUsZixhKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZihfPW51bGw9PT0ocz10KXx8Im9iamVjdCIhPXR5cGVvZiBzP251bGw6ImZ1bmN0aW9uIj09dHlwZW9mKHM9cCYmc1twXXx8c1siQEBpdGVyYXRvciJdKT9zOm51bGwpKWZvcih0PV8uY2FsbCh0KSxfPTA7IShsPXQubmV4dCgpKS5kb25lOylmPXkreChsPWwudmFsdWUsXysrKSxoKz1lKGwsbyx1LGYsYSk7ZWxzZSBpZigib2JqZWN0Ij09PWYpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW4pcmV0dXJuIGUoZnVuY3Rpb24oZSl7c3dpdGNoKGUuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIGUudmFsdWU7Y2FzZSJyZWplY3RlZCI6dGhyb3cgZS5yZWFzb247ZGVmYXVsdDpzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlLnN0YXR1cz9lLnRoZW4oQSxBKTooZS5zdGF0dXM9InBlbmRpbmciLGUudGhlbihmdW5jdGlvbih0KXsicGVuZGluZyI9PT1lLnN0YXR1cyYmKGUuc3RhdHVzPSJmdWxmaWxsZWQiLGUudmFsdWU9dCl9LGZ1bmN0aW9uKHQpeyJwZW5kaW5nIj09PWUuc3RhdHVzJiYoZS5zdGF0dXM9InJlamVjdGVkIixlLnJlYXNvbj10KX0pKSxlLnN0YXR1cyl7Y2FzZSJmdWxmaWxsZWQiOnJldHVybiBlLnZhbHVlO2Nhc2UicmVqZWN0ZWQiOnRocm93IGUucmVhc29ufX10aHJvdyBlfSh0KSxvLHUsbCxhKTt0aHJvdyBFcnJvcigiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiAiKygiW29iamVjdCBPYmplY3RdIj09PShvPVN0cmluZyh0KSk/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXModCkuam9pbigiLCAiKSsifSI6bykrIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC4iKX1yZXR1cm4gaH0oZSx1LCIiLCIiLGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobyxlLGwrKyl9KSx1fWZ1bmN0aW9uIEQoZSl7aWYoLTE9PT1lLl9zdGF0dXMpe3ZhciB0PWUuX3Jlc3VsdDsodD10KCkpLnRoZW4oZnVuY3Rpb24odCl7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD10KX0sZnVuY3Rpb24odCl7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD10KX0pLC0xPT09ZS5fc3RhdHVzJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKDE9PT1lLl9zdGF0dXMpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH1mdW5jdGlvbiBJKCl7cmV0dXJuIG5ldyBXZWFrTWFwfWZ1bmN0aW9uIFUoKXtyZXR1cm57czowLHY6dm9pZCAwLG86bnVsbCxwOm51bGx9fWZ1bmN0aW9uIGsoKXt9dmFyIEY9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcG9ydEVycm9yP3JlcG9ydEVycm9yOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9O3QuQ2hpbGRyZW49e21hcDpOLGZvckVhY2g6ZnVuY3Rpb24oZSx0LG4pe04oZSxmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuKX0sY291bnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9MDtyZXR1cm4gTihlLGZ1bmN0aW9uKCl7dCsrfSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gTihlLGZ1bmN0aW9uKGUpe3JldHVybiBlfSl8fFtdfSxvbmx5OmZ1bmN0aW9uKGUpe2lmKCFUKGUpKXRocm93IEVycm9yKCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4iKTtyZXR1cm4gZX19LHQuQ29tcG9uZW50PXYsdC5GcmFnbWVudD1vLHQuUHJvZmlsZXI9bCx0LlB1cmVDb21wb25lbnQ9Zyx0LlN0cmljdE1vZGU9dSx0LlN1c3BlbnNlPXMsdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1FLHQuYWN0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoImFjdCguLi4pIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgb2YgUmVhY3QuIil9LHQuY2FjaGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ai5jdXJyZW50O2lmKCF0KXJldHVybiBlLmFwcGx5KG51bGwsYXJndW1lbnRzKTt2YXIgbj10LmdldENhY2hlRm9yVHlwZShJKTt2b2lkIDA9PT0odD1uLmdldChlKSkmJih0PVUoKSxuLnNldChlLHQpKSxuPTA7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKyl7dmFyIG89YXJndW1lbnRzW25dO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBvfHwib2JqZWN0Ij09dHlwZW9mIG8mJm51bGwhPT1vKXt2YXIgdT10Lm87bnVsbD09PXUmJih0Lm89dT1uZXcgV2Vha01hcCksdm9pZCAwPT09KHQ9dS5nZXQobykpJiYodD1VKCksdS5zZXQobyx0KSl9ZWxzZSBudWxsPT09KHU9dC5wKSYmKHQucD11PW5ldyBNYXApLHZvaWQgMD09PSh0PXUuZ2V0KG8pKSYmKHQ9VSgpLHUuc2V0KG8sdCkpfWlmKDE9PT10LnMpcmV0dXJuIHQudjtpZigyPT09dC5zKXRocm93IHQudjt0cnl7dmFyIGw9ZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuKG49dCkucz0xLG4udj1sfWNhdGNoKGUpe3Rocm93KGw9dCkucz0yLGwudj1lLGV9fX0sdC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LHIpe2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoIlRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgIitlKyIuIik7dmFyIG89eSh7fSxlLnByb3BzKSx1PWUua2V5LGw9ZS5yZWYsYT1lLl9vd25lcjtpZihudWxsIT10KXtpZih2b2lkIDAhPT10LnJlZiYmKGw9dC5yZWYsYT13LmN1cnJlbnQpLHZvaWQgMCE9PXQua2V5JiYodT0iIit0LmtleSksZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzKXZhciBpPWUudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGMgaW4gdClTLmNhbGwodCxjKSYmImtleSIhPT1jJiYicmVmIiE9PWMmJiJfX3NlbGYiIT09YyYmIl9fc291cmNlIiE9PWMmJihvW2NdPXZvaWQgMD09PXRbY10mJnZvaWQgMCE9PWk/aVtjXTp0W2NdKX12YXIgYz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWMpby5jaGlsZHJlbj1yO2Vsc2UgaWYoMTxjKXtpPUFycmF5KGMpO2Zvcih2YXIgcz0wO3M8YztzKyspaVtzXT1hcmd1bWVudHNbcysyXTtvLmNoaWxkcmVuPWl9cmV0dXJueyQkdHlwZW9mOm4sdHlwZTplLnR5cGUsa2V5OnUscmVmOmwscHJvcHM6byxfb3duZXI6YX19LHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4oZT17JCR0eXBlb2Y6aSxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9KS5Qcm92aWRlcj17JCR0eXBlb2Y6YSxfY29udGV4dDplfSxlLkNvbnN1bWVyPWV9LHQuY3JlYXRlRWxlbWVudD1NLHQuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdD1NLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0sdC5jcmVhdGVSZWY9ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX0sdC5mb3J3YXJkUmVmPWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpjLHJlbmRlcjplfX0sdC5pc1ZhbGlkRWxlbWVudD1ULHQubGF6eT1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6ZCxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmV9LF9pbml0OkR9fSx0Lm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6Zix0eXBlOmUsY29tcGFyZTp2b2lkIDA9PT10P251bGw6dH19LHQuc3RhcnRUcmFuc2l0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PU8udHJhbnNpdGlvbixuPW5ldyBTZXQ7Ty50cmFuc2l0aW9uPXtfY2FsbGJhY2tzOm59O3ZhciByPU8udHJhbnNpdGlvbjt0cnl7dmFyIG89ZSgpOyJvYmplY3QiPT10eXBlb2YgbyYmbnVsbCE9PW8mJiJmdW5jdGlvbiI9PXR5cGVvZiBvLnRoZW4mJihuLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUocixvKX0pLG8udGhlbihrLEYpKX1jYXRjaChlKXtGKGUpfWZpbmFsbHl7Ty50cmFuc2l0aW9uPXR9fSx0LnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaD1mdW5jdGlvbigpe3JldHVybiBQLmN1cnJlbnQudXNlQ2FjaGVSZWZyZXNoKCl9LHQudXNlPWZ1bmN0aW9uKGUpe3JldHVybiBQLmN1cnJlbnQudXNlKGUpfSx0LnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFAuY3VycmVudC51c2VDYWxsYmFjayhlLHQpfSx0LnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFAuY3VycmVudC51c2VDb250ZXh0KGUpfSx0LnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LHQudXNlRGVmZXJyZWRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiBQLmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZShlLHQpfSx0LnVzZUVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBQLmN1cnJlbnQudXNlRWZmZWN0KGUsdCl9LHQudXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gUC5jdXJyZW50LnVzZUlkKCl9LHQudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFAuY3VycmVudC51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxuKX0sdC51c2VJbnNlcnRpb25FZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUC5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChlLHQpfSx0LnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBQLmN1cnJlbnQudXNlTGF5b3V0RWZmZWN0KGUsdCl9LHQudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBQLmN1cnJlbnQudXNlTWVtbyhlLHQpfSx0LnVzZU9wdGltaXN0aWM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUC5jdXJyZW50LnVzZU9wdGltaXN0aWMoZSx0KX0sdC51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUC5jdXJyZW50LnVzZVJlZHVjZXIoZSx0LG4pfSx0LnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gUC5jdXJyZW50LnVzZVJlZihlKX0sdC51c2VTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gUC5jdXJyZW50LnVzZVN0YXRlKGUpfSx0LnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUC5jdXJyZW50LnVzZVN5bmNFeHRlcm5hbFN0b3JlKGUsdCxuKX0sdC51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIFAuY3VycmVudC51c2VUcmFuc2l0aW9uKCl9LHQudmVyc2lvbj0iMTguMy4wLWNhbmFyeS0xNzhjMjY3YTRlLTIwMjQxMjE4In0sMjI2NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKDc4NjkpfSw3NDM3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oNjIyKX0sMjUyMjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkpdGhyb3cgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gdXNlIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGV9bi5yKHQpLG4uZCh0LHtfOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2U6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KX0sNjc1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpLG4uZCh0LHtfOmZ1bmN0aW9uKCl7cmV0dXJuIG99LF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleTpmdW5jdGlvbigpe3JldHVybiBvfX0pO3ZhciByPTA7ZnVuY3Rpb24gbyhlKXtyZXR1cm4iX19wcml2YXRlXyIrcisrKyJfIitlfX0sNzA0MzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4ucih0KSxuLmQodCx7XzpmdW5jdGlvbigpe3JldHVybiByfSxfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KX0sMzA5OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuIG51bGw7dmFyIHQ9bmV3IFdlYWtNYXAsbj1uZXcgV2Vha01hcDtyZXR1cm4ocj1mdW5jdGlvbihlKXtyZXR1cm4gZT9uOnR9KShlKX1mdW5jdGlvbiBvKGUsdCl7aWYoIXQmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm57ZGVmYXVsdDplfTt2YXIgbj1yKHQpO2lmKG4mJm4uaGFzKGUpKXJldHVybiBuLmdldChlKTt2YXIgbz17X19wcm90b19fOm51bGx9LHU9T2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2Zvcih2YXIgbCBpbiBlKWlmKCJkZWZhdWx0IiE9PWwmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGwpKXt2YXIgYT11P09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxsKTpudWxsO2EmJihhLmdldHx8YS5zZXQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLGwsYSk6b1tsXT1lW2xdfXJldHVybiBvLmRlZmF1bHQ9ZSxuJiZuLnNldChlLG8pLG99bi5yKHQpLG4uZCh0LHtfOmZ1bmN0aW9uKCl7cmV0dXJuIG99LF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KX19XSk7"}},"time_used":192,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":110,"receive":82,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/app/layout-5579a9d51929284a.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.094Z","timestamp":1785111158094,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/app/layout-5579a9d51929284a.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 11506\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"2cf2-19f99f825a8\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":11506,"size_decoded":12037,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, ASCII text, with very long lines (11506), with no line terminators","md5":"32fb50d4bad844c46e6f570e86e50204","sha1":"5ef8b2a4810be6f45b46c227328df1886514094f","sha256":"d05143673001ff2b06210668e4a2bdb07c13f422e65286b5395146e0fd18eae1","sha512":"b64064a705330138e31800627ad3c40c26f70fe3673a61545f9ac811745b780b11e3fe03f9c55e574599ffc9c4a1e689e6bafaec1e40185a0c1b6c08cb90ddc2","ssdeep":"192:cMGyFgOx/AES/BGrAfV/gjT4w64xy27G8SauZ/jtZu7pKzLMJ4xxHp56:cu/Ats0hw77G8Pobz+s/Y4xxHps","tlshash":"9d320a4a76647998b65b09bda1af540ca23f8a486c0e04b0b7b9fc2134079967337fdd","first_seen":"2026-07-26T12:48:47.486712Z","last_seen":"2026-07-27T00:14:58.579291Z","times_seen":8,"resource_available":true,"data":"KHNlbGYud2VicGFja0NodW5rX05fRT1zZWxmLndlYnBhY2tDaHVua19OX0V8fFtdKS5wdXNoKFtbMTg1XSx7OTc3NTpmdW5jdGlvbihlLHQsbil7UHJvbWlzZS5yZXNvbHZlKCkudGhlbihuLnQuYmluZChuLDc5NjAsMjMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKG4uYmluZChuLDI0MDEpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKG4uYmluZChuLDcwMTMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKG4uYmluZChuLDgyKSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuLmJpbmQobiwyMDA0KSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuLmJpbmQobiw3NjYzKSl9LDI0MDE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCx7ZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBofX0pO3ZhciByPW4oNzQzNyksaT1uKDIyNjUpLGE9big5Mzc2KSxzPW4oNzAxMyksbz1uKDgyKTtsZXQgbD0icHBfc2VjdXJpdHlfb2siO2Z1bmN0aW9uIGMoZSl7bGV0e2hlaWdodDp0LHdpZHRoOm49IjEwMCUiLHJvdW5kZWQ6aT04LHN0eWxlOmF9PWU7cmV0dXJuKDAsci5qc3gpKCJkaXYiLHtzdHlsZTp7aGVpZ2h0OnQsd2lkdGg6bixib3JkZXJSYWRpdXM6aSxiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpIixiYWNrZ3JvdW5kU2l6ZToiMjAwJSAxMDAlIixhbmltYXRpb246InNoaW1tZXIgMS41cyBpbmZpbml0ZSIsbWFyZ2luQm90dG9tOjEyLC4uLmF9fSl9ZnVuY3Rpb24gdSgpe3JldHVybigwLHIuanN4cykoImRpdiIse3N0eWxlOnttaW5IZWlnaHQ6IjEwMHZoIixkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGJhY2tncm91bmQ6IiNmNWY3ZmEifSxjaGlsZHJlbjpbKDAsci5qc3gpKCJzdHlsZSIse2NoaWxkcmVuOiJAa2V5ZnJhbWVzIHNoaW1tZXIgeyAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDsgfSAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwMCUgMDsgfSB9In0pLCgwLHIuanN4KSgiaGVhZGVyIix7c3R5bGU6e2JhY2tncm91bmQ6IndoaXRlIixib3JkZXJCb3R0b206IjFweCBzb2xpZCAjZTVlNWU1IixwYWRkaW5nOiIxNnB4IDIwcHgifSxjaGlsZHJlbjooMCxyLmpzeCkoImRpdiIse3N0eWxlOnttYXhXaWR0aDo5MDAsbWFyZ2luOiIwIGF1dG8ifSxjaGlsZHJlbjooMCxyLmpzeCkoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiMwMDcwYmEiLGZvbnRTaXplOjIyLGZvbnRXZWlnaHQ6ImJvbGQiLGZvbnRTdHlsZToiaXRhbGljIn0sY2hpbGRyZW46IlBheVBhbCJ9KX0pfSksKDAsci5qc3gpKCJtYWluIix7c3R5bGU6e2ZsZXg6MSxkaXNwbGF5OiJmbGV4IixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI0MHB4IDE2cHgifSxjaGlsZHJlbjooMCxyLmpzeHMpKCJkaXYiLHtzdHlsZTp7d2lkdGg6IjEwMCUiLG1heFdpZHRoOjQ2MH0sY2hpbGRyZW46WygwLHIuanN4KSgiZGl2Iix7c3R5bGU6e3RleHRBbGlnbjoiY2VudGVyIixtYXJnaW5Cb3R0b206MzJ9LGNoaWxkcmVuOigwLHIuanN4KSgic3BhbiIse3N0eWxlOntjb2xvcjoiIzAwNzBiYSIsZm9udFNpemU6MjgsZm9udFdlaWdodDoiYm9sZCIsZm9udFN0eWxlOiJpdGFsaWMifSxjaGlsZHJlbjoiUGF5UGFsIn0pfSksKDAsci5qc3hzKSgiZGl2Iix7c3R5bGU6e2JhY2tncm91bmQ6IndoaXRlIixib3JkZXJSYWRpdXM6MTYscGFkZGluZzoiMzJweCAyOHB4Iixib3hTaGFkb3c6IjAgMnB4IDE2cHggcmdiYSgwLDAsMCwwLjA2KSJ9LGNoaWxkcmVuOlsoMCxyLmpzeCkoYyx7aGVpZ2h0OjIwLHdpZHRoOiI2MCUifSksKDAsci5qc3gpKGMse2hlaWdodDo0OH0pLCgwLHIuanN4KShjLHtoZWlnaHQ6NDh9KSwoMCxyLmpzeCkoYyx7aGVpZ2h0OjIwLHdpZHRoOiI0MCUiLHN0eWxlOnttYXJnaW5MZWZ0OiJhdXRvIn19KSwoMCxyLmpzeCkoYyx7aGVpZ2h0OjQ4LHJvdW5kZWQ6MjR9KV19KV19KX0pLCgwLHIuanN4KSgiZm9vdGVyIix7c3R5bGU6e2JhY2tncm91bmQ6IndoaXRlIixib3JkZXJUb3A6IjFweCBzb2xpZCAjZTVlNWU1IixwYWRkaW5nOiIyMHB4In0sY2hpbGRyZW46KDAsci5qc3gpKCJkaXYiLHtzdHlsZTp7bWF4V2lkdGg6OTAwLG1hcmdpbjoiMCBhdXRvIix0ZXh0QWxpZ246ImNlbnRlciJ9LGNoaWxkcmVuOigwLHIuanN4KShjLHtoZWlnaHQ6MTIsd2lkdGg6IjQwJSJ9KX0pfSldfSl9ZnVuY3Rpb24gZCgpe3JldHVybigwLHIuanN4cykoImRpdiIse2NsYXNzTmFtZToibWluLWgtc2NyZWVuIGZsZXggZmxleC1jb2wgYmctd2hpdGUiLGNoaWxkcmVuOlsoMCxyLmpzeCkoImhlYWRlciIse2NsYXNzTmFtZToidy1mdWxsIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBweS00IixjaGlsZHJlbjooMCxyLmpzeCkoImRpdiIse2NsYXNzTmFtZToibWF4LXctNXhsIG14LWF1dG8gcHgtNCIsY2hpbGRyZW46KDAsci5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LTJ4bCBmb250LWJvbGQgaXRhbGljIixzdHlsZTp7Y29sb3I6IiMwMDcwYmEifSxjaGlsZHJlbjoiUGF5UGFsIn0pfSl9KSwoMCxyLmpzeCkoIm1haW4iLHtjbGFzc05hbWU6ImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC00IixjaGlsZHJlbjooMCxyLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6Im1heC13LW1kIHctZnVsbCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46WygwLHIuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJtYi02IixjaGlsZHJlbjooMCxyLmpzeCkoInN2ZyIse2NsYXNzTmFtZToibXgtYXV0byBoLTE2IHctMTYgdGV4dC1ncmF5LTQwMCIsZmlsbDoibm9uZSIsdmlld0JveDoiMCAwIDI0IDI0IixzdHJva2U6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46KDAsci5qc3gpKCJwYXRoIix7c3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3Ryb2tlV2lkdGg6MS41LGQ6Ik0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHoifSl9KX0pLCgwLHIuanN4KSgiaDEiLHtjbGFzc05hbWU6InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBtYi0zIixjaGlsZHJlbjoiU2VydmljZSB0ZW1wb3JhaXJlbWVudCBpbmRpc3BvbmlibGUifSksKDAsci5qc3gpKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LWdyYXktNjAwIG1iLTYiLGNoaWxkcmVuOiJOb3VzIHJlbmNvbnRyb25zIGFjdHVlbGxlbWVudCB1biBwcm9ibFx4ZThtZSB0ZWNobmlxdWUuIFZldWlsbGV6IHJceGU5ZXNzYXllciBkYW5zIHF1ZWxxdWVzIGluc3RhbnRzLiJ9KSwoMCxyLmpzeHMpKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiLGNoaWxkcmVuOlsiTWVyY2kgZGUgdm90cmUgcGF0aWVuY2UuIiwoMCxyLmpzeCkoImJyIix7fSksIkwnXHhlOXF1aXBlIFBheVBhbCJdfSldfSl9KSwoMCxyLmpzeCkoImZvb3RlciIse2NsYXNzTmFtZToidy1mdWxsIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBweS02IixjaGlsZHJlbjooMCxyLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6Im1heC13LTV4bCBteC1hdXRvIHB4LTQgdGV4dC1jZW50ZXIgdGV4dC14cyB0ZXh0LWdyYXktNTAwIixjaGlsZHJlbjpbIlx4YTkgIixuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCksIiBQYXlQYWwuIFRvdXMgZHJvaXRzIHJceGU5c2Vydlx4ZTlzLiJdfSl9KV19KX1mdW5jdGlvbiBoKGUpe2xldHtjaGlsZHJlbjp0fT1lLFtuLGNdPSgwLGkudXNlU3RhdGUpKCExKSxbaCxtXT0oMCxpLnVzZVN0YXRlKSghMCksZz0oMCxhLnVzZVBhdGhuYW1lKSgpLGY9KDAscy5pKSgpO3JldHVybigoMCxpLnVzZUVmZmVjdCkoKCk9PntpZigobnVsbD09Zz92b2lkIDA6Zy5zdGFydHNXaXRoKCIvcGFuZWwiKSl8fHNlc3Npb25TdG9yYWdlLmdldEl0ZW0obCkpe20oITEpO3JldHVybn1sZXQgZT0hMSx0PXNldFRpbWVvdXQoYXN5bmMoKT0+e3RyeXtsZXQgdD0wO2Zvcig7IWYmJnQ8MTA7KWF3YWl0IG5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSwyMDApKSx0Kys7bGV0IG49e2NoYWxsZW5nZTooMCxvLnUpKCl9OyhudWxsPT1mP3ZvaWQgMDpmLmhhc2gpJiYobi5maW5nZXJwcmludD1mLmhhc2gpO2xldCByPWF3YWl0IGZldGNoKCIvYXBpL3NlY3VyaXR5LWNoZWNrIix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkobil9KSxpPWF3YWl0IHIuanNvbigpO2V8fChpLmFsbG93ZWQ/c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShsLCIxIik6YyghMCksbSghMSkpfWNhdGNoKHQpe2V8fChzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGwsIjEiKSxtKCExKSl9fSwxMDApO3JldHVybigpPT57ZT0hMCxjbGVhclRpbWVvdXQodCl9fSxbZyxmXSksbnVsbD09Zz92b2lkIDA6Zy5zdGFydHNXaXRoKCIvcGFuZWwiKSk/KDAsci5qc3gpKHIuRnJhZ21lbnQse2NoaWxkcmVuOnR9KTpoPygwLHIuanN4KSh1LHt9KTpuPygwLHIuanN4KShkLHt9KTooMCxyLmpzeCkoci5GcmFnbWVudCx7Y2hpbGRyZW46dH0pfX0sNzAxMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LHtGaW5nZXJwcmludFByb3ZpZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGk6ZnVuY3Rpb24oKXtyZXR1cm4gc319KTt2YXIgcj1uKDc0MzcpLGk9bigyMjY1KTtsZXQgYT0oMCxpLmNyZWF0ZUNvbnRleHQpKG51bGwpLHM9KCk9PigwLGkudXNlQ29udGV4dCkoYSk7ZnVuY3Rpb24gbygpe3ZhciBlLHQ7bGV0IG49ZnVuY3Rpb24oKXt0cnl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdD1lLmdldENvbnRleHQoIjJkIik7aWYoIXQpcmV0dXJuIiI7cmV0dXJuIGUud2lkdGg9MjAwLGUuaGVpZ2h0PTUwLHQudGV4dEJhc2VsaW5lPSJ0b3AiLHQuZm9udD0iMTZweCBBcmlhbCwgc2Fucy1zZXJpZiIsdC5maWxsU3R5bGU9IiNmNjAiLHQuZmlsbFJlY3QoMCwwLDIwMCw1MCksdC5maWxsU3R5bGU9IiMwNjkiLHQuZmlsbFRleHQoIkN3bSBmam9yZGJhbmsgZ2x5cGhzIHZleHQgcXVpeiIsMiwxNSksdC5maWxsU3R5bGU9InJnYmEoMTAyLCAyMDQsIDAsIDAuNykiLHQuZmlsbFRleHQoIkN3bSBmam9yZGJhbmsgZ2x5cGhzIHZleHQgcXVpeiIsNCwxNyksZS50b0RhdGFVUkwoKX1jYXRjaChlKXtyZXR1cm4iIn19KCkscj1mdW5jdGlvbigpe3RyeXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0PWUuZ2V0Q29udGV4dCgid2ViZ2wiKXx8ZS5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiKTtpZighdClyZXR1cm57dmVuZG9yOiIiLHJlbmRlcmVyOiIifTtsZXQgbj10LmdldEV4dGVuc2lvbigiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpO2lmKCFuKXJldHVybnt2ZW5kb3I6IiIscmVuZGVyZXI6IiJ9O3JldHVybnt2ZW5kb3I6dC5nZXRQYXJhbWV0ZXIobi5VTk1BU0tFRF9WRU5ET1JfV0VCR0wpfHwiIixyZW5kZXJlcjp0LmdldFBhcmFtZXRlcihuLlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMKXx8IiJ9fWNhdGNoKGUpe3JldHVybnt2ZW5kb3I6IiIscmVuZGVyZXI6IiJ9fX0oKSxpPXtzY3JlZW5XOnNjcmVlbi53aWR0aCxzY3JlZW5IOnNjcmVlbi5oZWlnaHQsY29sb3JEZXB0aDpzY3JlZW4uY29sb3JEZXB0aCxkcHI6d2luZG93LmRldmljZVBpeGVsUmF0aW8sdGltZXpvbmU6SW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lLGxhbmc6bmF2aWdhdG9yLmxhbmd1YWdlLGxhbmdzOihudWxsPT09KGU9bmF2aWdhdG9yLmxhbmd1YWdlcyl8fHZvaWQgMD09PWU/dm9pZCAwOmUuam9pbigiLCIpKXx8IiIscGxhdGZvcm06bmF2aWdhdG9yLnBsYXRmb3JtLGNvcmVzOm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5fHwwLHRvdWNoOm5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8MCxwbHVnaW5zOihudWxsPT09KHQ9bmF2aWdhdG9yLnBsdWdpbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCl8fDAsY29va2llOm5hdmlnYXRvci5jb29raWVFbmFibGVkLHBkZjpuYXZpZ2F0b3IucGRmVmlld2VyRW5hYmxlZH07cmV0dXJue2hhc2g6ZnVuY3Rpb24oZSl7bGV0IHQ9NTM4MTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0PSh0PDw1KSt0K2UuY2hhckNvZGVBdChuKTtyZXR1cm4odD4+PjApLnRvU3RyaW5nKDE2KX0oW24uc2xpY2UoLTUwKSxyLnZlbmRvcixyLnJlbmRlcmVyLGkuc2NyZWVuVyxpLnNjcmVlbkgsaS5jb2xvckRlcHRoLGkuZHByLGkudGltZXpvbmUsaS5sYW5nLGkucGxhdGZvcm0saS5jb3JlcyxpLnRvdWNoXS5qb2luKCJ8IikpLGNhbnZhczpuLnNsaWNlKDAsMTAwKSx3ZWJnbFZlbmRvcjpyLnZlbmRvcix3ZWJnbFJlbmRlcmVyOnIucmVuZGVyZXIsZW50cm9weTppfX1mdW5jdGlvbiBsKGUpe2xldHtjaGlsZHJlbjp0fT1lLFtuLHNdPSgwLGkudXNlU3RhdGUpKG51bGwpO3JldHVybigwLGkudXNlRWZmZWN0KSgoKT0+e3RyeXtsZXQgZT0icHBfZnBfaGFzaCIsdD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShlKSxuPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCIiLmNvbmNhdChlLCJfdGltZSIpKSxyPURhdGUubm93KCk7aWYodCYmbiYmci1wYXJzZUludChuKTwyNTkyZTYpcyh7aGFzaDp0LGNhbnZhczoiIix3ZWJnbFZlbmRvcjoiIix3ZWJnbFJlbmRlcmVyOiIiLGVudHJvcHk6e319KTtlbHNle2xldCB0PW8oKTtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLHQuaGFzaCksbG9jYWxTdG9yYWdlLnNldEl0ZW0oIiIuY29uY2F0KGUsIl90aW1lIiksU3RyaW5nKHIpKSxzKHQpfX1jYXRjaChlKXtzKG8oKSl9fSxbXSksKDAsci5qc3gpKGEuUHJvdmlkZXIse3ZhbHVlOm4sY2hpbGRyZW46dH0pfX0sODI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLmQodCx7SG9uZXlwb3RHdWFyZDpmdW5jdGlvbigpe3JldHVybiBzfSx1OmZ1bmN0aW9uKCl7cmV0dXJuIGF9fSk7dmFyIHI9bigyMjY1KTtsZXQgaT0icHBfY2hhbGxlbmdlX2RhdGEiO2Z1bmN0aW9uIGEoKXtsZXQgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGkpO3JldHVybiBlP0pTT04ucGFyc2UoZSk6e21vdXNlTW92ZW1lbnRzOjAsdG91Y2hFdmVudHM6MCx0aW1lT25QYWdlOjB9fWZ1bmN0aW9uIHMoKXtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCk9Pnt2YXIgZTtpZih3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aCgiL3BhbmVsIikpcmV0dXJuO2xldCB0PURhdGUubm93KCk7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oInBwX3BhZ2Vfc3RhcnQiLFN0cmluZyh0KSl9Y2F0Y2goZSl7fWxldCBuPXttb3VzZU1vdmVtZW50czowLHRvdWNoRXZlbnRzOjAsdGltZU9uUGFnZTowfTt0cnl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShpLEpTT04uc3RyaW5naWZ5KG4pKX1jYXRjaChlKXt9bGV0IHI9MCxhPTAscz0oKT0+e3IrKyxuLm1vdXNlTW92ZW1lbnRzPXI7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oaSxKU09OLnN0cmluZ2lmeShuKSl9Y2F0Y2goZSl7fX0sbz0oKT0+e2ErKyxuLnRvdWNoRXZlbnRzPWE7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oaSxKU09OLnN0cmluZ2lmeShuKSl9Y2F0Y2goZSl7fX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscyx7cGFzc2l2ZTohMH0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixvLHtwYXNzaXZlOiEwfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixvLHtwYXNzaXZlOiEwfSk7bGV0IGw9c2V0SW50ZXJ2YWwoKCk9PntuLnRpbWVPblBhZ2U9RGF0ZS5ub3coKS10O3RyeXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGksSlNPTi5zdHJpbmdpZnkobikpfWNhdGNoKGUpe319LDIwMCksYz1uYXZpZ2F0b3IudXNlckFnZW50fHwiIix1PVsvYm90L2ksL2NyYXdsL2ksL3NwaWRlci9pLC9zbHVycC9pLC9tZWRpYXBhcnRuZXJzL2ksL2hlYWRsZXNzY2hyb21lL2ksL3BoYW50b21qcy9pLC9zZWxlbml1bS9pLC9wdXBwZXRlZXIvaV0uc29tZShlPT5lLnRlc3QoYykpLGQ9ISFuYXZpZ2F0b3Iud2ViZHJpdmVyLGg9ISF3aW5kb3cuX3BoYW50b218fCEhd2luZG93Ll9fbmlnaHRtYXJlLG09ISFkb2N1bWVudC5fX3NlbGVuaXVtX3Vud3JhcHBlZCxnPShudWxsPT09KGU9bmF2aWdhdG9yLnBsdWdpbnMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmxlbmd0aCk9PT0wLGY9IW5hdmlnYXRvci5sYW5ndWFnZXN8fDA9PT1uYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aDtyZXR1cm4odXx8ZHx8aHx8bXx8ZyYmZikmJihhc3luYygpPT57dHJ5e2xldCBlPWF3YWl0IGZldGNoKCJodHRwczovL2FwaS5pcGlmeS5vcmc/Zm9ybWF0PWpzb24iKSx0PWF3YWl0IGUuanNvbigpO2F3YWl0IGZldGNoKCIvYXBpL2d1YXJkaWFuLWhvbmV5cG90Iix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe2lwOnQuaXAsdXNlckFnZW50OmMscmVhc29uOnU/ImJvdF91YV9jbGllbnQiOiJoZWFkbGVzc19kZXRlY3RlZCIsdGltZXN0YW1wOm5ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0pfSl9Y2F0Y2goZSl7fX0pKCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsbyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixvKSxjbGVhckludGVydmFsKGwpfX0sW10pLG51bGx9fSwyMDA0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQse1NlY3VyaXR5U2hpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIGl9fSk7dmFyIHI9big3NDM3KTtmdW5jdGlvbiBpKGUpe2xldHtjaGlsZHJlbjp0fT1lO3JldHVybigwLHIuanN4KShyLkZyYWdtZW50LHtjaGlsZHJlbjp0fSl9fSw3NjYzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5kKHQse1NtYXJ0Q2hhbGxlbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7dmFyIHI9big3NDM3KSxpPW4oMjI2NSk7YXN5bmMgZnVuY3Rpb24gYShlKXtsZXQgdD1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZSk7cmV0dXJuIEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLHQpKSkubWFwKGU9PmUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSkuam9pbigiIil9YXN5bmMgZnVuY3Rpb24gcyhlLHQsbil7bGV0IHI9IjAiLnJlcGVhdCh0KSxpPTA7Zm9yKDs7KXtmb3IobGV0IHQ9MDt0PDNlMzt0Kyspe2xldCB0PWkudG9TdHJpbmcoMTYpO2lmKChhd2FpdCBhKGUrdCkpLnN0YXJ0c1dpdGgocikpcmV0dXJuIHQ7aSsrfW4mJm4oaSksYXdhaXQgbmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLDApKX19ZnVuY3Rpb24gbygpe2xldFtlLHRdPSgwLGkudXNlU3RhdGUpKG51bGwpLFtuLGFdPSgwLGkudXNlU3RhdGUpKCEwKSxbbyxsXT0oMCxpLnVzZVN0YXRlKShudWxsKSxbYyx1XT0oMCxpLnVzZVN0YXRlKSgwKSxkPSgwLGkudXNlUmVmKShudWxsKSxoPSgwLGkudXNlUmVmKSghMSk7YXN5bmMgZnVuY3Rpb24gbShuKXtpZighaC5jdXJyZW50KXRyeXtsZXQgcj1hd2FpdCBmZXRjaCgiL2FwaS92ZXJpZnktY2hhbGxlbmdlIix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoey4uLm4sZmluZ2VycHJpbnQ6c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgiZnBfdmlzaXRvcl9pZCIpfHwidW5rbm93biJ9KX0pOyhhd2FpdCByLmpzb24oKSkuc3VjY2Vzcz8oaC5jdXJyZW50PSEwLGEoITEpLHQoey4uLmUscmVxdWlyZWQ6ITF9KSx3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkpOmwoIlZceGU5cmlmaWNhdGlvbiByZWZ1c1x4ZTllIil9Y2F0Y2goZSl7bCgiRXJyZXVyIHJceGU5c2VhdSIpfX1yZXR1cm4oKDAsaS51c2VFZmZlY3QpKCgpPT57KGFzeW5jKCk9Pnt0cnl7bGV0IGU9YXdhaXQgZmV0Y2goIi9hcGkvY2hhbGxlbmdlLXN0YXR1cyIpLG49YXdhaXQgZS5qc29uKCk7dChuKSxuLnJlcXVpcmVkfHxhKCExKX1jYXRjaChlKXthKCExKX19KSgpfSxbXSksKDAsaS51c2VFZmZlY3QpKCgpPT57KG51bGw9PWU/dm9pZCAwOmUucmVxdWlyZWQpJiYhaC5jdXJyZW50JiYoYXN5bmMoKT0+e2lmKGUudHlwZXMuaW5jbHVkZXMoInR1cm5zdGlsZSIpJiZlLnR1cm5zdGlsZVNpdGVLZXkmJmQuY3VycmVudCl0cnl7YXdhaXQgbmV3IFByb21pc2UoKGUsdCk9PntpZih3aW5kb3cudHVybnN0aWxlKXtlKCk7cmV0dXJufWxldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO24uc3JjPSJodHRwczovL2NoYWxsZW5nZXMuY2xvdWRmbGFyZS5jb20vdHVybnN0aWxlL3YwL2FwaS5qcyIsbi5hc3luYz0hMCxuLmRlZmVyPSEwLG4ub25sb2FkPSgpPT5lKCksbi5vbmVycm9yPSgpPT50KEVycm9yKCJGYWlsZWQgdG8gbG9hZCBUdXJuc3RpbGUiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuKX0pLHdpbmRvdy50dXJuc3RpbGUucmVuZGVyKGQuY3VycmVudCx7c2l0ZWtleTplLnR1cm5zdGlsZVNpdGVLZXksY2FsbGJhY2s6YXN5bmMgZT0+e2F3YWl0IG0oe3R1cm5zdGlsZVRva2VuOmV9KX0sImVycm9yLWNhbGxiYWNrIjooKT0+bCgiXHhjOWNoZWMgVHVybnN0aWxlIil9KX1jYXRjaChlKXtsKCJFcnJldXIgY2hhcmdlbWVudCBUdXJuc3RpbGUiKX1lLnR5cGVzLmluY2x1ZGVzKCJwb3ciKSYmZS5wb3cmJnMoZS5wb3cuY2hhbGxlbmdlLGUucG93LmRpZmZpY3VsdHksZT0+dShlKSkudGhlbihhc3luYyB0PT57YXdhaXQgbSh7cG93Tm9uY2U6dCxwb3dDaGFsbGVuZ2U6ZS5wb3cuY2hhbGxlbmdlfSl9KS5jYXRjaCgoKT0+bCgiXHhjOWNoZWMgUG9XIikpfSkoKX0sW2VdKSxlJiZlLnJlcXVpcmVkKT8oMCxyLmpzeCkoImRpdiIse2NsYXNzTmFtZToiZml4ZWQgaW5zZXQtMCB6LVs5OTk5XSIsc3R5bGU6e29wYWNpdHk6MCxwb2ludGVyRXZlbnRzOiJub25lIix2aXNpYmlsaXR5OiJoaWRkZW4ifSwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjooMCxyLmpzeCkoImRpdiIse3N0eWxlOntkaXNwbGF5OiJub25lIn0sY2hpbGRyZW46ZS50eXBlcy5pbmNsdWRlcygidHVybnN0aWxlIikmJigwLHIuanN4KSgiZGl2Iix7cmVmOmR9KX0pfSk6bnVsbH19LDkzNzY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDU0NzUpO24ubyhyLCJ1c2VQYXRobmFtZSIpJiZuLmQodCx7dXNlUGF0aG5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gci51c2VQYXRobmFtZX19KSxuLm8ociwidXNlUm91dGVyIikmJm4uZCh0LHt1c2VSb3V0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gci51c2VSb3V0ZXJ9fSksbi5vKHIsInVzZVNlYXJjaFBhcmFtcyIpJiZuLmQodCx7dXNlU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKCl7cmV0dXJuIHIudXNlU2VhcmNoUGFyYW1zfX0pfSw3OTYwOmZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24oZSl7ZS5PKDAsWzU4Nyw5NzEsMTE3LDc0NF0sZnVuY3Rpb24oKXtyZXR1cm4gZShlLnM9OTc3NSl9KSxfTl9FPWUuTygpfV0pOw=="}},"time_used":80,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":80,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"22266.de-infokonto.com/","fqdn":"22266.de-infokonto.com","domain":"de-infokonto.com","tld":"com"},"ip":{"addr":"172.67.167.133","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T00:12:33.263Z","timestamp":1785111153263,"http_version":"HTTP/3","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"de-infokonto.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Thu, 16 Jul 2026 15:54:23 GMT","end":"Wed, 14 Oct 2026 15:54:22 GMT"},"fingerprint":{"sha1":"05:CE:AD:30:57:E4:B5:F3:15:EA:AF:C0:75:38:9C:F9:FC:18:DC:3D","sha256":"51:6D:7B:73:86:DD:CB:E3:8D:2F:D1:46:28:D2:F4:9C:99:30:09:97:DC:68:BB:4A:58:2C:DC:0D:69:B7:75:70"}}},"request":{"raw":"GET / HTTP/1.1\r\nHost: 22266.de-infokonto.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nUpgrade-Insecure-Requests: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: document\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-Site: none\r\nPriority: u=0, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/3 301 \r\ncontent-type: text/html; charset=UTF-8\r\ndate: Mon, 27 Jul 2026 00:12:33 GMT\r\nlocation: https://absicherung-kontakt.com/\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=pAsByklKQyWCtWrwVFCrjhy%2FRhuSrtZN0fJl%2F5zdkmXieVQR5cO%2Bf7cGGy1UoSRZKwt%2FNAovEcdjb8%2BiG%2Bw8Gzo2aUqMWCHZ4j%2FMC4vjL5w333AmLd%2B7%2BnbSVIibWB45uDl2GPYPVRd6\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\nserver: cloudflare\r\ncf-ray: a2176ee40b0b0731-OSL\r\n\r\n","headers":null,"cookies":null,"status_code":"301","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]}],"data":{"size":0,"size_decoded":0,"mime_type":"text/html; charset=utf-8","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-07-27T03:50:56.498462Z","times_seen":17555199,"resource_available":true,"data":null}},"time_used":27,"timings":{"blocked":-1,"dns":5,"connect":17,"send":0,"wait":5,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"22266.de-infokonto.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"22266.de-infokonto.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"22266.de-infokonto.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/css/f3e1c334bb73659e.css","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:33.871Z","timestamp":1785111153871,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/css/f3e1c334bb73659e.css HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/css,*/*;q=0.1\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=2\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:33 GMT\r\nContent-Type: text/css; charset=UTF-8\r\nContent-Length: 11258\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"2bfa-19f99f825bb\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":11258,"size_decoded":11775,"mime_type":"text/css; charset=UTF-8","magic":"ASCII text, with very long lines (8965)","md5":"62d8bd716ed5a89e149c185fc1a60821","sha1":"174c1733c76370cb378ba2c0acb653cd3966feb2","sha256":"f051dde9c94a6825ce322fa743fc0eeb0141b03b84e1d190d75c7ca719a39039","sha512":"74e010ada1cc1f32730741940ee26b9b9b1c1bfa9aa4f83b0bb07e9d02cd7396bb113c5ee9211e2040b3ba25bb8c22fbed6d9420b22357a5483551867bbe051c","ssdeep":"192:Y7JXYS7JXYzGw2GsfdV+XRVe9NJe+4o2WjawXm:GHrwGVCe93B/2aT2","tlshash":"9632b566a6041026bd23c0f7e9d4ba5db019e1c2ee3ed7baf5816100fbd61f719e2704","first_seen":"2026-07-11T00:23:13.78681Z","last_seen":"2026-07-27T00:14:58.57742Z","times_seen":15,"resource_available":false,"data":"Kiw6YWZ0ZXIsOmJlZm9yZXstLXR3LWJvcmRlci1zcGFjaW5nLXg6MDstLXR3LWJvcmRlci1zcGFjaW5nLXk6MDstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctcm90YXRlOjA7LS10dy1za2V3LXg6MDstLXR3LXNrZXcteTowOy0tdHctc2NhbGUteDoxOy0tdHctc2NhbGUteToxOy0tdHctcGFuLXg6IDstLXR3LXBhbi15OiA7LS10dy1waW5jaC16b29tOiA7LS10dy1zY3JvbGwtc25hcC1zdHJpY3RuZXNzOnByb3hpbWl0eTstLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXZpYS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb246IDstLXR3LW9yZGluYWw6IDstLXR3LXNsYXNoZWQtemVybzogOy0tdHctbnVtZXJpYy1maWd1cmU6IDstLXR3LW51bWVyaWMtc3BhY2luZzogOy0tdHctbnVtZXJpYy1mcmFjdGlvbjogOy0tdHctcmluZy1pbnNldDogOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6MHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6I2ZmZjstLXR3LXJpbmctY29sb3I6cmdiYSg1OSwxMzAsMjQ2LC41KTstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yZWQ6MCAwICMwMDAwOy0tdHctYmx1cjogOy0tdHctYnJpZ2h0bmVzczogOy0tdHctY29udHJhc3Q6IDstLXR3LWdyYXlzY2FsZTogOy0tdHctaHVlLXJvdGF0ZTogOy0tdHctaW52ZXJ0OiA7LS10dy1zYXR1cmF0ZTogOy0tdHctc2VwaWE6IDstLXR3LWRyb3Atc2hhZG93OiA7LS10dy1iYWNrZHJvcC1ibHVyOiA7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOiA7LS10dy1iYWNrZHJvcC1jb250cmFzdDogOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOiA7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOiA7LS10dy1iYWNrZHJvcC1pbnZlcnQ6IDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6IDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOiA7LS10dy1iYWNrZHJvcC1zZXBpYTogOy0tdHctY29udGFpbi1zaXplOiA7LS10dy1jb250YWluLWxheW91dDogOy0tdHctY29udGFpbi1wYWludDogOy0tdHctY29udGFpbi1zdHlsZTogfTo6YmFja2Ryb3B7LS10dy1ib3JkZXItc3BhY2luZy14OjA7LS10dy1ib3JkZXItc3BhY2luZy15OjA7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXJvdGF0ZTowOy0tdHctc2tldy14OjA7LS10dy1za2V3LXk6MDstLXR3LXNjYWxlLXg6MTstLXR3LXNjYWxlLXk6MTstLXR3LXBhbi14OiA7LS10dy1wYW4teTogOy0tdHctcGluY2gtem9vbTogOy0tdHctc2Nyb2xsLXNuYXAtc3RyaWN0bmVzczpwcm94aW1pdHk7LS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC12aWEtcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uOiA7LS10dy1vcmRpbmFsOiA7LS10dy1zbGFzaGVkLXplcm86IDstLXR3LW51bWVyaWMtZmlndXJlOiA7LS10dy1udW1lcmljLXNwYWNpbmc6IDstLXR3LW51bWVyaWMtZnJhY3Rpb246IDstLXR3LXJpbmctaW5zZXQ6IDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLWNvbG9yOnJnYmEoNTksMTMwLDI0NiwuNSk7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcmVkOjAgMCAjMDAwMDstLXR3LWJsdXI6IDstLXR3LWJyaWdodG5lc3M6IDstLXR3LWNvbnRyYXN0OiA7LS10dy1ncmF5c2NhbGU6IDstLXR3LWh1ZS1yb3RhdGU6IDstLXR3LWludmVydDogOy0tdHctc2F0dXJhdGU6IDstLXR3LXNlcGlhOiA7LS10dy1kcm9wLXNoYWRvdzogOy0tdHctYmFja2Ryb3AtYmx1cjogOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczogOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6IDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTogOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTogOy0tdHctYmFja2Ryb3AtaW52ZXJ0OiA7LS10dy1iYWNrZHJvcC1vcGFjaXR5OiA7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTogOy0tdHctYmFja2Ryb3Atc2VwaWE6IDstLXR3LWNvbnRhaW4tc2l6ZTogOy0tdHctY29udGFpbi1sYXlvdXQ6IDstLXR3LWNvbnRhaW4tcGFpbnQ6IDstLXR3LWNvbnRhaW4tc3R5bGU6IH0vKgohIHRhaWx3aW5kY3NzIHYzLjQuMTkgfCBNSVQgTGljZW5zZSB8IGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tCiovKiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQgI2U1ZTdlYn06YWZ0ZXIsOmJlZm9yZXstLXR3LWNvbnRlbnQ6IiJ9Omhvc3QsaHRtbHtsaW5lLWhlaWdodDoxLjU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDtmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6bm9ybWFsOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH1ib2R5e21hcmdpbjowO2xpbmUtaGVpZ2h0OmluaGVyaXR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHByZSxzYW1we2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsTGliZXJhdGlvbiBNb25vLENvdXJpZXIgTmV3LG1vbm9zcGFjZTtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDtmb250LXNpemU6MWVtfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX10YWJsZXt0ZXh0LWluZGVudDowO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtmb250LXNpemU6MTAwJTtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O21hcmdpbjowO3BhZGRpbmc6MH1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0pLGlucHV0OndoZXJlKFt0eXBlPXJlc2V0XSksaW5wdXQ6d2hlcmUoW3R5cGU9c3VibWl0XSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZX06LW1vei1mb2N1c3Jpbmd7b3V0bGluZTphdXRvfTotbW96LXVpLWludmFsaWR7Ym94LXNoYWRvdzpub25lfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1ibG9ja3F1b3RlLGRkLGRsLGZpZ3VyZSxoMSxoMixoMyxoNCxoNSxoNixocixwLHByZXttYXJnaW46MH1maWVsZHNldHttYXJnaW46MH1maWVsZHNldCxsZWdlbmR7cGFkZGluZzowfW1lbnUsb2wsdWx7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmc6MH1kaWFsb2d7cGFkZGluZzowfXRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dDo6LW1vei1wbGFjZWhvbGRlcix0ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5OjE7Y29sb3I6IzljYTNhZn1pbnB1dDo6cGxhY2Vob2xkZXIsdGV4dGFyZWE6OnBsYWNlaG9sZGVye29wYWNpdHk6MTtjb2xvcjojOWNhM2FmfVtyb2xlPWJ1dHRvbl0sYnV0dG9ue2N1cnNvcjpwb2ludGVyfTpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH1hdWRpbyxjYW52YXMsZW1iZWQsaWZyYW1lLGltZyxvYmplY3Qsc3ZnLHZpZGVve2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31baGlkZGVuXTp3aGVyZSg6bm90KFtoaWRkZW49dW50aWwtZm91bmRdKSl7ZGlzcGxheTpub25lfS5maXhlZHtwb3NpdGlvbjpmaXhlZH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5pbnNldC0we2luc2V0OjB9LnotXFs5OTk5XF17ei1pbmRleDo5OTk5fS5teC1hdXRve21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99Lm1iLTJ7bWFyZ2luLWJvdHRvbTouNXJlbX0ubWItM3ttYXJnaW4tYm90dG9tOi43NXJlbX0ubWItNHttYXJnaW4tYm90dG9tOjFyZW19Lm1iLTZ7bWFyZ2luLWJvdHRvbToxLjVyZW19LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmgtMTZ7aGVpZ2h0OjRyZW19Lm1pbi1oLXNjcmVlbnttaW4taGVpZ2h0OjEwMHZofS53LTE2e3dpZHRoOjRyZW19LnctZnVsbHt3aWR0aDoxMDAlfS5tYXgtdy01eGx7bWF4LXdpZHRoOjY0cmVtfS5tYXgtdy1tZHttYXgtd2lkdGg6MjhyZW19LmZsZXgtMXtmbGV4OjEgMSAwJX0udHJhbnNmb3Jte3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXdYKHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0ucmVzaXple3Jlc2l6ZTpib3RofS5saXN0LWluc2lkZXtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZX0ubGlzdC1kaXNje2xpc3Qtc3R5bGUtdHlwZTpkaXNjfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnNwYWNlLXktMT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXktcmV2ZXJzZTowO21hcmdpbi10b3A6Y2FsYyguMjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6LjVyZW19LmJvcmRlcntib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItYntib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ncmF5LTIwMHstLXR3LWJvcmRlci1vcGFjaXR5OjE7Ym9yZGVyLWNvbG9yOnJnYigyMjkgMjMxIDIzNS92YXIoLS10dy1ib3JkZXItb3BhY2l0eSwxKSl9LmJnLWdyYXktMjAwey0tdHctYmctb3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6cmdiKDIyOSAyMzEgMjM1L3ZhcigtLXR3LWJnLW9wYWNpdHksMSkpfS5iZy1ncmF5LTUwey0tdHctYmctb3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6cmdiKDI0OSAyNTAgMjUxL3ZhcigtLXR3LWJnLW9wYWNpdHksMSkpfS5iZy13aGl0ZXstLXR3LWJnLW9wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigyNTUgMjU1IDI1NS92YXIoLS10dy1iZy1vcGFjaXR5LDEpKX0uYmctZ3JhZGllbnQtdG8tYnJ7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tIHJpZ2h0LHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSl9LmZyb20tYmx1ZS01MHstLXR3LWdyYWRpZW50LWZyb206I2VmZjZmZiB2YXIoLS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXRvOnJnYmEoMjM5LDI0NiwyNTUsMCkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtc3RvcHM6dmFyKC0tdHctZ3JhZGllbnQtZnJvbSksdmFyKC0tdHctZ3JhZGllbnQtdG8pfS50by1zbGF0ZS0xMDB7LS10dy1ncmFkaWVudC10bzojZjFmNWY5IHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKX0ucC00e3BhZGRpbmc6MXJlbX0ucC04e3BhZGRpbmc6MnJlbX0ucHgtMXtwYWRkaW5nLWxlZnQ6LjI1cmVtO3BhZGRpbmctcmlnaHQ6LjI1cmVtfS5weC00e3BhZGRpbmctbGVmdDoxcmVtO3BhZGRpbmctcmlnaHQ6MXJlbX0ucHktNHtwYWRkaW5nLXRvcDoxcmVtO3BhZGRpbmctYm90dG9tOjFyZW19LnB5LTZ7cGFkZGluZy10b3A6MS41cmVtO3BhZGRpbmctYm90dG9tOjEuNXJlbX0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtMnhse2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MnJlbX0udGV4dC1zbXtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjI1cmVtfS50ZXh0LXhze2ZvbnQtc2l6ZTouNzVyZW07bGluZS1oZWlnaHQ6MXJlbX0uZm9udC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZm9udC1zZW1pYm9sZHtmb250LXdlaWdodDo2MDB9LnVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lml0YWxpY3tmb250LXN0eWxlOml0YWxpY30udGV4dC1ncmF5LTQwMHstLXR3LXRleHQtb3BhY2l0eToxO2NvbG9yOnJnYigxNTYgMTYzIDE3NS92YXIoLS10dy10ZXh0LW9wYWNpdHksMSkpfS50ZXh0LWdyYXktNTAwey0tdHctdGV4dC1vcGFjaXR5OjE7Y29sb3I6cmdiKDEwNyAxMTQgMTI4L3ZhcigtLXR3LXRleHQtb3BhY2l0eSwxKSl9LnRleHQtZ3JheS02MDB7LS10dy10ZXh0LW9wYWNpdHk6MTtjb2xvcjpyZ2IoNzUgODUgOTkvdmFyKC0tdHctdGV4dC1vcGFjaXR5LDEpKX0udGV4dC1ncmF5LTcwMHstLXR3LXRleHQtb3BhY2l0eToxO2NvbG9yOnJnYig1NSA2NSA4MS92YXIoLS10dy10ZXh0LW9wYWNpdHksMSkpfS50ZXh0LWdyYXktOTAwey0tdHctdGV4dC1vcGFjaXR5OjE7Y29sb3I6cmdiKDE3IDI0IDM5L3ZhcigtLXR3LXRleHQtb3BhY2l0eSwxKSl9LnRleHQtcmVkLTUwMHstLXR3LXRleHQtb3BhY2l0eToxO2NvbG9yOnJnYigyMzkgNjggNjgvdmFyKC0tdHctdGV4dC1vcGFjaXR5LDEpKX0udW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX0uc2hhZG93LXhsey0tdHctc2hhZG93OjAgMjBweCAyNXB4IC01cHggcmdiYSgwLDAsMCwuMSksMCA4cHggMTBweCAtNnB4IHJnYmEoMCwwLDAsLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6MCAyMHB4IDI1cHggLTVweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLDAgOHB4IDEwcHggLTZweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5vdXRsaW5le291dGxpbmUtc3R5bGU6c29saWR9LmJsdXJ7LS10dy1ibHVyOmJsdXIoOHB4KX0uYmx1ciwuZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sZmlsdGVyLGJhY2tkcm9wLWZpbHRlcjt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9KnttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhO2NvbG9yOiMyYzJlMmY7bWluLWhlaWdodDoxMDB2aDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5wcC1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE2cHg7Ym94LXNoYWRvdzowIDJweCAxMnB4IHJnYmEoMCwwLDAsLjA4KTttYXgtd2lkdGg6NDAwcHg7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvO3BhZGRpbmc6MzJweCAyNHB4fS5wcC1idG4tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDcwYmE7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjI0cHg7cGFkZGluZzoxNHB4IDI0cHg7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2dhcDo4cHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4yc30ucHAtYnRuLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1ZWE2fS5wcC1idG4tcHJpbWFyeTpkaXNhYmxlZHtvcGFjaXR5Oi43O2N1cnNvcjpub3QtYWxsb3dlZH0ucHAtYnRuLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMwMDcwYmE7Ym9yZGVyOjJweCBzb2xpZCAjMDA3MGJhO2JvcmRlci1yYWRpdXM6MjRweDtwYWRkaW5nOjE0cHggMjRweDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzfS5wcC1idG4tc2Vjb25kYXJ5OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2YwZjhmZn0ucHAtaW5wdXR7d2lkdGg6MTAwJTtwYWRkaW5nOjE0cHggMTZweDtib3JkZXI6MXB4IHNvbGlkICNiN2I3Yjc7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE2cHg7b3V0bGluZTpub25lO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4yc30ucHAtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDcwYmF9LnBwLWNvZGUtaW5wdXR7d2lkdGg6MTAwJTtwYWRkaW5nOjE2cHg7Ym9yZGVyOjFweCBzb2xpZCAjYjdiN2I3O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToyNHB4O3RleHQtYWxpZ246Y2VudGVyO2xldHRlci1zcGFjaW5nOjEycHg7b3V0bGluZTpub25lO2ZvbnQtd2VpZ2h0OjYwMH0ucHAtY29kZS1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAwNzBiYX0ucHAtbGlua3tjb2xvcjojMDA3MGJhO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxNHB4O2N1cnNvcjpwb2ludGVyfS5wcC1saW5rOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnBwLWRpdmlkZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDttYXJnaW46MTZweCAwO2NvbG9yOiM2YzczNzg7Zm9udC1zaXplOjE0cHh9LnBwLWRpdmlkZXI6YWZ0ZXIsLnBwLWRpdmlkZXI6YmVmb3Jle2NvbnRlbnQ6IiI7ZmxleDoxO2hlaWdodDoxcHg7YmFja2dyb3VuZDojZGZlM2U4fS5wcC1kb3Rze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxNnB4fS5wcC1kb3R7d2lkdGg6OHB4O2hlaWdodDo4cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojY2JkMmQ2fS5wcC1kb3QuYWN0aXZle2JhY2tncm91bmQ6IzAwNzBiYX0ucHAtc3Bpbm5lcnt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2JvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NTAlO2FuaW1hdGlvbjpzcGluIC44cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBzcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0ucHAtZm9vdGVye3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjRweCAxNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YzczNzg7bWFyZ2luLXRvcDphdXRvfS5wcC1mb290ZXIgYXtjb2xvcjojMDA3MGJhO3RleHQtZGVjb3JhdGlvbjpub25lO21hcmdpbjowIDhweH0ucHAtbG9nb3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjI0cHh9LnBwLWVycm9ye2JhY2tncm91bmQ6I2ZkZjBmMDtib3JkZXI6MXB4IHNvbGlkICNlNmE2YTY7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7Y29sb3I6I2MwMmIwYTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjE2cHh9Lmxhbmctc2VsZWN0b3J7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjRweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjE2cHg7Zm9udC1zaXplOjEzcHh9Lmxhbmctc2VsZWN0b3IgYnV0dG9ue2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtjb2xvcjojMDA3MGJhO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MnB4IDZweDtmb250LXNpemU6MTNweH0ubGFuZy1zZWxlY3RvciBidXR0b24uYWN0aXZle2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5sYW5nLXNlbGVjdG9yIHNwYW57Y29sb3I6I2NjY30="}},"time_used":48,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":48,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/fd9d1056-f09744c5e9674c7b.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:33.875Z","timestamp":1785111153875,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/fd9d1056-f09744c5e9674c7b.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:33 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 172834\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"2a322-19f99f825b7\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":172834,"size_decoded":173367,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, ASCII text, with very long lines (65536), with no line terminators","md5":"d70ea42503ecdf865cc5b50951e7a260","sha1":"d6024cc44a508c5e42bccc99aa6939490273b3a3","sha256":"b8bddf9481d859d648e1e050f8322eb3defe3dd3f9bd13f4c44dd6f2ecf5ab80","sha512":"c38885a712287d6c88b14f3a78df8b03c671a1e8fe71ec680edad591b056eabd5cc510e7cf2b565d94779bbb258ca49068d31adb94d343d59c653c57e77035ee","ssdeep":"1536:PVjExazug79h2U4kcNxakmBjt4oGZlibTR5ikxYhlUuRNka2wblHiN+wL8z9Ggum:3zug758kkEiXjOAprX2wd5WjguGOK","tlshash":"50f3f8e83995f6666eb30277009f1803737c262b280d4d60a211fd9eb5b845eb17bfd9","first_seen":"2025-01-18T11:47:06.649614Z","last_seen":"2026-07-27T02:07:42.514336Z","times_seen":4409,"resource_available":true,"data":"InVzZSBzdHJpY3QiOyhzZWxmLndlYnBhY2tDaHVua19OX0U9c2VsZi53ZWJwYWNrQ2h1bmtfTl9FfHxbXSkucHVzaChbWzk3MV0sezQ0MTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGw9bigyMjY1KSxhPW4oMTc2Nyksbz17dXNpbmdDbGllbnRFbnRyeVBvaW50OiExLEV2ZW50czpudWxsLERpc3BhdGNoZXI6e2N1cnJlbnQ6bnVsbH19O2Z1bmN0aW9uIGkoZSl7dmFyIHQ9Imh0dHBzOi8vcmVhY3QuZGV2L2Vycm9ycy8iK2U7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXt0Kz0iP2FyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbMV0pO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKX1yZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAiK3QrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn12YXIgdT1PYmplY3QuYXNzaWduLHM9bC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxjPXMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixmPXtwZW5kaW5nOiExLGRhdGE6bnVsbCxtZXRob2Q6bnVsbCxhY3Rpb246bnVsbH0sZD1bXSxwPS0xO2Z1bmN0aW9uIG0oZSl7cmV0dXJue2N1cnJlbnQ6ZX19ZnVuY3Rpb24gaChlKXswPnB8fChlLmN1cnJlbnQ9ZFtwXSxkW3BdPW51bGwscC0tKX1mdW5jdGlvbiBnKGUsdCl7ZFsrK3BdPWUuY3VycmVudCxlLmN1cnJlbnQ9dH12YXIgeT1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iiksdj1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSxiPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iiksaz1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLHc9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxTPVN5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIiksQz1TeW1ib2wuZm9yKCJyZWFjdC5jb25zdW1lciIpLEU9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLHg9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSx6PVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksUD1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZV9saXN0IiksTj1TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIiksXz1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksTD1TeW1ib2wuZm9yKCJyZWFjdC5zY29wZSIpO1N5bWJvbC5mb3IoInJlYWN0LmRlYnVnX3RyYWNlX21vZGUiKTt2YXIgVD1TeW1ib2wuZm9yKCJyZWFjdC5vZmZzY3JlZW4iKSxGPVN5bWJvbC5mb3IoInJlYWN0LmxlZ2FjeV9oaWRkZW4iKSxNPVN5bWJvbC5mb3IoInJlYWN0LmNhY2hlIik7U3ltYm9sLmZvcigicmVhY3QudHJhY2luZ19tYXJrZXIiKTt2YXIgTz1TeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gUihlKXtyZXR1cm4gbnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZT9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZihlPU8mJmVbT118fGVbIkBAaXRlcmF0b3IiXSk/ZTpudWxsfXZhciBEPW0obnVsbCksQT1tKG51bGwpLEk9bShudWxsKSxVPW0obnVsbCksQj17JCR0eXBlb2Y6RSxfY3VycmVudFZhbHVlOm51bGwsX2N1cnJlbnRWYWx1ZTI6bnVsbCxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9O2Z1bmN0aW9uIFYoZSx0KXtzd2l0Y2goZyhJLHQpLGcoQSxlKSxnKEQsbnVsbCksZT10Lm5vZGVUeXBlKXtjYXNlIDk6Y2FzZSAxMTp0PSh0PXQuZG9jdW1lbnRFbGVtZW50KSYmKHQ9dC5uYW1lc3BhY2VVUkkpP3MyKHQpOjA7YnJlYWs7ZGVmYXVsdDppZih0PShlPTg9PT1lP3QucGFyZW50Tm9kZTp0KS50YWdOYW1lLGU9ZS5uYW1lc3BhY2VVUkkpdD1zMyhlPXMyKGUpLHQpO2Vsc2Ugc3dpdGNoKHQpe2Nhc2Uic3ZnIjp0PTE7YnJlYWs7Y2FzZSJtYXRoIjp0PTI7YnJlYWs7ZGVmYXVsdDp0PTB9fWgoRCksZyhELHQpfWZ1bmN0aW9uIFEoKXtoKEQpLGgoQSksaChJKX1mdW5jdGlvbiAkKGUpe251bGwhPT1lLm1lbW9pemVkU3RhdGUmJmcoVSxlKTt2YXIgdD1ELmN1cnJlbnQsbj1zMyh0LGUudHlwZSk7dCE9PW4mJihnKEEsZSksZyhELG4pKX1mdW5jdGlvbiBqKGUpe0EuY3VycmVudD09PWUmJihoKEQpLGgoQSkpLFUuY3VycmVudD09PWUmJihoKFUpLEIuX2N1cnJlbnRWYWx1ZT1udWxsKX12YXIgVz1hLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssSD1hLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLHE9YS51bnN0YWJsZV9zaG91bGRZaWVsZCxLPWEudW5zdGFibGVfcmVxdWVzdFBhaW50LFk9YS51bnN0YWJsZV9ub3csWD1hLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLEc9YS51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxaPWEudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksSj1hLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LGVlPWEudW5zdGFibGVfTG93UHJpb3JpdHksZXQ9YS51bnN0YWJsZV9JZGxlUHJpb3JpdHksZW49YS5sb2csZXI9YS51bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZSxlbD1udWxsLGVhPW51bGw7ZnVuY3Rpb24gZW8oZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGVuJiZlcihlKSxlYSYmImZ1bmN0aW9uIj09dHlwZW9mIGVhLnNldFN0cmljdE1vZGUpdHJ5e2VhLnNldFN0cmljdE1vZGUoZWwsZSl9Y2F0Y2goZSl7fX12YXIgZWk9TWF0aC5jbHozMj9NYXRoLmNsejMyOmZ1bmN0aW9uKGUpe3JldHVybiAwPT0oZT4+Pj0wKT8zMjozMS0oZXUoZSkvZXN8MCl8MH0sZXU9TWF0aC5sb2csZXM9TWF0aC5MTjIsZWM9MTI4LGVmPTQxOTQzMDQ7ZnVuY3Rpb24gZWQoZSl7dmFyIHQ9NDImZTtpZigwIT09dClyZXR1cm4gdDtzd2l0Y2goZSYtZSl7Y2FzZSAxOnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA4OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIDE2O2Nhc2UgMzI6cmV0dXJuIDMyO2Nhc2UgNjQ6cmV0dXJuIDY0O2Nhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiA0MTk0MTc2JmU7Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6cmV0dXJuIDYyOTE0NTYwJmU7Y2FzZSA2NzEwODg2NDpyZXR1cm4gNjcxMDg4NjQ7Y2FzZSAxMzQyMTc3Mjg6cmV0dXJuIDEzNDIxNzcyODtjYXNlIDI2ODQzNTQ1NjpyZXR1cm4gMjY4NDM1NDU2O2Nhc2UgNTM2ODcwOTEyOnJldHVybiA1MzY4NzA5MTI7Y2FzZSAxMDczNzQxODI0OnJldHVybiAwO2RlZmF1bHQ6cmV0dXJuIGV9fWZ1bmN0aW9uIGVwKGUsdCl7dmFyIG49ZS5wZW5kaW5nTGFuZXM7aWYoMD09PW4pcmV0dXJuIDA7dmFyIHI9MCxsPWUuc3VzcGVuZGVkTGFuZXM7ZT1lLnBpbmdlZExhbmVzO3ZhciBhPTEzNDIxNzcyNyZuO3JldHVybiAwIT09YT8wIT0obj1hJn5sKT9yPWVkKG4pOjAhPShlJj1hKSYmKHI9ZWQoZSkpOjAhPShuJj1+bCk/cj1lZChuKTowIT09ZSYmKHI9ZWQoZSkpLDA9PT1yPzA6MCE9PXQmJnQhPT1yJiYwPT0odCZsKSYmKChsPXImLXIpPj0oZT10Ji10KXx8MzI9PT1sJiYwIT0oNDE5NDE3NiZlKSk/dDpyfWZ1bmN0aW9uIGVtKGUsdCl7cmV0dXJuIGUuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMmdD8wOjAhPShlPS01MzY4NzA5MTMmZS5wZW5kaW5nTGFuZXMpP2U6NTM2ODcwOTEyJmU/NTM2ODcwOTEyOjB9ZnVuY3Rpb24gZWgoKXt2YXIgZT1lYztyZXR1cm4gMD09KDQxOTQxNzYmKGVjPDw9MSkpJiYoZWM9MTI4KSxlfWZ1bmN0aW9uIGVnKCl7dmFyIGU9ZWY7cmV0dXJuIDA9PSg2MjkxNDU2MCYoZWY8PD0xKSkmJihlZj00MTk0MzA0KSxlfWZ1bmN0aW9uIGV5KGUpe2Zvcih2YXIgdD1bXSxuPTA7MzE+bjtuKyspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIGV2KGUsdCxuKXtlLnBlbmRpbmdMYW5lc3w9dCxlLnN1c3BlbmRlZExhbmVzJj1+dDt2YXIgcj0zMS1laSh0KTtlLmVudGFuZ2xlZExhbmVzfD10LGUuZW50YW5nbGVtZW50c1tyXT0xMDczNzQxODI0fGUuZW50YW5nbGVtZW50c1tyXXw0MTk0MjE4Jm59ZnVuY3Rpb24gZWIoZSx0KXt2YXIgbj1lLmVudGFuZ2xlZExhbmVzfD10O2ZvcihlPWUuZW50YW5nbGVtZW50cztuOyl7dmFyIHI9MzEtZWkobiksbD0xPDxyO2wmdHxlW3JdJnQmJihlW3JdfD10KSxuJj1+bH19dmFyIGVrPTA7ZnVuY3Rpb24gZXcoZSl7cmV0dXJuIDI8KGUmPS1lKT84PGU/MCE9KDEzNDIxNzcyNyZlKT8zMjoyNjg0MzU0NTY6ODoyfXZhciBlUz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGVDPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLGVFPSJfX3JlYWN0RmliZXIkIitlQyxleD0iX19yZWFjdFByb3BzJCIrZUMsZXo9Il9fcmVhY3RDb250YWluZXIkIitlQyxlUD0iX19yZWFjdEV2ZW50cyQiK2VDLGVOPSJfX3JlYWN0TGlzdGVuZXJzJCIrZUMsZV89Il9fcmVhY3RIYW5kbGVzJCIrZUMsZUw9Il9fcmVhY3RSZXNvdXJjZXMkIitlQyxlVD0iX19yZWFjdE1hcmtlciQiK2VDO2Z1bmN0aW9uIGVGKGUpe2RlbGV0ZSBlW2VFXSxkZWxldGUgZVtleF0sZGVsZXRlIGVbZVBdLGRlbGV0ZSBlW2VOXSxkZWxldGUgZVtlX119ZnVuY3Rpb24gZU0oZSl7dmFyIHQ9ZVtlRV07aWYodClyZXR1cm4gdDtmb3IodmFyIG49ZS5wYXJlbnROb2RlO247KXtpZih0PW5bZXpdfHxuW2VFXSl7aWYobj10LmFsdGVybmF0ZSxudWxsIT09dC5jaGlsZHx8bnVsbCE9PW4mJm51bGwhPT1uLmNoaWxkKWZvcihlPWNpKGUpO251bGwhPT1lOyl7aWYobj1lW2VFXSlyZXR1cm4gbjtlPWNpKGUpfXJldHVybiB0fW49KGU9bikucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlTyhlKXtpZihlPWVbZUVdfHxlW2V6XSl7dmFyIHQ9ZS50YWc7aWYoNT09PXR8fDY9PT10fHwxMz09PXR8fDI2PT09dHx8Mjc9PT10fHwzPT09dClyZXR1cm4gZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlUihlKXt2YXIgdD1lLnRhZztpZig1PT09dHx8MjY9PT10fHwyNz09PXR8fDY9PT10KXJldHVybiBlLnN0YXRlTm9kZTt0aHJvdyBFcnJvcihpKDMzKSl9ZnVuY3Rpb24gZUQoZSl7cmV0dXJuIGVbZXhdfHxudWxsfWZ1bmN0aW9uIGVBKGUpe3ZhciB0PWVbZUxdO3JldHVybiB0fHwodD1lW2VMXT17aG9pc3RhYmxlU3R5bGVzOm5ldyBNYXAsaG9pc3RhYmxlU2NyaXB0czpuZXcgTWFwfSksdH1mdW5jdGlvbiBlSShlKXtlW2VUXT0hMH12YXIgZVU9bmV3IFNldCxlQj17fTtmdW5jdGlvbiBlVihlLHQpe2VRKGUsdCksZVEoZSsiQ2FwdHVyZSIsdCl9ZnVuY3Rpb24gZVEoZSx0KXtmb3IoZUJbZV09dCxlPTA7ZTx0Lmxlbmd0aDtlKyspZVUuYWRkKHRbZV0pfXZhciBlJD0hKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHx2b2lkIDA9PT13aW5kb3cuZG9jdW1lbnR8fHZvaWQgMD09PXdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KSxlaj1SZWdFeHAoIl5bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKiQiKSxlVz17fSxlSD17fTtmdW5jdGlvbiBlcShlLHQsbil7aWYoZVMuY2FsbChlSCx0KXx8IWVTLmNhbGwoZVcsdCkmJihlai50ZXN0KHQpP2VIW3RdPSEwOihlV1t0XT0hMCwhMSkpKXtpZihudWxsPT09billLnJlbW92ZUF0dHJpYnV0ZSh0KTtlbHNle3N3aXRjaCh0eXBlb2Ygbil7Y2FzZSJ1bmRlZmluZWQiOmNhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjplLnJlbW92ZUF0dHJpYnV0ZSh0KTtyZXR1cm47Y2FzZSJib29sZWFuIjp2YXIgcj10LnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw1KTtpZigiZGF0YS0iIT09ciYmImFyaWEtIiE9PXIpe2UucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybn19ZS5zZXRBdHRyaWJ1dGUodCwiIituKX19fWZ1bmN0aW9uIGVLKGUsdCxuKXtpZihudWxsPT09billLnJlbW92ZUF0dHJpYnV0ZSh0KTtlbHNle3N3aXRjaCh0eXBlb2Ygbil7Y2FzZSJ1bmRlZmluZWQiOmNhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjpjYXNlImJvb2xlYW4iOmUucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybn1lLnNldEF0dHJpYnV0ZSh0LCIiK24pfX1mdW5jdGlvbiBlWShlLHQsbixyKXtpZihudWxsPT09cillLnJlbW92ZUF0dHJpYnV0ZShuKTtlbHNle3N3aXRjaCh0eXBlb2Ygcil7Y2FzZSJ1bmRlZmluZWQiOmNhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjpjYXNlImJvb2xlYW4iOmUucmVtb3ZlQXR0cmlidXRlKG4pO3JldHVybn1lLnNldEF0dHJpYnV0ZU5TKHQsbiwiIityKX19ZnVuY3Rpb24gZVgoZSl7aWYodm9pZCAwPT09aVkpdHJ5e3Rocm93IEVycm9yKCl9Y2F0Y2goZSl7dmFyIHQ9ZS5zdGFjay50cmltKCkubWF0Y2goL1xuKCAqKGF0ICk/KS8pO2lZPXQmJnRbMV18fCIifXJldHVybiJcbiIraVkrZX12YXIgZUc9ITE7ZnVuY3Rpb24gZVooZSx0KXtpZighZXx8ZUcpcmV0dXJuIiI7ZUc9ITA7dmFyIG49RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dm9pZCAwO3ZhciByPXtEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6ZnVuY3Rpb24oKXt0cnl7aWYodCl7dmFyIG49ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpfTtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsInByb3BzIix7c2V0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX19KSwib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QobixbXSl9Y2F0Y2goZSl7dmFyIHI9ZX1SZWZsZWN0LmNvbnN0cnVjdChlLFtdLG4pfWVsc2V7dHJ5e24uY2FsbCgpfWNhdGNoKGUpe3I9ZX1lLmNhbGwobi5wcm90b3R5cGUpfX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGUpe3I9ZX0obj1lKCkpJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5jYXRjaCYmbi5jYXRjaChmdW5jdGlvbigpe30pfX1jYXRjaChlKXtpZihlJiZyJiYic3RyaW5nIj09dHlwZW9mIGUuc3RhY2spcmV0dXJuW2Uuc3RhY2ssci5zdGFja119cmV0dXJuW251bGwsbnVsbF19fTtyLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZT0iRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Ijt2YXIgbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCJuYW1lIik7bCYmbC5jb25maWd1cmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwibmFtZSIse3ZhbHVlOiJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QifSk7dHJ5e3ZhciBhPXIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksbz1hWzBdLGk9YVsxXTtpZihvJiZpKXt2YXIgdT1vLnNwbGl0KCJcbiIpLHM9aS5zcGxpdCgiXG4iKTtmb3IobD1yPTA7cjx1Lmxlbmd0aCYmIXVbcl0uaW5jbHVkZXMoIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCIpOylyKys7Zm9yKDtsPHMubGVuZ3RoJiYhc1tsXS5pbmNsdWRlcygiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290Iik7KWwrKztpZihyPT09dS5sZW5ndGh8fGw9PT1zLmxlbmd0aClmb3Iocj11Lmxlbmd0aC0xLGw9cy5sZW5ndGgtMTsxPD1yJiYwPD1sJiZ1W3JdIT09c1tsXTspbC0tO2Zvcig7MTw9ciYmMDw9bDtyLS0sbC0tKWlmKHVbcl0hPT1zW2xdKXtpZigxIT09cnx8MSE9PWwpZG8gaWYoci0tLGwtLSwwPmx8fHVbcl0hPT1zW2xdKXt2YXIgYz0iXG4iK3Vbcl0ucmVwbGFjZSgiIGF0IG5ldyAiLCIgYXQgIik7cmV0dXJuIGUuZGlzcGxheU5hbWUmJmMuaW5jbHVkZXMoIjxhbm9ueW1vdXM+IikmJihjPWMucmVwbGFjZSgiPGFub255bW91cz4iLGUuZGlzcGxheU5hbWUpKSxjfXdoaWxlKDE8PXImJjA8PWwpO2JyZWFrfX19ZmluYWxseXtlRz0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1ufXJldHVybihuPWU/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lOiIiKT9lWChuKToiIn1mdW5jdGlvbiBlSihlKXt0cnl7dmFyIHQ9IiI7ZG8gdCs9ZnVuY3Rpb24oZSl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnJldHVybiBlWChlLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIGVYKCJMYXp5Iik7Y2FzZSAxMzpyZXR1cm4gZVgoIlN1c3BlbnNlIik7Y2FzZSAxOTpyZXR1cm4gZVgoIlN1c3BlbnNlTGlzdCIpO2Nhc2UgMDpjYXNlIDI6Y2FzZSAxNTpyZXR1cm4gZT1lWihlLnR5cGUsITEpO2Nhc2UgMTE6cmV0dXJuIGU9ZVooZS50eXBlLnJlbmRlciwhMSk7Y2FzZSAxOnJldHVybiBlPWVaKGUudHlwZSwhMCk7ZGVmYXVsdDpyZXR1cm4iIn19KGUpLGU9ZS5yZXR1cm47d2hpbGUoZSk7cmV0dXJuIHR9Y2F0Y2goZSl7cmV0dXJuIlxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogIitlLm1lc3NhZ2UrIlxuIitlLnN0YWNrfX12YXIgZTA9U3ltYm9sLmZvcigicmVhY3QuY2xpZW50LnJlZmVyZW5jZSIpO2Z1bmN0aW9uIGUxKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmciOmNhc2UidW5kZWZpbmVkIjpjYXNlIm9iamVjdCI6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4iIn19ZnVuY3Rpb24gZTIoZSl7dmFyIHQ9ZS50eXBlO3JldHVybihlPWUubm9kZU5hbWUpJiYiaW5wdXQiPT09ZS50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PXR8fCJyYWRpbyI9PT10KX1mdW5jdGlvbiBlMyhlKXtlLl92YWx1ZVRyYWNrZXJ8fChlLl92YWx1ZVRyYWNrZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTIoZSk/ImNoZWNrZWQiOiJ2YWx1ZSIsbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUuY29uc3RydWN0b3IucHJvdG90eXBlLHQpLHI9IiIrZVt0XTtpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmdm9pZCAwIT09biYmImZ1bmN0aW9uIj09dHlwZW9mIG4uZ2V0JiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5zZXQpe3ZhciBsPW4uZ2V0LGE9bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oZSl7cj0iIitlLGEuY2FsbCh0aGlzLGUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGUpe3I9IiIrZX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19KGUpKX1mdW5jdGlvbiBlNChlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPWUyKGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSwoZT1yKSE9PW4mJih0LnNldFZhbHVlKGUpLCEwKX1mdW5jdGlvbiBlNihlKXtpZih2b2lkIDA9PT0oZT1lfHwoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGUuYWN0aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoKHQpe3JldHVybiBlLmJvZHl9fXZhciBlOD0vW1xuIlxcXS9nO2Z1bmN0aW9uIGU1KGUpe3JldHVybiBlLnJlcGxhY2UoZTgsZnVuY3Rpb24oZSl7cmV0dXJuIlxcIitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKyIgIn0pfWZ1bmN0aW9uIGU3KGUsdCxuLHIsbCxhLG8saSl7ZS5uYW1lPSIiLG51bGwhPW8mJiJmdW5jdGlvbiIhPXR5cGVvZiBvJiYic3ltYm9sIiE9dHlwZW9mIG8mJiJib29sZWFuIiE9dHlwZW9mIG8/ZS50eXBlPW86ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxudWxsIT10PyJudW1iZXIiPT09bz8oMD09PXQmJiIiPT09ZS52YWx1ZXx8ZS52YWx1ZSE9dCkmJihlLnZhbHVlPSIiK2UxKHQpKTplLnZhbHVlIT09IiIrZTEodCkmJihlLnZhbHVlPSIiK2UxKHQpKToic3VibWl0IiE9PW8mJiJyZXNldCIhPT1vfHxlLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKSxudWxsIT10P3RlKGUsbyxlMSh0KSk6bnVsbCE9bj90ZShlLG8sZTEobikpOm51bGwhPXImJmUucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpLG51bGw9PWwmJm51bGwhPWEmJihlLmRlZmF1bHRDaGVja2VkPSEhYSksbnVsbCE9bCYmKGUuY2hlY2tlZD1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCYmInN5bWJvbCIhPXR5cGVvZiBsKSxudWxsIT1pJiYiZnVuY3Rpb24iIT10eXBlb2YgaSYmInN5bWJvbCIhPXR5cGVvZiBpJiYiYm9vbGVhbiIhPXR5cGVvZiBpP2UubmFtZT0iIitlMShpKTplLnJlbW92ZUF0dHJpYnV0ZSgibmFtZSIpfWZ1bmN0aW9uIGU5KGUsdCxuLHIsbCxhLG8saSl7aWYobnVsbCE9YSYmImZ1bmN0aW9uIiE9dHlwZW9mIGEmJiJzeW1ib2wiIT10eXBlb2YgYSYmImJvb2xlYW4iIT10eXBlb2YgYSYmKGUudHlwZT1hKSxudWxsIT10fHxudWxsIT1uKXtpZighKCJzdWJtaXQiIT09YSYmInJlc2V0IiE9PWF8fG51bGwhPXQpKXJldHVybjtuPW51bGwhPW4/IiIrZTEobik6IiIsdD1udWxsIT10PyIiK2UxKHQpOm4saXx8dD09PWUudmFsdWV8fChlLnZhbHVlPXQpLGUuZGVmYXVsdFZhbHVlPXR9cj0iZnVuY3Rpb24iIT10eXBlb2Yocj1udWxsIT1yP3I6bCkmJiJzeW1ib2wiIT10eXBlb2YgciYmISFyLGUuY2hlY2tlZD1pP2UuY2hlY2tlZDohIXIsZS5kZWZhdWx0Q2hlY2tlZD0hIXIsbnVsbCE9byYmImZ1bmN0aW9uIiE9dHlwZW9mIG8mJiJzeW1ib2wiIT10eXBlb2YgbyYmImJvb2xlYW4iIT10eXBlb2YgbyYmKGUubmFtZT1vKX1mdW5jdGlvbiB0ZShlLHQsbil7Im51bWJlciI9PT10JiZlNihlLm93bmVyRG9jdW1lbnQpPT09ZXx8ZS5kZWZhdWx0VmFsdWU9PT0iIitufHwoZS5kZWZhdWx0VmFsdWU9IiIrbil9dmFyIHR0PUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gdG4oZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl0WyIkIituW2xdXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWw9dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PWwmJihlW25dLnNlbGVjdGVkPWwpLGwmJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3IobD0wLG49IiIrZTEobiksdD1udWxsO2w8ZS5sZW5ndGg7bCsrKXtpZihlW2xdLnZhbHVlPT09bil7ZVtsXS5zZWxlY3RlZD0hMCxyJiYoZVtsXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn1udWxsIT09dHx8ZVtsXS5kaXNhYmxlZHx8KHQ9ZVtsXSl9bnVsbCE9PXQmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gdHIoZSx0LG4pe2lmKG51bGwhPXQmJigodD0iIitlMSh0KSkhPT1lLnZhbHVlJiYoZS52YWx1ZT10KSxudWxsPT1uKSl7ZS5kZWZhdWx0VmFsdWUhPT10JiYoZS5kZWZhdWx0VmFsdWU9dCk7cmV0dXJufWUuZGVmYXVsdFZhbHVlPW51bGwhPW4/IiIrZTEobik6IiJ9ZnVuY3Rpb24gdGwoZSx0LG4scil7aWYobnVsbD09dCl7aWYobnVsbCE9cil7aWYobnVsbCE9bil0aHJvdyBFcnJvcihpKDkyKSk7aWYodHQocikpe2lmKDE8ci5sZW5ndGgpdGhyb3cgRXJyb3IoaSg5MykpO3I9clswXX1uPXJ9bnVsbD09biYmKG49IiIpLHQ9bn1uPWUxKHQpLGUuZGVmYXVsdFZhbHVlPW4sKHI9ZS50ZXh0Q29udGVudCk9PT1uJiYiIiE9PXImJm51bGwhPT1yJiYoZS52YWx1ZT1yKX1mdW5jdGlvbiB0YShlLHQpe2lmKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIhPT1lLm5hbWVzcGFjZVVSSXx8ImlubmVySFRNTCJpbiBlKWUuaW5uZXJIVE1MPXQ7ZWxzZXtmb3IoKGlYPWlYfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPSI8c3ZnPiIrdC52YWx1ZU9mKCkudG9TdHJpbmcoKSsiPC9zdmc+Iix0PWlYLmZpcnN0Q2hpbGQ7ZS5maXJzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7Zm9yKDt0LmZpcnN0Q2hpbGQ7KWUuYXBwZW5kQ2hpbGQodC5maXJzdENoaWxkKX19dmFyIHRvPXRhOyJ1bmRlZmluZWQiIT10eXBlb2YgTVNBcHAmJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uJiYodG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gdGEoZSx0KX0pfSk7dmFyIHRpPXRvO2Z1bmN0aW9uIHR1KGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmMz09PW4ubm9kZVR5cGUpe24ubm9kZVZhbHVlPXQ7cmV0dXJufX1lLnRleHRDb250ZW50PXR9dmFyIHRzPW5ldyBTZXQoImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IGFzcGVjdFJhdGlvIGJvcmRlckltYWdlT3V0c2V0IGJvcmRlckltYWdlU2xpY2UgYm9yZGVySW1hZ2VXaWR0aCBib3hGbGV4IGJveEZsZXhHcm91cCBib3hPcmRpbmFsR3JvdXAgY29sdW1uQ291bnQgY29sdW1ucyBmbGV4IGZsZXhHcm93IGZsZXhQb3NpdGl2ZSBmbGV4U2hyaW5rIGZsZXhOZWdhdGl2ZSBmbGV4T3JkZXIgZ3JpZEFyZWEgZ3JpZFJvdyBncmlkUm93RW5kIGdyaWRSb3dTcGFuIGdyaWRSb3dTdGFydCBncmlkQ29sdW1uIGdyaWRDb2x1bW5FbmQgZ3JpZENvbHVtblNwYW4gZ3JpZENvbHVtblN0YXJ0IGZvbnRXZWlnaHQgbGluZUNsYW1wIGxpbmVIZWlnaHQgb3BhY2l0eSBvcmRlciBvcnBoYW5zIHNjYWxlIHRhYlNpemUgd2lkb3dzIHpJbmRleCB6b29tIGZpbGxPcGFjaXR5IGZsb29kT3BhY2l0eSBzdG9wT3BhY2l0eSBzdHJva2VEYXNoYXJyYXkgc3Ryb2tlRGFzaG9mZnNldCBzdHJva2VNaXRlcmxpbWl0IHN0cm9rZU9wYWNpdHkgc3Ryb2tlV2lkdGggTW96QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgTW96Qm94RmxleCBNb3pCb3hGbGV4R3JvdXAgTW96TGluZUNsYW1wIG1zQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgbXNGbGV4IG1zWm9vbSBtc0ZsZXhHcm93IG1zRmxleE5lZ2F0aXZlIG1zRmxleE9yZGVyIG1zRmxleFBvc2l0aXZlIG1zRmxleFNocmluayBtc0dyaWRDb2x1bW4gbXNHcmlkQ29sdW1uU3BhbiBtc0dyaWRSb3cgbXNHcmlkUm93U3BhbiBXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCBXZWJraXRCb3hGbGV4IFdlYktpdEJveEZsZXhHcm91cCBXZWJraXRCb3hPcmRpbmFsR3JvdXAgV2Via2l0Q29sdW1uQ291bnQgV2Via2l0Q29sdW1ucyBXZWJraXRGbGV4IFdlYmtpdEZsZXhHcm93IFdlYmtpdEZsZXhQb3NpdGl2ZSBXZWJraXRGbGV4U2hyaW5rIFdlYmtpdExpbmVDbGFtcCIuc3BsaXQoIiAiKSk7ZnVuY3Rpb24gdGMoZSx0LG4pe3ZhciByPTA9PT10LmluZGV4T2YoIi0tIik7bnVsbD09bnx8ImJvb2xlYW4iPT10eXBlb2Ygbnx8IiI9PT1uP3I/ZS5zZXRQcm9wZXJ0eSh0LCIiKToiZmxvYXQiPT09dD9lLmNzc0Zsb2F0PSIiOmVbdF09IiI6cj9lLnNldFByb3BlcnR5KHQsbik6Im51bWJlciIhPXR5cGVvZiBufHwwPT09bnx8dHMuaGFzKHQpPyJmbG9hdCI9PT10P2UuY3NzRmxvYXQ9bjplW3RdPSgiIituKS50cmltKCk6ZVt0XT1uKyJweCJ9ZnVuY3Rpb24gdGYoZSx0LG4pe2lmKG51bGwhPXQmJiJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBFcnJvcihpKDYyKSk7aWYoZT1lLnN0eWxlLG51bGwhPW4pe2Zvcih2YXIgciBpbiBuKSFuLmhhc093blByb3BlcnR5KHIpfHxudWxsIT10JiZ0Lmhhc093blByb3BlcnR5KHIpfHwoMD09PXIuaW5kZXhPZigiLS0iKT9lLnNldFByb3BlcnR5KHIsIiIpOiJmbG9hdCI9PT1yP2UuY3NzRmxvYXQ9IiI6ZVtyXT0iIik7Zm9yKHZhciBsIGluIHQpcj10W2xdLHQuaGFzT3duUHJvcGVydHkobCkmJm5bbF0hPT1yJiZ0YyhlLGwscil9ZWxzZSBmb3IodmFyIGEgaW4gdCl0Lmhhc093blByb3BlcnR5KGEpJiZ0YyhlLGEsdFthXSl9ZnVuY3Rpb24gdGQoZSl7aWYoLTE9PT1lLmluZGV4T2YoIi0iKSlyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgdHA9bmV3IE1hcChbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImh0bWxGb3IiLCJmb3IiXSxbImh0dHBFcXVpdiIsImh0dHAtZXF1aXYiXSxbImNyb3NzT3JpZ2luIiwiY3Jvc3NvcmlnaW4iXSxbImFjY2VudEhlaWdodCIsImFjY2VudC1oZWlnaHQiXSxbImFsaWdubWVudEJhc2VsaW5lIiwiYWxpZ25tZW50LWJhc2VsaW5lIl0sWyJhcmFiaWNGb3JtIiwiYXJhYmljLWZvcm0iXSxbImJhc2VsaW5lU2hpZnQiLCJiYXNlbGluZS1zaGlmdCJdLFsiY2FwSGVpZ2h0IiwiY2FwLWhlaWdodCJdLFsiY2xpcFBhdGgiLCJjbGlwLXBhdGgiXSxbImNsaXBSdWxlIiwiY2xpcC1ydWxlIl0sWyJjb2xvckludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uIl0sWyJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIl0sWyJjb2xvclByb2ZpbGUiLCJjb2xvci1wcm9maWxlIl0sWyJjb2xvclJlbmRlcmluZyIsImNvbG9yLXJlbmRlcmluZyJdLFsiZG9taW5hbnRCYXNlbGluZSIsImRvbWluYW50LWJhc2VsaW5lIl0sWyJlbmFibGVCYWNrZ3JvdW5kIiwiZW5hYmxlLWJhY2tncm91bmQiXSxbImZpbGxPcGFjaXR5IiwiZmlsbC1vcGFjaXR5Il0sWyJmaWxsUnVsZSIsImZpbGwtcnVsZSJdLFsiZmxvb2RDb2xvciIsImZsb29kLWNvbG9yIl0sWyJmbG9vZE9wYWNpdHkiLCJmbG9vZC1vcGFjaXR5Il0sWyJmb250RmFtaWx5IiwiZm9udC1mYW1pbHkiXSxbImZvbnRTaXplIiwiZm9udC1zaXplIl0sWyJmb250U2l6ZUFkanVzdCIsImZvbnQtc2l6ZS1hZGp1c3QiXSxbImZvbnRTdHJldGNoIiwiZm9udC1zdHJldGNoIl0sWyJmb250U3R5bGUiLCJmb250LXN0eWxlIl0sWyJmb250VmFyaWFudCIsImZvbnQtdmFyaWFudCJdLFsiZm9udFdlaWdodCIsImZvbnQtd2VpZ2h0Il0sWyJnbHlwaE5hbWUiLCJnbHlwaC1uYW1lIl0sWyJnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCIsImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwiXSxbImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbCIsImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIl0sWyJob3JpekFkdlgiLCJob3Jpei1hZHYteCJdLFsiaG9yaXpPcmlnaW5YIiwiaG9yaXotb3JpZ2luLXgiXSxbImltYWdlUmVuZGVyaW5nIiwiaW1hZ2UtcmVuZGVyaW5nIl0sWyJsZXR0ZXJTcGFjaW5nIiwibGV0dGVyLXNwYWNpbmciXSxbImxpZ2h0aW5nQ29sb3IiLCJsaWdodGluZy1jb2xvciJdLFsibWFya2VyRW5kIiwibWFya2VyLWVuZCJdLFsibWFya2VyTWlkIiwibWFya2VyLW1pZCJdLFsibWFya2VyU3RhcnQiLCJtYXJrZXItc3RhcnQiXSxbIm92ZXJsaW5lUG9zaXRpb24iLCJvdmVybGluZS1wb3NpdGlvbiJdLFsib3ZlcmxpbmVUaGlja25lc3MiLCJvdmVybGluZS10aGlja25lc3MiXSxbInBhaW50T3JkZXIiLCJwYWludC1vcmRlciJdLFsicGFub3NlLTEiLCJwYW5vc2UtMSJdLFsicG9pbnRlckV2ZW50cyIsInBvaW50ZXItZXZlbnRzIl0sWyJyZW5kZXJpbmdJbnRlbnQiLCJyZW5kZXJpbmctaW50ZW50Il0sWyJzaGFwZVJlbmRlcmluZyIsInNoYXBlLXJlbmRlcmluZyJdLFsic3RvcENvbG9yIiwic3RvcC1jb2xvciJdLFsic3RvcE9wYWNpdHkiLCJzdG9wLW9wYWNpdHkiXSxbInN0cmlrZXRocm91Z2hQb3NpdGlvbiIsInN0cmlrZXRocm91Z2gtcG9zaXRpb24iXSxbInN0cmlrZXRocm91Z2hUaGlja25lc3MiLCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyJdLFsic3Ryb2tlRGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hhcnJheSJdLFsic3Ryb2tlRGFzaG9mZnNldCIsInN0cm9rZS1kYXNob2Zmc2V0Il0sWyJzdHJva2VMaW5lY2FwIiwic3Ryb2tlLWxpbmVjYXAiXSxbInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlLWxpbmVqb2luIl0sWyJzdHJva2VNaXRlcmxpbWl0Iiwic3Ryb2tlLW1pdGVybGltaXQiXSxbInN0cm9rZU9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSJdLFsic3Ryb2tlV2lkdGgiLCJzdHJva2Utd2lkdGgiXSxbInRleHRBbmNob3IiLCJ0ZXh0LWFuY2hvciJdLFsidGV4dERlY29yYXRpb24iLCJ0ZXh0LWRlY29yYXRpb24iXSxbInRleHRSZW5kZXJpbmciLCJ0ZXh0LXJlbmRlcmluZyJdLFsidHJhbnNmb3JtT3JpZ2luIiwidHJhbnNmb3JtLW9yaWdpbiJdLFsidW5kZXJsaW5lUG9zaXRpb24iLCJ1bmRlcmxpbmUtcG9zaXRpb24iXSxbInVuZGVybGluZVRoaWNrbmVzcyIsInVuZGVybGluZS10aGlja25lc3MiXSxbInVuaWNvZGVCaWRpIiwidW5pY29kZS1iaWRpIl0sWyJ1bmljb2RlUmFuZ2UiLCJ1bmljb2RlLXJhbmdlIl0sWyJ1bml0c1BlckVtIiwidW5pdHMtcGVyLWVtIl0sWyJ2QWxwaGFiZXRpYyIsInYtYWxwaGFiZXRpYyJdLFsidkhhbmdpbmciLCJ2LWhhbmdpbmciXSxbInZJZGVvZ3JhcGhpYyIsInYtaWRlb2dyYXBoaWMiXSxbInZNYXRoZW1hdGljYWwiLCJ2LW1hdGhlbWF0aWNhbCJdLFsidmVjdG9yRWZmZWN0IiwidmVjdG9yLWVmZmVjdCJdLFsidmVydEFkdlkiLCJ2ZXJ0LWFkdi15Il0sWyJ2ZXJ0T3JpZ2luWCIsInZlcnQtb3JpZ2luLXgiXSxbInZlcnRPcmlnaW5ZIiwidmVydC1vcmlnaW4teSJdLFsid29yZFNwYWNpbmciLCJ3b3JkLXNwYWNpbmciXSxbIndyaXRpbmdNb2RlIiwid3JpdGluZy1tb2RlIl0sWyJ4bWxuc1hsaW5rIiwieG1sbnM6eGxpbmsiXSxbInhIZWlnaHQiLCJ4LWhlaWdodCJdXSksdG09bnVsbDtmdW5jdGlvbiB0aChlKXtyZXR1cm4oZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3cpLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSwzPT09ZS5ub2RlVHlwZT9lLnBhcmVudE5vZGU6ZX12YXIgdGc9bnVsbCx0eT1udWxsO2Z1bmN0aW9uIHR2KGUpe3ZhciB0PWVPKGUpO2lmKHQmJihlPXQuc3RhdGVOb2RlKSl7dmFyIG49ZUQoZSk7c3dpdGNoKGU9dC5zdGF0ZU5vZGUsdC50eXBlKXtjYXNlImlucHV0IjppZihlNyhlLG4udmFsdWUsbi5kZWZhdWx0VmFsdWUsbi5kZWZhdWx0VmFsdWUsbi5jaGVja2VkLG4uZGVmYXVsdENoZWNrZWQsbi50eXBlLG4ubmFtZSksdD1uLm5hbWUsInJhZGlvIj09PW4udHlwZSYmbnVsbCE9dCl7Zm9yKG49ZTtuLnBhcmVudE5vZGU7KW49bi5wYXJlbnROb2RlO2ZvcihuPW4ucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0iJytlNSgiIit0KSsnIl1bdHlwZT0icmFkaW8iXScpLHQ9MDt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTtpZihyIT09ZSYmci5mb3JtPT09ZS5mb3JtKXt2YXIgbD1lRChyKTtpZighbCl0aHJvdyBFcnJvcihpKDkwKSk7ZTcocixsLnZhbHVlLGwuZGVmYXVsdFZhbHVlLGwuZGVmYXVsdFZhbHVlLGwuY2hlY2tlZCxsLmRlZmF1bHRDaGVja2VkLGwudHlwZSxsLm5hbWUpfX1mb3IodD0wO3Q8bi5sZW5ndGg7dCsrKShyPW5bdF0pLmZvcm09PT1lLmZvcm0mJmU0KHIpfWJyZWFrO2Nhc2UidGV4dGFyZWEiOnRyKGUsbi52YWx1ZSxuLmRlZmF1bHRWYWx1ZSk7YnJlYWs7Y2FzZSJzZWxlY3QiOm51bGwhPSh0PW4udmFsdWUpJiZ0bihlLCEhbi5tdWx0aXBsZSx0LCExKX19fWZ1bmN0aW9uIHRiKGUpe3RnP3R5P3R5LnB1c2goZSk6dHk9W2VdOnRnPWV9ZnVuY3Rpb24gdGsoKXtpZih0Zyl7dmFyIGU9dGcsdD10eTtpZih0eT10Zz1udWxsLHR2KGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0dih0W2VdKX19ZnVuY3Rpb24gdHcoZSl7dmFyIHQ9ZSxuPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkbyAwIT0oNDA5OCYodD1lKS5mbGFncykmJihuPXQucmV0dXJuKSxlPXQucmV0dXJuO3doaWxlKGUpfXJldHVybiAzPT09dC50YWc/bjpudWxsfWZ1bmN0aW9uIHRTKGUpe2lmKDEzPT09ZS50YWcpe3ZhciB0PWUubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09dCYmbnVsbCE9PShlPWUuYWx0ZXJuYXRlKSYmKHQ9ZS5tZW1vaXplZFN0YXRlKSxudWxsIT09dClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIHRDKGUpe2lmKHR3KGUpIT09ZSl0aHJvdyBFcnJvcihpKDE4OCkpfWZ1bmN0aW9uIHRFKGUpe3JldHVybiBudWxsIT09KGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7aWYoIXQpe2lmKG51bGw9PT0odD10dyhlKSkpdGhyb3cgRXJyb3IoaSgxODgpKTtyZXR1cm4gdCE9PWU/bnVsbDplfWZvcih2YXIgbj1lLHI9dDs7KXt2YXIgbD1uLnJldHVybjtpZihudWxsPT09bClicmVhazt2YXIgYT1sLmFsdGVybmF0ZTtpZihudWxsPT09YSl7aWYobnVsbCE9PShyPWwucmV0dXJuKSl7bj1yO2NvbnRpbnVlfWJyZWFrfWlmKGwuY2hpbGQ9PT1hLmNoaWxkKXtmb3IoYT1sLmNoaWxkO2E7KXtpZihhPT09bilyZXR1cm4gdEMobCksZTtpZihhPT09cilyZXR1cm4gdEMobCksdDthPWEuc2libGluZ310aHJvdyBFcnJvcihpKDE4OCkpfWlmKG4ucmV0dXJuIT09ci5yZXR1cm4pbj1sLHI9YTtlbHNle2Zvcih2YXIgbz0hMSx1PWwuY2hpbGQ7dTspe2lmKHU9PT1uKXtvPSEwLG49bCxyPWE7YnJlYWt9aWYodT09PXIpe289ITAscj1sLG49YTticmVha311PXUuc2libGluZ31pZighbyl7Zm9yKHU9YS5jaGlsZDt1Oyl7aWYodT09PW4pe289ITAsbj1hLHI9bDticmVha31pZih1PT09cil7bz0hMCxyPWEsbj1sO2JyZWFrfXU9dS5zaWJsaW5nfWlmKCFvKXRocm93IEVycm9yKGkoMTg5KSl9fWlmKG4uYWx0ZXJuYXRlIT09cil0aHJvdyBFcnJvcihpKDE5MCkpfWlmKDMhPT1uLnRhZyl0aHJvdyBFcnJvcihpKDE4OCkpO3JldHVybiBuLnN0YXRlTm9kZS5jdXJyZW50PT09bj9lOnR9KGUpKT9mdW5jdGlvbiBlKHQpe3ZhciBuPXQudGFnO2lmKDU9PT1ufHwyNj09PW58fDI3PT09bnx8Nj09PW4pcmV0dXJuIHQ7Zm9yKHQ9dC5jaGlsZDtudWxsIT09dDspe2lmKG51bGwhPT0obj1lKHQpKSlyZXR1cm4gbjt0PXQuc2libGluZ31yZXR1cm4gbnVsbH0oZSk6bnVsbH12YXIgdHg9e30sdHo9bSh0eCksdFA9bSghMSksdE49dHg7ZnVuY3Rpb24gdF8oZSx0KXt2YXIgbj1lLnR5cGUuY29udGV4dFR5cGVzO2lmKCFuKXJldHVybiB0eDt2YXIgcj1lLnN0YXRlTm9kZTtpZihyJiZyLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9PT10KXJldHVybiByLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O3ZhciBsLGE9e307Zm9yKGwgaW4gbilhW2xdPXRbbF07cmV0dXJuIHImJigoZT1lLnN0YXRlTm9kZSkuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD10LGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9YSksYX1mdW5jdGlvbiB0TChlKXtyZXR1cm4gbnVsbCE9KGU9ZS5jaGlsZENvbnRleHRUeXBlcyl9ZnVuY3Rpb24gdFQoKXtoKHRQKSxoKHR6KX1mdW5jdGlvbiB0RihlLHQsbil7aWYodHouY3VycmVudCE9PXR4KXRocm93IEVycm9yKGkoMTY4KSk7Zyh0eix0KSxnKHRQLG4pfWZ1bmN0aW9uIHRNKGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZih0PXQuY2hpbGRDb250ZXh0VHlwZXMsImZ1bmN0aW9uIiE9dHlwZW9mIHIuZ2V0Q2hpbGRDb250ZXh0KXJldHVybiBuO2Zvcih2YXIgbCBpbiByPXIuZ2V0Q2hpbGRDb250ZXh0KCkpaWYoIShsIGluIHQpKXRocm93IEVycm9yKGkoMTA4LGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZTtzd2l0Y2goZS50YWcpe2Nhc2UgMjQ6cmV0dXJuIkNhY2hlIjtjYXNlIDk6cmV0dXJuKHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Db25zdW1lciI7Y2FzZSAxMDpyZXR1cm4odC5fY29udGV4dC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLlByb3ZpZGVyIjtjYXNlIDE4OnJldHVybiJEZWh5ZHJhdGVkRnJhZ21lbnQiO2Nhc2UgMTE6cmV0dXJuIGU9KGU9dC5yZW5kZXIpLmRpc3BsYXlOYW1lfHxlLm5hbWV8fCIiLHQuZGlzcGxheU5hbWV8fCgiIiE9PWU/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpO2Nhc2UgNzpyZXR1cm4iRnJhZ21lbnQiO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIHQ7Y2FzZSA0OnJldHVybiJQb3J0YWwiO2Nhc2UgMzpyZXR1cm4iUm9vdCI7Y2FzZSA2OnJldHVybiJUZXh0IjtjYXNlIDE2OnJldHVybiBmdW5jdGlvbiBlKHQpe2lmKG51bGw9PXQpcmV0dXJuIG51bGw7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHQuJCR0eXBlb2Y9PT1lMD9udWxsOnQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2UgYjpyZXR1cm4iRnJhZ21lbnQiO2Nhc2UgdjpyZXR1cm4iUG9ydGFsIjtjYXNlIHc6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIGs6cmV0dXJuIlN0cmljdE1vZGUiO2Nhc2UgejpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgUDpyZXR1cm4iU3VzcGVuc2VMaXN0IjtjYXNlIE06cmV0dXJuIkNhY2hlIn1pZigib2JqZWN0Ij09dHlwZW9mIHQpc3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgUzpyZXR1cm4odC5fY29udGV4dC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLlByb3ZpZGVyIjtjYXNlIEU6cmV0dXJuKHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Db25zdW1lciI7Y2FzZSB4OnZhciBuPXQucmVuZGVyO3JldHVybih0PXQuZGlzcGxheU5hbWUpfHwodD0iIiE9PSh0PW4uZGlzcGxheU5hbWV8fG4ubmFtZXx8IiIpPyJGb3J3YXJkUmVmKCIrdCsiKSI6IkZvcndhcmRSZWYiKSx0O2Nhc2UgTjpyZXR1cm4gbnVsbCE9PShuPXQuZGlzcGxheU5hbWV8fG51bGwpP246ZSh0LnR5cGUpfHwiTWVtbyI7Y2FzZSBfOm49dC5fcGF5bG9hZCx0PXQuX2luaXQ7dHJ5e3JldHVybiBlKHQobikpfWNhdGNoKGUpe319cmV0dXJuIG51bGx9KHQpO2Nhc2UgODpyZXR1cm4gdD09PWs/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHR9cmV0dXJuIG51bGx9KGUpfHwiVW5rbm93biIsbCkpO3JldHVybiB1KHt9LG4scil9ZnVuY3Rpb24gdE8oZSl7cmV0dXJuIGU9KGU9ZS5zdGF0ZU5vZGUpJiZlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHx0eCx0Tj10ei5jdXJyZW50LGcodHosZSksZyh0UCx0UC5jdXJyZW50KSwhMH1mdW5jdGlvbiB0UihlLHQsbil7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYoIXIpdGhyb3cgRXJyb3IoaSgxNjkpKTtuPyhlPXRNKGUsdCx0Tiksci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1lLGgodFApLGgodHopLGcodHosZSkpOmgodFApLGcodFAsbil9dmFyIHREPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoMCE9PWV8fDEvZT09MS90KXx8ZSE9ZSYmdCE9dH0sdEE9W10sdEk9MCx0VT1udWxsLHRCPTAsdFY9W10sdFE9MCx0JD1udWxsLHRqPTEsdFc9IiI7ZnVuY3Rpb24gdEgoZSx0KXt0QVt0SSsrXT10Qix0QVt0SSsrXT10VSx0VT1lLHRCPXR9ZnVuY3Rpb24gdHEoZSx0LG4pe3RWW3RRKytdPXRqLHRWW3RRKytdPXRXLHRWW3RRKytdPXQkLHQkPWU7dmFyIHI9dGo7ZT10Vzt2YXIgbD0zMi1laShyKS0xO3ImPX4oMTw8bCksbis9MTt2YXIgYT0zMi1laSh0KStsO2lmKDMwPGEpe3ZhciBvPWwtbCU1O2E9KHImKDE8PG8pLTEpLnRvU3RyaW5nKDMyKSxyPj49byxsLT1vLHRqPTE8PDMyLWVpKHQpK2x8bjw8bHxyLHRXPWErZX1lbHNlIHRqPTE8PGF8bjw8bHxyLHRXPWV9ZnVuY3Rpb24gdEsoZSl7bnVsbCE9PWUucmV0dXJuJiYodEgoZSwxKSx0cShlLDEsMCkpfWZ1bmN0aW9uIHRZKGUpe2Zvcig7ZT09PXRVOyl0VT10QVstLXRJXSx0QVt0SV09bnVsbCx0Qj10QVstLXRJXSx0QVt0SV09bnVsbDtmb3IoO2U9PT10JDspdCQ9dFZbLS10UV0sdFZbdFFdPW51bGwsdFc9dFZbLS10UV0sdFZbdFFdPW51bGwsdGo9dFZbLS10UV0sdFZbdFFdPW51bGx9dmFyIHRYPW51bGwsdEc9bnVsbCx0Wj0hMSx0Sj1udWxsLHQwPSExO2Z1bmN0aW9uIHQxKGUsdCl7dmFyIG49aVMoNSxudWxsLG51bGwsMCk7bi5lbGVtZW50VHlwZT0iREVMRVRFRCIsbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLG51bGw9PT0odD1lLmRlbGV0aW9ucyk/KGUuZGVsZXRpb25zPVtuXSxlLmZsYWdzfD0xNik6dC5wdXNoKG4pfWZ1bmN0aW9uIHQyKGUsdCl7dC5mbGFncz0tNDA5NyZ0LmZsYWdzfDJ9ZnVuY3Rpb24gdDMoZSx0KXtyZXR1cm4gbnVsbCE9PSh0PWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcig7MT09PWUubm9kZVR5cGU7KXtpZihlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpe2lmKCFyJiYoIklOUFVUIiE9PWUubm9kZU5hbWV8fCJoaWRkZW4iIT09ZS50eXBlKSlicmVha31lbHNlIGlmKHIpe2lmKCFlW2VUXSlzd2l0Y2godCl7Y2FzZSJtZXRhIjppZighZS5oYXNBdHRyaWJ1dGUoIml0ZW1wcm9wIikpYnJlYWs7cmV0dXJuIGU7Y2FzZSJsaW5rIjppZigic3R5bGVzaGVldCI9PT0obD1lLmdldEF0dHJpYnV0ZSgicmVsIikpJiZlLmhhc0F0dHJpYnV0ZSgiZGF0YS1wcmVjZWRlbmNlIil8fGwhPT1uLnJlbHx8ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKSE9PShudWxsPT1uLmhyZWY/bnVsbDpuLmhyZWYpfHxlLmdldEF0dHJpYnV0ZSgiY3Jvc3NvcmlnaW4iKSE9PShudWxsPT1uLmNyb3NzT3JpZ2luP251bGw6bi5jcm9zc09yaWdpbil8fGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpIT09KG51bGw9PW4udGl0bGU/bnVsbDpuLnRpdGxlKSlicmVhaztyZXR1cm4gZTtjYXNlInN0eWxlIjppZihlLmhhc0F0dHJpYnV0ZSgiZGF0YS1wcmVjZWRlbmNlIikpYnJlYWs7cmV0dXJuIGU7Y2FzZSJzY3JpcHQiOmlmKCgobD1lLmdldEF0dHJpYnV0ZSgic3JjIikpIT09KG51bGw9PW4uc3JjP251bGw6bi5zcmMpfHxlLmdldEF0dHJpYnV0ZSgidHlwZSIpIT09KG51bGw9PW4udHlwZT9udWxsOm4udHlwZSl8fGUuZ2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIpIT09KG51bGw9PW4uY3Jvc3NPcmlnaW4/bnVsbDpuLmNyb3NzT3JpZ2luKSkmJmwmJmUuaGFzQXR0cmlidXRlKCJhc3luYyIpJiYhZS5oYXNBdHRyaWJ1dGUoIml0ZW1wcm9wIikpYnJlYWs7cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gZX19ZWxzZXtpZigiaW5wdXQiIT09dHx8ImhpZGRlbiIhPT1lLnR5cGUpcmV0dXJuIGU7dmFyIGw9bnVsbD09bi5uYW1lP251bGw6IiIrbi5uYW1lO2lmKCJoaWRkZW4iPT09bi50eXBlJiZlLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09bClyZXR1cm4gZX1pZihudWxsPT09KGU9Y2EoZSkpKWJyZWFrfXJldHVybiBudWxsfSh0LGUudHlwZSxlLnBlbmRpbmdQcm9wcyx0MCkpJiYoZS5zdGF0ZU5vZGU9dCx0WD1lLHRHPWNsKHQuZmlyc3RDaGlsZCksdDA9ITEsITApfWZ1bmN0aW9uIHQ0KGUsdCl7cmV0dXJuIG51bGwhPT0odD1mdW5jdGlvbihlLHQsbil7aWYoIiI9PT10KXJldHVybiBudWxsO2Zvcig7MyE9PWUubm9kZVR5cGU7KWlmKCgxIT09ZS5ub2RlVHlwZXx8IklOUFVUIiE9PWUubm9kZU5hbWV8fCJoaWRkZW4iIT09ZS50eXBlKSYmIW58fG51bGw9PT0oZT1jYShlKSkpcmV0dXJuIG51bGw7cmV0dXJuIGV9KHQsZS5wZW5kaW5nUHJvcHMsdDApKSYmKGUuc3RhdGVOb2RlPXQsdFg9ZSx0Rz1udWxsLCEwKX1mdW5jdGlvbiB0NihlLHQpe2U6e3ZhciBuPXQ7Zm9yKHQ9dDA7OCE9PW4ubm9kZVR5cGU7KWlmKCF0fHxudWxsPT09KG49Y2EobikpKXt0PW51bGw7YnJlYWsgZX10PW59cmV0dXJuIG51bGwhPT10JiYobj1udWxsIT09dCQ/e2lkOnRqLG92ZXJmbG93OnRXfTpudWxsLGUubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDp0LHRyZWVDb250ZXh0Om4scmV0cnlMYW5lOjUzNjg3MDkxMn0sKG49aVMoMTgsbnVsbCxudWxsLDApKS5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLGUuY2hpbGQ9bix0WD1lLHRHPW51bGwsITApfWZ1bmN0aW9uIHQ4KGUpe3JldHVybiAwIT0oMSZlLm1vZGUpJiYwPT0oMTI4JmUuZmxhZ3MpfWZ1bmN0aW9uIHQ1KCl7dGhyb3cgRXJyb3IoaSg0MTgpKX1mdW5jdGlvbiB0NyhlKXtmb3IodFg9ZS5yZXR1cm47dFg7KXN3aXRjaCh0WC50YWcpe2Nhc2UgMzpjYXNlIDI3OnQwPSEwO3JldHVybjtjYXNlIDU6Y2FzZSAxMzp0MD0hMTtyZXR1cm47ZGVmYXVsdDp0WD10WC5yZXR1cm59fWZ1bmN0aW9uIHQ5KGUpe2lmKGUhPT10WClyZXR1cm4hMTtpZighdFopcmV0dXJuIHQ3KGUpLHRaPSEwLCExO3ZhciB0LG49ITE7aWYoKHQ9MyE9PWUudGFnJiYyNyE9PWUudGFnKSYmKCh0PTU9PT1lLnRhZykmJih0PSEoImZvcm0iIT09KHQ9ZS50eXBlKSYmImJ1dHRvbiIhPT10KXx8czQoZS50eXBlLGUubWVtb2l6ZWRQcm9wcykpLHQ9IXQpLHQmJihuPSEwKSxuJiYobj10Rykpe2lmKHQ4KGUpKW5lKCksdDUoKTtlbHNlIGZvcig7bjspdDEoZSxuKSxuPWNhKG4pfWlmKHQ3KGUpLDEzPT09ZS50YWcpe2lmKCEoZT1udWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKT9lLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IoaSgzMTcpKTtlOntmb3Iobj0wLGU9ZS5uZXh0U2libGluZztlOyl7aWYoOD09PWUubm9kZVR5cGUpe2lmKCIvJCI9PT0odD1lLmRhdGEpKXtpZigwPT09bil7dEc9Y2EoZSk7YnJlYWsgZX1uLS19ZWxzZSIkIiE9PXQmJiIkISIhPT10JiYiJD8iIT09dHx8bisrfWU9ZS5uZXh0U2libGluZ310Rz1udWxsfX1lbHNlIHRHPXRYP2NhKGUuc3RhdGVOb2RlKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIG5lKCl7Zm9yKHZhciBlPXRHO2U7KWU9Y2EoZSl9ZnVuY3Rpb24gbnQoKXt0Rz10WD1udWxsLHRaPSExfWZ1bmN0aW9uIG5uKGUpe251bGw9PT10Sj90Sj1bZV06dEoucHVzaChlKX12YXIgbnI9W10sbmw9MCxuYT0wO2Z1bmN0aW9uIG5vKCl7Zm9yKHZhciBlPW5sLHQ9bmE9bmw9MDt0PGU7KXt2YXIgbj1uclt0XTtuclt0KytdPW51bGw7dmFyIHI9bnJbdF07bnJbdCsrXT1udWxsO3ZhciBsPW5yW3RdO25yW3QrK109bnVsbDt2YXIgYT1uclt0XTtpZihuclt0KytdPW51bGwsbnVsbCE9PXImJm51bGwhPT1sKXt2YXIgbz1yLnBlbmRpbmc7bnVsbD09PW8/bC5uZXh0PWw6KGwubmV4dD1vLm5leHQsby5uZXh0PWwpLHIucGVuZGluZz1sfTAhPT1hJiZuYyhuLGwsYSl9fWZ1bmN0aW9uIG5pKGUsdCxuLHIpe25yW25sKytdPWUsbnJbbmwrK109dCxucltubCsrXT1uLG5yW25sKytdPXIsbmF8PXIsZS5sYW5lc3w9cixudWxsIT09KGU9ZS5hbHRlcm5hdGUpJiYoZS5sYW5lc3w9cil9ZnVuY3Rpb24gbnUoZSx0LG4scil7cmV0dXJuIG5pKGUsdCxuLHIpLG5mKGUpfWZ1bmN0aW9uIG5zKGUsdCl7cmV0dXJuIG5pKGUsbnVsbCxudWxsLHQpLG5mKGUpfWZ1bmN0aW9uIG5jKGUsdCxuKXtlLmxhbmVzfD1uO3ZhciByPWUuYWx0ZXJuYXRlO251bGwhPT1yJiYoci5sYW5lc3w9bik7Zm9yKHZhciBsPSExLGE9ZS5yZXR1cm47bnVsbCE9PWE7KWEuY2hpbGRMYW5lc3w9bixudWxsIT09KHI9YS5hbHRlcm5hdGUpJiYoci5jaGlsZExhbmVzfD1uKSwyMj09PWEudGFnJiYobnVsbD09PShlPWEuc3RhdGVOb2RlKXx8MSZlLl92aXNpYmlsaXR5fHwobD0hMCkpLGU9YSxhPWEucmV0dXJuO2wmJm51bGwhPT10JiYzPT09ZS50YWcmJihhPWUuc3RhdGVOb2RlLGw9MzEtZWkobiksbnVsbD09PShlPShhPWEuaGlkZGVuVXBkYXRlcylbbF0pP2FbbF09W3RdOmUucHVzaCh0KSx0LmxhbmU9NTM2ODcwOTEyfG4pfWZ1bmN0aW9uIG5mKGUpe2lrKCk7Zm9yKHZhciB0PWUucmV0dXJuO251bGwhPT10Oyl0PShlPXQpLnJldHVybjtyZXR1cm4gMz09PWUudGFnP2Uuc3RhdGVOb2RlOm51bGx9dmFyIG5kPW51bGwsbnA9bnVsbCxubT0hMSxuaD0hMSxuZz0hMSxueT0wO2Z1bmN0aW9uIG52KGUpe2UhPT1ucCYmbnVsbD09PWUubmV4dCYmKG51bGw9PT1ucD9uZD1ucD1lOm5wPW5wLm5leHQ9ZSksbmg9ITAsbm18fChubT0hMCxuQyhudykpfWZ1bmN0aW9uIG5iKGUpe2lmKCFuZyYmbmgpe3ZhciB0PW51bGw7bmc9ITA7ZG8gZm9yKHZhciBuPSExLHI9bmQ7bnVsbCE9PXI7KXtpZighZXx8MD09PXIudGFnKXt2YXIgbD1vUyxhPWVwKHIscj09PW9rP2w6MCk7aWYoMCE9KDMmYSkpdHJ5e2lmKG49ITAsbD1yLDAhPSg2Jm9iKSl0aHJvdyBFcnJvcihpKDMyNykpO2lmKCFpZCgpKXt2YXIgbz1pbChsLGEpO2lmKDAhPT1sLnRhZyYmMj09PW8pe3ZhciB1PWEscz1lbShsLHUpOzAhPT1zJiYoYT1zLG89b0oobCx1LHMpKX1pZigxPT09byl0aHJvdyB1PW9OLG81KGwsMCksbzMobCxhLDApLG52KGwpLHU7Nj09PW8/bzMobCxhLG9GKToobC5maW5pc2hlZFdvcms9bC5jdXJyZW50LmFsdGVybmF0ZSxsLmZpbmlzaGVkTGFuZXM9YSxpcyhsLG9PLG9VLG9SLG9GKSl9bnYobCl9Y2F0Y2goZSl7bnVsbD09PXQ/dD1bZV06dC5wdXNoKGUpfX1yPXIubmV4dH13aGlsZShuKTtpZihuZz0hMSxudWxsIT09dCl7aWYoMTx0Lmxlbmd0aCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yKXRocm93IEFnZ3JlZ2F0ZUVycm9yKHQpO2ZvcihlPTE7ZTx0Lmxlbmd0aDtlKyspbkMobmsuYmluZChudWxsLHRbZV0pKX10aHJvdyB0WzBdfX19ZnVuY3Rpb24gbmsoZSl7dGhyb3cgZX1mdW5jdGlvbiBudygpe25oPW5tPSExO2Zvcih2YXIgZT1ZKCksdD1udWxsLG49bmQ7bnVsbCE9PW47KXt2YXIgcj1uLm5leHQ7aWYoMCE9PW55JiZmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5ldmVudDtyZXR1cm4gZSYmInBvcHN0YXRlIj09PWUudHlwZT9lIT09czYmJihzNj1lLCEwKTooczY9bnVsbCwhMSl9KCkpe3ZhciBsPW4sYT1ueTtsLnBlbmRpbmdMYW5lc3w9MixsLmVudGFuZ2xlZExhbmVzfD0yLGwuZW50YW5nbGVtZW50c1sxXXw9YX0wPT09KGw9blMobixlKSk/KG4ubmV4dD1udWxsLG51bGw9PT10P25kPXI6dC5uZXh0PXIsbnVsbD09PXImJihucD10KSk6KHQ9biwwIT0oMyZsKSYmKG5oPSEwKSksbj1yfW55PTAsbmIoITEpfWZ1bmN0aW9uIG5TKGUsdCl7Zm9yKHZhciBuPWUuc3VzcGVuZGVkTGFuZXMscj1lLnBpbmdlZExhbmVzLGw9ZS5leHBpcmF0aW9uVGltZXMsYT0tNjI5MTQ1NjEmZS5wZW5kaW5nTGFuZXM7MDxhOyl7dmFyIG89MzEtZWkoYSksaT0xPDxvLHU9bFtvXTstMT09PXU/KDA9PShpJm4pfHwwIT0oaSZyKSkmJihsW29dPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgODpyZXR1cm4gdCsyNTA7Y2FzZSAxNjpjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6cmV0dXJuIHQrNWUzO2RlZmF1bHQ6cmV0dXJuIC0xfX0oaSx0KSk6dTw9dCYmKGUuZXhwaXJlZExhbmVzfD1pKSxhJj1+aX1pZih0PW9rLG49b1Msbj1lcChlLGU9PT10P246MCkscj1lLmNhbGxiYWNrTm9kZSwwPT09bnx8ZT09PXQmJjI9PT1vQ3x8bnVsbCE9PWUuY2FuY2VsUGVuZGluZ0NvbW1pdClyZXR1cm4gbnVsbCE9PXImJm51bGwhPT1yJiZIKHIpLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7aWYoMCE9KDMmbikpcmV0dXJuIG51bGwhPT1yJiZudWxsIT09ciYmSChyKSxlLmNhbGxiYWNrUHJpb3JpdHk9MixlLmNhbGxiYWNrTm9kZT1udWxsLDI7aWYoKHQ9biYtbik9PT1lLmNhbGxiYWNrUHJpb3JpdHkpcmV0dXJuIHQ7c3dpdGNoKG51bGwhPT1yJiZIKHIpLGV3KG4pKXtjYXNlIDI6bj1HO2JyZWFrO2Nhc2UgODpuPVo7YnJlYWs7Y2FzZSAzMjpkZWZhdWx0Om49SjticmVhaztjYXNlIDI2ODQzNTQ1NjpuPWV0fXJldHVybiBuPVcobixyPW9aLmJpbmQobnVsbCxlKSksZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bix0fWZ1bmN0aW9uIG5DKGUpe3M5KGZ1bmN0aW9uKCl7MCE9KDYmb2IpP1coRyxlKTplKCl9KX1mdW5jdGlvbiBuRSgpe3JldHVybiAwPT09bnkmJihueT1laCgpKSxueX12YXIgbng9bnVsbCxuej0wLG5QPTAsbk49bnVsbDtmdW5jdGlvbiBuXygpe2lmKG51bGwhPT1ueCYmMD09LS1ueil7bnVsbCE9PW5OJiYobk4uc3RhdHVzPSJmdWxmaWxsZWQiKTt2YXIgZT1ueDtueD1udWxsLG5QPTAsbk49bnVsbDtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfX12YXIgbkw9ITE7ZnVuY3Rpb24gblQoZSl7ZS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGxhbmVzOjAsaGlkZGVuQ2FsbGJhY2tzOm51bGx9LGNhbGxiYWNrczpudWxsfX1mdW5jdGlvbiBuRihlLHQpe2U9ZS51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPT09ZSYmKHQudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsY2FsbGJhY2tzOm51bGx9KX1mdW5jdGlvbiBuTShlKXtyZXR1cm57bGFuZTplLHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gbk8oZSx0LG4pe3ZhciByPWUudXBkYXRlUXVldWU7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7aWYocj1yLnNoYXJlZCwwIT0oMiZvYikpe3ZhciBsPXIucGVuZGluZztyZXR1cm4gbnVsbD09PWw/dC5uZXh0PXQ6KHQubmV4dD1sLm5leHQsbC5uZXh0PXQpLHIucGVuZGluZz10LHQ9bmYoZSksbmMoZSxudWxsLG4pLHR9cmV0dXJuIG5pKGUscix0LG4pLG5mKGUpfWZ1bmN0aW9uIG5SKGUsdCxuKXtpZihudWxsIT09KHQ9dC51cGRhdGVRdWV1ZSkmJih0PXQuc2hhcmVkLDAhPSg0MTk0MTc2Jm4pKSl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixlYihlLG4pfX1mdW5jdGlvbiBuRChlLHQpe3ZhciBuPWUudXBkYXRlUXVldWUscj1lLmFsdGVybmF0ZTtpZihudWxsIT09ciYmbj09PShyPXIudXBkYXRlUXVldWUpKXt2YXIgbD1udWxsLGE9bnVsbDtpZihudWxsIT09KG49bi5maXJzdEJhc2VVcGRhdGUpKXtkb3t2YXIgbz17bGFuZTpuLmxhbmUsdGFnOm4udGFnLHBheWxvYWQ6bi5wYXlsb2FkLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfTtudWxsPT09YT9sPWE9bzphPWEubmV4dD1vLG49bi5uZXh0fXdoaWxlKG51bGwhPT1uKTtudWxsPT09YT9sPWE9dDphPWEubmV4dD10fWVsc2UgbD1hPXQ7bj17YmFzZVN0YXRlOnIuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpsLGxhc3RCYXNlVXBkYXRlOmEsc2hhcmVkOnIuc2hhcmVkLGNhbGxiYWNrczpyLmNhbGxiYWNrc30sZS51cGRhdGVRdWV1ZT1uO3JldHVybn1udWxsPT09KGU9bi5sYXN0QmFzZVVwZGF0ZSk/bi5maXJzdEJhc2VVcGRhdGU9dDplLm5leHQ9dCxuLmxhc3RCYXNlVXBkYXRlPXR9dmFyIG5BPSExO2Z1bmN0aW9uIG5JKCl7aWYobkEpe3ZhciBlPW5OO2lmKG51bGwhPT1lKXRocm93IGV9fWZ1bmN0aW9uIG5VKGUsdCxuLHIpe25BPSExO3ZhciBsPWUudXBkYXRlUXVldWU7bkw9ITE7dmFyIGE9bC5maXJzdEJhc2VVcGRhdGUsbz1sLmxhc3RCYXNlVXBkYXRlLGk9bC5zaGFyZWQucGVuZGluZztpZihudWxsIT09aSl7bC5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBzPWksYz1zLm5leHQ7cy5uZXh0PW51bGwsbnVsbD09PW8/YT1jOm8ubmV4dD1jLG89czt2YXIgZj1lLmFsdGVybmF0ZTtudWxsIT09ZiYmKGk9KGY9Zi51cGRhdGVRdWV1ZSkubGFzdEJhc2VVcGRhdGUpIT09byYmKG51bGw9PT1pP2YuZmlyc3RCYXNlVXBkYXRlPWM6aS5uZXh0PWMsZi5sYXN0QmFzZVVwZGF0ZT1zKX1pZihudWxsIT09YSl7dmFyIGQ9bC5iYXNlU3RhdGU7Zm9yKG89MCxmPWM9cz1udWxsLGk9YTs7KXt2YXIgcD0tNTM2ODcwOTEzJmkubGFuZSxtPXAhPT1pLmxhbmU7aWYobT8ob1MmcCk9PT1wOihyJnApPT09cCl7MCE9PXAmJnA9PT1uUCYmKG5BPSEwKSxudWxsIT09ZiYmKGY9Zi5uZXh0PXtsYW5lOjAsdGFnOmkudGFnLHBheWxvYWQ6aS5wYXlsb2FkLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfSk7ZTp7dmFyIGg9ZSxnPWk7c3dpdGNoKHA9dCxnLnRhZyl7Y2FzZSAxOmlmKCJmdW5jdGlvbiI9PXR5cGVvZihoPWcucGF5bG9hZCkpe2Q9aC5jYWxsKG4sZCxwKTticmVhayBlfWQ9aDticmVhayBlO2Nhc2UgMzpoLmZsYWdzPS02NTUzNyZoLmZsYWdzfDEyODtjYXNlIDA6aWYobnVsbD09KHA9ImZ1bmN0aW9uIj09dHlwZW9mKGg9Zy5wYXlsb2FkKT9oLmNhbGwobixkLHApOmgpKWJyZWFrIGU7ZD11KHt9LGQscCk7YnJlYWsgZTtjYXNlIDI6bkw9ITB9fW51bGwhPT0ocD1pLmNhbGxiYWNrKSYmKGUuZmxhZ3N8PTY0LG0mJihlLmZsYWdzfD04MTkyKSxudWxsPT09KG09bC5jYWxsYmFja3MpP2wuY2FsbGJhY2tzPVtwXTptLnB1c2gocCkpfWVsc2UgbT17bGFuZTpwLHRhZzppLnRhZyxwYXlsb2FkOmkucGF5bG9hZCxjYWxsYmFjazppLmNhbGxiYWNrLG5leHQ6bnVsbH0sbnVsbD09PWY/KGM9Zj1tLHM9ZCk6Zj1mLm5leHQ9bSxvfD1wO2lmKG51bGw9PT0oaT1pLm5leHQpKXtpZihudWxsPT09KGk9bC5zaGFyZWQucGVuZGluZykpYnJlYWs7aT0obT1pKS5uZXh0LG0ubmV4dD1udWxsLGwubGFzdEJhc2VVcGRhdGU9bSxsLnNoYXJlZC5wZW5kaW5nPW51bGx9fW51bGw9PT1mJiYocz1kKSxsLmJhc2VTdGF0ZT1zLGwuZmlyc3RCYXNlVXBkYXRlPWMsbC5sYXN0QmFzZVVwZGF0ZT1mLG51bGw9PT1hJiYobC5zaGFyZWQubGFuZXM9MCksb198PW8sZS5sYW5lcz1vLGUubWVtb2l6ZWRTdGF0ZT1kfX1mdW5jdGlvbiBuQihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IEVycm9yKGkoMTkxLGUpKTtlLmNhbGwodCl9ZnVuY3Rpb24gblYoZSx0KXt2YXIgbj1lLmNhbGxiYWNrcztpZihudWxsIT09bilmb3IoZS5jYWxsYmFja3M9bnVsbCxlPTA7ZTxuLmxlbmd0aDtlKyspbkIobltlXSx0KX1mdW5jdGlvbiBuUShlLHQpe2lmKHREKGUsdCkpcmV0dXJuITA7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxyPU9iamVjdC5rZXlzKHQpO2lmKG4ubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXTtpZighZVMuY2FsbCh0LGwpfHwhdEQoZVtsXSx0W2xdKSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgbiQ9RXJyb3IoaSg0NjApKSxuaj1FcnJvcihpKDQ3NCkpLG5XPXt0aGVuOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gbkgoZSl7cmV0dXJuImZ1bGZpbGxlZCI9PT0oZT1lLnN0YXR1cyl8fCJyZWplY3RlZCI9PT1lfWZ1bmN0aW9uIG5xKCl7fWZ1bmN0aW9uIG5LKGUsdCxuKXtzd2l0Y2godm9pZCAwPT09KG49ZVtuXSk/ZS5wdXNoKHQpOm4hPT10JiYodC50aGVuKG5xLG5xKSx0PW4pLHQuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIHQudmFsdWU7Y2FzZSJyZWplY3RlZCI6aWYoKGU9dC5yZWFzb24pPT09biQpdGhyb3cgRXJyb3IoaSg0ODMpKTt0aHJvdyBlO2RlZmF1bHQ6aWYoInN0cmluZyI9PXR5cGVvZiB0LnN0YXR1cyl0LnRoZW4obnEsbnEpO2Vsc2V7aWYobnVsbCE9PShlPW9rKSYmMTAwPGUuc2hlbGxTdXNwZW5kQ291bnRlcil0aHJvdyBFcnJvcihpKDQ4MikpOyhlPXQpLnN0YXR1cz0icGVuZGluZyIsZS50aGVuKGZ1bmN0aW9uKGUpe2lmKCJwZW5kaW5nIj09PXQuc3RhdHVzKXt2YXIgbj10O24uc3RhdHVzPSJmdWxmaWxsZWQiLG4udmFsdWU9ZX19LGZ1bmN0aW9uKGUpe2lmKCJwZW5kaW5nIj09PXQuc3RhdHVzKXt2YXIgbj10O24uc3RhdHVzPSJyZWplY3RlZCIsbi5yZWFzb249ZX19KX1zd2l0Y2godC5zdGF0dXMpe2Nhc2UiZnVsZmlsbGVkIjpyZXR1cm4gdC52YWx1ZTtjYXNlInJlamVjdGVkIjppZigoZT10LnJlYXNvbik9PT1uJCl0aHJvdyBFcnJvcihpKDQ4MykpO3Rocm93IGV9dGhyb3cgblk9dCxuJH19dmFyIG5ZPW51bGw7ZnVuY3Rpb24gblgoKXtpZihudWxsPT09blkpdGhyb3cgRXJyb3IoaSg0NTkpKTt2YXIgZT1uWTtyZXR1cm4gblk9bnVsbCxlfXZhciBuRz1udWxsLG5aPTA7ZnVuY3Rpb24gbkooZSl7dmFyIHQ9blo7cmV0dXJuIG5aKz0xLG51bGw9PT1uRyYmKG5HPVtdKSxuSyhuRyxlLHQpfWZ1bmN0aW9uIG4wKGUsdCxuLHIpe3ZhciBsPXIucmVmO2U9bnVsbCE9PWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsJiYib2JqZWN0IiE9dHlwZW9mIGw/ZnVuY3Rpb24oZSx0LG4scil7ZnVuY3Rpb24gbChlKXt2YXIgdD1vLnJlZnM7bnVsbD09PWU/ZGVsZXRlIHRbYV06dFthXT1lfWlmKCEoZT1uLl9vd25lcikpe2lmKCJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBFcnJvcihpKDI4NCkpO3Rocm93IEVycm9yKGkoMjkwLHIpKX1pZigxIT09ZS50YWcpdGhyb3cgRXJyb3IoaSgzMDkpKTt2YXIgYT0iIityLG89ZS5zdGF0ZU5vZGU7aWYoIW8pdGhyb3cgRXJyb3IoaSgxNDcsYSkpO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXQucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWYmJnQucmVmLl9zdHJpbmdSZWY9PT1hP3QucmVmOihsLl9zdHJpbmdSZWY9YSxsKX0oZSx0LHIsbCk6bCxuLnJlZj1lfWZ1bmN0aW9uIG4xKGUsdCl7dGhyb3cgRXJyb3IoaSgzMSwiW29iamVjdCBPYmplY3RdIj09PShlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSk/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXModCkuam9pbigiLCAiKSsifSI6ZSkpfWZ1bmN0aW9uIG4yKGUpe3JldHVybigwLGUuX2luaXQpKGUuX3BheWxvYWQpfWZ1bmN0aW9uIG4zKGUpe2Z1bmN0aW9uIHQodCxuKXtpZihlKXt2YXIgcj10LmRlbGV0aW9ucztudWxsPT09cj8odC5kZWxldGlvbnM9W25dLHQuZmxhZ3N8PTE2KTpyLnB1c2gobil9fWZ1bmN0aW9uIG4obixyKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO251bGwhPT1yOyl0KG4scikscj1yLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihlLHQpe2ZvcihlPW5ldyBNYXA7bnVsbCE9PXQ7KW51bGwhPT10LmtleT9lLnNldCh0LmtleSx0KTplLnNldCh0LmluZGV4LHQpLHQ9dC5zaWJsaW5nO3JldHVybiBlfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4oZT1pRShlLHQpKS5pbmRleD0wLGUuc2libGluZz1udWxsLGV9ZnVuY3Rpb24gYSh0LG4scil7cmV0dXJuKHQuaW5kZXg9cixlKT9udWxsIT09KHI9dC5hbHRlcm5hdGUpPyhyPXIuaW5kZXgpPG4/KHQuZmxhZ3N8PTMzNTU0NDM0LG4pOnI6KHQuZmxhZ3N8PTMzNTU0NDM0LG4pOih0LmZsYWdzfD0xMDQ4NTc2LG4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGUmJm51bGw9PT10LmFsdGVybmF0ZSYmKHQuZmxhZ3N8PTMzNTU0NDM0KSx0fWZ1bmN0aW9uIHUoZSx0LG4scil7cmV0dXJuIG51bGw9PT10fHw2IT09dC50YWc/KHQ9aV8obixlLm1vZGUscikpLnJldHVybj1lOih0PWwodCxuKSkucmV0dXJuPWUsdH1mdW5jdGlvbiBzKGUsdCxuLHIpe3ZhciBhPW4udHlwZTtyZXR1cm4gYT09PWI/ZihlLHQsbi5wcm9wcy5jaGlsZHJlbixyLG4ua2V5KToocj1udWxsIT09dCYmKHQuZWxlbWVudFR5cGU9PT1hfHwib2JqZWN0Ij09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09XyYmbjIoYSk9PT10LnR5cGUpP2wodCxuLnByb3BzKTppeihuLnR5cGUsbi5rZXksbi5wcm9wcyxudWxsLGUubW9kZSxyKSxuMChlLHQscixuKSxyLnJldHVybj1lLHIpfWZ1bmN0aW9uIGMoZSx0LG4scil7cmV0dXJuIG51bGw9PT10fHw0IT09dC50YWd8fHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8hPT1uLmNvbnRhaW5lckluZm98fHQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uIT09bi5pbXBsZW1lbnRhdGlvbj8odD1pTChuLGUubW9kZSxyKSkucmV0dXJuPWU6KHQ9bCh0LG4uY2hpbGRyZW58fFtdKSkucmV0dXJuPWUsdH1mdW5jdGlvbiBmKGUsdCxuLHIsYSl7cmV0dXJuIG51bGw9PT10fHw3IT09dC50YWc/KHQ9aVAobixlLm1vZGUscixhKSkucmV0dXJuPWU6KHQ9bCh0LG4pKS5yZXR1cm49ZSx0fWZ1bmN0aW9uIGQoZSx0LG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10fHwibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuKHQ9aV8oIiIrdCxlLm1vZGUsbikpLnJldHVybj1lLHQ7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCl7c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgeTpyZXR1cm4gbj1peih0LnR5cGUsdC5rZXksdC5wcm9wcyxudWxsLGUubW9kZSxuKSxuMChlLG51bGwsbix0KSxuLnJldHVybj1lLG47Y2FzZSB2OnJldHVybih0PWlMKHQsZS5tb2RlLG4pKS5yZXR1cm49ZSx0O2Nhc2UgXzpyZXR1cm4gZChlLCgwLHQuX2luaXQpKHQuX3BheWxvYWQpLG4pfWlmKHR0KHQpfHxSKHQpKXJldHVybih0PWlQKHQsZS5tb2RlLG4sbnVsbCkpLnJldHVybj1lLHQ7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQudGhlbilyZXR1cm4gZChlLG5KKHQpLG4pO2lmKHQuJCR0eXBlb2Y9PT1FKXJldHVybiBkKGUsYWkoZSx0LG4pLG4pO24xKGUsdCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChlLHQsbixyKXt2YXIgbD1udWxsIT09dD90LmtleTpudWxsO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG51bGwhPT1sP251bGw6dShlLHQsIiIrbixyKTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uKXtzd2l0Y2gobi4kJHR5cGVvZil7Y2FzZSB5OnJldHVybiBuLmtleT09PWw/cyhlLHQsbixyKTpudWxsO2Nhc2UgdjpyZXR1cm4gbi5rZXk9PT1sP2MoZSx0LG4scik6bnVsbDtjYXNlIF86cmV0dXJuIHAoZSx0LChsPW4uX2luaXQpKG4uX3BheWxvYWQpLHIpfWlmKHR0KG4pfHxSKG4pKXJldHVybiBudWxsIT09bD9udWxsOmYoZSx0LG4scixudWxsKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbi50aGVuKXJldHVybiBwKGUsdCxuSihuKSxyKTtpZihuLiQkdHlwZW9mPT09RSlyZXR1cm4gcChlLHQsYWkoZSxuLHIpLHIpO24xKGUsbil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbShlLHQsbixyLGwpe2lmKCJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwibnVtYmVyIj09dHlwZW9mIHIpcmV0dXJuIHUodCxlPWUuZ2V0KG4pfHxudWxsLCIiK3IsbCk7aWYoIm9iamVjdCI9PXR5cGVvZiByJiZudWxsIT09cil7c3dpdGNoKHIuJCR0eXBlb2Ype2Nhc2UgeTpyZXR1cm4gcyh0LGU9ZS5nZXQobnVsbD09PXIua2V5P246ci5rZXkpfHxudWxsLHIsbCk7Y2FzZSB2OnJldHVybiBjKHQsZT1lLmdldChudWxsPT09ci5rZXk/bjpyLmtleSl8fG51bGwscixsKTtjYXNlIF86cmV0dXJuIG0oZSx0LG4sKDAsci5faW5pdCkoci5fcGF5bG9hZCksbCl9aWYodHQocil8fFIocikpcmV0dXJuIGYodCxlPWUuZ2V0KG4pfHxudWxsLHIsbCxudWxsKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci50aGVuKXJldHVybiBtKGUsdCxuLG5KKHIpLGwpO2lmKHIuJCR0eXBlb2Y9PT1FKXJldHVybiBtKGUsdCxuLGFpKHQscixsKSxsKTtuMSh0LHIpfXJldHVybiBudWxsfXJldHVybiBmdW5jdGlvbih1LHMsYyxmKXtyZXR1cm4gblo9MCx1PWZ1bmN0aW9uIHUocyxjLGYsaCl7aWYoIm9iamVjdCI9PXR5cGVvZiBmJiZudWxsIT09ZiYmZi50eXBlPT09YiYmbnVsbD09PWYua2V5JiYoZj1mLnByb3BzLmNoaWxkcmVuKSwib2JqZWN0Ij09dHlwZW9mIGYmJm51bGwhPT1mKXtzd2l0Y2goZi4kJHR5cGVvZil7Y2FzZSB5OmU6e2Zvcih2YXIgZz1mLmtleSxrPWM7bnVsbCE9PWs7KXtpZihrLmtleT09PWcpe2lmKChnPWYudHlwZSk9PT1iKXtpZig3PT09ay50YWcpe24ocyxrLnNpYmxpbmcpLChjPWwoayxmLnByb3BzLmNoaWxkcmVuKSkucmV0dXJuPXMscz1jO2JyZWFrIGV9fWVsc2UgaWYoay5lbGVtZW50VHlwZT09PWd8fCJvYmplY3QiPT10eXBlb2YgZyYmbnVsbCE9PWcmJmcuJCR0eXBlb2Y9PT1fJiZuMihnKT09PWsudHlwZSl7bihzLGsuc2libGluZyksYz1sKGssZi5wcm9wcyksbjAocyxrLGMsZiksYy5yZXR1cm49cyxzPWM7YnJlYWsgZX1uKHMsayk7YnJlYWt9dChzLGspLGs9ay5zaWJsaW5nfWYudHlwZT09PWI/KChjPWlQKGYucHJvcHMuY2hpbGRyZW4scy5tb2RlLGgsZi5rZXkpKS5yZXR1cm49cyxzPWMpOihoPWl6KGYudHlwZSxmLmtleSxmLnByb3BzLG51bGwscy5tb2RlLGgpLG4wKHMsYyxoLGYpLGgucmV0dXJuPXMscz1oKX1yZXR1cm4gbyhzKTtjYXNlIHY6ZTp7Zm9yKGs9Zi5rZXk7bnVsbCE9PWM7KXtpZihjLmtleT09PWspe2lmKDQ9PT1jLnRhZyYmYy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWYuY29udGFpbmVySW5mbyYmYy5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1mLmltcGxlbWVudGF0aW9uKXtuKHMsYy5zaWJsaW5nKSwoYz1sKGMsZi5jaGlsZHJlbnx8W10pKS5yZXR1cm49cyxzPWM7YnJlYWsgZX1uKHMsYyk7YnJlYWt9dChzLGMpLGM9Yy5zaWJsaW5nfShjPWlMKGYscy5tb2RlLGgpKS5yZXR1cm49cyxzPWN9cmV0dXJuIG8ocyk7Y2FzZSBfOnJldHVybiB1KHMsYywoaz1mLl9pbml0KShmLl9wYXlsb2FkKSxoKX1pZih0dChmKSlyZXR1cm4gZnVuY3Rpb24obCxvLGksdSl7Zm9yKHZhciBzPW51bGwsYz1udWxsLGY9byxoPW89MCxnPW51bGw7bnVsbCE9PWYmJmg8aS5sZW5ndGg7aCsrKXtmLmluZGV4Pmg/KGc9ZixmPW51bGwpOmc9Zi5zaWJsaW5nO3ZhciB5PXAobCxmLGlbaF0sdSk7aWYobnVsbD09PXkpe251bGw9PT1mJiYoZj1nKTticmVha31lJiZmJiZudWxsPT09eS5hbHRlcm5hdGUmJnQobCxmKSxvPWEoeSxvLGgpLG51bGw9PT1jP3M9eTpjLnNpYmxpbmc9eSxjPXksZj1nfWlmKGg9PT1pLmxlbmd0aClyZXR1cm4gbihsLGYpLHRaJiZ0SChsLGgpLHM7aWYobnVsbD09PWYpe2Zvcig7aDxpLmxlbmd0aDtoKyspbnVsbCE9PShmPWQobCxpW2hdLHUpKSYmKG89YShmLG8saCksbnVsbD09PWM/cz1mOmMuc2libGluZz1mLGM9Zik7cmV0dXJuIHRaJiZ0SChsLGgpLHN9Zm9yKGY9cihsLGYpO2g8aS5sZW5ndGg7aCsrKW51bGwhPT0oZz1tKGYsbCxoLGlbaF0sdSkpJiYoZSYmbnVsbCE9PWcuYWx0ZXJuYXRlJiZmLmRlbGV0ZShudWxsPT09Zy5rZXk/aDpnLmtleSksbz1hKGcsbyxoKSxudWxsPT09Yz9zPWc6Yy5zaWJsaW5nPWcsYz1nKTtyZXR1cm4gZSYmZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0KGwsZSl9KSx0WiYmdEgobCxoKSxzfShzLGMsZixoKTtpZihSKGYpKXJldHVybiBmdW5jdGlvbihsLG8sdSxzKXt2YXIgYz1SKHUpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IEVycm9yKGkoMTUwKSk7aWYobnVsbD09KHU9Yy5jYWxsKHUpKSl0aHJvdyBFcnJvcihpKDE1MSkpO2Zvcih2YXIgZj1jPW51bGwsaD1vLGc9bz0wLHk9bnVsbCx2PXUubmV4dCgpO251bGwhPT1oJiYhdi5kb25lO2crKyx2PXUubmV4dCgpKXtoLmluZGV4Pmc/KHk9aCxoPW51bGwpOnk9aC5zaWJsaW5nO3ZhciBiPXAobCxoLHYudmFsdWUscyk7aWYobnVsbD09PWIpe251bGw9PT1oJiYoaD15KTticmVha31lJiZoJiZudWxsPT09Yi5hbHRlcm5hdGUmJnQobCxoKSxvPWEoYixvLGcpLG51bGw9PT1mP2M9YjpmLnNpYmxpbmc9YixmPWIsaD15fWlmKHYuZG9uZSlyZXR1cm4gbihsLGgpLHRaJiZ0SChsLGcpLGM7aWYobnVsbD09PWgpe2Zvcig7IXYuZG9uZTtnKyssdj11Lm5leHQoKSludWxsIT09KHY9ZChsLHYudmFsdWUscykpJiYobz1hKHYsbyxnKSxudWxsPT09Zj9jPXY6Zi5zaWJsaW5nPXYsZj12KTtyZXR1cm4gdFomJnRIKGwsZyksY31mb3IoaD1yKGwsaCk7IXYuZG9uZTtnKyssdj11Lm5leHQoKSludWxsIT09KHY9bShoLGwsZyx2LnZhbHVlLHMpKSYmKGUmJm51bGwhPT12LmFsdGVybmF0ZSYmaC5kZWxldGUobnVsbD09PXYua2V5P2c6di5rZXkpLG89YSh2LG8sZyksbnVsbD09PWY/Yz12OmYuc2libGluZz12LGY9dik7cmV0dXJuIGUmJmguZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdChsLGUpfSksdFomJnRIKGwsZyksY30ocyxjLGYsaCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYudGhlbilyZXR1cm4gdShzLGMsbkooZiksaCk7aWYoZi4kJHR5cGVvZj09PUUpcmV0dXJuIHUocyxjLGFpKHMsZixoKSxoKTtuMShzLGYpfXJldHVybiJzdHJpbmciPT10eXBlb2YgZiYmIiIhPT1mfHwibnVtYmVyIj09dHlwZW9mIGY/KGY9IiIrZixudWxsIT09YyYmNj09PWMudGFnPyhuKHMsYy5zaWJsaW5nKSwoYz1sKGMsZikpLnJldHVybj1zKToobihzLGMpLChjPWlfKGYscy5tb2RlLGgpKS5yZXR1cm49cyksbyhzPWMpKTpuKHMsYyl9KHUscyxjLGYpLG5HPW51bGwsdX19dmFyIG40PW4zKCEwKSxuNj1uMyghMSksbjg9bShudWxsKSxuNT1tKDApO2Z1bmN0aW9uIG43KGUsdCl7ZyhuNSxlPW96KSxnKG44LHQpLG96PWV8dC5iYXNlTGFuZXN9ZnVuY3Rpb24gbjkoKXtnKG41LG96KSxnKG44LG44LmN1cnJlbnQpfWZ1bmN0aW9uIHJlKCl7b3o9bjUuY3VycmVudCxoKG44KSxoKG41KX12YXIgcnQ9bShudWxsKSxybj1udWxsO2Z1bmN0aW9uIHJyKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2cocmksMSZyaS5jdXJyZW50KSxnKHJ0LGUpLG51bGw9PT1ybiYmKG51bGw9PT10fHxudWxsIT09bjguY3VycmVudD9ybj1lOm51bGwhPT10Lm1lbW9pemVkU3RhdGUmJihybj1lKSl9ZnVuY3Rpb24gcmwoZSl7aWYoMjI9PT1lLnRhZyl7aWYoZyhyaSxyaS5jdXJyZW50KSxnKHJ0LGUpLG51bGw9PT1ybil7dmFyIHQ9ZS5hbHRlcm5hdGU7bnVsbCE9PXQmJm51bGwhPT10Lm1lbW9pemVkU3RhdGUmJihybj1lKX19ZWxzZSByYShlKX1mdW5jdGlvbiByYSgpe2cocmkscmkuY3VycmVudCksZyhydCxydC5jdXJyZW50KX1mdW5jdGlvbiBybyhlKXtoKHJ0KSxybj09PWUmJihybj1udWxsKSxoKHJpKX12YXIgcmk9bSgwKTtmdW5jdGlvbiBydShlKXtmb3IodmFyIHQ9ZTtudWxsIT09dDspe2lmKDEzPT09dC50YWcpe3ZhciBuPXQubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09biYmKG51bGw9PT0obj1uLmRlaHlkcmF0ZWQpfHwiJD8iPT09bi5kYXRhfHwiJCEiPT09bi5kYXRhKSlyZXR1cm4gdH1lbHNlIGlmKDE5PT09dC50YWcmJnZvaWQgMCE9PXQubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlcil7aWYoMCE9KDEyOCZ0LmZsYWdzKSlyZXR1cm4gdH1lbHNlIGlmKG51bGwhPT10LmNoaWxkKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO251bGw9PT10LnNpYmxpbmc7KXtpZihudWxsPT09dC5yZXR1cm58fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHJzPXMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixyYz1zLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLHJmPTAscmQ9bnVsbCxycD1udWxsLHJtPW51bGwscmg9ITEscmc9ITEscnk9ITEscnY9MCxyYj0wLHJrPW51bGwscnc9MDtmdW5jdGlvbiByUygpe3Rocm93IEVycm9yKGkoMzIxKSl9ZnVuY3Rpb24gckMoZSx0KXtpZihudWxsPT09dClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZuPGUubGVuZ3RoO24rKylpZighdEQoZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiByRShlLHQsbixyLGwsYSl7cmV0dXJuIHJmPWEscmQ9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLHJzLmN1cnJlbnQ9bnVsbD09PWV8fG51bGw9PT1lLm1lbW9pemVkU3RhdGU/bGc6bHkscnk9ITEsZT1uKHIsbCkscnk9ITEscmcmJihlPXJ6KHQsbixyLGwpKSxyeCgpLGV9ZnVuY3Rpb24gcngoKXtycy5jdXJyZW50PWxoO3ZhciBlPW51bGwhPT1ycCYmbnVsbCE9PXJwLm5leHQ7aWYocmY9MCxybT1ycD1yZD1udWxsLHJoPSExLHJiPTAscms9bnVsbCxlKXRocm93IEVycm9yKGkoMzAwKSl9ZnVuY3Rpb24gcnooZSx0LG4scil7cmQ9ZTt2YXIgbD0wO2Rve2lmKHJnJiYocms9bnVsbCkscmI9MCxyZz0hMSwyNTw9bCl0aHJvdyBFcnJvcihpKDMwMSkpO2wrPTEscm09cnA9bnVsbCxlLnVwZGF0ZVF1ZXVlPW51bGwscnMuY3VycmVudD1sdjt2YXIgYT10KG4scil9d2hpbGUocmcpO3JldHVybiBhfWZ1bmN0aW9uIHJQKCl7dmFyIGU9cnMuY3VycmVudC51c2VTdGF0ZSgpWzBdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW4/ck0oZSk6ZX1mdW5jdGlvbiByTigpe3ZhciBlPTAhPT1ydjtyZXR1cm4gcnY9MCxlfWZ1bmN0aW9uIHJfKGUsdCxuKXt0LnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdC5mbGFncyY9LTIwNTMsZS5sYW5lcyY9fm59ZnVuY3Rpb24gckwoZSl7aWYocmgpe2ZvcihlPWUubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZTspe3ZhciB0PWUucXVldWU7bnVsbCE9PXQmJih0LnBlbmRpbmc9bnVsbCksZT1lLm5leHR9cmg9ITF9cmY9MCxybT1ycD1yZD1udWxsLHJnPSExLHJiPXJ2PTAscms9bnVsbH1mdW5jdGlvbiByVCgpe3ZhciBlPXttZW1vaXplZFN0YXRlOm51bGwsYmFzZVN0YXRlOm51bGwsYmFzZVF1ZXVlOm51bGwscXVldWU6bnVsbCxuZXh0Om51bGx9O3JldHVybiBudWxsPT09cm0/cmQubWVtb2l6ZWRTdGF0ZT1ybT1lOnJtPXJtLm5leHQ9ZSxybX1mdW5jdGlvbiByRigpe2lmKG51bGw9PT1ycCl7dmFyIGU9cmQuYWx0ZXJuYXRlO2U9bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGx9ZWxzZSBlPXJwLm5leHQ7dmFyIHQ9bnVsbD09PXJtP3JkLm1lbW9pemVkU3RhdGU6cm0ubmV4dDtpZihudWxsIT09dClybT10LHJwPWU7ZWxzZXtpZihudWxsPT09ZSl7aWYobnVsbD09PXJkLmFsdGVybmF0ZSl0aHJvdyBFcnJvcihpKDQ2NykpO3Rocm93IEVycm9yKGkoMzEwKSl9ZT17bWVtb2l6ZWRTdGF0ZToocnA9ZSkubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6cnAuYmFzZVN0YXRlLGJhc2VRdWV1ZTpycC5iYXNlUXVldWUscXVldWU6cnAucXVldWUsbmV4dDpudWxsfSxudWxsPT09cm0/cmQubWVtb2l6ZWRTdGF0ZT1ybT1lOnJtPXJtLm5leHQ9ZX1yZXR1cm4gcm19ZnVuY3Rpb24gck0oZSl7dmFyIHQ9cmI7cmV0dXJuIHJiKz0xLG51bGw9PT1yayYmKHJrPVtdKSxlPW5LKHJrLGUsdCksbnVsbD09PXJkLmFsdGVybmF0ZSYmKG51bGw9PT1ybT9udWxsPT09cmQubWVtb2l6ZWRTdGF0ZTpudWxsPT09cm0ubmV4dCkmJihycy5jdXJyZW50PWxnKSxlfWZ1bmN0aW9uIHJPKGUpe2lmKG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW4pcmV0dXJuIHJNKGUpO2lmKGUuJCR0eXBlb2Y9PT1FKXJldHVybiBhbyhlKX10aHJvdyBFcnJvcihpKDQzOCxTdHJpbmcoZSkpKX1mdW5jdGlvbiByUihlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoZSk6dH1mdW5jdGlvbiByRChlKXtyZXR1cm4gckEockYoKSxycCxlKX1mdW5jdGlvbiByQShlLHQsbil7dmFyIHI9ZS5xdWV1ZTtpZihudWxsPT09cil0aHJvdyBFcnJvcihpKDMxMSkpO3IubGFzdFJlbmRlcmVkUmVkdWNlcj1uO3ZhciBsPWUuYmFzZVF1ZXVlLGE9ci5wZW5kaW5nO2lmKG51bGwhPT1hKXtpZihudWxsIT09bCl7dmFyIG89bC5uZXh0O2wubmV4dD1hLm5leHQsYS5uZXh0PW99dC5iYXNlUXVldWU9bD1hLHIucGVuZGluZz1udWxsfWlmKGE9ZS5iYXNlU3RhdGUsbnVsbD09PWwpZS5tZW1vaXplZFN0YXRlPWE7ZWxzZXt0PWwubmV4dDt2YXIgdT1vPW51bGwscz1udWxsLGM9dCxmPSExO2Rve3ZhciBkPS01MzY4NzA5MTMmYy5sYW5lO2lmKGQhPT1jLmxhbmU/KG9TJmQpPT09ZDoocmYmZCk9PT1kKXt2YXIgcD1jLnJldmVydExhbmU7aWYoMD09PXApbnVsbCE9PXMmJihzPXMubmV4dD17bGFuZTowLHJldmVydExhbmU6MCxhY3Rpb246Yy5hY3Rpb24saGFzRWFnZXJTdGF0ZTpjLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpjLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSksZD09PW5QJiYoZj0hMCk7ZWxzZSBpZigocmYmcCk9PT1wKXtjPWMubmV4dCxwPT09blAmJihmPSEwKTtjb250aW51ZX1lbHNlIGQ9e2xhbmU6MCxyZXZlcnRMYW5lOmMucmV2ZXJ0TGFuZSxhY3Rpb246Yy5hY3Rpb24saGFzRWFnZXJTdGF0ZTpjLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpjLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSxudWxsPT09cz8odT1zPWQsbz1hKTpzPXMubmV4dD1kLHJkLmxhbmVzfD1wLG9ffD1wO2Q9Yy5hY3Rpb24scnkmJm4oYSxkKSxhPWMuaGFzRWFnZXJTdGF0ZT9jLmVhZ2VyU3RhdGU6bihhLGQpfWVsc2UgcD17bGFuZTpkLHJldmVydExhbmU6Yy5yZXZlcnRMYW5lLGFjdGlvbjpjLmFjdGlvbixoYXNFYWdlclN0YXRlOmMuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOmMuZWFnZXJTdGF0ZSxuZXh0Om51bGx9LG51bGw9PT1zPyh1PXM9cCxvPWEpOnM9cy5uZXh0PXAscmQubGFuZXN8PWQsb198PWQ7Yz1jLm5leHR9d2hpbGUobnVsbCE9PWMmJmMhPT10KTtpZihudWxsPT09cz9vPWE6cy5uZXh0PXUsIXREKGEsZS5tZW1vaXplZFN0YXRlKSYmKGxSPSEwLGYmJm51bGwhPT0obj1uTikpKXRocm93IG47ZS5tZW1vaXplZFN0YXRlPWEsZS5iYXNlU3RhdGU9byxlLmJhc2VRdWV1ZT1zLHIubGFzdFJlbmRlcmVkU3RhdGU9YX1yZXR1cm4gbnVsbD09PWwmJihyLmxhbmVzPTApLFtlLm1lbW9pemVkU3RhdGUsci5kaXNwYXRjaF19ZnVuY3Rpb24gckkoZSl7dmFyIHQ9ckYoKSxuPXQucXVldWU7aWYobnVsbD09PW4pdGhyb3cgRXJyb3IoaSgzMTEpKTtuLmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj1uLmRpc3BhdGNoLGw9bi5wZW5kaW5nLGE9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1sKXtuLnBlbmRpbmc9bnVsbDt2YXIgbz1sPWwubmV4dDtkbyBhPWUoYSxvLmFjdGlvbiksbz1vLm5leHQ7d2hpbGUobyE9PWwpO3REKGEsdC5tZW1vaXplZFN0YXRlKXx8KGxSPSEwKSx0Lm1lbW9pemVkU3RhdGU9YSxudWxsPT09dC5iYXNlUXVldWUmJih0LmJhc2VTdGF0ZT1hKSxuLmxhc3RSZW5kZXJlZFN0YXRlPWF9cmV0dXJuW2Escl19ZnVuY3Rpb24gclUoZSx0LG4pe3ZhciByPXJkLGw9ckYoKSxhPXRaO2lmKGEpe2lmKHZvaWQgMD09PW4pdGhyb3cgRXJyb3IoaSg0MDcpKTtuPW4oKX1lbHNlIG49dCgpO3ZhciBvPSF0RCgocnB8fGwpLm1lbW9pemVkU3RhdGUsbik7aWYobyYmKGwubWVtb2l6ZWRTdGF0ZT1uLGxSPSEwKSxsPWwucXVldWUscjQoclEuYmluZChudWxsLHIsbCxlKSxbZV0pLGwuZ2V0U25hcHNob3QhPT10fHxvfHxudWxsIT09cm0mJjEmcm0ubWVtb2l6ZWRTdGF0ZS50YWcpe2lmKHIuZmxhZ3N8PTIwNDgsckooOSxyVi5iaW5kKG51bGwscixsLG4sdCkse2Rlc3Ryb3k6dm9pZCAwfSxudWxsKSxudWxsPT09b2spdGhyb3cgRXJyb3IoaSgzNDkpKTthfHwwIT0oNjAmcmYpfHxyQihyLHQsbil9cmV0dXJuIG59ZnVuY3Rpb24gckIoZSx0LG4pe2UuZmxhZ3N8PTE2Mzg0LGU9e2dldFNuYXBzaG90OnQsdmFsdWU6bn0sbnVsbD09PSh0PXJkLnVwZGF0ZVF1ZXVlKT8odD1pRygpLHJkLnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKTpudWxsPT09KG49dC5zdG9yZXMpP3Quc3RvcmVzPVtlXTpuLnB1c2goZSl9ZnVuY3Rpb24gclYoZSx0LG4scil7dC52YWx1ZT1uLHQuZ2V0U25hcHNob3Q9cixyJCh0KSYmcmooZSl9ZnVuY3Rpb24gclEoZSx0LG4pe3JldHVybiBuKGZ1bmN0aW9uKCl7ciQodCkmJnJqKGUpfSl9ZnVuY3Rpb24gciQoZSl7dmFyIHQ9ZS5nZXRTbmFwc2hvdDtlPWUudmFsdWU7dHJ5e3ZhciBuPXQoKTtyZXR1cm4hdEQoZSxuKX1jYXRjaChlKXtyZXR1cm4hMH19ZnVuY3Rpb24gcmooZSl7dmFyIHQ9bnMoZSwyKTtudWxsIT09dCYmb0codCxlLDIpfWZ1bmN0aW9uIHJXKGUpe3ZhciB0PXJUKCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpe3ZhciBuPWU7ZT1uKCkscnkmJihlbyghMCksbigpLGVvKCExKSl9cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT10LmJhc2VTdGF0ZT1lLHQucXVldWU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpyUixsYXN0UmVuZGVyZWRTdGF0ZTplfSx0fWZ1bmN0aW9uIHJIKGUsdCxuLHIpe3JldHVybiBlLmJhc2VTdGF0ZT1uLHJBKGUscnAsImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpyUil9ZnVuY3Rpb24gcnEoZSx0LG4scil7aWYobGQoZSkpdGhyb3cgRXJyb3IoaSg0ODUpKTtudWxsPT09KGU9dC5wZW5kaW5nKT8oKGU9e3BheWxvYWQ6cixuZXh0Om51bGx9KS5uZXh0PXQucGVuZGluZz1lLHJLKHQsbixyKSk6dC5wZW5kaW5nPWUubmV4dD17cGF5bG9hZDpyLG5leHQ6ZS5uZXh0fX1mdW5jdGlvbiBySyhlLHQsbil7dmFyIHI9ZS5hY3Rpb24sbD1lLnN0YXRlLGE9cmMudHJhbnNpdGlvbixvPXtfY2FsbGJhY2tzOm5ldyBTZXR9O3JjLnRyYW5zaXRpb249bzt0cnl7dmFyIGk9cihsLG4pO251bGwhPT1pJiYib2JqZWN0Ij09dHlwZW9mIGkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLnRoZW4/KGF2KG8saSksaS50aGVuKGZ1bmN0aW9uKG4pe2Uuc3RhdGU9bixyWShlLHQpfSxmdW5jdGlvbigpe3JldHVybiByWShlLHQpfSksdChpKSk6KHQoaSksZS5zdGF0ZT1pLHJZKGUsdCkpfWNhdGNoKG4pe3Qoe3RoZW46ZnVuY3Rpb24oKXt9LHN0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpufSksclkoZSx0KX1maW5hbGx5e3JjLnRyYW5zaXRpb249YX19ZnVuY3Rpb24gclkoZSx0KXt2YXIgbj1lLnBlbmRpbmc7aWYobnVsbCE9PW4pe3ZhciByPW4ubmV4dDtyPT09bj9lLnBlbmRpbmc9bnVsbDoocj1yLm5leHQsbi5uZXh0PXIscksoZSx0LHIucGF5bG9hZCkpfX1mdW5jdGlvbiByWChlLHQpe3JldHVybiB0fWZ1bmN0aW9uIHJHKGUsdCxuKXtlPSJvYmplY3QiPT10eXBlb2YoZT1yQShlLHQsclgpWzBdKSYmbnVsbCE9PWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW4/ck0oZSk6ZTt2YXIgcj0odD1yRigpKS5xdWV1ZSxsPXIuZGlzcGF0Y2g7cmV0dXJuIG4hPT10Lm1lbW9pemVkU3RhdGUmJihyZC5mbGFnc3w9MjA0OCxySig5LHJaLmJpbmQobnVsbCxyLG4pLHtkZXN0cm95OnZvaWQgMH0sbnVsbCkpLFtlLGxdfWZ1bmN0aW9uIHJaKGUsdCl7ZS5hY3Rpb249dH1mdW5jdGlvbiBySihlLHQsbixyKXtyZXR1cm4gZT17dGFnOmUsY3JlYXRlOnQsaW5zdDpuLGRlcHM6cixuZXh0Om51bGx9LG51bGw9PT0odD1yZC51cGRhdGVRdWV1ZSk/KHQ9aUcoKSxyZC51cGRhdGVRdWV1ZT10LHQubGFzdEVmZmVjdD1lLm5leHQ9ZSk6bnVsbD09PShuPXQubGFzdEVmZmVjdCk/dC5sYXN0RWZmZWN0PWUubmV4dD1lOihyPW4ubmV4dCxuLm5leHQ9ZSxlLm5leHQ9cix0Lmxhc3RFZmZlY3Q9ZSksZX1mdW5jdGlvbiByMCgpe3JldHVybiByRigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gcjEoZSx0LG4scil7dmFyIGw9clQoKTtyZC5mbGFnc3w9ZSxsLm1lbW9pemVkU3RhdGU9ckooMXx0LG4se2Rlc3Ryb3k6dm9pZCAwfSx2b2lkIDA9PT1yP251bGw6cil9ZnVuY3Rpb24gcjIoZSx0LG4scil7dmFyIGw9ckYoKTtyPXZvaWQgMD09PXI/bnVsbDpyO3ZhciBhPWwubWVtb2l6ZWRTdGF0ZS5pbnN0O251bGwhPT1ycCYmbnVsbCE9PXImJnJDKHIscnAubWVtb2l6ZWRTdGF0ZS5kZXBzKT9sLm1lbW9pemVkU3RhdGU9ckoodCxuLGEscik6KHJkLmZsYWdzfD1lLGwubWVtb2l6ZWRTdGF0ZT1ySigxfHQsbixhLHIpKX1mdW5jdGlvbiByMyhlLHQpe3IxKDgzOTA2NTYsOCxlLHQpfWZ1bmN0aW9uIHI0KGUsdCl7cjIoMjA0OCw4LGUsdCl9ZnVuY3Rpb24gcjYoZSx0KXtyZXR1cm4gcjIoNCwyLGUsdCl9ZnVuY3Rpb24gcjgoZSx0KXtyZXR1cm4gcjIoNCw0LGUsdCl9ZnVuY3Rpb24gcjUoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD8odChlPWUoKSksZnVuY3Rpb24oKXt0KG51bGwpfSk6bnVsbCE9dD8oZT1lKCksdC5jdXJyZW50PWUsZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bnVsbH0pOnZvaWQgMH1mdW5jdGlvbiByNyhlLHQsbil7bj1udWxsIT1uP24uY29uY2F0KFtlXSk6bnVsbCxyMig0LDQscjUuYmluZChudWxsLHQsZSksbil9ZnVuY3Rpb24gcjkoKXt9ZnVuY3Rpb24gbGUoZSx0KXt2YXIgbj1yRigpO3Q9dm9pZCAwPT09dD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsIT09dCYmckModCxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gbHQoZSx0KXt2YXIgbj1yRigpO3Q9dm9pZCAwPT09dD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsIT09dCYmckModCxyWzFdKT9yWzBdOihyPWUoKSxyeSYmKGVvKCEwKSxlKCksZW8oITEpKSxuLm1lbW9pemVkU3RhdGU9W3IsdF0scil9ZnVuY3Rpb24gbG4oZSx0LG4pe3JldHVybiB0RChuLHQpP246bnVsbCE9PW44LmN1cnJlbnQ/KGUubWVtb2l6ZWRTdGF0ZT1uLHREKG4sdCl8fChsUj0hMCksbik6MD09KDQyJnJmKT8obFI9ITAsZS5tZW1vaXplZFN0YXRlPW4pOigwPT09b0YmJihvRj0wPT0oNTM2ODcwOTEyJm9TKXx8dFo/ZWgoKTo1MzY4NzA5MTIpLG51bGwhPT0oZT1ydC5jdXJyZW50KSYmKGUuZmxhZ3N8PTMyKSxlPW9GLHJkLmxhbmVzfD1lLG9ffD1lLHQpfWZ1bmN0aW9uIGxyKGUsdCxuLHIsbCl7dmFyIGE9ZWs7ZWs9MCE9PWEmJjg+YT9hOjg7dmFyIG89cmMudHJhbnNpdGlvbixpPXtfY2FsbGJhY2tzOm5ldyBTZXR9O3JjLnRyYW5zaXRpb249aSxsZihlLCExLHQsbik7dHJ5e3ZhciB1PWwoKTtpZihudWxsIT09dSYmIm9iamVjdCI9PXR5cGVvZiB1JiYiZnVuY3Rpb24iPT10eXBlb2YgdS50aGVuKXthdihpLHUpO3ZhciBzLGMsZj0ocz1bXSxjPXtzdGF0dXM6InBlbmRpbmciLHZhbHVlOm51bGwscmVhc29uOm51bGwsdGhlbjpmdW5jdGlvbihlKXtzLnB1c2goZSl9fSx1LnRoZW4oZnVuY3Rpb24oKXtjLnN0YXR1cz0iZnVsZmlsbGVkIixjLnZhbHVlPXI7Zm9yKHZhciBlPTA7ZTxzLmxlbmd0aDtlKyspKDAsc1tlXSkocil9LGZ1bmN0aW9uKGUpe2ZvcihjLnN0YXR1cz0icmVqZWN0ZWQiLGMucmVhc29uPWUsZT0wO2U8cy5sZW5ndGg7ZSsrKSgwLHNbZV0pKHZvaWQgMCl9KSxjKTtsYyhlLHQsZil9ZWxzZSBsYyhlLHQscil9Y2F0Y2gobil7bGMoZSx0LHt0aGVuOmZ1bmN0aW9uKCl7fSxzdGF0dXM6InJlamVjdGVkIixyZWFzb246bn0pfWZpbmFsbHl7ZWs9YSxyYy50cmFuc2l0aW9uPW99fWZ1bmN0aW9uIGxsKGUsdCxuLHIpe2lmKDUhPT1lLnRhZyl0aHJvdyBFcnJvcihpKDQ3NikpO2lmKG51bGw9PT1lLm1lbW9pemVkU3RhdGUpe3ZhciBsPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6clIsbGFzdFJlbmRlcmVkU3RhdGU6Zn0sYT1sO2w9e21lbW9pemVkU3RhdGU6ZixiYXNlU3RhdGU6ZixiYXNlUXVldWU6bnVsbCxxdWV1ZTpsLG5leHQ6bnVsbH0sZS5tZW1vaXplZFN0YXRlPWw7dmFyIG89ZS5hbHRlcm5hdGU7bnVsbCE9PW8mJihvLm1lbW9pemVkU3RhdGU9bCl9ZWxzZSBhPWUubWVtb2l6ZWRTdGF0ZS5xdWV1ZTtscihlLGEsdCxmLGZ1bmN0aW9uKCl7cmV0dXJuIG4ocil9KX1mdW5jdGlvbiBsYSgpe3ZhciBlPWFvKEIpO3JldHVybiBudWxsIT09ZT9lOmZ9ZnVuY3Rpb24gbG8oKXtyZXR1cm4gckYoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGxpKCl7cmV0dXJuIHJGKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBsdShlKXtmb3IodmFyIHQ9ZS5yZXR1cm47bnVsbCE9PXQ7KXtzd2l0Y2godC50YWcpe2Nhc2UgMjQ6Y2FzZSAzOnZhciBuPW9YKHQpLHI9bk8odCxlPW5NKG4pLG4pO251bGwhPT1yJiYob0cocix0LG4pLG5SKHIsdCxuKSksdD17Y2FjaGU6YXAoKX0sZS5wYXlsb2FkPXQ7cmV0dXJufXQ9dC5yZXR1cm59fWZ1bmN0aW9uIGxzKGUsdCxuKXt2YXIgcj1vWChlKTtuPXtsYW5lOnIscmV2ZXJ0TGFuZTowLGFjdGlvbjpuLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sbGQoZSk/bHAodCxuKTpudWxsIT09KG49bnUoZSx0LG4scikpJiYob0cobixlLHIpLGxtKG4sdCxyKSl9ZnVuY3Rpb24gbGMoZSx0LG4pe3ZhciByPW9YKGUpLGw9e2xhbmU6cixyZXZlcnRMYW5lOjAsYWN0aW9uOm4saGFzRWFnZXJTdGF0ZTohMSxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfTtpZihsZChlKSlscCh0LGwpO2Vsc2V7dmFyIGE9ZS5hbHRlcm5hdGU7aWYoMD09PWUubGFuZXMmJihudWxsPT09YXx8MD09PWEubGFuZXMpJiZudWxsIT09KGE9dC5sYXN0UmVuZGVyZWRSZWR1Y2VyKSl0cnl7dmFyIG89dC5sYXN0UmVuZGVyZWRTdGF0ZSxpPWEobyxuKTtpZihsLmhhc0VhZ2VyU3RhdGU9ITAsbC5lYWdlclN0YXRlPWksdEQoaSxvKSl7bmkoZSx0LGwsMCksbnVsbD09PW9rJiZubygpO3JldHVybn19Y2F0Y2goZSl7fWZpbmFsbHl7fW51bGwhPT0obj1udShlLHQsbCxyKSkmJihvRyhuLGUsciksbG0obix0LHIpKX19ZnVuY3Rpb24gbGYoZSx0LG4scil7aWYoYWcoKSxyPXtsYW5lOjIscmV2ZXJ0TGFuZTpuRSgpLGFjdGlvbjpyLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sbGQoZSkpe2lmKHQpdGhyb3cgRXJyb3IoaSg0NzkpKX1lbHNlIG51bGwhPT0odD1udShlLG4sciwyKSkmJm9HKHQsZSwyKX1mdW5jdGlvbiBsZChlKXt2YXIgdD1lLmFsdGVybmF0ZTtyZXR1cm4gZT09PXJkfHxudWxsIT09dCYmdD09PXJkfWZ1bmN0aW9uIGxwKGUsdCl7cmc9cmg9ITA7dmFyIG49ZS5wZW5kaW5nO251bGw9PT1uP3QubmV4dD10Oih0Lm5leHQ9bi5uZXh0LG4ubmV4dD10KSxlLnBlbmRpbmc9dH1mdW5jdGlvbiBsbShlLHQsbil7aWYoMCE9KDQxOTQxNzYmbikpe3ZhciByPXQubGFuZXM7ciY9ZS5wZW5kaW5nTGFuZXMsbnw9cix0LmxhbmVzPW4sZWIoZSxuKX19aUc9ZnVuY3Rpb24oKXtyZXR1cm57bGFzdEVmZmVjdDpudWxsLGV2ZW50czpudWxsLHN0b3JlczpudWxsfX07dmFyIGxoPXtyZWFkQ29udGV4dDphbyx1c2U6ck8sdXNlQ2FsbGJhY2s6clMsdXNlQ29udGV4dDpyUyx1c2VFZmZlY3Q6clMsdXNlSW1wZXJhdGl2ZUhhbmRsZTpyUyx1c2VJbnNlcnRpb25FZmZlY3Q6clMsdXNlTGF5b3V0RWZmZWN0OnJTLHVzZU1lbW86clMsdXNlUmVkdWNlcjpyUyx1c2VSZWY6clMsdXNlU3RhdGU6clMsdXNlRGVidWdWYWx1ZTpyUyx1c2VEZWZlcnJlZFZhbHVlOnJTLHVzZVRyYW5zaXRpb246clMsdXNlU3luY0V4dGVybmFsU3RvcmU6clMsdXNlSWQ6clN9O2xoLnVzZUNhY2hlUmVmcmVzaD1yUyxsaC51c2VIb3N0VHJhbnNpdGlvblN0YXR1cz1yUyxsaC51c2VGb3JtU3RhdGU9clMsbGgudXNlT3B0aW1pc3RpYz1yUzt2YXIgbGc9e3JlYWRDb250ZXh0OmFvLHVzZTpyTyx1c2VDYWxsYmFjazpmdW5jdGlvbihlLHQpe3JldHVybiByVCgpLm1lbW9pemVkU3RhdGU9W2Usdm9pZCAwPT09dD9udWxsOnRdLGV9LHVzZUNvbnRleHQ6YW8sdXNlRWZmZWN0OnIzLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oZSx0LG4pe249bnVsbCE9bj9uLmNvbmNhdChbZV0pOm51bGwscjEoNDE5NDMwOCw0LHI1LmJpbmQobnVsbCx0LGUpLG4pfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcjEoNDE5NDMwOCw0LGUsdCl9LHVzZUluc2VydGlvbkVmZmVjdDpmdW5jdGlvbihlLHQpe3IxKDQsMixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIG49clQoKTt0PXZvaWQgMD09PXQ/bnVsbDp0O3ZhciByPWUoKTtyZXR1cm4gcnkmJihlbyghMCksZSgpLGVvKCExKSksbi5tZW1vaXplZFN0YXRlPVtyLHRdLHJ9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXJUKCk7aWYodm9pZCAwIT09bil7dmFyIGw9bih0KTtyeSYmKGVvKCEwKSxuKHQpLGVvKCExKSl9ZWxzZSBsPXQ7cmV0dXJuIHIubWVtb2l6ZWRTdGF0ZT1yLmJhc2VTdGF0ZT1sLGU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOmx9LHIucXVldWU9ZSxlPWUuZGlzcGF0Y2g9bHMuYmluZChudWxsLHJkLGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXtyZXR1cm4gZT17Y3VycmVudDplfSxyVCgpLm1lbW9pemVkU3RhdGU9ZX0sdXNlU3RhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9KGU9clcoZSkpLnF1ZXVlLG49bGMuYmluZChudWxsLHJkLHQpO3JldHVybiB0LmRpc3BhdGNoPW4sW2UubWVtb2l6ZWRTdGF0ZSxuXX0sdXNlRGVidWdWYWx1ZTpyOSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiByVCgpLm1lbW9pemVkU3RhdGU9ZSxlfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9clcoITEpO3JldHVybiBlPWxyLmJpbmQobnVsbCxyZCxlLnF1ZXVlLCEwLCExKSxyVCgpLm1lbW9pemVkU3RhdGU9ZSxbITEsZV19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1yZCxsPXJUKCk7aWYodFope2lmKHZvaWQgMD09PW4pdGhyb3cgRXJyb3IoaSg0MDcpKTtuPW4oKX1lbHNle2lmKG49dCgpLG51bGw9PT1vayl0aHJvdyBFcnJvcihpKDM0OSkpOzAhPSg2MCZvUyl8fHJCKHIsdCxuKX1sLm1lbW9pemVkU3RhdGU9bjt2YXIgYT17dmFsdWU6bixnZXRTbmFwc2hvdDp0fTtyZXR1cm4gbC5xdWV1ZT1hLHIzKHJRLmJpbmQobnVsbCxyLGEsZSksW2VdKSxyLmZsYWdzfD0yMDQ4LHJKKDksclYuYmluZChudWxsLHIsYSxuLHQpLHtkZXN0cm95OnZvaWQgMH0sbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgZT1yVCgpLHQ9b2suaWRlbnRpZmllclByZWZpeDtpZih0Wil7dmFyIG49dFcscj10ajt0PSI6Iit0KyJSIisobj0ociZ+KDE8PDMyLWVpKHIpLTEpKS50b1N0cmluZygzMikrbiksMDwobj1ydisrKSYmKHQrPSJIIituLnRvU3RyaW5nKDMyKSksdCs9IjoifWVsc2UgdD0iOiIrdCsiciIrKG49cncrKykudG9TdHJpbmcoMzIpKyI6IjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVzZUNhY2hlUmVmcmVzaDpmdW5jdGlvbigpe3JldHVybiByVCgpLm1lbW9pemVkU3RhdGU9bHUuYmluZChudWxsLHJkKX19O2xnLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzPWxhLGxnLnVzZUZvcm1TdGF0ZT1mdW5jdGlvbihlLHQpe2lmKHRaKXt2YXIgbj1vay5mb3JtU3RhdGU7aWYobnVsbCE9PW4pe2U6e2lmKHRaKXtpZih0Ryl7dDp7Zm9yKHZhciByPXRHLGw9dDA7OCE9PXIubm9kZVR5cGU7KWlmKCFsfHxudWxsPT09KHI9Y2EocikpKXtyPW51bGw7YnJlYWsgdH1yPSJGISI9PT0obD1yLmRhdGEpfHwiRiI9PT1sP3I6bnVsbH1pZihyKXt0Rz1jYShyKSxyPSJGISI9PT1yLmRhdGE7YnJlYWsgZX19dDUoKX1yPSExfXImJih0PW5bMF0pfX1yZXR1cm4obj1yVCgpKS5tZW1vaXplZFN0YXRlPW4uYmFzZVN0YXRlPXQscj17cGVuZGluZzpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOnJYLGxhc3RSZW5kZXJlZFN0YXRlOnR9LG4ucXVldWU9cixuPWxjLmJpbmQobnVsbCxyZCxyKSxyLmRpc3BhdGNoPW4scj1yVCgpLGw9e3N0YXRlOnQsZGlzcGF0Y2g6bnVsbCxhY3Rpb246ZSxwZW5kaW5nOm51bGx9LHIucXVldWU9bCxuPXJxLmJpbmQobnVsbCxyZCxsLG4pLGwuZGlzcGF0Y2g9bixyLm1lbW9pemVkU3RhdGU9ZSxbdCxuXX0sbGcudXNlT3B0aW1pc3RpYz1mdW5jdGlvbihlKXt2YXIgdD1yVCgpO3QubWVtb2l6ZWRTdGF0ZT10LmJhc2VTdGF0ZT1lO3ZhciBuPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6bnVsbCxsYXN0UmVuZGVyZWRTdGF0ZTpudWxsfTtyZXR1cm4gdC5xdWV1ZT1uLHQ9bGYuYmluZChudWxsLHJkLCEwLG4pLG4uZGlzcGF0Y2g9dCxbZSx0XX07dmFyIGx5PXtyZWFkQ29udGV4dDphbyx1c2U6ck8sdXNlQ2FsbGJhY2s6bGUsdXNlQ29udGV4dDphbyx1c2VFZmZlY3Q6cjQsdXNlSW1wZXJhdGl2ZUhhbmRsZTpyNyx1c2VJbnNlcnRpb25FZmZlY3Q6cjYsdXNlTGF5b3V0RWZmZWN0OnI4LHVzZU1lbW86bHQsdXNlUmVkdWNlcjpyRCx1c2VSZWY6cjAsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gckQoclIpfSx1c2VEZWJ1Z1ZhbHVlOnI5LHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGxuKHJGKCkscnAubWVtb2l6ZWRTdGF0ZSxlKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXJEKHJSKVswXSx0PXJGKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bImJvb2xlYW4iPT10eXBlb2YgZT9lOnJNKGUpLHRdfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpyVSx1c2VJZDpsb307bHkudXNlQ2FjaGVSZWZyZXNoPWxpLGx5LnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzPWxhLGx5LnVzZUZvcm1TdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gckcockYoKSxycCxlKX0sbHkudXNlT3B0aW1pc3RpYz1mdW5jdGlvbihlLHQpe3JldHVybiBySChyRigpLHJwLGUsdCl9O3ZhciBsdj17cmVhZENvbnRleHQ6YW8sdXNlOnJPLHVzZUNhbGxiYWNrOmxlLHVzZUNvbnRleHQ6YW8sdXNlRWZmZWN0OnI0LHVzZUltcGVyYXRpdmVIYW5kbGU6cjcsdXNlSW5zZXJ0aW9uRWZmZWN0OnI2LHVzZUxheW91dEVmZmVjdDpyOCx1c2VNZW1vOmx0LHVzZVJlZHVjZXI6ckksdXNlUmVmOnIwLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHJJKHJSKX0sdXNlRGVidWdWYWx1ZTpyOSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXJGKCk7cmV0dXJuIG51bGw9PT1ycD8odC5tZW1vaXplZFN0YXRlPWUsZSk6bG4odCxycC5tZW1vaXplZFN0YXRlLGUpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9ckkoclIpWzBdLHQ9ckYoKS5tZW1vaXplZFN0YXRlO3JldHVyblsiYm9vbGVhbiI9PXR5cGVvZiBlP2U6ck0oZSksdF19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOnJVLHVzZUlkOmxvfTtmdW5jdGlvbiBsYihlLHQpe2lmKGUmJmUuZGVmYXVsdFByb3BzKWZvcih2YXIgbiBpbiB0PXUoe30sdCksZT1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT10W25dJiYodFtuXT1lW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBsayhlLHQsbixyKXtuPW51bGw9PShuPW4ocix0PWUubWVtb2l6ZWRTdGF0ZSkpP3Q6dSh7fSx0LG4pLGUubWVtb2l6ZWRTdGF0ZT1uLDA9PT1lLmxhbmVzJiYoZS51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9bil9bHYudXNlQ2FjaGVSZWZyZXNoPWxpLGx2LnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzPWxhLGx2LnVzZUZvcm1TdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1yRigpLG49cnA7aWYobnVsbCE9PW4pcmV0dXJuIHJHKHQsbixlKTt0PXQubWVtb2l6ZWRTdGF0ZTt2YXIgcj0obj1yRigpKS5xdWV1ZS5kaXNwYXRjaDtyZXR1cm4gbi5tZW1vaXplZFN0YXRlPWUsW3Qscl19LGx2LnVzZU9wdGltaXN0aWM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yRigpO3JldHVybiBudWxsIT09cnA/ckgobixycCxlLHQpOihuLmJhc2VTdGF0ZT1lLFtlLG4ucXVldWUuZGlzcGF0Y2hdKX07dmFyIGx3PXtpc01vdW50ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuISEoZT1lLl9yZWFjdEludGVybmFscykmJnR3KGUpPT09ZX0sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1vWChlPWUuX3JlYWN0SW50ZXJuYWxzKSxsPW5NKHIpO2wucGF5bG9hZD10LG51bGwhPW4mJihsLmNhbGxiYWNrPW4pLG51bGwhPT0odD1uTyhlLGwscikpJiYob0codCxlLHIpLG5SKHQsZSxyKSl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW9YKGU9ZS5fcmVhY3RJbnRlcm5hbHMpLGw9bk0ocik7bC50YWc9MSxsLnBheWxvYWQ9dCxudWxsIT1uJiYobC5jYWxsYmFjaz1uKSxudWxsIT09KHQ9bk8oZSxsLHIpKSYmKG9HKHQsZSxyKSxuUih0LGUscikpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1vWChlPWUuX3JlYWN0SW50ZXJuYWxzKSxyPW5NKG4pO3IudGFnPTIsbnVsbCE9dCYmKHIuY2FsbGJhY2s9dCksbnVsbCE9PSh0PW5PKGUscixuKSkmJihvRyh0LGUsbiksblIodCxlLG4pKX19O2Z1bmN0aW9uIGxTKGUsdCxuLHIsbCxhLG8pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZihlPWUuc3RhdGVOb2RlKS5zaG91bGRDb21wb25lbnRVcGRhdGU/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocixhLG8pOiF0LnByb3RvdHlwZXx8IXQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50fHwhblEobixyKXx8IW5RKGwsYSl9ZnVuY3Rpb24gbEMoZSx0LG4pe3ZhciByPSExLGw9dHgsYT10LmNvbnRleHRUeXBlO3JldHVybiJvYmplY3QiPT10eXBlb2YgYSYmbnVsbCE9PWE/YT1hbyhhKToobD10TCh0KT90Tjp0ei5jdXJyZW50LGE9KHI9bnVsbCE9KHI9dC5jb250ZXh0VHlwZXMpKT90XyhlLGwpOnR4KSx0PW5ldyB0KG4sYSksZS5tZW1vaXplZFN0YXRlPW51bGwhPT10LnN0YXRlJiZ2b2lkIDAhPT10LnN0YXRlP3Quc3RhdGU6bnVsbCx0LnVwZGF0ZXI9bHcsZS5zdGF0ZU5vZGU9dCx0Ll9yZWFjdEludGVybmFscz1lLHImJigoZT1lLnN0YXRlTm9kZSkuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD1sLGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9YSksdH1mdW5jdGlvbiBsRShlLHQsbixyKXtlPXQuc3RhdGUsImZ1bmN0aW9uIj09dHlwZW9mIHQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksImZ1bmN0aW9uIj09dHlwZW9mIHQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJnQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobixyKSx0LnN0YXRlIT09ZSYmbHcuZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0LHQuc3RhdGUsbnVsbCl9ZnVuY3Rpb24gbHgoZSx0LG4scil7dmFyIGw9ZS5zdGF0ZU5vZGU7bC5wcm9wcz1uLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlLGwucmVmcz17fSxuVChlKTt2YXIgYT10LmNvbnRleHRUeXBlOyJvYmplY3QiPT10eXBlb2YgYSYmbnVsbCE9PWE/bC5jb250ZXh0PWFvKGEpOihhPXRMKHQpP3ROOnR6LmN1cnJlbnQsbC5jb250ZXh0PXRfKGUsYSkpLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlLCJmdW5jdGlvbiI9PXR5cGVvZihhPXQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKSYmKGxrKGUsdCxhLG4pLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHN8fCJmdW5jdGlvbiI9PXR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT10eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnR8fCh0PWwuc3RhdGUsImZ1bmN0aW9uIj09dHlwZW9mIGwuY29tcG9uZW50V2lsbE1vdW50JiZsLmNvbXBvbmVudFdpbGxNb3VudCgpLCJmdW5jdGlvbiI9PXR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmwuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLHQhPT1sLnN0YXRlJiZsdy5lbnF1ZXVlUmVwbGFjZVN0YXRlKGwsbC5zdGF0ZSxudWxsKSxuVShlLG4sbCxyKSxuSSgpLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgbC5jb21wb25lbnREaWRNb3VudCYmKGUuZmxhZ3N8PTQxOTQzMDgpfXZhciBsej1uZXcgV2Vha01hcDtmdW5jdGlvbiBsUChlLHQpe2lmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciBuPWx6LmdldChlKTsic3RyaW5nIiE9dHlwZW9mIG4mJihuPWVKKHQpLGx6LnNldChlLG4pKX1lbHNlIG49ZUoodCk7cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6bixkaWdlc3Q6bnVsbH19ZnVuY3Rpb24gbE4oZSx0LG4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmbHouc2V0KGUsbikse3ZhbHVlOmUsc291cmNlOm51bGwsc3RhY2s6bnVsbCE9bj9uOm51bGwsZGlnZXN0Om51bGwhPXQ/dDpudWxsfX1mdW5jdGlvbiBsXyhlLHQpe3RyeXtjb25zb2xlLmVycm9yKHQudmFsdWUpfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9fWZ1bmN0aW9uIGxMKGUsdCxuKXsobj1uTShuKSkudGFnPTMsbi5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciByPXQudmFsdWU7cmV0dXJuIG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtvQnx8KG9CPSEwLG9WPXIpLGxfKGUsdCl9LG59ZnVuY3Rpb24gbFQoZSx0LG4peyhuPW5NKG4pKS50YWc9Mzt2YXIgcj1lLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXt2YXIgbD10LnZhbHVlO24ucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiByKGwpfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7bF8oZSx0KX19dmFyIGE9ZS5zdGF0ZU5vZGU7cmV0dXJuIG51bGwhPT1hJiYiZnVuY3Rpb24iPT10eXBlb2YgYS5jb21wb25lbnREaWRDYXRjaCYmKG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtsXyhlLHQpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiYobnVsbD09PW9RP29RPW5ldyBTZXQoW3RoaXNdKTpvUS5hZGQodGhpcykpO3ZhciBuPXQuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaCh0LnZhbHVlLHtjb21wb25lbnRTdGFjazpudWxsIT09bj9uOiIifSl9KSxufWZ1bmN0aW9uIGxGKGUsdCxuLHIsbCl7cmV0dXJuIDA9PSgxJmUubW9kZSk/ZT09PXQ/ZS5mbGFnc3w9NjU1MzY6KGUuZmxhZ3N8PTEyOCxuLmZsYWdzfD0xMzEwNzIsbi5mbGFncyY9LTUyODA1LDE9PT1uLnRhZyYmKG51bGw9PT1uLmFsdGVybmF0ZT9uLnRhZz0xNzooKHQ9bk0oMikpLnRhZz0yLG5PKG4sdCwyKSkpLG4ubGFuZXN8PTIpOihlLmZsYWdzfD02NTUzNixlLmxhbmVzPWwpLGV9dmFyIGxNPXMuUmVhY3RDdXJyZW50T3duZXIsbE89RXJyb3IoaSg0NjEpKSxsUj0hMTtmdW5jdGlvbiBsRChlLHQsbixyKXt0LmNoaWxkPW51bGw9PT1lP242KHQsbnVsbCxuLHIpOm40KHQsZS5jaGlsZCxuLHIpfWZ1bmN0aW9uIGxBKGUsdCxuLHIsbCl7bj1uLnJlbmRlcjt2YXIgYT10LnJlZjtyZXR1cm4oYWEodCxsKSxyPXJFKGUsdCxuLHIsYSxsKSxuPXJOKCksbnVsbD09PWV8fGxSKT8odFomJm4mJnRLKHQpLHQuZmxhZ3N8PTEsbEQoZSx0LHIsbCksdC5jaGlsZCk6KHJfKGUsdCxsKSxsNihlLHQsbCkpfWZ1bmN0aW9uIGxJKGUsdCxuLHIsbCl7aWYobnVsbD09PWUpe3ZhciBhPW4udHlwZTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgYXx8aUMoYSl8fHZvaWQgMCE9PWEuZGVmYXVsdFByb3BzfHxudWxsIT09bi5jb21wYXJlfHx2b2lkIDAhPT1uLmRlZmF1bHRQcm9wcz8oKGU9aXoobi50eXBlLG51bGwscix0LHQubW9kZSxsKSkucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lKToodC50YWc9MTUsdC50eXBlPWEsbFUoZSx0LGEscixsKSl9aWYoYT1lLmNoaWxkLDA9PShlLmxhbmVzJmwpKXt2YXIgbz1hLm1lbW9pemVkUHJvcHM7aWYoKG49bnVsbCE9PShuPW4uY29tcGFyZSk/bjpuUSkobyxyKSYmZS5yZWY9PT10LnJlZilyZXR1cm4gbDYoZSx0LGwpfXJldHVybiB0LmZsYWdzfD0xLChlPWlFKGEscikpLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZX1mdW5jdGlvbiBsVShlLHQsbixyLGwpe2lmKG51bGwhPT1lKXt2YXIgYT1lLm1lbW9pemVkUHJvcHM7aWYoblEoYSxyKSYmZS5yZWY9PT10LnJlZil7aWYobFI9ITEsdC5wZW5kaW5nUHJvcHM9cj1hLDA9PShlLmxhbmVzJmwpKXJldHVybiB0LmxhbmVzPWUubGFuZXMsbDYoZSx0LGwpOzAhPSgxMzEwNzImZS5mbGFncykmJihsUj0hMCl9fXJldHVybiBsJChlLHQsbixyLGwpfWZ1bmN0aW9uIGxCKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxsPXIuY2hpbGRyZW4sYT0wIT0oMiZ0LnN0YXRlTm9kZS5fcGVuZGluZ1Zpc2liaWxpdHkpLG89bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGw7aWYobFEoZSx0KSwiaGlkZGVuIj09PXIubW9kZXx8YSl7aWYoMCE9KDEyOCZ0LmZsYWdzKSl7aWYobj1udWxsIT09bz9vLmJhc2VMYW5lc3xuOm4sbnVsbCE9PWUpe2ZvcihsPTAscj10LmNoaWxkPWUuY2hpbGQ7bnVsbCE9PXI7KWw9bHxyLmxhbmVzfHIuY2hpbGRMYW5lcyxyPXIuc2libGluZzt0LmNoaWxkTGFuZXM9bCZ+bn1lbHNlIHQuY2hpbGRMYW5lcz0wLHQuY2hpbGQ9bnVsbDtyZXR1cm4gbFYoZSx0LG4pfWlmKDA9PSgxJnQubW9kZSkpdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbH0sbnVsbCE9PWUmJmF3KHQsbnVsbCksbjkoKSxybCh0KTtlbHNle2lmKDA9PSg1MzY4NzA5MTImbikpcmV0dXJuIHQubGFuZXM9dC5jaGlsZExhbmVzPTUzNjg3MDkxMixsVihlLHQsbnVsbCE9PW8/by5iYXNlTGFuZXN8bjpuKTt0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsfSxudWxsIT09ZSYmYXcodCxudWxsIT09bz9vLmNhY2hlUG9vbDpudWxsKSxudWxsIT09bz9uNyh0LG8pOm45KCkscmwodCl9fWVsc2UgbnVsbCE9PW8/KGF3KHQsby5jYWNoZVBvb2wpLG43KHQsbykscmEodCksdC5tZW1vaXplZFN0YXRlPW51bGwpOihudWxsIT09ZSYmYXcodCxudWxsKSxuOSgpLHJhKHQpKTtyZXR1cm4gbEQoZSx0LGwsbiksdC5jaGlsZH1mdW5jdGlvbiBsVihlLHQsbil7dmFyIHI9YWsoKTtyZXR1cm4gcj1udWxsPT09cj9udWxsOntwYXJlbnQ6YWQuX2N1cnJlbnRWYWx1ZSxwb29sOnJ9LHQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOm4sY2FjaGVQb29sOnJ9LG51bGwhPT1lJiZhdyh0LG51bGwpLG45KCkscmwodCksbnVsbH1mdW5jdGlvbiBsUShlLHQpe3ZhciBuPXQucmVmOyhudWxsPT09ZSYmbnVsbCE9PW58fG51bGwhPT1lJiZlLnJlZiE9PW4pJiYodC5mbGFnc3w9NTEyLHQuZmxhZ3N8PTIwOTcxNTIpfWZ1bmN0aW9uIGwkKGUsdCxuLHIsbCl7dmFyIGE9dEwobik/dE46dHouY3VycmVudDtyZXR1cm4oYT10Xyh0LGEpLGFhKHQsbCksbj1yRShlLHQsbixyLGEsbCkscj1yTigpLG51bGw9PT1lfHxsUik/KHRaJiZyJiZ0Syh0KSx0LmZsYWdzfD0xLGxEKGUsdCxuLGwpLHQuY2hpbGQpOihyXyhlLHQsbCksbDYoZSx0LGwpKX1mdW5jdGlvbiBsaihlLHQsbixyLGwsYSl7cmV0dXJuKGFhKHQsYSksbj1yeih0LHIsbixsKSxyeCgpLHI9ck4oKSxudWxsPT09ZXx8bFIpPyh0WiYmciYmdEsodCksdC5mbGFnc3w9MSxsRChlLHQsbixhKSx0LmNoaWxkKToocl8oZSx0LGEpLGw2KGUsdCxhKSl9ZnVuY3Rpb24gbFcoZSx0LG4scixsKXtpZih0TChuKSl7dmFyIGE9ITA7dE8odCl9ZWxzZSBhPSExO2lmKGFhKHQsbCksbnVsbD09PXQuc3RhdGVOb2RlKWw0KGUsdCksbEModCxuLHIpLGx4KHQsbixyLGwpLHI9ITA7ZWxzZSBpZihudWxsPT09ZSl7dmFyIG89dC5zdGF0ZU5vZGUsaT10Lm1lbW9pemVkUHJvcHM7by5wcm9wcz1pO3ZhciB1PW8uY29udGV4dCxzPW4uY29udGV4dFR5cGU7cz0ib2JqZWN0Ij09dHlwZW9mIHMmJm51bGwhPT1zP2FvKHMpOnRfKHQscz10TChuKT90Tjp0ei5jdXJyZW50KTt2YXIgYz1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxmPSJmdW5jdGlvbiI9PXR5cGVvZiBjfHwiZnVuY3Rpb24iPT10eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtmfHwiZnVuY3Rpb24iIT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmImZ1bmN0aW9uIiE9dHlwZW9mIG8uY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGkhPT1yfHx1IT09cykmJmxFKHQsbyxyLHMpLG5MPSExO3ZhciBkPXQubWVtb2l6ZWRTdGF0ZTtvLnN0YXRlPWQsblUodCxyLG8sbCksbkkoKSx1PXQubWVtb2l6ZWRTdGF0ZSxpIT09cnx8ZCE9PXV8fHRQLmN1cnJlbnR8fG5MPygiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGxrKHQsbixjLHIpLHU9dC5tZW1vaXplZFN0YXRlKSwoaT1uTHx8bFModCxuLGkscixkLHUscykpPyhmfHwiZnVuY3Rpb24iIT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnR8fCgiZnVuY3Rpb24iPT10eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQmJm8uY29tcG9uZW50V2lsbE1vdW50KCksImZ1bmN0aW9uIj09dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZE1vdW50JiYodC5mbGFnc3w9NDE5NDMwOCkpOigiZnVuY3Rpb24iPT10eXBlb2Ygby5jb21wb25lbnREaWRNb3VudCYmKHQuZmxhZ3N8PTQxOTQzMDgpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT11KSxvLnByb3BzPXIsby5zdGF0ZT11LG8uY29udGV4dD1zLHI9aSk6KCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZE1vdW50JiYodC5mbGFnc3w9NDE5NDMwOCkscj0hMSl9ZWxzZXtvPXQuc3RhdGVOb2RlLG5GKGUsdCksaT10Lm1lbW9pemVkUHJvcHMscz10LnR5cGU9PT10LmVsZW1lbnRUeXBlP2k6bGIodC50eXBlLGkpLG8ucHJvcHM9cyxmPXQucGVuZGluZ1Byb3BzLGQ9by5jb250ZXh0LHU9Im9iamVjdCI9PXR5cGVvZih1PW4uY29udGV4dFR5cGUpJiZudWxsIT09dT9hbyh1KTp0Xyh0LHU9dEwobik/dE46dHouY3VycmVudCk7dmFyIHA9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHB8fCJmdW5jdGlvbiI9PXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJiJmdW5jdGlvbiIhPXR5cGVvZiBvLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChpIT09Znx8ZCE9PXUpJiZsRSh0LG8scix1KSxuTD0hMSxkPXQubWVtb2l6ZWRTdGF0ZSxvLnN0YXRlPWQsblUodCxyLG8sbCksbkkoKTt2YXIgbT10Lm1lbW9pemVkU3RhdGU7aSE9PWZ8fGQhPT1tfHx0UC5jdXJyZW50fHxuTD8oImZ1bmN0aW9uIj09dHlwZW9mIHAmJihsayh0LG4scCxyKSxtPXQubWVtb2l6ZWRTdGF0ZSksKHM9bkx8fGxTKHQsbixzLHIsZCxtLHUpfHwhMSk/KGN8fCJmdW5jdGlvbiIhPXR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsVXBkYXRlfHwoImZ1bmN0aW9uIj09dHlwZW9mIG8uY29tcG9uZW50V2lsbFVwZGF0ZSYmby5jb21wb25lbnRXaWxsVXBkYXRlKHIsbSx1KSwiZnVuY3Rpb24iPT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmby5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShyLG0sdSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZFVwZGF0ZSYmKHQuZmxhZ3N8PTQpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYodC5mbGFnc3w9MTAyNCkpOigiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnREaWRVcGRhdGV8fGk9PT1lLm1lbW9pemVkUHJvcHMmJmQ9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD00KSwiZnVuY3Rpb24iIT10eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZD09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTEwMjQpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT1tKSxvLnByb3BzPXIsby5zdGF0ZT1tLG8uY29udGV4dD11LHI9cyk6KCJmdW5jdGlvbiIhPXR5cGVvZiBvLmNvbXBvbmVudERpZFVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZD09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLCJmdW5jdGlvbiIhPXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxpPT09ZS5tZW1vaXplZFByb3BzJiZkPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCkscj0hMSl9cmV0dXJuIGxIKGUsdCxuLHIsYSxsKX1mdW5jdGlvbiBsSChlLHQsbixyLGwsYSl7bFEoZSx0KTt2YXIgbz0wIT0oMTI4JnQuZmxhZ3MpO2lmKCFyJiYhbylyZXR1cm4gbCYmdFIodCxuLCExKSxsNihlLHQsYSk7cj10LnN0YXRlTm9kZSxsTS5jdXJyZW50PXQ7dmFyIGk9byYmImZ1bmN0aW9uIiE9dHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yP251bGw6ci5yZW5kZXIoKTtyZXR1cm4gdC5mbGFnc3w9MSxudWxsIT09ZSYmbz8odC5jaGlsZD1uNCh0LGUuY2hpbGQsbnVsbCxhKSx0LmNoaWxkPW40KHQsbnVsbCxpLGEpKTpsRChlLHQsaSxhKSx0Lm1lbW9pemVkU3RhdGU9ci5zdGF0ZSxsJiZ0Uih0LG4sITApLHQuY2hpbGR9ZnVuY3Rpb24gbHEoZSl7dmFyIHQ9ZS5zdGF0ZU5vZGU7dC5wZW5kaW5nQ29udGV4dD90RihlLHQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dCE9PXQuY29udGV4dCk6dC5jb250ZXh0JiZ0RihlLHQuY29udGV4dCwhMSksVihlLHQuY29udGFpbmVySW5mbyl9ZnVuY3Rpb24gbEsoZSx0LG4scixsKXtyZXR1cm4gbnQoKSxubihsKSx0LmZsYWdzfD0yNTYsbEQoZSx0LG4sciksdC5jaGlsZH12YXIgbFk9e2RlaHlkcmF0ZWQ6bnVsbCx0cmVlQ29udGV4dDpudWxsLHJldHJ5TGFuZTowfTtmdW5jdGlvbiBsWChlKXtyZXR1cm57YmFzZUxhbmVzOmUsY2FjaGVQb29sOmFTKCl9fWZ1bmN0aW9uIGxHKGUsdCxuKXtyZXR1cm4gZT1udWxsIT09ZT9lLmNoaWxkTGFuZXMmfm46MCx0JiYoZXw9b0YpLGV9ZnVuY3Rpb24gbFooZSx0LG4pe3ZhciByLGw9dC5wZW5kaW5nUHJvcHMsYT0hMSxvPTAhPSgxMjgmdC5mbGFncyk7aWYoKHI9byl8fChyPShudWxsPT09ZXx8bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSkmJjAhPSgyJnJpLmN1cnJlbnQpKSxyJiYoYT0hMCx0LmZsYWdzJj0tMTI5KSxyPTAhPSgzMiZ0LmZsYWdzKSx0LmZsYWdzJj0tMzMsbnVsbD09PWUpe2lmKHRaKXtpZihhP3JyKHQpOnJhKHQpLHRaKXt2YXIgdT1vPXRHO2lmKHUpe2lmKCF0Nih0LHUpKXt0OCh0KSYmdDUoKSx0Rz1jYSh1KTt2YXIgcz10WDt0RyYmdDYodCx0Ryk/dDEocyx1KToodDIodFgsdCksdFo9ITEsdFg9dCx0Rz1vKX19ZWxzZSB0OCh0KSYmdDUoKSx0Mih0WCx0KSx0Wj0hMSx0WD10LHRHPW99aWYobnVsbCE9PShvPXQubWVtb2l6ZWRTdGF0ZSkmJm51bGwhPT0obz1vLmRlaHlkcmF0ZWQpKXJldHVybiAwPT0oMSZ0Lm1vZGUpP3QubGFuZXM9MjoiJCEiPT09by5kYXRhP3QubGFuZXM9MTY6dC5sYW5lcz01MzY4NzA5MTIsbnVsbDtybyh0KX1yZXR1cm4obz1sLmNoaWxkcmVuLGw9bC5mYWxsYmFjayxhKT8ocmEodCksYT10Lm1vZGUsdT10LmNoaWxkLG89e21vZGU6ImhpZGRlbiIsY2hpbGRyZW46b30sMD09KDEmYSkmJm51bGwhPT11Pyh1LmNoaWxkTGFuZXM9MCx1LnBlbmRpbmdQcm9wcz1vKTp1PWlOKG8sYSwwLG51bGwpLGw9aVAobCxhLG4sbnVsbCksdS5yZXR1cm49dCxsLnJldHVybj10LHUuc2libGluZz1sLHQuY2hpbGQ9dSwoYT10LmNoaWxkKS5tZW1vaXplZFN0YXRlPWxYKG4pLGEuY2hpbGRMYW5lcz1sRyhlLHIsbiksdC5tZW1vaXplZFN0YXRlPWxZLGwpOihycih0KSxsSih0LG8pKX1pZihudWxsIT09KHU9ZS5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PShzPXUuZGVoeWRyYXRlZCkpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsbCxhLG8sdSl7aWYobilyZXR1cm4gMjU2JnQuZmxhZ3M/KHJyKHQpLHQuZmxhZ3MmPS0yNTcsbDAoZSx0LHUsYT1sTihFcnJvcihpKDQyMikpKSkpOm51bGwhPT10Lm1lbW9pemVkU3RhdGU/KHJhKHQpLHQuY2hpbGQ9ZS5jaGlsZCx0LmZsYWdzfD0xMjgsbnVsbCk6KHJhKHQpLGE9bC5mYWxsYmFjayxvPXQubW9kZSxsPWlOKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjpsLmNoaWxkcmVufSxvLDAsbnVsbCksYT1pUChhLG8sdSxudWxsKSxhLmZsYWdzfD0yLGwucmV0dXJuPXQsYS5yZXR1cm49dCxsLnNpYmxpbmc9YSx0LmNoaWxkPWwsMCE9KDEmdC5tb2RlKSYmbjQodCxlLmNoaWxkLG51bGwsdSksKG89dC5jaGlsZCkubWVtb2l6ZWRTdGF0ZT1sWCh1KSxvLmNoaWxkTGFuZXM9bEcoZSxyLHUpLHQubWVtb2l6ZWRTdGF0ZT1sWSxhKTtpZihycih0KSwwPT0oMSZ0Lm1vZGUpKXJldHVybiBsMChlLHQsdSxudWxsKTtpZigiJCEiPT09YS5kYXRhKXtpZihhPWEubmV4dFNpYmxpbmcmJmEubmV4dFNpYmxpbmcuZGF0YXNldCl2YXIgcz1hLmRnc3Q7cmV0dXJuIGE9cywocj1FcnJvcihpKDQxOSkpKS5kaWdlc3Q9YSxsMChlLHQsdSxhPWxOKHIsYSx2b2lkIDApKX1pZihyPTAhPSh1JmUuY2hpbGRMYW5lcyksbFJ8fHIpe2lmKG51bGwhPT0ocj1vaykpe2lmKDAhPSg0MiYobD11Ji11KSkpbD0xO2Vsc2Ugc3dpdGNoKGwpe2Nhc2UgMjpsPTE7YnJlYWs7Y2FzZSA4Omw9NDticmVhaztjYXNlIDMyOmw9MTY7YnJlYWs7Y2FzZSAxMjg6Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6bD02NDticmVhaztjYXNlIDI2ODQzNTQ1NjpsPTEzNDIxNzcyODticmVhaztkZWZhdWx0Omw9MH1pZigwIT09KGw9MCE9KGwmKHIuc3VzcGVuZGVkTGFuZXN8dSkpPzA6bCkmJmwhPT1vLnJldHJ5TGFuZSl0aHJvdyBvLnJldHJ5TGFuZT1sLG5zKGUsbCksb0cocixlLGwpLGxPfXJldHVybiIkPyIhPT1hLmRhdGEmJmlyKCksbDAoZSx0LHUsbnVsbCl9cmV0dXJuIiQ/Ij09PWEuZGF0YT8odC5mbGFnc3w9MTI4LHQuY2hpbGQ9ZS5jaGlsZCx0PWl2LmJpbmQobnVsbCxlKSxhLl9yZWFjdFJldHJ5PXQsbnVsbCk6KGU9by50cmVlQ29udGV4dCx0Rz1jbChhLm5leHRTaWJsaW5nKSx0WD10LHRaPSEwLHRKPW51bGwsdDA9ITEsbnVsbCE9PWUmJih0Vlt0USsrXT10aix0Vlt0USsrXT10Vyx0Vlt0USsrXT10JCx0aj1lLmlkLHRXPWUub3ZlcmZsb3csdCQ9dCksdD1sSih0LGwuY2hpbGRyZW4pLHQuZmxhZ3N8PTQwOTYsdCl9KGUsdCxvLHIsbCxzLHUsbik7aWYoYSl7cmEodCksYT1sLmZhbGxiYWNrLG89dC5tb2RlLHM9KHU9ZS5jaGlsZCkuc2libGluZzt2YXIgYz17bW9kZToiaGlkZGVuIixjaGlsZHJlbjpsLmNoaWxkcmVufTtyZXR1cm4gMD09KDEmbykmJnQuY2hpbGQhPT11PygobD10LmNoaWxkKS5jaGlsZExhbmVzPTAsbC5wZW5kaW5nUHJvcHM9Yyx0LmRlbGV0aW9ucz1udWxsKToobD1pRSh1LGMpKS5zdWJ0cmVlRmxhZ3M9MzE0NTcyODAmdS5zdWJ0cmVlRmxhZ3MsbnVsbCE9PXM/YT1pRShzLGEpOihhPWlQKGEsbyxuLG51bGwpLGEuZmxhZ3N8PTIpLGEucmV0dXJuPXQsbC5yZXR1cm49dCxsLnNpYmxpbmc9YSx0LmNoaWxkPWwsbD1hLGE9dC5jaGlsZCxudWxsPT09KG89ZS5jaGlsZC5tZW1vaXplZFN0YXRlKT9vPWxYKG4pOihudWxsIT09KHU9by5jYWNoZVBvb2wpPyhzPWFkLl9jdXJyZW50VmFsdWUsdT11LnBhcmVudCE9PXM/e3BhcmVudDpzLHBvb2w6c306dSk6dT1hUygpLG89e2Jhc2VMYW5lczpvLmJhc2VMYW5lc3xuLGNhY2hlUG9vbDp1fSksYS5tZW1vaXplZFN0YXRlPW8sYS5jaGlsZExhbmVzPWxHKGUscixuKSx0Lm1lbW9pemVkU3RhdGU9bFksbH1yZXR1cm4gcnIodCksZT0ocj1lLmNoaWxkKS5zaWJsaW5nLHI9aUUocix7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46bC5jaGlsZHJlbn0pLDA9PSgxJnQubW9kZSkmJihyLmxhbmVzPW4pLHIucmV0dXJuPXQsci5zaWJsaW5nPW51bGwsbnVsbCE9PWUmJihudWxsPT09KG49dC5kZWxldGlvbnMpPyh0LmRlbGV0aW9ucz1bZV0sdC5mbGFnc3w9MTYpOm4ucHVzaChlKSksdC5jaGlsZD1yLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHJ9ZnVuY3Rpb24gbEooZSx0KXtyZXR1cm4odD1pTih7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46dH0sZS5tb2RlLDAsbnVsbCkpLnJldHVybj1lLGUuY2hpbGQ9dH1mdW5jdGlvbiBsMChlLHQsbixyKXtyZXR1cm4gbnVsbCE9PXImJm5uKHIpLG40KHQsZS5jaGlsZCxudWxsLG4pLGU9bEoodCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksZS5mbGFnc3w9Mix0Lm1lbW9pemVkU3RhdGU9bnVsbCxlfWZ1bmN0aW9uIGwxKGUsdCxuKXtlLmxhbmVzfD10O3ZhciByPWUuYWx0ZXJuYXRlO251bGwhPT1yJiYoci5sYW5lc3w9dCksYXIoZS5yZXR1cm4sdCxuKX1mdW5jdGlvbiBsMihlLHQsbixyLGwpe3ZhciBhPWUubWVtb2l6ZWRTdGF0ZTtudWxsPT09YT9lLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOnQscmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDpyLHRhaWw6bix0YWlsTW9kZTpsfTooYS5pc0JhY2t3YXJkcz10LGEucmVuZGVyaW5nPW51bGwsYS5yZW5kZXJpbmdTdGFydFRpbWU9MCxhLmxhc3Q9cixhLnRhaWw9bixhLnRhaWxNb2RlPWwpfWZ1bmN0aW9uIGwzKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxsPXIucmV2ZWFsT3JkZXIsYT1yLnRhaWw7aWYobEQoZSx0LHIuY2hpbGRyZW4sbiksMCE9KDImKHI9cmkuY3VycmVudCkpKXI9MSZyfDIsdC5mbGFnc3w9MTI4O2Vsc2V7aWYobnVsbCE9PWUmJjAhPSgxMjgmZS5mbGFncykpZTpmb3IoZT10LmNoaWxkO251bGwhPT1lOyl7aWYoMTM9PT1lLnRhZyludWxsIT09ZS5tZW1vaXplZFN0YXRlJiZsMShlLG4sdCk7ZWxzZSBpZigxOT09PWUudGFnKWwxKGUsbix0KTtlbHNlIGlmKG51bGwhPT1lLmNoaWxkKXtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZDtjb250aW51ZX1pZihlPT09dClicmVhaztmb3IoO251bGw9PT1lLnNpYmxpbmc7KXtpZihudWxsPT09ZS5yZXR1cm58fGUucmV0dXJuPT09dClicmVhayBlO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ31yJj0xfWlmKGcocmksciksMD09KDEmdC5tb2RlKSl0Lm1lbW9pemVkU3RhdGU9bnVsbDtlbHNlIHN3aXRjaChsKXtjYXNlImZvcndhcmRzIjpmb3IobD1udWxsLG49dC5jaGlsZDtudWxsIT09bjspbnVsbCE9PShlPW4uYWx0ZXJuYXRlKSYmbnVsbD09PXJ1KGUpJiYobD1uKSxuPW4uc2libGluZztudWxsPT09KG49bCk/KGw9dC5jaGlsZCx0LmNoaWxkPW51bGwpOihsPW4uc2libGluZyxuLnNpYmxpbmc9bnVsbCksbDIodCwhMSxsLG4sYSk7YnJlYWs7Y2FzZSJiYWNrd2FyZHMiOmZvcihuPW51bGwsbD10LmNoaWxkLHQuY2hpbGQ9bnVsbDtudWxsIT09bDspe2lmKG51bGwhPT0oZT1sLmFsdGVybmF0ZSkmJm51bGw9PT1ydShlKSl7dC5jaGlsZD1sO2JyZWFrfWU9bC5zaWJsaW5nLGwuc2libGluZz1uLG49bCxsPWV9bDIodCwhMCxuLG51bGwsYSk7YnJlYWs7Y2FzZSJ0b2dldGhlciI6bDIodCwhMSxudWxsLG51bGwsdm9pZCAwKTticmVhaztkZWZhdWx0OnQubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIGw0KGUsdCl7MD09KDEmdC5tb2RlKSYmbnVsbCE9PWUmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5mbGFnc3w9Mil9ZnVuY3Rpb24gbDYoZSx0LG4pe2lmKG51bGwhPT1lJiYodC5kZXBlbmRlbmNpZXM9ZS5kZXBlbmRlbmNpZXMpLG9ffD10LmxhbmVzLDA9PShuJnQuY2hpbGRMYW5lcykpcmV0dXJuIG51bGw7aWYobnVsbCE9PWUmJnQuY2hpbGQhPT1lLmNoaWxkKXRocm93IEVycm9yKGkoMTUzKSk7aWYobnVsbCE9PXQuY2hpbGQpe2ZvcihuPWlFKGU9dC5jaGlsZCxlLnBlbmRpbmdQcm9wcyksdC5jaGlsZD1uLG4ucmV0dXJuPXQ7bnVsbCE9PWUuc2libGluZzspZT1lLnNpYmxpbmcsKG49bi5zaWJsaW5nPWlFKGUsZS5wZW5kaW5nUHJvcHMpKS5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH12YXIgbDg9bShudWxsKSxsNT1udWxsLGw3PW51bGwsbDk9bnVsbDtmdW5jdGlvbiBhZSgpe2w5PWw3PWw1PW51bGx9ZnVuY3Rpb24gYXQoZSx0LG4pe2cobDgsdC5fY3VycmVudFZhbHVlKSx0Ll9jdXJyZW50VmFsdWU9bn1mdW5jdGlvbiBhbihlKXtlLl9jdXJyZW50VmFsdWU9bDguY3VycmVudCxoKGw4KX1mdW5jdGlvbiBhcihlLHQsbil7Zm9yKDtudWxsIT09ZTspe3ZhciByPWUuYWx0ZXJuYXRlO2lmKChlLmNoaWxkTGFuZXMmdCkhPT10PyhlLmNoaWxkTGFuZXN8PXQsbnVsbCE9PXImJihyLmNoaWxkTGFuZXN8PXQpKTpudWxsIT09ciYmKHIuY2hpbGRMYW5lcyZ0KSE9PXQmJihyLmNoaWxkTGFuZXN8PXQpLGU9PT1uKWJyZWFrO2U9ZS5yZXR1cm59fWZ1bmN0aW9uIGFsKGUsdCxuKXt2YXIgcj1lLmNoaWxkO2ZvcihudWxsIT09ciYmKHIucmV0dXJuPWUpO251bGwhPT1yOyl7dmFyIGw9ci5kZXBlbmRlbmNpZXM7aWYobnVsbCE9PWwpZm9yKHZhciBhPXIuY2hpbGQsbz1sLmZpcnN0Q29udGV4dDtudWxsIT09bzspe2lmKG8uY29udGV4dD09PXQpe2lmKDE9PT1yLnRhZyl7KG89bk0obiYtbikpLnRhZz0yO3ZhciB1PXIudXBkYXRlUXVldWU7aWYobnVsbCE9PXUpe3ZhciBzPSh1PXUuc2hhcmVkKS5wZW5kaW5nO251bGw9PT1zP28ubmV4dD1vOihvLm5leHQ9cy5uZXh0LHMubmV4dD1vKSx1LnBlbmRpbmc9b319ci5sYW5lc3w9bixudWxsIT09KG89ci5hbHRlcm5hdGUpJiYoby5sYW5lc3w9biksYXIoci5yZXR1cm4sbixlKSxsLmxhbmVzfD1uO2JyZWFrfW89by5uZXh0fWVsc2UgaWYoMTA9PT1yLnRhZylhPXIudHlwZT09PWUudHlwZT9udWxsOnIuY2hpbGQ7ZWxzZSBpZigxOD09PXIudGFnKXtpZihudWxsPT09KGE9ci5yZXR1cm4pKXRocm93IEVycm9yKGkoMzQxKSk7YS5sYW5lc3w9bixudWxsIT09KGw9YS5hbHRlcm5hdGUpJiYobC5sYW5lc3w9biksYXIoYSxuLGUpLGE9ci5zaWJsaW5nfWVsc2UgYT1yLmNoaWxkO2lmKG51bGwhPT1hKWEucmV0dXJuPXI7ZWxzZSBmb3IoYT1yO251bGwhPT1hOyl7aWYoYT09PWUpe2E9bnVsbDticmVha31pZihudWxsIT09KHI9YS5zaWJsaW5nKSl7ci5yZXR1cm49YS5yZXR1cm4sYT1yO2JyZWFrfWE9YS5yZXR1cm59cj1hfX1mdW5jdGlvbiBhYShlLHQpe2w1PWUsbDk9bDc9bnVsbCxudWxsIT09KGU9ZS5kZXBlbmRlbmNpZXMpJiZudWxsIT09ZS5maXJzdENvbnRleHQmJigwIT0oZS5sYW5lcyZ0KSYmKGxSPSEwKSxlLmZpcnN0Q29udGV4dD1udWxsKX1mdW5jdGlvbiBhbyhlKXtyZXR1cm4gYXUobDUsZSl9ZnVuY3Rpb24gYWkoZSx0LG4pe3JldHVybiBudWxsPT09bDUmJmFhKGUsbiksYXUoZSx0KX1mdW5jdGlvbiBhdShlLHQpe3ZhciBuPXQuX2N1cnJlbnRWYWx1ZTtpZihsOSE9PXQpe2lmKHQ9e2NvbnRleHQ6dCxtZW1vaXplZFZhbHVlOm4sbmV4dDpudWxsfSxudWxsPT09bDcpe2lmKG51bGw9PT1lKXRocm93IEVycm9yKGkoMzA4KSk7bDc9dCxlLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6dH19ZWxzZSBsNz1sNy5uZXh0PXR9cmV0dXJuIG59dmFyIGFzPSJ1bmRlZmluZWQiIT10eXBlb2YgQWJvcnRDb250cm9sbGVyP0Fib3J0Q29udHJvbGxlcjpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5zaWduYWw9e2Fib3J0ZWQ6ITEsYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LG4pe2UucHVzaChuKX19O3RoaXMuYWJvcnQ9ZnVuY3Rpb24oKXt0LmFib3J0ZWQ9ITAsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX19LGFjPWEudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxhZj1hLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LGFkPXskJHR5cGVvZjpFLENvbnN1bWVyOm51bGwsUHJvdmlkZXI6bnVsbCxfY3VycmVudFZhbHVlOm51bGwsX2N1cnJlbnRWYWx1ZTI6bnVsbCxfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gYXAoKXtyZXR1cm57Y29udHJvbGxlcjpuZXcgYXMsZGF0YTpuZXcgTWFwLHJlZkNvdW50OjB9fWZ1bmN0aW9uIGFtKGUpe2UucmVmQ291bnQtLSwwPT09ZS5yZWZDb3VudCYmYWMoYWYsZnVuY3Rpb24oKXtlLmNvbnRyb2xsZXIuYWJvcnQoKX0pfXZhciBhaD1zLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIGFnKCl7dmFyIGU9YWgudHJhbnNpdGlvbjtyZXR1cm4gbnVsbCE9PWUmJmUuX2NhbGxiYWNrcy5hZGQoYXkpLGV9ZnVuY3Rpb24gYXkoZSx0KXshZnVuY3Rpb24oZSx0KXtpZihudWxsPT09bngpe3ZhciBuPW54PVtdO256PTAsblA9bkUoKSxuTj17c3RhdHVzOiJwZW5kaW5nIix2YWx1ZTp2b2lkIDAsdGhlbjpmdW5jdGlvbihlKXtuLnB1c2goZSl9fX1ueisrLHQudGhlbihuXyxuXyl9KDAsdCl9ZnVuY3Rpb24gYXYoZSx0KXtlLl9jYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gbihlLHQpfSl9dmFyIGFiPW0obnVsbCk7ZnVuY3Rpb24gYWsoKXt2YXIgZT1hYi5jdXJyZW50O3JldHVybiBudWxsIT09ZT9lOm9rLnBvb2xlZENhY2hlfWZ1bmN0aW9uIGF3KGUsdCl7bnVsbD09PXQ/ZyhhYixhYi5jdXJyZW50KTpnKGFiLHQucG9vbCl9ZnVuY3Rpb24gYVMoKXt2YXIgZT1haygpO3JldHVybiBudWxsPT09ZT9udWxsOntwYXJlbnQ6YWQuX2N1cnJlbnRWYWx1ZSxwb29sOmV9fWZ1bmN0aW9uIGFDKGUpe2UuZmxhZ3N8PTR9ZnVuY3Rpb24gYUUoZSx0KXtpZigic3R5bGVzaGVldCIhPT10LnR5cGV8fDAhPSg0JnQuc3RhdGUubG9hZGluZykpZS5mbGFncyY9LTE2Nzc3MjE3O2Vsc2UgaWYoZS5mbGFnc3w9MTY3NzcyMTYsMD09KDQyJm9TKSYmISh0PSJzdHlsZXNoZWV0IiE9PXQudHlwZXx8MCE9KDMmdC5zdGF0ZS5sb2FkaW5nKSkpe2lmKG85KCkpZS5mbGFnc3w9ODE5MjtlbHNlIHRocm93IG5ZPW5XLG5qfX1mdW5jdGlvbiBheChlLHQpe251bGwhPT10P2UuZmxhZ3N8PTQ6MTYzODQmZS5mbGFncyYmKHQ9MjIhPT1lLnRhZz9lZygpOjUzNjg3MDkxMixlLmxhbmVzfD10KX1mdW5jdGlvbiBheihlLHQpe2lmKCF0Wilzd2l0Y2goZS50YWlsTW9kZSl7Y2FzZSJoaWRkZW4iOnQ9ZS50YWlsO2Zvcih2YXIgbj1udWxsO251bGwhPT10OyludWxsIT09dC5hbHRlcm5hdGUmJihuPXQpLHQ9dC5zaWJsaW5nO251bGw9PT1uP2UudGFpbD1udWxsOm4uc2libGluZz1udWxsO2JyZWFrO2Nhc2UiY29sbGFwc2VkIjpuPWUudGFpbDtmb3IodmFyIHI9bnVsbDtudWxsIT09bjspbnVsbCE9PW4uYWx0ZXJuYXRlJiYocj1uKSxuPW4uc2libGluZztudWxsPT09cj90fHxudWxsPT09ZS50YWlsP2UudGFpbD1udWxsOmUudGFpbC5zaWJsaW5nPW51bGw6ci5zaWJsaW5nPW51bGx9fWZ1bmN0aW9uIGFQKGUpe3ZhciB0PW51bGwhPT1lLmFsdGVybmF0ZSYmZS5hbHRlcm5hdGUuY2hpbGQ9PT1lLmNoaWxkLG49MCxyPTA7aWYodClmb3IodmFyIGw9ZS5jaGlsZDtudWxsIT09bDspbnw9bC5sYW5lc3xsLmNoaWxkTGFuZXMscnw9MzE0NTcyODAmbC5zdWJ0cmVlRmxhZ3Mscnw9MzE0NTcyODAmbC5mbGFncyxsLnJldHVybj1lLGw9bC5zaWJsaW5nO2Vsc2UgZm9yKGw9ZS5jaGlsZDtudWxsIT09bDspbnw9bC5sYW5lc3xsLmNoaWxkTGFuZXMscnw9bC5zdWJ0cmVlRmxhZ3Mscnw9bC5mbGFncyxsLnJldHVybj1lLGw9bC5zaWJsaW5nO3JldHVybiBlLnN1YnRyZWVGbGFnc3w9cixlLmNoaWxkTGFuZXM9bix0fWZ1bmN0aW9uIGFOKGUsdCl7c3dpdGNoKHRZKHQpLHQudGFnKXtjYXNlIDE6bnVsbCE9KGU9dC50eXBlLmNoaWxkQ29udGV4dFR5cGVzKSYmdFQoKTticmVhaztjYXNlIDM6YW4oYWQpLFEoKSxoKHRQKSxoKHR6KTticmVhaztjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OmoodCk7YnJlYWs7Y2FzZSA0OlEoKTticmVhaztjYXNlIDEzOnJvKHQpO2JyZWFrO2Nhc2UgMTk6aChyaSk7YnJlYWs7Y2FzZSAxMDphbih0LnR5cGUuX2NvbnRleHQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzpybyh0KSxyZSgpLG51bGwhPT1lJiZoKGFiKTticmVhaztjYXNlIDI0OmFuKGFkKX19ZnVuY3Rpb24gYV8oZSx0LG4pe3ZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7dC5hcHBseShuLHIpfWNhdGNoKGUpe3RoaXMub25FcnJvcihlKX19dmFyIGFMPSExLGFUPW51bGwsYUY9ITEsYU09bnVsbCxhTz17b25FcnJvcjpmdW5jdGlvbihlKXthTD0hMCxhVD1lfX07ZnVuY3Rpb24gYVIoZSx0LG4scixsLGEsbyxpLHUpe2FMPSExLGFUPW51bGwsYV8uYXBwbHkoYU8sYXJndW1lbnRzKX12YXIgYUQ9ITEsYUE9ITEsYUk9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtTZXQ/V2Vha1NldDpTZXQsYVU9bnVsbDtmdW5jdGlvbiBhQihlLHQpe3RyeXt2YXIgbj1lLnJlZjtpZihudWxsIT09bil7dmFyIHI9ZS5zdGF0ZU5vZGU7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnZhciBsPXI7YnJlYWs7ZGVmYXVsdDpsPXJ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/ZS5yZWZDbGVhbnVwPW4obCk6bi5jdXJyZW50PWx9fWNhdGNoKG4pe2ltKGUsdCxuKX19ZnVuY3Rpb24gYVYoZSx0KXt2YXIgbj1lLnJlZixyPWUucmVmQ2xlYW51cDtpZihudWxsIT09bil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpdHJ5e3IoKX1jYXRjaChuKXtpbShlLHQsbil9ZmluYWxseXtlLnJlZkNsZWFudXA9bnVsbCxudWxsIT0oZT1lLmFsdGVybmF0ZSkmJihlLnJlZkNsZWFudXA9bnVsbCl9ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil0cnl7bihudWxsKX1jYXRjaChuKXtpbShlLHQsbil9ZWxzZSBuLmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gYVEoZSx0LG4pe3RyeXtuKCl9Y2F0Y2gobil7aW0oZSx0LG4pfX12YXIgYSQ9ITE7ZnVuY3Rpb24gYWooZSx0LG4pe3ZhciByPXQudXBkYXRlUXVldWU7aWYobnVsbCE9PShyPW51bGwhPT1yP3IubGFzdEVmZmVjdDpudWxsKSl7dmFyIGw9cj1yLm5leHQ7ZG97aWYoKGwudGFnJmUpPT09ZSl7dmFyIGE9bC5pbnN0LG89YS5kZXN0cm95O3ZvaWQgMCE9PW8mJihhLmRlc3Ryb3k9dm9pZCAwLGFRKHQsbixvKSl9bD1sLm5leHR9d2hpbGUobCE9PXIpfX1mdW5jdGlvbiBhVyhlLHQpe2lmKG51bGwhPT0odD1udWxsIT09KHQ9dC51cGRhdGVRdWV1ZSk/dC5sYXN0RWZmZWN0Om51bGwpKXt2YXIgbj10PXQubmV4dDtkb3tpZigobi50YWcmZSk9PT1lKXt2YXIgcj1uLmNyZWF0ZSxsPW4uaW5zdDtyPXIoKSxsLmRlc3Ryb3k9cn1uPW4ubmV4dH13aGlsZShuIT09dCl9fWZ1bmN0aW9uIGFIKGUsdCl7dHJ5e2FXKHQsZSl9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19ZnVuY3Rpb24gYXEoZSl7dmFyIHQ9ZS51cGRhdGVRdWV1ZTtpZihudWxsIT09dCl7dmFyIG49ZS5zdGF0ZU5vZGU7dHJ5e25WKHQsbil9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19fWZ1bmN0aW9uIGFLKGUpe3ZhciB0PWUudHlwZSxuPWUubWVtb2l6ZWRQcm9wcyxyPWUuc3RhdGVOb2RlO3RyeXtzd2l0Y2godCl7Y2FzZSJidXR0b24iOmNhc2UiaW5wdXQiOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpuLmF1dG9Gb2N1cyYmci5mb2N1cygpO2JyZWFrO2Nhc2UiaW1nIjpuLnNyYyYmKHIuc3JjPW4uc3JjKX19Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19ZnVuY3Rpb24gYVkoZSx0LG4pe3ZhciByPW4uZmxhZ3M7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmE5KGUsbiksNCZyJiZhSChuLDUpO2JyZWFrO2Nhc2UgMTppZihhOShlLG4pLDQmcil7aWYoZT1uLnN0YXRlTm9kZSxudWxsPT09dCl0cnl7ZS5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGUpe2ltKG4sbi5yZXR1cm4sZSl9ZWxzZXt2YXIgbD1uLmVsZW1lbnRUeXBlPT09bi50eXBlP3QubWVtb2l6ZWRQcm9wczpsYihuLnR5cGUsdC5tZW1vaXplZFByb3BzKTt0PXQubWVtb2l6ZWRTdGF0ZTt0cnl7ZS5jb21wb25lbnREaWRVcGRhdGUobCx0LGUuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfWNhdGNoKGUpe2ltKG4sbi5yZXR1cm4sZSl9fX02NCZyJiZhcShuKSw1MTImciYmYUIobixuLnJldHVybik7YnJlYWs7Y2FzZSAzOmlmKGE5KGUsbiksNjQmciYmbnVsbCE9PShyPW4udXBkYXRlUXVldWUpKXtpZihlPW51bGwsbnVsbCE9PW4uY2hpbGQpc3dpdGNoKG4uY2hpbGQudGFnKXtjYXNlIDI3OmNhc2UgNTpjYXNlIDE6ZT1uLmNoaWxkLnN0YXRlTm9kZX10cnl7blYocixlKX1jYXRjaChlKXtpbShuLG4ucmV0dXJuLGUpfX1icmVhaztjYXNlIDI2OmE5KGUsbiksNTEyJnImJmFCKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMjc6Y2FzZSA1OmE5KGUsbiksbnVsbD09PXQmJjQmciYmYUsobiksNTEyJnImJmFCKG4sbi5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6ZGVmYXVsdDphOShlLG4pO2JyZWFrO2Nhc2UgMTM6YTkoZSxuKSw0JnImJmEzKGUsbik7YnJlYWs7Y2FzZSAyMjppZigwIT0oMSZuLm1vZGUpKXtpZighKGw9bnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZXx8YUQpKXt0PW51bGwhPT10JiZudWxsIT09dC5tZW1vaXplZFN0YXRlfHxhQTt2YXIgYT1hRCxvPWFBO2FEPWwsKGFBPXQpJiYhbz9mdW5jdGlvbiBlKHQsbixyKXtmb3Iocj1yJiYwIT0oODc3MiZuLnN1YnRyZWVGbGFncyksbj1uLmNoaWxkO251bGwhPT1uOyl7dmFyIGw9bi5hbHRlcm5hdGUsYT10LG89bixpPW8uZmxhZ3M7c3dpdGNoKG8udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmUoYSxvLHIpLGFIKG8sNCk7YnJlYWs7Y2FzZSAxOmlmKGUoYSxvLHIpLCJmdW5jdGlvbiI9PXR5cGVvZihhPW8uc3RhdGVOb2RlKS5jb21wb25lbnREaWRNb3VudCl0cnl7YS5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGUpe2ltKG8sby5yZXR1cm4sZSl9aWYobnVsbCE9PShsPW8udXBkYXRlUXVldWUpKXt2YXIgdT1sLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7aWYobnVsbCE9PXUpZm9yKGwuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcz1udWxsLGw9MDtsPHUubGVuZ3RoO2wrKyluQih1W2xdLGEpfXImJjY0JmkmJmFxKG8pLGFCKG8sby5yZXR1cm4pO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6ZShhLG8sciksciYmbnVsbD09PWwmJjQmaSYmYUsobyksYUIobyxvLnJldHVybik7YnJlYWs7Y2FzZSAxMjpkZWZhdWx0OmUoYSxvLHIpO2JyZWFrO2Nhc2UgMTM6ZShhLG8sciksciYmNCZpJiZhMyhhLG8pO2JyZWFrO2Nhc2UgMjI6bnVsbD09PW8ubWVtb2l6ZWRTdGF0ZSYmZShhLG8sciksYUIobyxvLnJldHVybil9bj1uLnNpYmxpbmd9fShlLG4sMCE9KDg3NzImbi5zdWJ0cmVlRmxhZ3MpKTphOShlLG4pLGFEPWEsYUE9b319ZWxzZSBhOShlLG4pOzUxMiZyJiYoIm1hbnVhbCI9PT1uLm1lbW9pemVkUHJvcHMubW9kZT9hQihuLG4ucmV0dXJuKTphVihuLG4ucmV0dXJuKSl9fWZ1bmN0aW9uIGFYKGUpe3JldHVybiA1PT09ZS50YWd8fDM9PT1lLnRhZ3x8MjY9PT1lLnRhZ3x8Mjc9PT1lLnRhZ3x8ND09PWUudGFnfWZ1bmN0aW9uIGFHKGUpe2U6Zm9yKDs7KXtmb3IoO251bGw9PT1lLnNpYmxpbmc7KXtpZihudWxsPT09ZS5yZXR1cm58fGFYKGUucmV0dXJuKSlyZXR1cm4gbnVsbDtlPWUucmV0dXJufWZvcihlLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nOzUhPT1lLnRhZyYmNiE9PWUudGFnJiYyNyE9PWUudGFnJiYxOCE9PWUudGFnOyl7aWYoMiZlLmZsYWdzfHxudWxsPT09ZS5jaGlsZHx8ND09PWUudGFnKWNvbnRpbnVlIGU7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGR9aWYoISgyJmUuZmxhZ3MpKXJldHVybiBlLnN0YXRlTm9kZX19ZnVuY3Rpb24gYVooZSx0LG4pe3ZhciByPWUudGFnO2lmKDU9PT1yfHw2PT09cillPWUuc3RhdGVOb2RlLHQ/bi5pbnNlcnRCZWZvcmUoZSx0KTpuLmFwcGVuZENoaWxkKGUpO2Vsc2UgaWYoNCE9PXImJjI3IT09ciYmbnVsbCE9PShlPWUuY2hpbGQpKWZvcihhWihlLHQsbiksZT1lLnNpYmxpbmc7bnVsbCE9PWU7KWFaKGUsdCxuKSxlPWUuc2libGluZ312YXIgYUo9bnVsbCxhMD0hMTtmdW5jdGlvbiBhMShlLHQsbil7Zm9yKG49bi5jaGlsZDtudWxsIT09bjspYTIoZSx0LG4pLG49bi5zaWJsaW5nfWZ1bmN0aW9uIGEyKGUsdCxuKXtpZihlYSYmImZ1bmN0aW9uIj09dHlwZW9mIGVhLm9uQ29tbWl0RmliZXJVbm1vdW50KXRyeXtlYS5vbkNvbW1pdEZpYmVyVW5tb3VudChlbCxuKX1jYXRjaChlKXt9c3dpdGNoKG4udGFnKXtjYXNlIDI2OmFBfHxhVihuLHQpLGExKGUsdCxuKSxuLm1lbW9pemVkU3RhdGU/bi5tZW1vaXplZFN0YXRlLmNvdW50LS06bi5zdGF0ZU5vZGUmJihuPW4uc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pO2JyZWFrO2Nhc2UgMjc6YUF8fGFWKG4sdCk7dmFyIHI9YUosbD1hMDtmb3IoYUo9bi5zdGF0ZU5vZGUsYTEoZSx0LG4pLGU9KG49bi5zdGF0ZU5vZGUpLmF0dHJpYnV0ZXM7ZS5sZW5ndGg7KW4ucmVtb3ZlQXR0cmlidXRlTm9kZShlWzBdKTtlRihuKSxhSj1yLGEwPWw7YnJlYWs7Y2FzZSA1OmFBfHxhVihuLHQpO2Nhc2UgNjpyPWFKLGw9YTAsYUo9bnVsbCxhMShlLHQsbiksYUo9cixhMD1sLG51bGwhPT1hSiYmKGEwPyhlPWFKLG49bi5zdGF0ZU5vZGUsOD09PWUubm9kZVR5cGU/ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pOmUucmVtb3ZlQ2hpbGQobikpOmFKLnJlbW92ZUNoaWxkKG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSAxODpudWxsIT09YUomJihhMD8oZT1hSixuPW4uc3RhdGVOb2RlLDg9PT1lLm5vZGVUeXBlP2N0KGUucGFyZW50Tm9kZSxuKToxPT09ZS5ub2RlVHlwZSYmY3QoZSxuKSx1TChlKSk6Y3QoYUosbi5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDQ6cj1hSixsPWEwLGFKPW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sYTA9ITAsYTEoZSx0LG4pLGFKPXIsYTA9bDticmVhaztjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6aWYoIWFBJiZudWxsIT09KHI9bi51cGRhdGVRdWV1ZSkmJm51bGwhPT0ocj1yLmxhc3RFZmZlY3QpKXtsPXI9ci5uZXh0O2Rve3ZhciBhPWwudGFnLG89bC5pbnN0LGk9by5kZXN0cm95O3ZvaWQgMCE9PWkmJigwIT0oMiZhKT8oby5kZXN0cm95PXZvaWQgMCxhUShuLHQsaSkpOjAhPSg0JmEpJiYoby5kZXN0cm95PXZvaWQgMCxhUShuLHQsaSkpKSxsPWwubmV4dH13aGlsZShsIT09cil9YTEoZSx0LG4pO2JyZWFrO2Nhc2UgMTppZighYUEmJihhVihuLHQpLCJmdW5jdGlvbiI9PXR5cGVvZihyPW4uc3RhdGVOb2RlKS5jb21wb25lbnRXaWxsVW5tb3VudCkpdHJ5e3IucHJvcHM9bi5tZW1vaXplZFByb3BzLHIuc3RhdGU9bi5tZW1vaXplZFN0YXRlLHIuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChlKXtpbShuLHQsZSl9YTEoZSx0LG4pO2JyZWFrO2Nhc2UgMjE6ZGVmYXVsdDphMShlLHQsbik7YnJlYWs7Y2FzZSAyMjphVihuLHQpLDEmbi5tb2RlPyhhQT0ocj1hQSl8fG51bGwhPT1uLm1lbW9pemVkU3RhdGUsYTEoZSx0LG4pLGFBPXIpOmExKGUsdCxuKX19ZnVuY3Rpb24gYTMoZSx0KXtpZihudWxsPT09dC5tZW1vaXplZFN0YXRlJiZudWxsIT09KGU9dC5hbHRlcm5hdGUpJiZudWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PShlPWUuZGVoeWRyYXRlZCkpdHJ5e3VMKGUpfWNhdGNoKGUpe2ltKHQsdC5yZXR1cm4sZSl9fWZ1bmN0aW9uIGE0KGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7c3dpdGNoKGUudGFnKXtjYXNlIDEzOmNhc2UgMTk6dmFyIHQ9ZS5zdGF0ZU5vZGU7cmV0dXJuIG51bGw9PT10JiYodD1lLnN0YXRlTm9kZT1uZXcgYUkpLHQ7Y2FzZSAyMjpyZXR1cm4gbnVsbD09PSh0PShlPWUuc3RhdGVOb2RlKS5fcmV0cnlDYWNoZSkmJih0PWUuX3JldHJ5Q2FjaGU9bmV3IGFJKSx0O2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0MzUsZS50YWcpKX19KGUpO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1pYi5iaW5kKG51bGwsZSx0KTtuLmhhcyh0KXx8KG4uYWRkKHQpLHQudGhlbihyLHIpKX0pfWZ1bmN0aW9uIGE2KGUsdCl7dmFyIG49dC5kZWxldGlvbnM7aWYobnVsbCE9PW4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl07dHJ5e3ZhciBhPXQsbz1hO2U6Zm9yKDtudWxsIT09bzspe3N3aXRjaChvLnRhZyl7Y2FzZSAyNzpjYXNlIDU6YUo9by5zdGF0ZU5vZGUsYTA9ITE7YnJlYWsgZTtjYXNlIDM6Y2FzZSA0OmFKPW8uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sYTA9ITA7YnJlYWsgZX1vPW8ucmV0dXJufWlmKG51bGw9PT1hSil0aHJvdyBFcnJvcihpKDE2MCkpO2EyKGUsYSxsKSxhSj1udWxsLGEwPSExO3ZhciB1PWwuYWx0ZXJuYXRlO251bGwhPT11JiYodS5yZXR1cm49bnVsbCksbC5yZXR1cm49bnVsbH1jYXRjaChlKXtpbShsLHQsZSl9fWlmKDEyODU0JnQuc3VidHJlZUZsYWdzKWZvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KWE1KHQsZSksdD10LnNpYmxpbmd9dmFyIGE4PW51bGw7ZnVuY3Rpb24gYTUoZSx0KXt2YXIgbj1lLmFsdGVybmF0ZSxyPWUuZmxhZ3M7c3dpdGNoKGUudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6aWYoYTYodCxlKSxhNyhlKSw0JnIpe3RyeXthaigzLGUsZS5yZXR1cm4pLGFXKDMsZSl9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX10cnl7YWooNSxlLGUucmV0dXJuKX1jYXRjaCh0KXtpbShlLGUucmV0dXJuLHQpfX1icmVhaztjYXNlIDE6YTYodCxlKSxhNyhlKSw1MTImciYmbnVsbCE9PW4mJmFWKG4sbi5yZXR1cm4pLDY0JnImJmFEJiZudWxsIT09KGU9ZS51cGRhdGVRdWV1ZSkmJm51bGwhPT0obj1lLmNhbGxiYWNrcykmJihyPWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyxlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M9bnVsbD09PXI/bjpyLmNvbmNhdChuKSk7YnJlYWs7Y2FzZSAyNjp2YXIgbD1hODtpZihhNih0LGUpLGE3KGUpLDUxMiZyJiZudWxsIT09biYmYVYobixuLnJldHVybiksNCZyKXtpZih0PW51bGwhPT1uP24ubWVtb2l6ZWRTdGF0ZTpudWxsLHI9ZS5tZW1vaXplZFN0YXRlLG51bGw9PT1uKXtpZihudWxsPT09cil7aWYobnVsbD09PWUuc3RhdGVOb2RlKXtlOntuPWUudHlwZSxyPWUubWVtb2l6ZWRQcm9wcyx0PWwub3duZXJEb2N1bWVudHx8bDt0OnN3aXRjaChuKXtjYXNlInRpdGxlIjooIShsPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxlIilbMF0pfHxsW2VUXXx8bFtlRV18fCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI9PT1sLm5hbWVzcGFjZVVSSXx8bC5oYXNBdHRyaWJ1dGUoIml0ZW1wcm9wIikpJiYobD10LmNyZWF0ZUVsZW1lbnQobiksdC5oZWFkLmluc2VydEJlZm9yZShsLHQucXVlcnlTZWxlY3RvcigiaGVhZCA+IHRpdGxlIikpKSxzRyhsLG4sciksbFtlRV09ZSxlSShsKSxuPWw7YnJlYWsgZTtjYXNlImxpbmsiOnZhciBhPWNFKCJsaW5rIiwiaHJlZiIsdCkuZ2V0KG4rKHIuaHJlZnx8IiIpKTtpZihhKXtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZigobD1hW29dKS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PShudWxsPT1yLmhyZWY/bnVsbDpyLmhyZWYpJiZsLmdldEF0dHJpYnV0ZSgicmVsIik9PT0obnVsbD09ci5yZWw/bnVsbDpyLnJlbCkmJmwuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpPT09KG51bGw9PXIudGl0bGU/bnVsbDpyLnRpdGxlKSYmbC5nZXRBdHRyaWJ1dGUoImNyb3Nzb3JpZ2luIik9PT0obnVsbD09ci5jcm9zc09yaWdpbj9udWxsOnIuY3Jvc3NPcmlnaW4pKXthLnNwbGljZShvLDEpO2JyZWFrIHR9fXNHKGw9dC5jcmVhdGVFbGVtZW50KG4pLG4sciksdC5oZWFkLmFwcGVuZENoaWxkKGwpO2JyZWFrO2Nhc2UibWV0YSI6aWYoYT1jRSgibWV0YSIsImNvbnRlbnQiLHQpLmdldChuKyhyLmNvbnRlbnR8fCIiKSkpe2ZvcihvPTA7bzxhLmxlbmd0aDtvKyspaWYoKGw9YVtvXSkuZ2V0QXR0cmlidXRlKCJjb250ZW50Iik9PT0obnVsbD09ci5jb250ZW50P251bGw6IiIrci5jb250ZW50KSYmbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PShudWxsPT1yLm5hbWU/bnVsbDpyLm5hbWUpJiZsLmdldEF0dHJpYnV0ZSgicHJvcGVydHkiKT09PShudWxsPT1yLnByb3BlcnR5P251bGw6ci5wcm9wZXJ0eSkmJmwuZ2V0QXR0cmlidXRlKCJodHRwLWVxdWl2Iik9PT0obnVsbD09ci5odHRwRXF1aXY/bnVsbDpyLmh0dHBFcXVpdikmJmwuZ2V0QXR0cmlidXRlKCJjaGFyc2V0Iik9PT0obnVsbD09ci5jaGFyU2V0P251bGw6ci5jaGFyU2V0KSl7YS5zcGxpY2UobywxKTticmVhayB0fX1zRyhsPXQuY3JlYXRlRWxlbWVudChuKSxuLHIpLHQuaGVhZC5hcHBlbmRDaGlsZChsKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGkoNDY4LG4pKX1sW2VFXT1lLGVJKGwpLG49bH1lLnN0YXRlTm9kZT1ufWVsc2UgY3gobCxlLnR5cGUsZS5zdGF0ZU5vZGUpfWVsc2UgZS5zdGF0ZU5vZGU9Y2IobCxyLGUubWVtb2l6ZWRQcm9wcyl9ZWxzZSBpZih0IT09ciludWxsPT09dD9udWxsIT09bi5zdGF0ZU5vZGUmJihuPW4uc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pOnQuY291bnQtLSxudWxsPT09cj9jeChsLGUudHlwZSxlLnN0YXRlTm9kZSk6Y2IobCxyLGUubWVtb2l6ZWRQcm9wcyk7ZWxzZSBpZihudWxsPT09ciYmbnVsbCE9PWUuc3RhdGVOb2RlKXtlLnVwZGF0ZVF1ZXVlPW51bGw7dHJ5e3ZhciB1PWUuc3RhdGVOb2RlLHM9ZS5tZW1vaXplZFByb3BzO3NaKHUsZS50eXBlLG4ubWVtb2l6ZWRQcm9wcyxzKSx1W2V4XT1zfWNhdGNoKHQpe2ltKGUsZS5yZXR1cm4sdCl9fX1icmVhaztjYXNlIDI3OmlmKDQmciYmbnVsbD09PWUuYWx0ZXJuYXRlKXtmb3IobD1lLnN0YXRlTm9kZSxhPWUubWVtb2l6ZWRQcm9wcyxvPWwuZmlyc3RDaGlsZDtvOyl7dmFyIGM9by5uZXh0U2libGluZyxmPW8ubm9kZU5hbWU7b1tlVF18fCJIRUFEIj09PWZ8fCJCT0RZIj09PWZ8fCJTQ1JJUFQiPT09Znx8IlNUWUxFIj09PWZ8fCJMSU5LIj09PWYmJiJzdHlsZXNoZWV0Ij09PW8ucmVsLnRvTG93ZXJDYXNlKCl8fGwucmVtb3ZlQ2hpbGQobyksbz1jfWZvcihvPWUudHlwZSxjPWwuYXR0cmlidXRlcztjLmxlbmd0aDspbC5yZW1vdmVBdHRyaWJ1dGVOb2RlKGNbMF0pO3NHKGwsbyxhKSxsW2VFXT1lLGxbZXhdPWF9Y2FzZSA1OmlmKGE2KHQsZSksYTcoZSksNTEyJnImJm51bGwhPT1uJiZhVihuLG4ucmV0dXJuKSwzMiZlLmZsYWdzKXt0PWUuc3RhdGVOb2RlO3RyeXt0dSh0LCIiKX1jYXRjaCh0KXtpbShlLGUucmV0dXJuLHQpfX1pZig0JnImJm51bGwhPShyPWUuc3RhdGVOb2RlKSl7dD1lLm1lbW9pemVkUHJvcHMsbj1udWxsIT09bj9uLm1lbW9pemVkUHJvcHM6dCxsPWUudHlwZSxlLnVwZGF0ZVF1ZXVlPW51bGw7dHJ5e3NaKHIsbCxuLHQpLHJbZXhdPXR9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19YnJlYWs7Y2FzZSA2OmlmKGE2KHQsZSksYTcoZSksNCZyKXtpZihudWxsPT09ZS5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoaSgxNjIpKTtuPWUuc3RhdGVOb2RlLHI9ZS5tZW1vaXplZFByb3BzO3RyeXtuLm5vZGVWYWx1ZT1yfWNhdGNoKHQpe2ltKGUsZS5yZXR1cm4sdCl9fWJyZWFrO2Nhc2UgMzppZihjQz1udWxsLGw9YTgsYTg9Y2YodC5jb250YWluZXJJbmZvKSxhNih0LGUpLGE4PWwsYTcoZSksNCZyJiZudWxsIT09biYmbi5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7dUwodC5jb250YWluZXJJbmZvKX1jYXRjaCh0KXtpbShlLGUucmV0dXJuLHQpfWJyZWFrO2Nhc2UgNDpuPWE4LGE4PWNmKGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLGE2KHQsZSksYTcoZSksYTg9bjticmVhaztjYXNlIDEzOmE2KHQsZSksYTcoZSksODE5MiZlLmNoaWxkLmZsYWdzJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlIT0obnVsbCE9PW4mJm51bGwhPT1uLm1lbW9pemVkU3RhdGUpJiYob0E9WSgpKSw0JnImJm51bGwhPT0obj1lLnVwZGF0ZVF1ZXVlKSYmKGUudXBkYXRlUXVldWU9bnVsbCxhNChlLG4pKTticmVhaztjYXNlIDIyOmlmKDUxMiZyJiZudWxsIT09biYmYVYobixuLnJldHVybiksdT1udWxsIT09ZS5tZW1vaXplZFN0YXRlLHM9bnVsbCE9PW4mJm51bGwhPT1uLm1lbW9pemVkU3RhdGUsMSZlLm1vZGUpe3ZhciBkPWFELHA9YUE7YUQ9ZHx8dSxhQT1wfHxzLGE2KHQsZSksYUE9cCxhRD1kfWVsc2UgYTYodCxlKTtpZihhNyhlKSwodD1lLnN0YXRlTm9kZSkuX2N1cnJlbnQ9ZSx0Ll92aXNpYmlsaXR5Jj0tMyx0Ll92aXNpYmlsaXR5fD0yJnQuX3BlbmRpbmdWaXNpYmlsaXR5LDgxOTImciYmKHQuX3Zpc2liaWxpdHk9dT8tMiZ0Ll92aXNpYmlsaXR5OjF8dC5fdmlzaWJpbGl0eSx1JiYodD1hRHx8YUEsbnVsbD09PW58fHN8fHR8fDAhPSgxJmUubW9kZSkmJmZ1bmN0aW9uIGUodCl7Zm9yKHQ9dC5jaGlsZDtudWxsIT09dDspe3ZhciBuPXQ7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6YWooNCxuLG4ucmV0dXJuKSxlKG4pO2JyZWFrO2Nhc2UgMTphVihuLG4ucmV0dXJuKTt2YXIgcj1uLnN0YXRlTm9kZTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci5jb21wb25lbnRXaWxsVW5tb3VudCl7dmFyIGw9bi5yZXR1cm47dHJ5e3IucHJvcHM9bi5tZW1vaXplZFByb3BzLHIuc3RhdGU9bi5tZW1vaXplZFN0YXRlLHIuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChlKXtpbShuLGwsZSl9fWUobik7YnJlYWs7Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNTphVihuLG4ucmV0dXJuKSxlKG4pO2JyZWFrO2Nhc2UgMjI6YVYobixuLnJldHVybiksbnVsbD09PW4ubWVtb2l6ZWRTdGF0ZSYmZShuKTticmVhaztkZWZhdWx0OmUobil9dD10LnNpYmxpbmd9fShlKSksbnVsbD09PWUubWVtb2l6ZWRQcm9wc3x8Im1hbnVhbCIhPT1lLm1lbW9pemVkUHJvcHMubW9kZSkpZTpmb3Iobj1udWxsLHQ9ZTs7KXtpZig1PT09dC50YWd8fDI2PT09dC50YWd8fDI3PT09dC50YWcpe2lmKG51bGw9PT1uKXtuPXQ7dHJ5e2w9dC5zdGF0ZU5vZGUsdT8oYT1sLnN0eWxlLCJmdW5jdGlvbiI9PXR5cGVvZiBhLnNldFByb3BlcnR5P2Euc2V0UHJvcGVydHkoImRpc3BsYXkiLCJub25lIiwiaW1wb3J0YW50Iik6YS5kaXNwbGF5PSJub25lIik6KG89dC5zdGF0ZU5vZGUsZj1udWxsIT0oYz10Lm1lbW9pemVkUHJvcHMuc3R5bGUpJiZjLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/Yy5kaXNwbGF5Om51bGwsby5zdHlsZS5kaXNwbGF5PW51bGw9PWZ8fCJib29sZWFuIj09dHlwZW9mIGY/IiI6KCIiK2YpLnRyaW0oKSl9Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX19fWVsc2UgaWYoNj09PXQudGFnKXtpZihudWxsPT09bil0cnl7dC5zdGF0ZU5vZGUubm9kZVZhbHVlPXU/IiI6dC5tZW1vaXplZFByb3BzfWNhdGNoKHQpe2ltKGUsZS5yZXR1cm4sdCl9fWVsc2UgaWYoKDIyIT09dC50YWcmJjIzIT09dC50YWd8fG51bGw9PT10Lm1lbW9pemVkU3RhdGV8fHQ9PT1lKSYmbnVsbCE9PXQuY2hpbGQpe3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfWlmKHQ9PT1lKWJyZWFrO2Zvcig7bnVsbD09PXQuc2libGluZzspe2lmKG51bGw9PT10LnJldHVybnx8dC5yZXR1cm49PT1lKWJyZWFrIGU7bj09PXQmJihuPW51bGwpLHQ9dC5yZXR1cm59bj09PXQmJihuPW51bGwpLHQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9NCZyJiZudWxsIT09KG49ZS51cGRhdGVRdWV1ZSkmJm51bGwhPT0ocj1uLnJldHJ5UXVldWUpJiYobi5yZXRyeVF1ZXVlPW51bGwsYTQoZSxyKSk7YnJlYWs7Y2FzZSAxOTphNih0LGUpLGE3KGUpLDQmciYmbnVsbCE9PShuPWUudXBkYXRlUXVldWUpJiYoZS51cGRhdGVRdWV1ZT1udWxsLGE0KGUsbikpO2JyZWFrO2Nhc2UgMjE6YnJlYWs7ZGVmYXVsdDphNih0LGUpLGE3KGUpfX1mdW5jdGlvbiBhNyhlKXt2YXIgdD1lLmZsYWdzO2lmKDImdCl7dHJ5e2lmKDI3IT09ZS50YWcpe3Q6e2Zvcih2YXIgbj1lLnJldHVybjtudWxsIT09bjspe2lmKGFYKG4pKXt2YXIgcj1uO2JyZWFrIHR9bj1uLnJldHVybn10aHJvdyBFcnJvcihpKDE2MCkpfXN3aXRjaChyLnRhZyl7Y2FzZSAyNzp2YXIgbD1yLnN0YXRlTm9kZSxhPWFHKGUpO2FaKGUsYSxsKTticmVhaztjYXNlIDU6dmFyIG89ci5zdGF0ZU5vZGU7MzImci5mbGFncyYmKHR1KG8sIiIpLHIuZmxhZ3MmPS0zMyk7dmFyIHU9YUcoZSk7YVooZSx1LG8pO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIHM9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxjPWFHKGUpOyFmdW5jdGlvbiBlKHQsbixyKXt2YXIgbD10LnRhZztpZig1PT09bHx8Nj09PWwpdD10LnN0YXRlTm9kZSxuPzg9PT1yLm5vZGVUeXBlP3IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxuKTpyLmluc2VydEJlZm9yZSh0LG4pOig4PT09ci5ub2RlVHlwZT8obj1yLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZSh0LHIpOihuPXIpLmFwcGVuZENoaWxkKHQpLG51bGwhPShyPXIuX3JlYWN0Um9vdENvbnRhaW5lcil8fG51bGwhPT1uLm9uY2xpY2t8fChuLm9uY2xpY2s9c0spKTtlbHNlIGlmKDQhPT1sJiYyNyE9PWwmJm51bGwhPT0odD10LmNoaWxkKSlmb3IoZSh0LG4sciksdD10LnNpYmxpbmc7bnVsbCE9PXQ7KWUodCxuLHIpLHQ9dC5zaWJsaW5nfShlLGMscyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDE2MSkpfX19Y2F0Y2godCl7aW0oZSxlLnJldHVybix0KX1lLmZsYWdzJj0tM300MDk2JnQmJihlLmZsYWdzJj0tNDA5Nyl9ZnVuY3Rpb24gYTkoZSx0KXtpZig4NzcyJnQuc3VidHJlZUZsYWdzKWZvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KWFZKGUsdC5hbHRlcm5hdGUsdCksdD10LnNpYmxpbmd9ZnVuY3Rpb24gb2UoZSx0KXt0cnl7YVcodCxlKX1jYXRjaCh0KXtpbShlLGUucmV0dXJuLHQpfX1mdW5jdGlvbiBvdChlLHQpe3ZhciBuPW51bGw7bnVsbCE9PWUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYobj1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGU9bnVsbCxudWxsIT09dC5tZW1vaXplZFN0YXRlJiZudWxsIT09dC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKGU9dC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxlIT09biYmKG51bGwhPWUmJmUucmVmQ291bnQrKyxudWxsIT1uJiZhbShuKSl9ZnVuY3Rpb24gb24oZSx0KXtlPW51bGwsbnVsbCE9PXQuYWx0ZXJuYXRlJiYoZT10LmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSwodD10Lm1lbW9pemVkU3RhdGUuY2FjaGUpIT09ZSYmKHQucmVmQ291bnQrKyxudWxsIT1lJiZhbShlKSl9ZnVuY3Rpb24gb3IoZSx0LG4scil7aWYoMTAyNTYmdC5zdWJ0cmVlRmxhZ3MpZm9yKHQ9dC5jaGlsZDtudWxsIT09dDspb2woZSx0LG4sciksdD10LnNpYmxpbmd9ZnVuY3Rpb24gb2woZSx0LG4scil7dmFyIGw9dC5mbGFncztzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6b3IoZSx0LG4sciksMjA0OCZsJiZvZSh0LDkpO2JyZWFrO2Nhc2UgMzpvcihlLHQsbixyKSwyMDQ4JmwmJihlPW51bGwsbnVsbCE9PXQuYWx0ZXJuYXRlJiYoZT10LmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSwodD10Lm1lbW9pemVkU3RhdGUuY2FjaGUpIT09ZSYmKHQucmVmQ291bnQrKyxudWxsIT1lJiZhbShlKSkpO2JyZWFrO2Nhc2UgMjM6YnJlYWs7Y2FzZSAyMjp2YXIgYT10LnN0YXRlTm9kZTtudWxsIT09dC5tZW1vaXplZFN0YXRlPzQmYS5fdmlzaWJpbGl0eT9vcihlLHQsbixyKToxJnQubW9kZT9vYShlLHQpOihhLl92aXNpYmlsaXR5fD00LG9yKGUsdCxuLHIpKTo0JmEuX3Zpc2liaWxpdHk/b3IoZSx0LG4scik6KGEuX3Zpc2liaWxpdHl8PTQsZnVuY3Rpb24gZSh0LG4scixsLGEpe2ZvcihhPWEmJjAhPSgxMDI1NiZuLnN1YnRyZWVGbGFncyksbj1uLmNoaWxkO251bGwhPT1uOyl7dmFyIG89bixpPW8uZmxhZ3M7c3dpdGNoKG8udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmUodCxvLHIsbCxhKSxvZShvLDgpO2JyZWFrO2Nhc2UgMjM6YnJlYWs7Y2FzZSAyMjp2YXIgdT1vLnN0YXRlTm9kZTtudWxsIT09by5tZW1vaXplZFN0YXRlPzQmdS5fdmlzaWJpbGl0eT9lKHQsbyxyLGwsYSk6MSZvLm1vZGU/b2EodCxvKToodS5fdmlzaWJpbGl0eXw9NCxlKHQsbyxyLGwsYSkpOih1Ll92aXNpYmlsaXR5fD00LGUodCxvLHIsbCxhKSksYSYmMjA0OCZpJiZvdChvLmFsdGVybmF0ZSxvKTticmVhaztjYXNlIDI0OmUodCxvLHIsbCxhKSxhJiYyMDQ4JmkmJm9uKG8uYWx0ZXJuYXRlLG8pO2JyZWFrO2RlZmF1bHQ6ZSh0LG8scixsLGEpfW49bi5zaWJsaW5nfX0oZSx0LG4sciwwIT0oMTAyNTYmdC5zdWJ0cmVlRmxhZ3MpKSksMjA0OCZsJiZvdCh0LmFsdGVybmF0ZSx0KTticmVhaztjYXNlIDI0Om9yKGUsdCxuLHIpLDIwNDgmbCYmb24odC5hbHRlcm5hdGUsdCk7YnJlYWs7ZGVmYXVsdDpvcihlLHQsbixyKX19ZnVuY3Rpb24gb2EoZSx0KXtpZigxMDI1NiZ0LnN1YnRyZWVGbGFncylmb3IodD10LmNoaWxkO251bGwhPT10Oyl7dmFyIG49dCxyPW4uZmxhZ3M7c3dpdGNoKG4udGFnKXtjYXNlIDIyOm9hKGUsbiksMjA0OCZyJiZvdChuLmFsdGVybmF0ZSxuKTticmVhaztjYXNlIDI0Om9hKGUsbiksMjA0OCZyJiZvbihuLmFsdGVybmF0ZSxuKTticmVhaztkZWZhdWx0Om9hKGUsbil9dD10LnNpYmxpbmd9fXZhciBvbz04MTkyO2Z1bmN0aW9uIG9pKGUpe2lmKGUuc3VidHJlZUZsYWdzJm9vKWZvcihlPWUuY2hpbGQ7bnVsbCE9PWU7KW91KGUpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIG91KGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAyNjpvaShlKSxlLmZsYWdzJm9vJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlJiZmdW5jdGlvbihlLHQsbil7aWYobnVsbD09PWN6KXRocm93IEVycm9yKGkoNDc1KSk7dmFyIHI9Y3o7aWYoInN0eWxlc2hlZXQiPT09dC50eXBlJiYoInN0cmluZyIhPXR5cGVvZiBuLm1lZGlhfHwhMSE9PW1hdGNoTWVkaWEobi5tZWRpYSkubWF0Y2hlcykmJjA9PSg0JnQuc3RhdGUubG9hZGluZykpe2lmKG51bGw9PT10Lmluc3RhbmNlKXt2YXIgbD1jbShuLmhyZWYpLGE9ZS5xdWVyeVNlbGVjdG9yKGNoKGwpKTtpZihhKXtudWxsIT09KGU9YS5fcCkmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudGhlbiYmKHIuY291bnQrKyxyPWNOLmJpbmQociksZS50aGVuKHIscikpLHQuc3RhdGUubG9hZGluZ3w9NCx0Lmluc3RhbmNlPWEsZUkoYSk7cmV0dXJufWE9ZS5vd25lckRvY3VtZW50fHxlLG49Y2cobiksKGw9Y3MuZ2V0KGwpKSYmY3cobixsKSxlSShhPWEuY3JlYXRlRWxlbWVudCgibGluayIpKTt2YXIgbz1hO28uX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtvLm9ubG9hZD1lLG8ub25lcnJvcj10fSksc0coYSwibGluayIsbiksdC5pbnN0YW5jZT1hfW51bGw9PT1yLnN0eWxlc2hlZXRzJiYoci5zdHlsZXNoZWV0cz1uZXcgTWFwKSxyLnN0eWxlc2hlZXRzLnNldCh0LGUpLChlPXQuc3RhdGUucHJlbG9hZCkmJjA9PSgzJnQuc3RhdGUubG9hZGluZykmJihyLmNvdW50KyssdD1jTi5iaW5kKHIpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdCksZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdCkpfX0oYTgsZS5tZW1vaXplZFN0YXRlLGUubWVtb2l6ZWRQcm9wcyk7YnJlYWs7Y2FzZSA1OmRlZmF1bHQ6b2koZSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgdD1hODthOD1jZihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxvaShlKSxhOD10O2JyZWFrO2Nhc2UgMjI6bnVsbD09PWUubWVtb2l6ZWRTdGF0ZSYmKG51bGwhPT0odD1lLmFsdGVybmF0ZSkmJm51bGwhPT10Lm1lbW9pemVkU3RhdGU/KHQ9b28sb289MTY3NzcyMTYsb2koZSksb289dCk6b2koZSkpfX1mdW5jdGlvbiBvcyhlKXt2YXIgdD1lLmFsdGVybmF0ZTtpZihudWxsIT09dCYmbnVsbCE9PShlPXQuY2hpbGQpKXt0LmNoaWxkPW51bGw7ZG8gdD1lLnNpYmxpbmcsZS5zaWJsaW5nPW51bGwsZT10O3doaWxlKG51bGwhPT1lKX19ZnVuY3Rpb24gb2MoZSl7dmFyIHQ9ZS5kZWxldGlvbnM7aWYoMCE9KDE2JmUuZmxhZ3MpKXtpZihudWxsIT09dClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTthVT1yLG9kKHIsZSl9b3MoZSl9aWYoMTAyNTYmZS5zdWJ0cmVlRmxhZ3MpZm9yKGU9ZS5jaGlsZDtudWxsIT09ZTspb2YoZSksZT1lLnNpYmxpbmd9ZnVuY3Rpb24gb2YoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1Om9jKGUpLDIwNDgmZS5mbGFncyYmYWooOSxlLGUucmV0dXJuKTticmVhaztjYXNlIDIyOnZhciB0PWUuc3RhdGVOb2RlO251bGwhPT1lLm1lbW9pemVkU3RhdGUmJjQmdC5fdmlzaWJpbGl0eSYmKG51bGw9PT1lLnJldHVybnx8MTMhPT1lLnJldHVybi50YWcpPyh0Ll92aXNpYmlsaXR5Jj0tNSxmdW5jdGlvbiBlKHQpe3ZhciBuPXQuZGVsZXRpb25zO2lmKDAhPSgxNiZ0LmZsYWdzKSl7aWYobnVsbCE9PW4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl07YVU9bCxvZChsLHQpfW9zKHQpfWZvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KXtzd2l0Y2goKG49dCkudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmFqKDgsbixuLnJldHVybiksZShuKTticmVhaztjYXNlIDIyOjQmKHI9bi5zdGF0ZU5vZGUpLl92aXNpYmlsaXR5JiYoci5fdmlzaWJpbGl0eSY9LTUsZShuKSk7YnJlYWs7ZGVmYXVsdDplKG4pfXQ9dC5zaWJsaW5nfX0oZSkpOm9jKGUpO2JyZWFrO2RlZmF1bHQ6b2MoZSl9fWZ1bmN0aW9uIG9kKGUsdCl7Zm9yKDtudWxsIT09YVU7KXt2YXIgbj1hVTtzd2l0Y2gobi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6YWooOCxuLHQpO2JyZWFrO2Nhc2UgMjM6Y2FzZSAyMjppZihudWxsIT09bi5tZW1vaXplZFN0YXRlJiZudWxsIT09bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCl7dmFyIHI9bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sO251bGwhPXImJnIucmVmQ291bnQrK31icmVhaztjYXNlIDI0OmFtKG4ubWVtb2l6ZWRTdGF0ZS5jYWNoZSl9aWYobnVsbCE9PShyPW4uY2hpbGQpKXIucmV0dXJuPW4sYVU9cjtlbHNlIGZvcihuPWU7bnVsbCE9PWFVOyl7dmFyIGw9KHI9YVUpLnNpYmxpbmcsYT1yLnJldHVybjtpZighZnVuY3Rpb24gZSh0KXt2YXIgbj10LmFsdGVybmF0ZTtudWxsIT09biYmKHQuYWx0ZXJuYXRlPW51bGwsZShuKSksdC5jaGlsZD1udWxsLHQuZGVsZXRpb25zPW51bGwsdC5zaWJsaW5nPW51bGwsNT09PXQudGFnJiZudWxsIT09KG49dC5zdGF0ZU5vZGUpJiZlRihuKSx0LnN0YXRlTm9kZT1udWxsLHQucmV0dXJuPW51bGwsdC5kZXBlbmRlbmNpZXM9bnVsbCx0Lm1lbW9pemVkUHJvcHM9bnVsbCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnBlbmRpbmdQcm9wcz1udWxsLHQuc3RhdGVOb2RlPW51bGwsdC51cGRhdGVRdWV1ZT1udWxsfShyKSxyPT09bil7YVU9bnVsbDticmVha31pZihudWxsIT09bCl7bC5yZXR1cm49YSxhVT1sO2JyZWFrfWFVPWF9fX12YXIgb3A9e2dldENhY2hlU2lnbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIGFvKGFkKS5jb250cm9sbGVyLnNpZ25hbH0sZ2V0Q2FjaGVGb3JUeXBlOmZ1bmN0aW9uKGUpe3ZhciB0PWFvKGFkKSxuPXQuZGF0YS5nZXQoZSk7cmV0dXJuIHZvaWQgMD09PW4mJihuPWUoKSx0LmRhdGEuc2V0KGUsbikpLG59fSxvbT0iZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcCxvaD1zLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsb2c9cy5SZWFjdEN1cnJlbnRDYWNoZSxveT1zLlJlYWN0Q3VycmVudE93bmVyLG92PXMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsb2I9MCxvaz1udWxsLG93PW51bGwsb1M9MCxvQz0wLG9FPW51bGwsb3g9ITEsb3o9MCxvUD0wLG9OPW51bGwsb189MCxvTD0wLG9UPTAsb0Y9MCxvTT1udWxsLG9PPW51bGwsb1I9ITEsb0Q9ITEsb0E9MCxvST0xLzAsb1U9bnVsbCxvQj0hMSxvVj1udWxsLG9RPW51bGwsbyQ9ITEsb2o9bnVsbCxvVz0wLG9IPTAsb3E9bnVsbCxvSz0wLG9ZPW51bGw7ZnVuY3Rpb24gb1goZSl7cmV0dXJuIDA9PSgxJmUubW9kZSk/MjowIT0oMiZvYikmJjAhPT1vUz9vUyYtb1M6bnVsbCE9PWFnKCk/MCE9PShlPW5QKT9lOm5FKCk6MCE9PShlPWVrKT9lOmU9dm9pZCAwPT09KGU9d2luZG93LmV2ZW50KT8zMjp1VShlLnR5cGUpfWZ1bmN0aW9uIG9HKGUsdCxuKXsoZT09PW9rJiYyPT09b0N8fG51bGwhPT1lLmNhbmNlbFBlbmRpbmdDb21taXQpJiYobzUoZSwwKSxvMyhlLG9TLG9GKSksbzIoZSxuKSwoMD09KDImb2IpfHxlIT09b2spJiYoZT09PW9rJiYoMD09KDImb2IpJiYob0x8PW4pLDQ9PT1vUCYmbzMoZSxvUyxvRikpLG52KGUpLDI9PT1uJiYwPT09b2ImJjA9PSgxJnQubW9kZSkmJihvST1ZKCkrNTAwLG5iKCEwKSkpfWZ1bmN0aW9uIG9aKGUsdCl7aWYoMCE9KDYmb2IpKXRocm93IEVycm9yKGkoMzI3KSk7dmFyIG49ZS5jYWxsYmFja05vZGU7aWYoaWQoKSYmZS5jYWxsYmFja05vZGUhPT1uKXJldHVybiBudWxsO3ZhciByPWVwKGUsZT09PW9rP29TOjApO2lmKDA9PT1yKXJldHVybiBudWxsO3ZhciBsPTA9PSg2MCZyKSYmMD09KHImZS5leHBpcmVkTGFuZXMpJiYhdDtpZigwIT09KHQ9bD9mdW5jdGlvbihlLHQpe3ZhciBuPW9iO29ifD0yO3ZhciByPWllKCksbD1pdCgpOyhvayE9PWV8fG9TIT09dCkmJihvVT1udWxsLG9JPVkoKSs1MDAsbzUoZSx0KSk7ZTpmb3IoOzspdHJ5e2lmKDAhPT1vQyYmbnVsbCE9PW93KXt0PW93O3ZhciBhPW9FO3Q6c3dpdGNoKG9DKXtjYXNlIDE6Y2FzZSA2Om9DPTAsb0U9bnVsbCxpaShlLHQsYSk7YnJlYWs7Y2FzZSAyOmlmKG5IKGEpKXtvQz0wLG9FPW51bGwsaW8odCk7YnJlYWt9dD1mdW5jdGlvbigpezI9PT1vQyYmb2s9PT1lJiYob0M9NyksbnYoZSl9LGEudGhlbih0LHQpO2JyZWFrIGU7Y2FzZSAzOm9DPTc7YnJlYWsgZTtjYXNlIDQ6b0M9NTticmVhayBlO2Nhc2UgNzpuSChhKT8ob0M9MCxvRT1udWxsLGlvKHQpKToob0M9MCxvRT1udWxsLGlpKGUsdCxhKSk7YnJlYWs7Y2FzZSA1OnN3aXRjaChvdy50YWcpe2Nhc2UgNTpjYXNlIDI2OmNhc2UgMjc6dD1vdyxvQz0wLG9FPW51bGw7dmFyIG89dC5zaWJsaW5nO2lmKG51bGwhPT1vKW93PW87ZWxzZXt2YXIgdT10LnJldHVybjtudWxsIT09dT8ob3c9dSxpdSh1KSk6b3c9bnVsbH1icmVhayB0fW9DPTAsb0U9bnVsbCxpaShlLHQsYSk7YnJlYWs7Y2FzZSA4Om84KCksb1A9NjticmVhayBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NjIpKX19IWZ1bmN0aW9uKCl7Zm9yKDtudWxsIT09b3cmJiFxKCk7KWlhKG93KX0oKTticmVha31jYXRjaCh0KXtvNyhlLHQpfXJldHVybihhZSgpLG9oLmN1cnJlbnQ9cixvZy5jdXJyZW50PWwsb2I9bixudWxsIT09b3cpPzA6KG9rPW51bGwsb1M9MCxubygpLG9QKX0oZSxyKTppbChlLHIpKSlmb3IodmFyIGE9bDs7KXtpZig2PT09dClvMyhlLHIsMCk7ZWxzZXtpZihsPWUuY3VycmVudC5hbHRlcm5hdGUsYSYmIWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lOzspe2lmKDE2Mzg0JnQuZmxhZ3Mpe3ZhciBuPXQudXBkYXRlUXVldWU7aWYobnVsbCE9PW4mJm51bGwhPT0obj1uLnN0b3JlcykpZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBsPW5bcl0sYT1sLmdldFNuYXBzaG90O2w9bC52YWx1ZTt0cnl7aWYoIXREKGEoKSxsKSlyZXR1cm4hMX1jYXRjaChlKXtyZXR1cm4hMX19fWlmKG49dC5jaGlsZCwxNjM4NCZ0LnN1YnRyZWVGbGFncyYmbnVsbCE9PW4pbi5yZXR1cm49dCx0PW47ZWxzZXtpZih0PT09ZSlicmVhaztmb3IoO251bGw9PT10LnNpYmxpbmc7KXtpZihudWxsPT09dC5yZXR1cm58fHQucmV0dXJuPT09ZSlyZXR1cm4hMDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9fXJldHVybiEwfShsKSl7dD1pbChlLHIpLGE9ITE7Y29udGludWV9aWYoMj09PXQpe3ZhciBvPWVtKGUsYT1yKTswIT09byYmKHI9byx0PW9KKGUsYSxvKSl9aWYoMT09PXQpdGhyb3cgbj1vTixvNShlLDApLG8zKGUsciwwKSxudihlKSxuO2UuZmluaXNoZWRXb3JrPWwsZS5maW5pc2hlZExhbmVzPXI7ZTp7c3dpdGNoKGE9ZSx0KXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKGkoMzQ1KSk7Y2FzZSA0OmlmKCg0MTk0MTc2JnIpPT09cil7bzMoYSxyLG9GKTticmVhayBlfWJyZWFrO2Nhc2UgMjpjYXNlIDM6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSgzMjkpKX1pZigoNjI5MTQ1NjAmcik9PT1yJiYxMDwodD1vQSszMDAtWSgpKSl7aWYobzMoYSxyLG9GKSwwIT09ZXAoYSwwKSlicmVhayBlO2EudGltZW91dEhhbmRsZT1zOChvMS5iaW5kKG51bGwsYSxsLG9PLG9VLG9SLHIsb0YpLHQpO2JyZWFrIGV9bzEoYSxsLG9PLG9VLG9SLHIsb0YpfX1icmVha31yZXR1cm4gbnYoZSksblMoZSxZKCkpLGU9ZS5jYWxsYmFja05vZGU9PT1uP29aLmJpbmQobnVsbCxlKTpudWxsfWZ1bmN0aW9uIG9KKGUsdCxuKXt2YXIgcj1vTSxsPWUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZDtpZihsJiYobzUoZSxuKS5mbGFnc3w9MjU2KSwyIT09KG49aWwoZSxuKSkpe2lmKG94JiYhbClyZXR1cm4gZS5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lc3w9dCxvTHw9dCw0O2U9b08sb089cixudWxsIT09ZSYmbzAoZSl9cmV0dXJuIG59ZnVuY3Rpb24gbzAoZSl7bnVsbD09PW9PP29PPWU6b08ucHVzaC5hcHBseShvTyxlKX1mdW5jdGlvbiBvMShlLHQsbixyLGwsYSxvKXtpZigwPT0oNDImYSkmJihjej17c3R5bGVzaGVldHM6bnVsbCxjb3VudDowLHVuc3VzcGVuZDpjUH0sb3UodCksbnVsbCE9PSh0PWZ1bmN0aW9uKCl7aWYobnVsbD09PWN6KXRocm93IEVycm9yKGkoNDc1KSk7dmFyIGU9Y3o7cmV0dXJuIGUuc3R5bGVzaGVldHMmJjA9PT1lLmNvdW50JiZjTChlLGUuc3R5bGVzaGVldHMpLDA8ZS5jb3VudD9mdW5jdGlvbih0KXt2YXIgbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoZS5zdHlsZXNoZWV0cyYmY0woZSxlLnN0eWxlc2hlZXRzKSxlLnVuc3VzcGVuZCl7dmFyIHQ9ZS51bnN1c3BlbmQ7ZS51bnN1c3BlbmQ9bnVsbCx0KCl9fSw2ZTQpO3JldHVybiBlLnVuc3VzcGVuZD10LGZ1bmN0aW9uKCl7ZS51bnN1c3BlbmQ9bnVsbCxjbGVhclRpbWVvdXQobil9fTpudWxsfSgpKSkpe2UuY2FuY2VsUGVuZGluZ0NvbW1pdD10KGlzLmJpbmQobnVsbCxlLG4scixsKSksbzMoZSxhLG8pO3JldHVybn1pcyhlLG4scixsLG8pfWZ1bmN0aW9uIG8yKGUsdCl7ZS5wZW5kaW5nTGFuZXN8PXQsMjY4NDM1NDU2IT09dCYmKGUuc3VzcGVuZGVkTGFuZXM9MCxlLnBpbmdlZExhbmVzPTApLDImb2I/b1I9ITA6NCZvYiYmKG9EPSEwKSxpaygpfWZ1bmN0aW9uIG8zKGUsdCxuKXt0Jj1+b1QsdCY9fm9MLGUuc3VzcGVuZGVkTGFuZXN8PXQsZS5waW5nZWRMYW5lcyY9fnQ7Zm9yKHZhciByPWUuZXhwaXJhdGlvblRpbWVzLGw9dDswPGw7KXt2YXIgYT0zMS1laShsKSxvPTE8PGE7clthXT0tMSxsJj1+b30wIT09biYmZXYoZSxuLHQpfWZ1bmN0aW9uIG80KGUsdCl7dmFyIG49b2I7b2J8PTE7dHJ5e3JldHVybiBlKHQpfWZpbmFsbHl7MD09PShvYj1uKSYmKG9JPVkoKSs1MDAsbmIoITApKX19ZnVuY3Rpb24gbzYoZSl7bnVsbCE9PW9qJiYwPT09b2oudGFnJiYwPT0oNiZvYikmJmlkKCk7dmFyIHQ9b2I7b2J8PTE7dmFyIG49b3YudHJhbnNpdGlvbixyPWVrO3RyeXtpZihvdi50cmFuc2l0aW9uPW51bGwsZWs9MixlKXJldHVybiBlKCl9ZmluYWxseXtlaz1yLG92LnRyYW5zaXRpb249biwwPT0oNiYob2I9dCkpJiZuYighMSl9fWZ1bmN0aW9uIG84KCl7aWYobnVsbCE9PW93KXtpZigwPT09b0MpdmFyIGU9b3cucmV0dXJuO2Vsc2UgZT1vdyxhZSgpLHJMKGUpLG5HPW51bGwsblo9MCxlPW93O2Zvcig7bnVsbCE9PWU7KWFOKGUuYWx0ZXJuYXRlLGUpLGU9ZS5yZXR1cm47b3c9bnVsbH19ZnVuY3Rpb24gbzUoZSx0KXtlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wO3ZhciBuPWUudGltZW91dEhhbmRsZTstMSE9PW4mJihlLnRpbWVvdXRIYW5kbGU9LTEsczUobikpLG51bGwhPT0obj1lLmNhbmNlbFBlbmRpbmdDb21taXQpJiYoZS5jYW5jZWxQZW5kaW5nQ29tbWl0PW51bGwsbigpKSxvOCgpLG9rPWUsb3c9bj1pRShlLmN1cnJlbnQsbnVsbCksb1M9dCxvQz0wLG9FPW51bGwsb3g9ITEsb1A9MCxvTj1udWxsLG9GPW9UPW9MPW9fPTAsb089b009bnVsbCxvUj0hMSwwIT0oOCZ0KSYmKHR8PTMyJnQpO3ZhciByPWUuZW50YW5nbGVkTGFuZXM7aWYoMCE9PXIpZm9yKGU9ZS5lbnRhbmdsZW1lbnRzLHImPXQ7MDxyOyl7dmFyIGw9MzEtZWkociksYT0xPDxsO3R8PWVbbF0sciY9fmF9cmV0dXJuIG96PXQsbm8oKSxufWZ1bmN0aW9uIG83KGUsdCl7cmQ9bnVsbCxycy5jdXJyZW50PWxoLG95LmN1cnJlbnQ9bnVsbCx0PT09biQ/KHQ9blgoKSxvQz1vOSgpJiYwPT0oMTM0MjE3NzI3Jm9fKSYmMD09KDEzNDIxNzcyNyZvTCk/MjozKTp0PT09bmo/KHQ9blgoKSxvQz00KTpvQz10PT09bE8/ODpudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVuPzY6MSxvRT10LG51bGw9PT1vdyYmKG9QPTEsb049dCl9ZnVuY3Rpb24gbzkoKXt2YXIgZT1ydC5jdXJyZW50O3JldHVybiBudWxsPT09ZXx8KCg0MTk0MTc2Jm9TKT09PW9TP251bGw9PT1ybjooKDYyOTE0NTYwJm9TKT09PW9TfHwwIT0oNTM2ODcwOTEyJm9TKSkmJmU9PT1ybil9ZnVuY3Rpb24gaWUoKXt2YXIgZT1vaC5jdXJyZW50O3JldHVybiBvaC5jdXJyZW50PWxoLG51bGw9PT1lP2xoOmV9ZnVuY3Rpb24gaXQoKXt2YXIgZT1vZy5jdXJyZW50O3JldHVybiBvZy5jdXJyZW50PW9wLGV9ZnVuY3Rpb24gaXIoKXtvUD00LDA9PSgxMzQyMTc3Mjcmb18pJiYwPT0oMTM0MjE3NzI3Jm9MKXx8bnVsbD09PW9rfHxvMyhvayxvUyxvRil9ZnVuY3Rpb24gaWwoZSx0KXt2YXIgbj1vYjtvYnw9Mjt2YXIgcj1pZSgpLGw9aXQoKTsob2shPT1lfHxvUyE9PXQpJiYob1U9bnVsbCxvNShlLHQpKSx0PSExO2U6Zm9yKDs7KXRyeXtpZigwIT09b0MmJm51bGwhPT1vdyl7dmFyIGE9b3csbz1vRTtzd2l0Y2gob0Mpe2Nhc2UgODpvOCgpLG9QPTY7YnJlYWsgZTtjYXNlIDM6Y2FzZSAyOnR8fG51bGwhPT1ydC5jdXJyZW50fHwodD0hMCk7ZGVmYXVsdDpvQz0wLG9FPW51bGwsaWkoZSxhLG8pfX0hZnVuY3Rpb24oKXtmb3IoO251bGwhPT1vdzspaWEob3cpfSgpO2JyZWFrfWNhdGNoKHQpe283KGUsdCl9aWYodCYmZS5zaGVsbFN1c3BlbmRDb3VudGVyKyssYWUoKSxvYj1uLG9oLmN1cnJlbnQ9cixvZy5jdXJyZW50PWwsbnVsbCE9PW93KXRocm93IEVycm9yKGkoMjYxKSk7cmV0dXJuIG9rPW51bGwsb1M9MCxubygpLG9QfWZ1bmN0aW9uIGlhKGUpe3ZhciB0PWlaKGUuYWx0ZXJuYXRlLGUsb3opO2UubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyxudWxsPT09dD9pdShlKTpvdz10LG95LmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBpbyhlKXt2YXIgdD1lLmFsdGVybmF0ZTtzd2l0Y2goZS50YWcpe2Nhc2UgMjplLnRhZz0wO2Nhc2UgMTU6Y2FzZSAwOnZhciBuPWUudHlwZSxyPWUucGVuZGluZ1Byb3BzO3I9ZS5lbGVtZW50VHlwZT09PW4/cjpsYihuLHIpO3ZhciBsPXRMKG4pP3ROOnR6LmN1cnJlbnQ7bD10XyhlLGwpLHQ9bGoodCxlLHIsbixsLG9TKTticmVhaztjYXNlIDExOm49ZS50eXBlLnJlbmRlcixyPWUucGVuZGluZ1Byb3BzLHI9ZS5lbGVtZW50VHlwZT09PW4/cjpsYihuLHIpLHQ9bGoodCxlLHIsbixlLnJlZixvUyk7YnJlYWs7Y2FzZSA1OnJMKGUpO2RlZmF1bHQ6YU4odCxlKSxlPW93PWl4KGUsb3opLHQ9aVoodCxlLG96KX1lLm1lbW9pemVkUHJvcHM9ZS5wZW5kaW5nUHJvcHMsbnVsbD09PXQ/aXUoZSk6b3c9dCxveS5jdXJyZW50PW51bGx9ZnVuY3Rpb24gaWkoZSx0LG4pe2FlKCksckwodCksbkc9bnVsbCxuWj0wO3ZhciByPXQucmV0dXJuO3RyeXtpZihmdW5jdGlvbihlLHQsbixyLGwpe2lmKG4uZmxhZ3N8PTMyNzY4LG51bGwhPT1yJiYib2JqZWN0Ij09dHlwZW9mIHImJiJmdW5jdGlvbiI9PXR5cGVvZiByLnRoZW4pe3ZhciBhPW4udGFnO2lmKDAhPSgxJm4ubW9kZSl8fDAhPT1hJiYxMSE9PWEmJjE1IT09YXx8KChhPW4uYWx0ZXJuYXRlKT8obi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLG4ubWVtb2l6ZWRTdGF0ZT1hLm1lbW9pemVkU3RhdGUsbi5sYW5lcz1hLmxhbmVzKToobi51cGRhdGVRdWV1ZT1udWxsLG4ubWVtb2l6ZWRTdGF0ZT1udWxsKSksbnVsbCE9PShhPXJ0LmN1cnJlbnQpKXtzd2l0Y2goYS50YWcpe2Nhc2UgMTM6cmV0dXJuIDEmbi5tb2RlJiYobnVsbD09PXJuP2lyKCk6bnVsbD09PWEuYWx0ZXJuYXRlJiYwPT09b1AmJihvUD0zKSksYS5mbGFncyY9LTI1NyxsRihhLHQsbixlLGwpLHI9PT1uVz9hLmZsYWdzfD0xNjM4NDoobnVsbD09PSh0PWEudXBkYXRlUXVldWUpP2EudXBkYXRlUXVldWU9bmV3IFNldChbcl0pOnQuYWRkKHIpLDEmYS5tb2RlJiZpaChlLHIsbCkpLCExO2Nhc2UgMjI6aWYoMSZhLm1vZGUpcmV0dXJuIGEuZmxhZ3N8PTY1NTM2LHI9PT1uVz9hLmZsYWdzfD0xNjM4NDoobnVsbD09PSh0PWEudXBkYXRlUXVldWUpPyh0PXt0cmFuc2l0aW9uczpudWxsLG1hcmtlckluc3RhbmNlczpudWxsLHJldHJ5UXVldWU6bmV3IFNldChbcl0pfSxhLnVwZGF0ZVF1ZXVlPXQpOm51bGw9PT0obj10LnJldHJ5UXVldWUpP3QucmV0cnlRdWV1ZT1uZXcgU2V0KFtyXSk6bi5hZGQociksaWgoZSxyLGwpKSwhMX10aHJvdyBFcnJvcihpKDQzNSxhLnRhZykpfWlmKDE9PT1lLnRhZylyZXR1cm4gaWgoZSxyLGwpLGlyKCksITE7cj1FcnJvcihpKDQyNikpfWlmKHRaJiYxJm4ubW9kZSYmbnVsbCE9PShhPXJ0LmN1cnJlbnQpKXJldHVybiAwPT0oNjU1MzYmYS5mbGFncykmJihhLmZsYWdzfD0yNTYpLGxGKGEsdCxuLGUsbCksbm4obFAocixuKSksITE7aWYoZT1yPWxQKHIsbiksNCE9PW9QJiYob1A9MiksbnVsbD09PW9NP29NPVtlXTpvTS5wdXNoKGUpLG51bGw9PT10KXJldHVybiEwO2U9dDtkb3tzd2l0Y2goZS50YWcpe2Nhc2UgMzpyZXR1cm4gZS5mbGFnc3w9NjU1MzYsbCY9LWwsZS5sYW5lc3w9bCxsPWxMKGUscixsKSxuRChlLGwpLCExO2Nhc2UgMTppZih0PXIsbj1lLnR5cGUsYT1lLnN0YXRlTm9kZSwwPT0oMTI4JmUuZmxhZ3MpJiYoImZ1bmN0aW9uIj09dHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxudWxsIT09YSYmImZ1bmN0aW9uIj09dHlwZW9mIGEuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09b1F8fCFvUS5oYXMoYSkpKSlyZXR1cm4gZS5mbGFnc3w9NjU1MzYsbCY9LWwsZS5sYW5lc3w9bCxsPWxUKGUsdCxsKSxuRChlLGwpLCExfWU9ZS5yZXR1cm59d2hpbGUobnVsbCE9PWUpO3JldHVybiExfShlLHIsdCxuLG9TKSl7b1A9MSxvTj1uLG93PW51bGw7cmV0dXJufX1jYXRjaChlKXtpZihudWxsIT09cil0aHJvdyBvdz1yLGU7b1A9MSxvTj1uLG93PW51bGw7cmV0dXJufWlmKDMyNzY4JnQuZmxhZ3MpZTp7ZT10O2Rve2lmKG51bGwhPT0odD1mdW5jdGlvbihlLHQpe3N3aXRjaCh0WSh0KSx0LnRhZyl7Y2FzZSAxOnJldHVybiB0TCh0LnR5cGUpJiZ0VCgpLDY1NTM2JihlPXQuZmxhZ3MpPyh0LmZsYWdzPS02NTUzNyZlfDEyOCx0KTpudWxsO2Nhc2UgMzpyZXR1cm4gYW4oYWQpLFEoKSxoKHRQKSxoKHR6KSwwIT0oNjU1MzYmKGU9dC5mbGFncykpJiYwPT0oMTI4JmUpPyh0LmZsYWdzPS02NTUzNyZlfDEyOCx0KTpudWxsO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIGoodCksbnVsbDtjYXNlIDEzOmlmKHJvKHQpLG51bGwhPT0oZT10Lm1lbW9pemVkU3RhdGUpJiZudWxsIT09ZS5kZWh5ZHJhdGVkKXtpZihudWxsPT09dC5hbHRlcm5hdGUpdGhyb3cgRXJyb3IoaSgzNDApKTtudCgpfXJldHVybiA2NTUzNiYoZT10LmZsYWdzKT8odC5mbGFncz0tNjU1MzcmZXwxMjgsdCk6bnVsbDtjYXNlIDE5OnJldHVybiBoKHJpKSxudWxsO2Nhc2UgNDpyZXR1cm4gUSgpLG51bGw7Y2FzZSAxMDpyZXR1cm4gYW4odC50eXBlLl9jb250ZXh0KSxudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gcm8odCkscmUoKSxudWxsIT09ZSYmaChhYiksNjU1MzYmKGU9dC5mbGFncyk/KHQuZmxhZ3M9LTY1NTM3JmV8MTI4LHQpOm51bGw7Y2FzZSAyNDpyZXR1cm4gYW4oYWQpLG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19KGUuYWx0ZXJuYXRlLGUpKSl7dC5mbGFncyY9MzI3Njcsb3c9dDticmVhayBlfW51bGwhPT0oZT1lLnJldHVybikmJihlLmZsYWdzfD0zMjc2OCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGwpLG93PWV9d2hpbGUobnVsbCE9PWUpO29QPTYsb3c9bnVsbH1lbHNlIGl1KHQpfWZ1bmN0aW9uIGl1KGUpe3ZhciB0PWU7ZG97ZT10LnJldHVybjt2YXIgbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHM7c3dpdGNoKHRZKHQpLHQudGFnKXtjYXNlIDI6Y2FzZSAxNjpjYXNlIDE1OmNhc2UgMDpjYXNlIDExOmNhc2UgNzpjYXNlIDg6Y2FzZSAxMjpjYXNlIDk6Y2FzZSAxNDpyZXR1cm4gYVAodCksbnVsbDtjYXNlIDE6Y2FzZSAxNzpyZXR1cm4gdEwodC50eXBlKSYmdFQoKSxhUCh0KSxudWxsO2Nhc2UgMzpyZXR1cm4gbj10LnN0YXRlTm9kZSxyPW51bGwsbnVsbCE9PWUmJihyPWUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksdC5tZW1vaXplZFN0YXRlLmNhY2hlIT09ciYmKHQuZmxhZ3N8PTIwNDgpLGFuKGFkKSxRKCksaCh0UCksaCh0eiksbi5wZW5kaW5nQ29udGV4dCYmKG4uY29udGV4dD1uLnBlbmRpbmdDb250ZXh0LG4ucGVuZGluZ0NvbnRleHQ9bnVsbCksKG51bGw9PT1lfHxudWxsPT09ZS5jaGlsZCkmJih0OSh0KT9hQyh0KTpudWxsPT09ZXx8ZS5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmMD09KDI1NiZ0LmZsYWdzKXx8KHQuZmxhZ3N8PTEwMjQsbnVsbCE9PXRKJiYobzAodEopLHRKPW51bGwpKSksYVAodCksbnVsbDtjYXNlIDI2OmlmKG49dC5tZW1vaXplZFN0YXRlLG51bGw9PT1lKWFDKHQpLG51bGwhPT1uPyhhUCh0KSxhRSh0LG4pKTooYVAodCksdC5mbGFncyY9LTE2Nzc3MjE3KTtlbHNle3ZhciBsPWUubWVtb2l6ZWRTdGF0ZTtuIT09bCYmYUModCksbnVsbCE9PW4/KGFQKHQpLG49PT1sP3QuZmxhZ3MmPS0xNjc3NzIxNzphRSh0LG4pKTooZS5tZW1vaXplZFByb3BzIT09ciYmYUModCksYVAodCksdC5mbGFncyY9LTE2Nzc3MjE3KX1yZXR1cm4gbnVsbDtjYXNlIDI3OmlmKGoodCksbj1JLmN1cnJlbnQsbD10LnR5cGUsbnVsbCE9PWUmJm51bGwhPXQuc3RhdGVOb2RlKWUubWVtb2l6ZWRQcm9wcyE9PXImJmFDKHQpO2Vsc2V7aWYoIXIpe2lmKG51bGw9PT10LnN0YXRlTm9kZSl0aHJvdyBFcnJvcihpKDE2NikpO3JldHVybiBhUCh0KSxudWxsfWU9RC5jdXJyZW50LHQ5KHQpP2NvKHQuc3RhdGVOb2RlLHQudHlwZSx0Lm1lbW9pemVkUHJvcHMsZSx0KTooZT1jdShsLHIsbiksdC5zdGF0ZU5vZGU9ZSxhQyh0KSl9cmV0dXJuIGFQKHQpLG51bGw7Y2FzZSA1OmlmKGoodCksbj10LnR5cGUsbnVsbCE9PWUmJm51bGwhPXQuc3RhdGVOb2RlKWUubWVtb2l6ZWRQcm9wcyE9PXImJmFDKHQpO2Vsc2V7aWYoIXIpe2lmKG51bGw9PT10LnN0YXRlTm9kZSl0aHJvdyBFcnJvcihpKDE2NikpO3JldHVybiBhUCh0KSxudWxsfWlmKGU9RC5jdXJyZW50LHQ5KHQpKWNvKHQuc3RhdGVOb2RlLHQudHlwZSx0Lm1lbW9pemVkUHJvcHMsZSx0KTtlbHNle3N3aXRjaChsPXMxKEkuY3VycmVudCksZSl7Y2FzZSAxOmU9bC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixuKTticmVhaztjYXNlIDI6ZT1sLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsbik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2gobil7Y2FzZSJzdmciOmU9bC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixuKTticmVhaztjYXNlIm1hdGgiOmU9bC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLG4pO2JyZWFrO2Nhc2Uic2NyaXB0IjooZT1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pbm5lckhUTUw9IjxzY3JpcHQ+PC9zY3JpcHQ+IixlPWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTticmVhaztjYXNlInNlbGVjdCI6ZT0ic3RyaW5nIj09dHlwZW9mIHIuaXM/bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiLHtpczpyLmlzfSk6bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxyLm11bHRpcGxlP2UubXVsdGlwbGU9ITA6ci5zaXplJiYoZS5zaXplPXIuc2l6ZSk7YnJlYWs7ZGVmYXVsdDplPSJzdHJpbmciPT10eXBlb2Ygci5pcz9sLmNyZWF0ZUVsZW1lbnQobix7aXM6ci5pc30pOmwuY3JlYXRlRWxlbWVudChuKX19ZVtlRV09dCxlW2V4XT1yO2U6Zm9yKGw9dC5jaGlsZDtudWxsIT09bDspe2lmKDU9PT1sLnRhZ3x8Nj09PWwudGFnKWUuYXBwZW5kQ2hpbGQobC5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWwudGFnJiYyNyE9PWwudGFnJiZudWxsIT09bC5jaGlsZCl7bC5jaGlsZC5yZXR1cm49bCxsPWwuY2hpbGQ7Y29udGludWV9aWYobD09PXQpYnJlYWs7Zm9yKDtudWxsPT09bC5zaWJsaW5nOyl7aWYobnVsbD09PWwucmV0dXJufHxsLnJldHVybj09PXQpYnJlYWsgZTtsPWwucmV0dXJufWwuc2libGluZy5yZXR1cm49bC5yZXR1cm4sbD1sLnNpYmxpbmd9c3dpdGNoKHQuc3RhdGVOb2RlPWUsc0coZSxuLHIpLG4pe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6ZT0hIXIuYXV0b0ZvY3VzO2JyZWFrO2Nhc2UiaW1nIjplPSEwO2JyZWFrO2RlZmF1bHQ6ZT0hMX1lJiZhQyh0KX19cmV0dXJuIGFQKHQpLHQuZmxhZ3MmPS0xNjc3NzIxNyxudWxsO2Nhc2UgNjppZihlJiZudWxsIT10LnN0YXRlTm9kZSllLm1lbW9pemVkUHJvcHMhPT1yJiZhQyh0KTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2YgciYmbnVsbD09PXQuc3RhdGVOb2RlKXRocm93IEVycm9yKGkoMTY2KSk7aWYoZT1JLmN1cnJlbnQsdDkodCkpe2U6e2lmKGU9dC5zdGF0ZU5vZGUsbj10Lm1lbW9pemVkUHJvcHMsZVtlRV09dCwocj1lLm5vZGVWYWx1ZSE9PW4pJiZudWxsIT09KGw9dFgpKXN3aXRjaChsLnRhZyl7Y2FzZSAzOmlmKGw9MCE9KDEmbC5tb2RlKSxzcShlLm5vZGVWYWx1ZSxuLGwpLGwpe2U9ITE7YnJlYWsgZX1icmVhaztjYXNlIDI3OmNhc2UgNTp2YXIgYT0wIT0oMSZsLm1vZGUpO2lmKCEwIT09bC5tZW1vaXplZFByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyYmc3EoZS5ub2RlVmFsdWUsbixhKSxhKXtlPSExO2JyZWFrIGV9fWU9cn1lJiZhQyh0KX1lbHNlKGU9czEoZSkuY3JlYXRlVGV4dE5vZGUocikpW2VFXT10LHQuc3RhdGVOb2RlPWV9cmV0dXJuIGFQKHQpLG51bGw7Y2FzZSAxMzppZihybyh0KSxyPXQubWVtb2l6ZWRTdGF0ZSxudWxsPT09ZXx8bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkKXtpZih0WiYmbnVsbCE9PXRHJiYwIT0oMSZ0Lm1vZGUpJiYwPT0oMTI4JnQuZmxhZ3MpKW5lKCksbnQoKSx0LmZsYWdzfD0zODQsbD0hMTtlbHNlIGlmKGw9dDkodCksbnVsbCE9PXImJm51bGwhPT1yLmRlaHlkcmF0ZWQpe2lmKG51bGw9PT1lKXtpZighbCl0aHJvdyBFcnJvcihpKDMxOCkpO2lmKCEobD1udWxsIT09KGw9dC5tZW1vaXplZFN0YXRlKT9sLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IoaSgzMTcpKTtsW2VFXT10fWVsc2UgbnQoKSwwPT0oMTI4JnQuZmxhZ3MpJiYodC5tZW1vaXplZFN0YXRlPW51bGwpLHQuZmxhZ3N8PTQ7YVAodCksbD0hMX1lbHNlIG51bGwhPT10SiYmKG8wKHRKKSx0Sj1udWxsKSxsPSEwO2lmKCFsKXJldHVybiAyNTYmdC5mbGFncz90Om51bGx9aWYoMCE9KDEyOCZ0LmZsYWdzKSlyZXR1cm4gdC5sYW5lcz1uLHQ7cmV0dXJuIG49bnVsbCE9PXIsZT1udWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSxuJiYocj10LmNoaWxkLGw9bnVsbCxudWxsIT09ci5hbHRlcm5hdGUmJm51bGwhPT1yLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihsPXIuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGE9bnVsbCxudWxsIT09ci5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKGE9ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxhIT09bCYmKHIuZmxhZ3N8PTIwNDgpKSxuIT09ZSYmbiYmKHQuY2hpbGQuZmxhZ3N8PTgxOTIpLGF4KHQsdC51cGRhdGVRdWV1ZSksYVAodCksbnVsbDtjYXNlIDQ6cmV0dXJuIFEoKSxudWxsPT09ZSYmc0EodC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksYVAodCksbnVsbDtjYXNlIDEwOnJldHVybiBhbih0LnR5cGUuX2NvbnRleHQpLGFQKHQpLG51bGw7Y2FzZSAxOTppZihoKHJpKSxudWxsPT09KGw9dC5tZW1vaXplZFN0YXRlKSlyZXR1cm4gYVAodCksbnVsbDtpZihyPTAhPSgxMjgmdC5mbGFncyksbnVsbD09PShhPWwucmVuZGVyaW5nKSl7aWYocilheihsLCExKTtlbHNle2lmKDAhPT1vUHx8bnVsbCE9PWUmJjAhPSgxMjgmZS5mbGFncykpZm9yKGU9dC5jaGlsZDtudWxsIT09ZTspe2lmKG51bGwhPT0oYT1ydShlKSkpe2Zvcih0LmZsYWdzfD0xMjgsYXoobCwhMSksZT1hLnVwZGF0ZVF1ZXVlLHQudXBkYXRlUXVldWU9ZSxheCh0LGUpLHQuc3VidHJlZUZsYWdzPTAsZT1uLG49dC5jaGlsZDtudWxsIT09bjspaXgobixlKSxuPW4uc2libGluZztyZXR1cm4gZyhyaSwxJnJpLmN1cnJlbnR8MiksdC5jaGlsZH1lPWUuc2libGluZ31udWxsIT09bC50YWlsJiZZKCk+b0kmJih0LmZsYWdzfD0xMjgscj0hMCxheihsLCExKSx0LmxhbmVzPTQxOTQzMDQpfX1lbHNle2lmKCFyKXtpZihudWxsIT09KGU9cnUoYSkpKXtpZih0LmZsYWdzfD0xMjgscj0hMCxlPWUudXBkYXRlUXVldWUsdC51cGRhdGVRdWV1ZT1lLGF4KHQsZSksYXoobCwhMCksbnVsbD09PWwudGFpbCYmImhpZGRlbiI9PT1sLnRhaWxNb2RlJiYhYS5hbHRlcm5hdGUmJiF0WilyZXR1cm4gYVAodCksbnVsbH1lbHNlIDIqWSgpLWwucmVuZGVyaW5nU3RhcnRUaW1lPm9JJiY1MzY4NzA5MTIhPT1uJiYodC5mbGFnc3w9MTI4LHI9ITAsYXoobCwhMSksdC5sYW5lcz00MTk0MzA0KX1sLmlzQmFja3dhcmRzPyhhLnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPWEpOihudWxsIT09KGU9bC5sYXN0KT9lLnNpYmxpbmc9YTp0LmNoaWxkPWEsbC5sYXN0PWEpfWlmKG51bGwhPT1sLnRhaWwpcmV0dXJuIHQ9bC50YWlsLGwucmVuZGVyaW5nPXQsbC50YWlsPXQuc2libGluZyxsLnJlbmRlcmluZ1N0YXJ0VGltZT1ZKCksdC5zaWJsaW5nPW51bGwsZT1yaS5jdXJyZW50LGcocmkscj8xJmV8MjoxJmUpLHQ7cmV0dXJuIGFQKHQpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBybyh0KSxyZSgpLHI9bnVsbCE9PXQubWVtb2l6ZWRTdGF0ZSxudWxsIT09ZT9udWxsIT09ZS5tZW1vaXplZFN0YXRlIT09ciYmKHQuZmxhZ3N8PTgxOTIpOnImJih0LmZsYWdzfD04MTkyKSxyJiYwIT0oMSZ0Lm1vZGUpPzAhPSg1MzY4NzA5MTImbikmJjA9PSgxMjgmdC5mbGFncykmJihhUCh0KSw2JnQuc3VidHJlZUZsYWdzJiYodC5mbGFnc3w9ODE5MikpOmFQKHQpLG51bGwhPT0obj10LnVwZGF0ZVF1ZXVlKSYmYXgodCxuLnJldHJ5UXVldWUpLG49bnVsbCxudWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihuPWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCkscj1udWxsLG51bGwhPT10Lm1lbW9pemVkU3RhdGUmJm51bGwhPT10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYocj10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLHIhPT1uJiYodC5mbGFnc3w9MjA0OCksbnVsbCE9PWUmJmgoYWIpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbj1udWxsLG51bGwhPT1lJiYobj1lLm1lbW9pemVkU3RhdGUuY2FjaGUpLHQubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PW4mJih0LmZsYWdzfD0yMDQ4KSxhbihhZCksYVAodCksbnVsbDtjYXNlIDI1OnJldHVybiBudWxsfXRocm93IEVycm9yKGkoMTU2LHQudGFnKSl9KHQuYWx0ZXJuYXRlLHQsb3opO2lmKG51bGwhPT1uKXtvdz1uO3JldHVybn1pZihudWxsIT09KHQ9dC5zaWJsaW5nKSl7b3c9dDtyZXR1cm59b3c9dD1lfXdoaWxlKG51bGwhPT10KTswPT09b1AmJihvUD01KX1mdW5jdGlvbiBpcyhlLHQsbixyLGwpe3ZhciBhPWVrLG89b3YudHJhbnNpdGlvbjt0cnl7b3YudHJhbnNpdGlvbj1udWxsLGVrPTIsZnVuY3Rpb24oZSx0LG4scixsLGEpe2RvIGlkKCk7d2hpbGUobnVsbCE9PW9qKTtpZigwIT0oNiZvYikpdGhyb3cgRXJyb3IoaSgzMjcpKTt2YXIgbyx1PWUuZmluaXNoZWRXb3JrLHM9ZS5maW5pc2hlZExhbmVzO2lmKG51bGwhPT11KXtpZihlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wLHU9PT1lLmN1cnJlbnQpdGhyb3cgRXJyb3IoaSgxNzcpKTtlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wLGUuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsO3ZhciBjPXUubGFuZXN8dS5jaGlsZExhbmVzO2lmKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLnBlbmRpbmdMYW5lcyZ+dDtlLnBlbmRpbmdMYW5lcz10LGUuc3VzcGVuZGVkTGFuZXM9MCxlLnBpbmdlZExhbmVzPTAsZS5leHBpcmVkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCxlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJj10LGUuc2hlbGxTdXNwZW5kQ291bnRlcj0wLHQ9ZS5lbnRhbmdsZW1lbnRzO2Zvcih2YXIgbD1lLmV4cGlyYXRpb25UaW1lcyxhPWUuaGlkZGVuVXBkYXRlczswPHI7KXt2YXIgbz0zMS1laShyKSxpPTE8PG87dFtvXT0wLGxbb109LTE7dmFyIHU9YVtvXTtpZihudWxsIT09dSlmb3IoYVtvXT1udWxsLG89MDtvPHUubGVuZ3RoO28rKyl7dmFyIHM9dVtvXTtudWxsIT09cyYmKHMubGFuZSY9LTUzNjg3MDkxMyl9ciY9fml9MCE9PW4mJmV2KGUsbiwwKX0oZSxjfD1uYSxhKSxvRD0hMSxlPT09b2smJihvdz1vaz1udWxsLG9TPTApLDA9PSgxMDI1NiZ1LnN1YnRyZWVGbGFncykmJjA9PSgxMDI1NiZ1LmZsYWdzKXx8byR8fChvJD0hMCxvSD1jLG9xPW4sbz1mdW5jdGlvbigpe3JldHVybiBpZCgpLG51bGx9LFcoSixvKSksbj0wIT0oMTU5OTAmdS5mbGFncyksMCE9KDE1OTkwJnUuc3VidHJlZUZsYWdzKXx8bil7bj1vdi50cmFuc2l0aW9uLG92LnRyYW5zaXRpb249bnVsbCxhPWVrLGVrPTI7dmFyIGY9b2I7b2J8PTQsb3kuY3VycmVudD1udWxsLGZ1bmN0aW9uKGUsdCl7aWYoc0o9dUYsc3MoZT1zdSgpKSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIGUpdmFyIG49e3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGU6e3ZhciByPShuPShuPWUub3duZXJEb2N1bWVudCkmJm4uZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uJiZuLmdldFNlbGVjdGlvbigpO2lmKHImJjAhPT1yLnJhbmdlQ291bnQpe249ci5hbmNob3JOb2RlO3ZhciBsLGE9ci5hbmNob3JPZmZzZXQsbz1yLmZvY3VzTm9kZTtyPXIuZm9jdXNPZmZzZXQ7dHJ5e24ubm9kZVR5cGUsby5ub2RlVHlwZX1jYXRjaChlKXtuPW51bGw7YnJlYWsgZX12YXIgdT0wLHM9LTEsYz0tMSxmPTAsZD0wLHA9ZSxtPW51bGw7dDpmb3IoOzspe2Zvcig7cCE9PW58fDAhPT1hJiYzIT09cC5ub2RlVHlwZXx8KHM9dSthKSxwIT09b3x8MCE9PXImJjMhPT1wLm5vZGVUeXBlfHwoYz11K3IpLDM9PT1wLm5vZGVUeXBlJiYodSs9cC5ub2RlVmFsdWUubGVuZ3RoKSxudWxsIT09KGw9cC5maXJzdENoaWxkKTspbT1wLHA9bDtmb3IoOzspe2lmKHA9PT1lKWJyZWFrIHQ7aWYobT09PW4mJisrZj09PWEmJihzPXUpLG09PT1vJiYrK2Q9PT1yJiYoYz11KSxudWxsIT09KGw9cC5uZXh0U2libGluZykpYnJlYWs7bT0ocD1tKS5wYXJlbnROb2RlfXA9bH1uPS0xPT09c3x8LTE9PT1jP251bGw6e3N0YXJ0OnMsZW5kOmN9fWVsc2Ugbj1udWxsfW49bnx8e3N0YXJ0OjAsZW5kOjB9fWVsc2Ugbj1udWxsO2ZvcihzMD17Zm9jdXNlZEVsZW06ZSxzZWxlY3Rpb25SYW5nZTpufSx1Rj0hMSxhVT10O251bGwhPT1hVTspaWYoZT0odD1hVSkuY2hpbGQsMCE9KDEwMjgmdC5zdWJ0cmVlRmxhZ3MpJiZudWxsIT09ZSllLnJldHVybj10LGFVPWU7ZWxzZSBmb3IoO251bGwhPT1hVTspe3Q9YVU7dHJ5e3ZhciBoPXQuYWx0ZXJuYXRlLGc9dC5mbGFncztzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Y2FzZSA1OmNhc2UgMjY6Y2FzZSAyNzpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6YnJlYWs7Y2FzZSAxOmlmKDAhPSgxMDI0JmcpJiZudWxsIT09aCl7dmFyIHk9aC5tZW1vaXplZFByb3BzLHY9aC5tZW1vaXplZFN0YXRlLGI9dC5zdGF0ZU5vZGUsaz1iLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHQuZWxlbWVudFR5cGU9PT10LnR5cGU/eTpsYih0LnR5cGUseSksdik7Yi5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZT1rfWJyZWFrO2Nhc2UgMzowIT0oMTAyNCZnKSYmY24odC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7ZGVmYXVsdDppZigwIT0oMTAyNCZnKSl0aHJvdyBFcnJvcihpKDE2MykpfX1jYXRjaChlKXtpbSh0LHQucmV0dXJuLGUpfWlmKG51bGwhPT0oZT10LnNpYmxpbmcpKXtlLnJldHVybj10LnJldHVybixhVT1lO2JyZWFrfWFVPXQucmV0dXJufWg9YSQsYSQ9ITF9KGUsdSksYTUodSxlKSxmdW5jdGlvbihlKXt2YXIgdD1zdSgpLG49ZS5mb2N1c2VkRWxlbSxyPWUuc2VsZWN0aW9uUmFuZ2U7aWYodCE9PW4mJm4mJm4ub3duZXJEb2N1bWVudCYmZnVuY3Rpb24gZSh0LG4pe3JldHVybiEhdCYmISFuJiYodD09PW58fCghdHx8MyE9PXQubm9kZVR5cGUpJiYobiYmMz09PW4ubm9kZVR5cGU/ZSh0LG4ucGFyZW50Tm9kZSk6ImNvbnRhaW5zImluIHQ/dC5jb250YWlucyhuKTohIXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJiEhKDE2JnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obikpKSl9KG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKG51bGwhPT1yJiZzcyhuKSl7aWYodD1yLnN0YXJ0LHZvaWQgMD09PShlPXIuZW5kKSYmKGU9dCksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD10LG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKGUsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoKGU9KHQ9bi5vd25lckRvY3VtZW50fHxkb2N1bWVudCkmJnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKXtlPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIGw9bi50ZXh0Q29udGVudC5sZW5ndGgsYT1NYXRoLm1pbihyLnN0YXJ0LGwpO3I9dm9pZCAwPT09ci5lbmQ/YTpNYXRoLm1pbihyLmVuZCxsKSwhZS5leHRlbmQmJmE+ciYmKGw9cixyPWEsYT1sKSxsPXNpKG4sYSk7dmFyIG89c2kobixyKTtsJiZvJiYoMSE9PWUucmFuZ2VDb3VudHx8ZS5hbmNob3JOb2RlIT09bC5ub2RlfHxlLmFuY2hvck9mZnNldCE9PWwub2Zmc2V0fHxlLmZvY3VzTm9kZSE9PW8ubm9kZXx8ZS5mb2N1c09mZnNldCE9PW8ub2Zmc2V0KSYmKCh0PXQuY3JlYXRlUmFuZ2UoKSkuc2V0U3RhcnQobC5ub2RlLGwub2Zmc2V0KSxlLnJlbW92ZUFsbFJhbmdlcygpLGE+cj8oZS5hZGRSYW5nZSh0KSxlLmV4dGVuZChvLm5vZGUsby5vZmZzZXQpKToodC5zZXRFbmQoby5ub2RlLG8ub2Zmc2V0KSxlLmFkZFJhbmdlKHQpKSl9fWZvcih0PVtdLGU9bjtlPWUucGFyZW50Tm9kZTspMT09PWUubm9kZVR5cGUmJnQucHVzaCh7ZWxlbWVudDplLGxlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0pO2ZvcigiZnVuY3Rpb24iPT10eXBlb2Ygbi5mb2N1cyYmbi5mb2N1cygpLG49MDtuPHQubGVuZ3RoO24rKykoZT10W25dKS5lbGVtZW50LnNjcm9sbExlZnQ9ZS5sZWZ0LGUuZWxlbWVudC5zY3JvbGxUb3A9ZS50b3B9fShzMCksdUY9ISFzSixzMD1zSj1udWxsLGUuY3VycmVudD11LGFZKGUsdS5hbHRlcm5hdGUsdSksSygpLG9iPWYsZWs9YSxvdi50cmFuc2l0aW9uPW59ZWxzZSBlLmN1cnJlbnQ9dTtpZihvJD8obyQ9ITEsb2o9ZSxvVz1zKTppYyhlLGMpLDA9PT0oYz1lLnBlbmRpbmdMYW5lcykmJihvUT1udWxsKSxmdW5jdGlvbihlKXtpZihlYSYmImZ1bmN0aW9uIj09dHlwZW9mIGVhLm9uQ29tbWl0RmliZXJSb290KXRyeXtlYS5vbkNvbW1pdEZpYmVyUm9vdChlbCxlLHZvaWQgMCwxMjg9PSgxMjgmZS5jdXJyZW50LmZsYWdzKSl9Y2F0Y2goZSl7fX0odS5zdGF0ZU5vZGUsbCksbnYoZSksbnVsbCE9PXQpZm9yKGw9ZS5vblJlY292ZXJhYmxlRXJyb3IsdT0wO3U8dC5sZW5ndGg7dSsrKW49e2RpZ2VzdDooYz10W3VdKS5kaWdlc3QsY29tcG9uZW50U3RhY2s6Yy5zdGFja30sbChjLnZhbHVlLG4pO2lmKG9CKXRocm93IG9CPSExLGU9b1Ysb1Y9bnVsbCxlOzAhPSgzJm9XKSYmMCE9PWUudGFnJiZpZCgpLGM9ZS5wZW5kaW5nTGFuZXMscnx8b0R8fDAhPSg0MTk0MjE4JnMpJiYwIT0oNDImYyk/ZT09PW9ZP29LKys6KG9LPTAsb1k9ZSk6b0s9MCxuYighMSl9fShlLHQsbixyLGEsbCl9ZmluYWxseXtvdi50cmFuc2l0aW9uPW8sZWs9YX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBpYyhlLHQpezA9PShlLnBvb2xlZENhY2hlTGFuZXMmPXQpJiZudWxsIT0odD1lLnBvb2xlZENhY2hlKSYmKGUucG9vbGVkQ2FjaGU9bnVsbCxhbSh0KSl9ZnVuY3Rpb24gaWQoKXtpZihudWxsIT09b2ope3ZhciBlPW9qLHQ9b0g7b0g9MDt2YXIgbj1ldyhvVykscj0zMj5uPzMyOm47bj1vdi50cmFuc2l0aW9uO3ZhciBsPWVrO3RyeXtpZihvdi50cmFuc2l0aW9uPW51bGwsZWs9cixudWxsPT09b2opdmFyIGE9ITE7ZWxzZXtyPW9xLG9xPW51bGw7dmFyIG89b2osdT1vVztpZihvaj1udWxsLG9XPTAsMCE9KDYmb2IpKXRocm93IEVycm9yKGkoMzMxKSk7dmFyIHM9b2I7aWYob2J8PTQsb2Yoby5jdXJyZW50KSxvbChvLG8uY3VycmVudCx1LHIpLG9iPXMsbmIoITEpLGVhJiYiZnVuY3Rpb24iPT10eXBlb2YgZWEub25Qb3N0Q29tbWl0RmliZXJSb290KXRyeXtlYS5vblBvc3RDb21taXRGaWJlclJvb3QoZWwsbyl9Y2F0Y2goZSl7fWE9ITB9cmV0dXJuIGF9ZmluYWxseXtlaz1sLG92LnRyYW5zaXRpb249bixpYyhlLHQpfX1yZXR1cm4hMX1mdW5jdGlvbiBpcChlLHQsbil7dD1sTChlLHQ9bFAobix0KSwyKSxudWxsIT09KGU9bk8oZSx0LDIpKSYmKG8yKGUsMiksbnYoZSkpfWZ1bmN0aW9uIGltKGUsdCxuKXtpZigzPT09ZS50YWcpaXAoZSxlLG4pO2Vsc2UgZm9yKDtudWxsIT09dDspe2lmKDM9PT10LnRhZyl7aXAodCxlLG4pO2JyZWFrfWlmKDE9PT10LnRhZyl7dmFyIHI9dC5zdGF0ZU5vZGU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fCJmdW5jdGlvbiI9PXR5cGVvZiByLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PW9RfHwhb1EuaGFzKHIpKSl7ZT1sVCh0LGU9bFAobixlKSwyKSxudWxsIT09KHQ9bk8odCxlLDIpKSYmKG8yKHQsMiksbnYodCkpO2JyZWFrfX10PXQucmV0dXJufX1mdW5jdGlvbiBpaChlLHQsbil7dmFyIHI9ZS5waW5nQ2FjaGU7aWYobnVsbD09PXIpe3I9ZS5waW5nQ2FjaGU9bmV3IG9tO3ZhciBsPW5ldyBTZXQ7ci5zZXQodCxsKX1lbHNlIHZvaWQgMD09PShsPXIuZ2V0KHQpKSYmKGw9bmV3IFNldCxyLnNldCh0LGwpKTtsLmhhcyhuKXx8KG94PSEwLGwuYWRkKG4pLGU9aWcuYmluZChudWxsLGUsdCxuKSx0LnRoZW4oZSxlKSl9ZnVuY3Rpb24gaWcoZSx0LG4pe3ZhciByPWUucGluZ0NhY2hlO251bGwhPT1yJiZyLmRlbGV0ZSh0KSxlLnBpbmdlZExhbmVzfD1lLnN1c3BlbmRlZExhbmVzJm4sMiZvYj9vUj0hMDo0Jm9iJiYob0Q9ITApLGlrKCksb2s9PT1lJiYob1Mmbik9PT1uJiYoND09PW9QfHwzPT09b1AmJig2MjkxNDU2MCZvUyk9PT1vUyYmMzAwPlkoKS1vQT8wPT0oMiZvYikmJm81KGUsMCk6b1R8PW4pLG52KGUpfWZ1bmN0aW9uIGl5KGUsdCl7MD09PXQmJih0PTA9PSgxJmUubW9kZSk/MjplZygpKSxudWxsIT09KGU9bnMoZSx0KSkmJihvMihlLHQpLG52KGUpKX1mdW5jdGlvbiBpdihlKXt2YXIgdD1lLm1lbW9pemVkU3RhdGUsbj0wO251bGwhPT10JiYobj10LnJldHJ5TGFuZSksaXkoZSxuKX1mdW5jdGlvbiBpYihlLHQpe3ZhciBuPTA7c3dpdGNoKGUudGFnKXtjYXNlIDEzOnZhciByPWUuc3RhdGVOb2RlLGw9ZS5tZW1vaXplZFN0YXRlO251bGwhPT1sJiYobj1sLnJldHJ5TGFuZSk7YnJlYWs7Y2FzZSAxOTpyPWUuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMjI6cj1lLnN0YXRlTm9kZS5fcmV0cnlDYWNoZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGkoMzE0KSl9bnVsbCE9PXImJnIuZGVsZXRlKHQpLGl5KGUsbil9ZnVuY3Rpb24gaWsoKXtpZig1MDxvSyl0aHJvdyBvSz0wLG9ZPW51bGwsMiZvYiYmbnVsbCE9PW9rJiYob2suZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXN8PW9TKSxFcnJvcihpKDE4NSkpfWZ1bmN0aW9uIGl3KGUsdCxuLHIpe3RoaXMudGFnPWUsdGhpcy5rZXk9bix0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZkNsZWFudXA9dGhpcy5yZWY9bnVsbCx0aGlzLnBlbmRpbmdQcm9wcz10LHRoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsLHRoaXMubW9kZT1yLHRoaXMuc3VidHJlZUZsYWdzPXRoaXMuZmxhZ3M9MCx0aGlzLmRlbGV0aW9ucz1udWxsLHRoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTAsdGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiBpUyhlLHQsbixyKXtyZXR1cm4gbmV3IGl3KGUsdCxuLHIpfWZ1bmN0aW9uIGlDKGUpe3JldHVybiEoIShlPWUucHJvdG90eXBlKXx8IWUuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gaUUoZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbD09PW4/KChuPWlTKGUudGFnLHQsZS5rZXksZS5tb2RlKSkuZWxlbWVudFR5cGU9ZS5lbGVtZW50VHlwZSxuLnR5cGU9ZS50eXBlLG4uc3RhdGVOb2RlPWUuc3RhdGVOb2RlLG4uYWx0ZXJuYXRlPWUsZS5hbHRlcm5hdGU9bik6KG4ucGVuZGluZ1Byb3BzPXQsbi50eXBlPWUudHlwZSxuLmZsYWdzPTAsbi5zdWJ0cmVlRmxhZ3M9MCxuLmRlbGV0aW9ucz1udWxsKSxuLmZsYWdzPTMxNDU3MjgwJmUuZmxhZ3Msbi5jaGlsZExhbmVzPWUuY2hpbGRMYW5lcyxuLmxhbmVzPWUubGFuZXMsbi5jaGlsZD1lLmNoaWxkLG4ubWVtb2l6ZWRQcm9wcz1lLm1lbW9pemVkUHJvcHMsbi5tZW1vaXplZFN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxuLnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdD1lLmRlcGVuZGVuY2llcyxuLmRlcGVuZGVuY2llcz1udWxsPT09dD9udWxsOntsYW5lczp0LmxhbmVzLGZpcnN0Q29udGV4dDp0LmZpcnN0Q29udGV4dH0sbi5zaWJsaW5nPWUuc2libGluZyxuLmluZGV4PWUuaW5kZXgsbi5yZWY9ZS5yZWYsbi5yZWZDbGVhbnVwPWUucmVmQ2xlYW51cCxufWZ1bmN0aW9uIGl4KGUsdCl7ZS5mbGFncyY9MzE0NTcyODI7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIG51bGw9PT1uPyhlLmNoaWxkTGFuZXM9MCxlLmxhbmVzPXQsZS5jaGlsZD1udWxsLGUuc3VidHJlZUZsYWdzPTAsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS51cGRhdGVRdWV1ZT1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCk6KGUuY2hpbGRMYW5lcz1uLmNoaWxkTGFuZXMsZS5sYW5lcz1uLmxhbmVzLGUuY2hpbGQ9bi5jaGlsZCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGwsZS5tZW1vaXplZFByb3BzPW4ubWVtb2l6ZWRQcm9wcyxlLm1lbW9pemVkU3RhdGU9bi5tZW1vaXplZFN0YXRlLGUudXBkYXRlUXVldWU9bi51cGRhdGVRdWV1ZSxlLnR5cGU9bi50eXBlLHQ9bi5kZXBlbmRlbmNpZXMsZS5kZXBlbmRlbmNpZXM9bnVsbD09PXQ/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9KSxlfWZ1bmN0aW9uIGl6KGUsdCxuLHIsbCxhKXt2YXIgbz0yO2lmKHI9ZSwiZnVuY3Rpb24iPT10eXBlb2YgZSlpQyhlKSYmKG89MSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpbz0hZnVuY3Rpb24oZSx0LG4pe2lmKDE9PT1ufHxudWxsIT10Lml0ZW1Qcm9wKXJldHVybiExO3N3aXRjaChlKXtjYXNlIm1ldGEiOmNhc2UidGl0bGUiOnJldHVybiEwO2Nhc2Uic3R5bGUiOmlmKCJzdHJpbmciIT10eXBlb2YgdC5wcmVjZWRlbmNlfHwic3RyaW5nIiE9dHlwZW9mIHQuaHJlZnx8IiI9PT10LmhyZWYpYnJlYWs7cmV0dXJuITA7Y2FzZSJsaW5rIjppZigic3RyaW5nIiE9dHlwZW9mIHQucmVsfHwic3RyaW5nIiE9dHlwZW9mIHQuaHJlZnx8IiI9PT10LmhyZWZ8fHQub25Mb2FkfHx0Lm9uRXJyb3IpYnJlYWs7aWYoInN0eWxlc2hlZXQiPT09dC5yZWwpcmV0dXJuIGU9dC5kaXNhYmxlZCwic3RyaW5nIj09dHlwZW9mIHQucHJlY2VkZW5jZSYmbnVsbD09ZTtyZXR1cm4hMDtjYXNlInNjcmlwdCI6aWYoITA9PT10LmFzeW5jJiYhdC5vbkxvYWQmJiF0Lm9uRXJyb3ImJiJzdHJpbmciPT10eXBlb2YgdC5zcmMmJnQuc3JjKXJldHVybiEwfXJldHVybiExfShlLG4sRC5jdXJyZW50KT8iaHRtbCI9PT1lfHwiaGVhZCI9PT1lfHwiYm9keSI9PT1lPzI3OjU6MjY7ZWxzZSBlOnN3aXRjaChlKXtjYXNlIGI6cmV0dXJuIGlQKG4uY2hpbGRyZW4sbCxhLHQpO2Nhc2UgazpvPTgsMCE9KDEmKGx8PTgpKSYmKGx8PTE2KTticmVhaztjYXNlIHc6cmV0dXJuKGU9aVMoMTIsbix0LDJ8bCkpLmVsZW1lbnRUeXBlPXcsZS5sYW5lcz1hLGU7Y2FzZSB6OnJldHVybihlPWlTKDEzLG4sdCxsKSkuZWxlbWVudFR5cGU9eixlLmxhbmVzPWEsZTtjYXNlIFA6cmV0dXJuKGU9aVMoMTksbix0LGwpKS5lbGVtZW50VHlwZT1QLGUubGFuZXM9YSxlO2Nhc2UgVDpyZXR1cm4gaU4obixsLGEsdCk7Y2FzZSBGOmNhc2UgTDpjYXNlIE06cmV0dXJuKGU9aVMoMjQsbix0LGwpKS5lbGVtZW50VHlwZT1NLGUubGFuZXM9YSxlO2RlZmF1bHQ6aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSlzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBTOm89MTA7YnJlYWsgZTtjYXNlIEU6bz05O2JyZWFrIGU7Y2FzZSBDOmNhc2UgeDpvPTExO2JyZWFrIGU7Y2FzZSBOOm89MTQ7YnJlYWsgZTtjYXNlIF86bz0xNixyPW51bGw7YnJlYWsgZX10aHJvdyBFcnJvcihpKDEzMCxudWxsPT1lP2U6dHlwZW9mIGUsIiIpKX1yZXR1cm4odD1pUyhvLG4sdCxsKSkuZWxlbWVudFR5cGU9ZSx0LnR5cGU9cix0LmxhbmVzPWEsdH1mdW5jdGlvbiBpUChlLHQsbixyKXtyZXR1cm4oZT1pUyg3LGUscix0KSkubGFuZXM9bixlfWZ1bmN0aW9uIGlOKGUsdCxuLHIpeyhlPWlTKDIyLGUscix0KSkuZWxlbWVudFR5cGU9VCxlLmxhbmVzPW47dmFyIGw9e192aXNpYmlsaXR5OjEsX3BlbmRpbmdWaXNpYmlsaXR5OjEsX3BlbmRpbmdNYXJrZXJzOm51bGwsX3JldHJ5Q2FjaGU6bnVsbCxfdHJhbnNpdGlvbnM6bnVsbCxfY3VycmVudDpudWxsLGRldGFjaDpmdW5jdGlvbigpe3ZhciBlPWwuX2N1cnJlbnQ7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoaSg0NTYpKTtpZigwPT0oMiZsLl9wZW5kaW5nVmlzaWJpbGl0eSkpe3ZhciB0PW5zKGUsMik7bnVsbCE9PXQmJihsLl9wZW5kaW5nVmlzaWJpbGl0eXw9MixvRyh0LGUsMikpfX0sYXR0YWNoOmZ1bmN0aW9uKCl7dmFyIGU9bC5fY3VycmVudDtpZihudWxsPT09ZSl0aHJvdyBFcnJvcihpKDQ1NikpO2lmKDAhPSgyJmwuX3BlbmRpbmdWaXNpYmlsaXR5KSl7dmFyIHQ9bnMoZSwyKTtudWxsIT09dCYmKGwuX3BlbmRpbmdWaXNpYmlsaXR5Jj0tMyxvRyh0LGUsMikpfX19O3JldHVybiBlLnN0YXRlTm9kZT1sLGV9ZnVuY3Rpb24gaV8oZSx0LG4pe3JldHVybihlPWlTKDYsZSxudWxsLHQpKS5sYW5lcz1uLGV9ZnVuY3Rpb24gaUwoZSx0LG4pe3JldHVybih0PWlTKDQsbnVsbCE9PWUuY2hpbGRyZW4/ZS5jaGlsZHJlbjpbXSxlLmtleSx0KSkubGFuZXM9bix0LnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sdH1mdW5jdGlvbiBpVChlLHQsbixyLGwsYSl7dGhpcy50YWc9dCx0aGlzLmNvbnRhaW5lckluZm89ZSx0aGlzLmZpbmlzaGVkV29yaz10aGlzLnBpbmdDYWNoZT10aGlzLmN1cnJlbnQ9dGhpcy5wZW5kaW5nQ2hpbGRyZW49bnVsbCx0aGlzLnRpbWVvdXRIYW5kbGU9LTEsdGhpcy5jYWxsYmFja05vZGU9dGhpcy5uZXh0PXRoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PXRoaXMuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsLHRoaXMuY2FsbGJhY2tQcmlvcml0eT0wLHRoaXMuZXhwaXJhdGlvblRpbWVzPWV5KC0xKSx0aGlzLmVudGFuZ2xlZExhbmVzPXRoaXMuc2hlbGxTdXNwZW5kQ291bnRlcj10aGlzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzPXRoaXMuZmluaXNoZWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9ZXkoMCksdGhpcy5oaWRkZW5VcGRhdGVzPWV5KG51bGwpLHRoaXMuaWRlbnRpZmllclByZWZpeD1yLHRoaXMub25SZWNvdmVyYWJsZUVycm9yPWwsdGhpcy5wb29sZWRDYWNoZT1udWxsLHRoaXMucG9vbGVkQ2FjaGVMYW5lcz0wLHRoaXMuZm9ybVN0YXRlPWEsdGhpcy5pbmNvbXBsZXRlVHJhbnNpdGlvbnM9bmV3IE1hcH1mdW5jdGlvbiBpRihlLHQsbixyLGwsYSxvLGksdSxzLGMpe3JldHVybiBlPW5ldyBpVChlLHQsbixpLHUsYyksMT09PXQ/KHQ9MSwhMD09PWEmJih0fD0yNCkpOnQ9MCxhPWlTKDMsbnVsbCxudWxsLHQpLGUuY3VycmVudD1hLGEuc3RhdGVOb2RlPWUsdD1hcCgpLHQucmVmQ291bnQrKyxlLnBvb2xlZENhY2hlPXQsdC5yZWZDb3VudCsrLGEubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDpuLGNhY2hlOnR9LG5UKGEpLGV9ZnVuY3Rpb24gaU0oZSl7aWYoIWUpcmV0dXJuIHR4O2U9ZS5fcmVhY3RJbnRlcm5hbHM7ZTp7aWYodHcoZSkhPT1lfHwxIT09ZS50YWcpdGhyb3cgRXJyb3IoaSgxNzApKTt2YXIgdD1lO2Rve3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnQ9dC5zdGF0ZU5vZGUuY29udGV4dDticmVhayBlO2Nhc2UgMTppZih0TCh0LnR5cGUpKXt0PXQuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIGV9fXQ9dC5yZXR1cm59d2hpbGUobnVsbCE9PXQpO3Rocm93IEVycm9yKGkoMTcxKSl9aWYoMT09PWUudGFnKXt2YXIgbj1lLnR5cGU7aWYodEwobikpcmV0dXJuIHRNKGUsbix0KX1yZXR1cm4gdH1mdW5jdGlvbiBpTyhlLHQsbixyLGwsYSxvLGksdSxzLGMpe3JldHVybihlPWlGKG4sciwhMCxlLGwsYSxvLGksdSxzLGMpKS5jb250ZXh0PWlNKG51bGwpLChsPW5NKHI9b1gobj1lLmN1cnJlbnQpKSkuY2FsbGJhY2s9bnVsbCE9dD90Om51bGwsbk8obixsLHIpLGUuY3VycmVudC5sYW5lcz1yLG8yKGUsciksbnYoZSksZX1mdW5jdGlvbiBpUihlLHQsbixyKXt2YXIgbD10LmN1cnJlbnQsYT1vWChsKTtyZXR1cm4gbj1pTShuKSxudWxsPT09dC5jb250ZXh0P3QuY29udGV4dD1uOnQucGVuZGluZ0NvbnRleHQ9biwodD1uTShhKSkucGF5bG9hZD17ZWxlbWVudDplfSxudWxsIT09KHI9dm9pZCAwPT09cj9udWxsOnIpJiYodC5jYWxsYmFjaz1yKSxudWxsIT09KGU9bk8obCx0LGEpKSYmKG9HKGUsbCxhKSxuUihlLGwsYSkpLGF9ZnVuY3Rpb24gaUQoZSl7cmV0dXJuKGU9ZS5jdXJyZW50KS5jaGlsZD8oZS5jaGlsZC50YWcsZS5jaGlsZC5zdGF0ZU5vZGUpOm51bGx9ZnVuY3Rpb24gaUEoZSx0KXtpZihudWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PWUuZGVoeWRyYXRlZCl7dmFyIG49ZS5yZXRyeUxhbmU7ZS5yZXRyeUxhbmU9MCE9PW4mJm48dD9uOnR9fWZ1bmN0aW9uIGlJKGUsdCl7aUEoZSx0KSwoZT1lLmFsdGVybmF0ZSkmJmlBKGUsdCl9ZnVuY3Rpb24gaVUoZSl7aWYoMTM9PT1lLnRhZyl7dmFyIHQ9bnMoZSw2NzEwODg2NCk7bnVsbCE9PXQmJm9HKHQsZSw2NzEwODg2NCksaUkoZSw2NzEwODg2NCl9fWlaPWZ1bmN0aW9uKGUsdCxuKXtpZihudWxsIT09ZSl7aWYoZS5tZW1vaXplZFByb3BzIT09dC5wZW5kaW5nUHJvcHN8fHRQLmN1cnJlbnQpbFI9ITA7ZWxzZXtpZigwPT0oZS5sYW5lcyZuKSYmMD09KDEyOCZ0LmZsYWdzKSlyZXR1cm4gbFI9ITEsZnVuY3Rpb24oZSx0LG4pe3N3aXRjaCh0LnRhZyl7Y2FzZSAzOmxxKHQpLGF0KHQsYWQsZS5tZW1vaXplZFN0YXRlLmNhY2hlKSxudCgpO2JyZWFrO2Nhc2UgMjc6Y2FzZSA1OiQodCk7YnJlYWs7Y2FzZSAxOnRMKHQudHlwZSkmJnRPKHQpO2JyZWFrO2Nhc2UgNDpWKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDphdCh0LHQudHlwZS5fY29udGV4dCx0Lm1lbW9pemVkUHJvcHMudmFsdWUpO2JyZWFrO2Nhc2UgMTM6dmFyIHI9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1yKXtpZihudWxsIT09ci5kZWh5ZHJhdGVkKXJldHVybiBycih0KSx0LmZsYWdzfD0xMjgsbnVsbDtpZigwIT0obiZ0LmNoaWxkLmNoaWxkTGFuZXMpKXJldHVybiBsWihlLHQsbik7cmV0dXJuIHJyKHQpLG51bGwhPT0oZT1sNihlLHQsbikpP2Uuc2libGluZzpudWxsfXJyKHQpO2JyZWFrO2Nhc2UgMTk6aWYocj0wIT0obiZ0LmNoaWxkTGFuZXMpLDAhPSgxMjgmZS5mbGFncykpe2lmKHIpcmV0dXJuIGwzKGUsdCxuKTt0LmZsYWdzfD0xMjh9dmFyIGw9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1sJiYobC5yZW5kZXJpbmc9bnVsbCxsLnRhaWw9bnVsbCxsLmxhc3RFZmZlY3Q9bnVsbCksZyhyaSxyaS5jdXJyZW50KSwhcilyZXR1cm4gbnVsbDticmVhaztjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIHQubGFuZXM9MCxsQihlLHQsbik7Y2FzZSAyNDphdCh0LGFkLGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSl9cmV0dXJuIGw2KGUsdCxuKX0oZSx0LG4pO2xSPTAhPSgxMzEwNzImZS5mbGFncyl9fWVsc2UgbFI9ITEsdFomJjAhPSgxMDQ4NTc2JnQuZmxhZ3MpJiZ0cSh0LHRCLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMjp2YXIgcj10LnR5cGU7bDQoZSx0KSxlPXQucGVuZGluZ1Byb3BzO3ZhciBsPXRfKHQsdHouY3VycmVudCk7YWEodCxuKSxsPXJFKG51bGwsdCxyLGUsbCxuKTt2YXIgYT1yTigpO3JldHVybiB0LmZsYWdzfD0xLCJvYmplY3QiPT10eXBlb2YgbCYmbnVsbCE9PWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnJlbmRlciYmdm9pZCAwPT09bC4kJHR5cGVvZj8odC50YWc9MSx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdEwocik/KGE9ITAsdE8odCkpOmE9ITEsdC5tZW1vaXplZFN0YXRlPW51bGwhPT1sLnN0YXRlJiZ2b2lkIDAhPT1sLnN0YXRlP2wuc3RhdGU6bnVsbCxuVCh0KSxsLnVwZGF0ZXI9bHcsdC5zdGF0ZU5vZGU9bCxsLl9yZWFjdEludGVybmFscz10LGx4KHQscixlLG4pLHQ9bEgobnVsbCx0LHIsITAsYSxuKSk6KHQudGFnPTAsdFomJmEmJnRLKHQpLGxEKG51bGwsdCxsLG4pLHQ9dC5jaGlsZCksdDtjYXNlIDE2OnI9dC5lbGVtZW50VHlwZTtlOntzd2l0Y2gobDQoZSx0KSxlPXQucGVuZGluZ1Byb3BzLHI9KGw9ci5faW5pdCkoci5fcGF5bG9hZCksdC50eXBlPXIsbD10LnRhZz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlyZXR1cm4gaUMoZSk/MTowO2lmKG51bGwhPWUpe2lmKChlPWUuJCR0eXBlb2YpPT09eClyZXR1cm4gMTE7aWYoZT09PU4pcmV0dXJuIDE0fXJldHVybiAyfShyKSxlPWxiKHIsZSksbCl7Y2FzZSAwOnQ9bCQobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTp0PWxXKG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDExOnQ9bEEobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTQ6dD1sSShudWxsLHQscixsYihyLnR5cGUsZSksbik7YnJlYWsgZX10aHJvdyBFcnJvcihpKDMwNixyLCIiKSl9cmV0dXJuIHQ7Y2FzZSAwOnJldHVybiByPXQudHlwZSxsPXQucGVuZGluZ1Byb3BzLGw9dC5lbGVtZW50VHlwZT09PXI/bDpsYihyLGwpLGwkKGUsdCxyLGwsbik7Y2FzZSAxOnJldHVybiByPXQudHlwZSxsPXQucGVuZGluZ1Byb3BzLGw9dC5lbGVtZW50VHlwZT09PXI/bDpsYihyLGwpLGxXKGUsdCxyLGwsbik7Y2FzZSAzOmU6e2lmKGxxKHQpLG51bGw9PT1lKXRocm93IEVycm9yKGkoMzg3KSk7bD10LnBlbmRpbmdQcm9wcyxyPShhPXQubWVtb2l6ZWRTdGF0ZSkuZWxlbWVudCxuRihlLHQpLG5VKHQsbCxudWxsLG4pO3ZhciBvPXQubWVtb2l6ZWRTdGF0ZTtpZihhdCh0LGFkLGw9by5jYWNoZSksbCE9PWEuY2FjaGUmJmFsKHQsYWQsbiksbkkoKSxsPW8uZWxlbWVudCxhLmlzRGVoeWRyYXRlZCl7aWYoYT17ZWxlbWVudDpsLGlzRGVoeWRyYXRlZDohMSxjYWNoZTpvLmNhY2hlfSx0LnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1hLHQubWVtb2l6ZWRTdGF0ZT1hLDI1NiZ0LmZsYWdzKXtyPWxQKEVycm9yKGkoNDIzKSksdCksdD1sSyhlLHQsbCxuLHIpO2JyZWFrIGV9aWYobCE9PXIpe3I9bFAoRXJyb3IoaSg0MjQpKSx0KSx0PWxLKGUsdCxsLG4scik7YnJlYWsgZX1mb3IodEc9Y2wodC5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSx0WD10LHRaPSEwLHRKPW51bGwsdDA9ITAsbj1uNih0LG51bGwsbCxuKSx0LmNoaWxkPW47bjspbi5mbGFncz0tMyZuLmZsYWdzfDQwOTYsbj1uLnNpYmxpbmd9ZWxzZXtpZihudCgpLGw9PT1yKXt0PWw2KGUsdCxuKTticmVhayBlfWxEKGUsdCxsLG4pfXQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDI2OnJldHVybiBsUShlLHQpLG49dC5tZW1vaXplZFN0YXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighKHQ9KHQ9SS5jdXJyZW50KT9jZih0KTpudWxsKSl0aHJvdyBFcnJvcihpKDQ0NikpO3N3aXRjaChlKXtjYXNlIm1ldGEiOmNhc2UidGl0bGUiOnJldHVybiBudWxsO2Nhc2Uic3R5bGUiOnJldHVybiJzdHJpbmciPT10eXBlb2Ygbi5wcmVjZWRlbmNlJiYic3RyaW5nIj09dHlwZW9mIG4uaHJlZj8obj1jbShuLmhyZWYpLChlPSh0PWVBKHQpLmhvaXN0YWJsZVN0eWxlcykuZ2V0KG4pKXx8KGU9e3R5cGU6InN0eWxlIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH0sdC5zZXQobixlKSksZSk6e3R5cGU6InZvaWQiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfTtjYXNlImxpbmsiOmlmKCJzdHlsZXNoZWV0Ij09PW4ucmVsJiYic3RyaW5nIj09dHlwZW9mIG4uaHJlZiYmInN0cmluZyI9PXR5cGVvZiBuLnByZWNlZGVuY2Upe2U9Y20obi5ocmVmKTt2YXIgcixsLGEsbyx1PWVBKHQpLmhvaXN0YWJsZVN0eWxlcyxzPXUuZ2V0KGUpO3JldHVybiBzfHwodD10Lm93bmVyRG9jdW1lbnR8fHQscz17dHlwZToic3R5bGVzaGVldCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOntsb2FkaW5nOjAscHJlbG9hZDpudWxsfX0sdS5zZXQoZSxzKSxjcy5oYXMoZSl8fChyPXQsbD1lLGE9e3JlbDoicHJlbG9hZCIsYXM6InN0eWxlIixocmVmOm4uaHJlZixjcm9zc09yaWdpbjpuLmNyb3NzT3JpZ2luLGludGVncml0eTpuLmludGVncml0eSxtZWRpYTpuLm1lZGlhLGhyZWZMYW5nOm4uaHJlZkxhbmcscmVmZXJyZXJQb2xpY3k6bi5yZWZlcnJlclBvbGljeX0sbz1zLnN0YXRlLGNzLnNldChsLGEpLHIucXVlcnlTZWxlY3RvcihjaChsKSl8fChyLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPSJwcmVsb2FkIl1bYXM9InN0eWxlIl1bJytsKyJdIik/by5sb2FkaW5nPTE6KGw9ci5jcmVhdGVFbGVtZW50KCJsaW5rIiksby5wcmVsb2FkPWwsbC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe3JldHVybiBvLmxvYWRpbmd8PTF9KSxsLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe3JldHVybiBvLmxvYWRpbmd8PTJ9KSxzRyhsLCJsaW5rIixhKSxlSShsKSxyLmhlYWQuYXBwZW5kQ2hpbGQobCkpKSkpLHN9cmV0dXJuIG51bGw7Y2FzZSJzY3JpcHQiOnJldHVybiJzdHJpbmciPT10eXBlb2Ygbi5zcmMmJiEwPT09bi5hc3luYz8obj1jeShuLnNyYyksKGU9KHQ9ZUEodCkuaG9pc3RhYmxlU2NyaXB0cykuZ2V0KG4pKXx8KGU9e3R5cGU6InNjcmlwdCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9LHQuc2V0KG4sZSkpLGUpOnt0eXBlOiJ2b2lkIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH07ZGVmYXVsdDp0aHJvdyBFcnJvcihpKDQ0NCxlKSl9fSh0LnR5cGUsbnVsbD09PWU/bnVsbDplLm1lbW9pemVkUHJvcHMsdC5wZW5kaW5nUHJvcHMpLG51bGwhPT1lfHx0Wnx8bnVsbCE9PW58fChuPXQudHlwZSxlPXQucGVuZGluZ1Byb3BzLChyPXMxKEkuY3VycmVudCkuY3JlYXRlRWxlbWVudChuKSlbZUVdPXQscltleF09ZSxzRyhyLG4sZSksZUkociksdC5zdGF0ZU5vZGU9ciksbnVsbDtjYXNlIDI3OnJldHVybiAkKHQpLG51bGw9PT1lJiZ0WiYmKHI9dC5zdGF0ZU5vZGU9Y3UodC50eXBlLHQucGVuZGluZ1Byb3BzLEkuY3VycmVudCksdFg9dCx0MD0hMCx0Rz1jbChyLmZpcnN0Q2hpbGQpKSxyPXQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG51bGwhPT1lfHx0Wj9sRChlLHQscixuKTp0LmNoaWxkPW40KHQsbnVsbCxyLG4pLGxRKGUsdCksdC5jaGlsZDtjYXNlIDU6cmV0dXJuIG51bGw9PT1lJiZ0WiYmKChsPXI9dEcpP3QzKHQsbCl8fCh0OCh0KSYmdDUoKSx0Rz1jYShsKSxhPXRYLHRHJiZ0Myh0LHRHKT90MShhLGwpOih0Mih0WCx0KSx0Wj0hMSx0WD10LHRHPXIpKToodDgodCkmJnQ1KCksdDIodFgsdCksdFo9ITEsdFg9dCx0Rz1yKSksJCh0KSxsPXQudHlwZSxhPXQucGVuZGluZ1Byb3BzLG89bnVsbCE9PWU/ZS5tZW1vaXplZFByb3BzOm51bGwscj1hLmNoaWxkcmVuLHM0KGwsYSk/cj1udWxsOm51bGwhPT1vJiZzNChsLG8pJiYodC5mbGFnc3w9MzIpLG51bGwhPT10Lm1lbW9pemVkU3RhdGUmJihsPXJFKGUsdCxyUCxudWxsLG51bGwsbiksQi5fY3VycmVudFZhbHVlPWwsbFImJm51bGwhPT1lJiZlLm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSE9PWwmJmFsKHQsQixuKSksbFEoZSx0KSxsRChlLHQscixuKSx0LmNoaWxkO2Nhc2UgNjpyZXR1cm4gbnVsbD09PWUmJnRaJiYoKHI9IiIhPT10LnBlbmRpbmdQcm9wcywoZT1uPXRHKSYmcik/dDQodCxlKXx8KHQ4KHQpJiZ0NSgpLHRHPWNhKGUpLHI9dFgsdEcmJnQ0KHQsdEcpP3QxKHIsZSk6KHQyKHRYLHQpLHRaPSExLHRYPXQsdEc9bikpOih0OCh0KSYmdDUoKSx0Mih0WCx0KSx0Wj0hMSx0WD10LHRHPW4pKSxudWxsO2Nhc2UgMTM6cmV0dXJuIGxaKGUsdCxuKTtjYXNlIDQ6cmV0dXJuIFYodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyPXQucGVuZGluZ1Byb3BzLG51bGw9PT1lP3QuY2hpbGQ9bjQodCxudWxsLHIsbik6bEQoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiByPXQudHlwZSxsPXQucGVuZGluZ1Byb3BzLGw9dC5lbGVtZW50VHlwZT09PXI/bDpsYihyLGwpLGxBKGUsdCxyLGwsbik7Y2FzZSA3OnJldHVybiBsRChlLHQsdC5wZW5kaW5nUHJvcHMsbiksdC5jaGlsZDtjYXNlIDg6Y2FzZSAxMjpyZXR1cm4gbEQoZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAxMDplOntpZihyPXQudHlwZS5fY29udGV4dCxsPXQucGVuZGluZ1Byb3BzLGE9dC5tZW1vaXplZFByb3BzLGF0KHQscixvPWwudmFsdWUpLG51bGwhPT1hKXtpZih0RChhLnZhbHVlLG8pKXtpZihhLmNoaWxkcmVuPT09bC5jaGlsZHJlbiYmIXRQLmN1cnJlbnQpe3Q9bDYoZSx0LG4pO2JyZWFrIGV9fWVsc2UgYWwodCxyLG4pfWxEKGUsdCxsLmNoaWxkcmVuLG4pLHQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDk6cmV0dXJuIGw9dC50eXBlLHI9dC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sYWEodCxuKSxyPXIobD1hbyhsKSksdC5mbGFnc3w9MSxsRChlLHQscixuKSx0LmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIGw9bGIocj10LnR5cGUsdC5wZW5kaW5nUHJvcHMpLGw9bGIoci50eXBlLGwpLGxJKGUsdCxyLGwsbik7Y2FzZSAxNTpyZXR1cm4gbFUoZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDE3OnJldHVybiByPXQudHlwZSxsPXQucGVuZGluZ1Byb3BzLGw9dC5lbGVtZW50VHlwZT09PXI/bDpsYihyLGwpLGw0KGUsdCksdC50YWc9MSx0TChyKT8oZT0hMCx0Tyh0KSk6ZT0hMSxhYSh0LG4pLGxDKHQscixsKSxseCh0LHIsbCxuKSxsSChudWxsLHQsciwhMCxlLG4pO2Nhc2UgMTk6cmV0dXJuIGwzKGUsdCxuKTtjYXNlIDIyOnJldHVybiBsQihlLHQsbik7Y2FzZSAyNDpyZXR1cm4gYWEodCxuKSxyPWFvKGFkKSxudWxsPT09ZT8obnVsbD09PShsPWFrKCkpJiYobD1vayxhPWFwKCksbC5wb29sZWRDYWNoZT1hLGEucmVmQ291bnQrKyxudWxsIT09YSYmKGwucG9vbGVkQ2FjaGVMYW5lc3w9biksbD1hKSx0Lm1lbW9pemVkU3RhdGU9e3BhcmVudDpyLGNhY2hlOmx9LG5UKHQpLGF0KHQsYWQsbCkpOigwIT0oZS5sYW5lcyZuKSYmKG5GKGUsdCksblUodCxudWxsLG51bGwsbiksbkkoKSksbD1lLm1lbW9pemVkU3RhdGUsYT10Lm1lbW9pemVkU3RhdGUsbC5wYXJlbnQhPT1yPyhsPXtwYXJlbnQ6cixjYWNoZTpyfSx0Lm1lbW9pemVkU3RhdGU9bCwwPT09dC5sYW5lcyYmKHQubWVtb2l6ZWRTdGF0ZT10LnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1sKSxhdCh0LGFkLHIpKTooYXQodCxhZCxyPWEuY2FjaGUpLHIhPT1sLmNhY2hlJiZhbCh0LGFkLG4pKSksbEQoZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGR9dGhyb3cgRXJyb3IoaSgxNTYsdC50YWcpKX07dmFyIGlCPSExO2Z1bmN0aW9uIGlWKGUsdCxuKXtpZihpQilyZXR1cm4gZSh0LG4pO2lCPSEwO3RyeXtyZXR1cm4gbzQoZSx0LG4pfWZpbmFsbHl7aUI9ITEsKG51bGwhPT10Z3x8bnVsbCE9PXR5KSYmKG82KCksdGsoKSl9fWZ1bmN0aW9uIGlRKGUsdCl7dmFyIG49ZS5zdGF0ZU5vZGU7aWYobnVsbD09PW4pcmV0dXJuIG51bGw7dmFyIHI9ZUQobik7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7c3dpdGNoKG49clt0XSx0KXtjYXNlIm9uQ2xpY2siOmNhc2Uib25DbGlja0NhcHR1cmUiOmNhc2Uib25Eb3VibGVDbGljayI6Y2FzZSJvbkRvdWJsZUNsaWNrQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRG93biI6Y2FzZSJvbk1vdXNlRG93bkNhcHR1cmUiOmNhc2Uib25Nb3VzZU1vdmUiOmNhc2Uib25Nb3VzZU1vdmVDYXB0dXJlIjpjYXNlIm9uTW91c2VVcCI6Y2FzZSJvbk1vdXNlVXBDYXB0dXJlIjpjYXNlIm9uTW91c2VFbnRlciI6KHI9IXIuZGlzYWJsZWQpfHwocj0hKCJidXR0b24iPT09KGU9ZS50eXBlKXx8ImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWUpKSxlPSFyO2JyZWFrO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IEVycm9yKGkoMjMxLHQsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgaSQ9ITE7aWYoZSQpdHJ5e3ZhciBpaj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWosInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtpJD0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsaWosaWopLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0Iixpaixpail9Y2F0Y2goZSl7aSQ9ITF9ZnVuY3Rpb24gaVcoZSl7dmFyIHQ9ZS5rZXlDb2RlO3JldHVybiJjaGFyQ29kZSJpbiBlPzA9PT0oZT1lLmNoYXJDb2RlKSYmMTM9PT10JiYoZT0xMyk6ZT10LDEwPT09ZSYmKGU9MTMpLDMyPD1lfHwxMz09PWU/ZTowfWZ1bmN0aW9uIGlIKCl7cmV0dXJuITB9ZnVuY3Rpb24gaXEoKXtyZXR1cm4hMX1mdW5jdGlvbiBpSyhlKXtmdW5jdGlvbiB0KHQsbixyLGwsYSl7Zm9yKHZhciBvIGluIHRoaXMuX3JlYWN0TmFtZT10LHRoaXMuX3RhcmdldEluc3Q9cix0aGlzLnR5cGU9bix0aGlzLm5hdGl2ZUV2ZW50PWwsdGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbCxlKWUuaGFzT3duUHJvcGVydHkobykmJih0PWVbb10sdGhpc1tvXT10P3QobCk6bFtvXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShudWxsIT1sLmRlZmF1bHRQcmV2ZW50ZWQ/bC5kZWZhdWx0UHJldmVudGVkOiExPT09bC5yZXR1cm5WYWx1ZSk/aUg6aXEsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1pcSx0aGlzfXJldHVybiB1KHQucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKToidW5rbm93biIhPXR5cGVvZiBlLnJldHVyblZhbHVlJiYoZS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9aUgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnN0b3BQcm9wYWdhdGlvbj9lLnN0b3BQcm9wYWdhdGlvbigpOiJ1bmtub3duIiE9dHlwZW9mIGUuY2FuY2VsQnViYmxlJiYoZS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9aUgpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7fSxpc1BlcnNpc3RlbnQ6aUh9KSx0fXZhciBpWSxpWCxpRyxpWixpSixpMCxpMSxpMj17ZXZlbnRQaGFzZTowLGJ1YmJsZXM6MCxjYW5jZWxhYmxlOjAsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDowLGlzVHJ1c3RlZDowfSxpMz1pSyhpMiksaTQ9dSh7fSxpMix7dmlldzowLGRldGFpbDowfSksaTY9aUsoaTQpLGk4PXUoe30saTQse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6dWksYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUucmVsYXRlZFRhcmdldD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuIm1vdmVtZW50WCJpbiBlP2UubW92ZW1lbnRYOihlIT09aTEmJihpMSYmIm1vdXNlbW92ZSI9PT1lLnR5cGU/KGlKPWUuc2NyZWVuWC1pMS5zY3JlZW5YLGkwPWUuc2NyZWVuWS1pMS5zY3JlZW5ZKTppMD1pSj0wLGkxPWUpLGlKKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFkiaW4gZT9lLm1vdmVtZW50WTppMH19KSxpNT1pSyhpOCksaTc9aUsodSh7fSxpOCx7ZGF0YVRyYW5zZmVyOjB9KSksaTk9aUsodSh7fSxpNCx7cmVsYXRlZFRhcmdldDowfSkpLHVlPWlLKHUoe30saTIse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pKSx1dD1pSyh1KHt9LGkyLHtjbGlwYm9hcmREYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJjbGlwYm9hcmREYXRhImluIGU/ZS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pKSx1bj1pSyh1KHt9LGkyLHtkYXRhOjB9KSksdXI9e0VzYzoiRXNjYXBlIixTcGFjZWJhcjoiICIsTGVmdDoiQXJyb3dMZWZ0IixVcDoiQXJyb3dVcCIsUmlnaHQ6IkFycm93UmlnaHQiLERvd246IkFycm93RG93biIsRGVsOiJEZWxldGUiLFdpbjoiT1MiLE1lbnU6IkNvbnRleHRNZW51IixBcHBzOiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixNb3pQcmludGFibGVLZXk6IlVuaWRlbnRpZmllZCJ9LHVsPXs4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTI6IkNsZWFyIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjYXBlIiwzMjoiICIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkFycm93TGVmdCIsMzg6IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0MDoiQXJyb3dEb3duIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwxMTQ6IkYzIiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6IkY5IiwxMjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoiRjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Nyb2xsTG9jayIsMjI0OiJNZXRhIn0sdWE9e0FsdDoiYWx0S2V5IixDb250cm9sOiJjdHJsS2V5IixNZXRhOiJtZXRhS2V5IixTaGlmdDoic2hpZnRLZXkifTtmdW5jdGlvbiB1byhlKXt2YXIgdD10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiB0LmdldE1vZGlmaWVyU3RhdGU/dC5nZXRNb2RpZmllclN0YXRlKGUpOiEhKGU9dWFbZV0pJiYhIXRbZV19ZnVuY3Rpb24gdWkoKXtyZXR1cm4gdW99dmFyIHV1PWlLKHUoe30saTQse2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9dXJbZS5rZXldfHxlLmtleTtpZigiVW5pZGVudGlmaWVkIiE9PXQpcmV0dXJuIHR9cmV0dXJuImtleXByZXNzIj09PWUudHlwZT8xMz09PShlPWlXKGUpKT8iRW50ZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP3VsW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTp1aSxjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP2lXKGUpOjB9LGtleUNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP2lXKGUpOiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT9lLmtleUNvZGU6MH19KSksdXM9aUsodSh7fSxpOCx7cG9pbnRlcklkOjAsd2lkdGg6MCxoZWlnaHQ6MCxwcmVzc3VyZTowLHRhbmdlbnRpYWxQcmVzc3VyZTowLHRpbHRYOjAsdGlsdFk6MCx0d2lzdDowLHBvaW50ZXJUeXBlOjAsaXNQcmltYXJ5OjB9KSksdWM9aUsodSh7fSxpNCx7dG91Y2hlczowLHRhcmdldFRvdWNoZXM6MCxjaGFuZ2VkVG91Y2hlczowLGFsdEtleTowLG1ldGFLZXk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxnZXRNb2RpZmllclN0YXRlOnVpfSkpLHVmPWlLKHUoe30saTIse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSkpLHVkPWlLKHUoe30saTgse2RlbHRhWDpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFYImluIGU/ZS5kZWx0YVg6IndoZWVsRGVsdGFYImluIGU/LWUud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVkiaW4gZT9lLmRlbHRhWToid2hlZWxEZWx0YVkiaW4gZT8tZS53aGVlbERlbHRhWToid2hlZWxEZWx0YSJpbiBlPy1lLndoZWVsRGVsdGE6MH0sZGVsdGFaOjAsZGVsdGFNb2RlOjB9KSksdXA9ITEsdW09bnVsbCx1aD1udWxsLHVnPW51bGwsdXk9bmV3IE1hcCx1dj1uZXcgTWFwLHViPVtdLHVrPSJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQiLnNwbGl0KCIgIik7ZnVuY3Rpb24gdXcoZSx0KXtzd2l0Y2goZSl7Y2FzZSJmb2N1c2luIjpjYXNlImZvY3Vzb3V0Ijp1bT1udWxsO2JyZWFrO2Nhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdsZWF2ZSI6dWg9bnVsbDticmVhaztjYXNlIm1vdXNlb3ZlciI6Y2FzZSJtb3VzZW91dCI6dWc9bnVsbDticmVhaztjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJvdXQiOnV5LmRlbGV0ZSh0LnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOnV2LmRlbGV0ZSh0LnBvaW50ZXJJZCl9fWZ1bmN0aW9uIHVTKGUsdCxuLHIsbCxhKXtyZXR1cm4gbnVsbD09PWV8fGUubmF0aXZlRXZlbnQhPT1hPyhlPXtibG9ja2VkT246dCxkb21FdmVudE5hbWU6bixldmVudFN5c3RlbUZsYWdzOnIsbmF0aXZlRXZlbnQ6YSx0YXJnZXRDb250YWluZXJzOltsXX0sbnVsbCE9PXQmJm51bGwhPT0odD1lTyh0KSkmJmlVKHQpKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLHQ9ZS50YXJnZXRDb250YWluZXJzLG51bGwhPT1sJiYtMT09PXQuaW5kZXhPZihsKSYmdC5wdXNoKGwpKSxlfWZ1bmN0aW9uIHVDKGUpe3ZhciB0PWVNKGUudGFyZ2V0KTtpZihudWxsIT09dCl7dmFyIG49dHcodCk7aWYobnVsbCE9PW4pe2lmKDEzPT09KHQ9bi50YWcpKXtpZihudWxsIT09KHQ9dFMobikpKXtlLmJsb2NrZWRPbj10LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZWs7dHJ5e3JldHVybiBlaz1lLHQoKX1maW5hbGx5e2VrPW59fShlLnByaW9yaXR5LGZ1bmN0aW9uKCl7aWYoMTM9PT1uLnRhZyl7dmFyIGU9b1gobiksdD1ucyhuLGUpO251bGwhPT10JiZvRyh0LG4sZSksaUkobixlKX19KTtyZXR1cm59fWVsc2UgaWYoMz09PXQmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPTM9PT1uLnRhZz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiB1RShlKXtpZihudWxsIT09ZS5ibG9ja2VkT24pcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49dUQoZS5uYXRpdmVFdmVudCk7aWYobnVsbCE9PW4pcmV0dXJuIG51bGwhPT0odD1lTyhuKSkmJmlVKHQpLGUuYmxvY2tlZE9uPW4sITE7dmFyIHI9bmV3KG49ZS5uYXRpdmVFdmVudCkuY29uc3RydWN0b3Iobi50eXBlLG4pO3RtPXIsbi50YXJnZXQuZGlzcGF0Y2hFdmVudChyKSx0bT1udWxsLHQuc2hpZnQoKX1yZXR1cm4hMH1mdW5jdGlvbiB1eChlLHQsbil7dUUoZSkmJm4uZGVsZXRlKHQpfWZ1bmN0aW9uIHV6KCl7dXA9ITEsbnVsbCE9PXVtJiZ1RSh1bSkmJih1bT1udWxsKSxudWxsIT09dWgmJnVFKHVoKSYmKHVoPW51bGwpLG51bGwhPT11ZyYmdUUodWcpJiYodWc9bnVsbCksdXkuZm9yRWFjaCh1eCksdXYuZm9yRWFjaCh1eCl9ZnVuY3Rpb24gdVAoZSx0KXtlLmJsb2NrZWRPbj09PXQmJihlLmJsb2NrZWRPbj1udWxsLHVwfHwodXA9ITAsYS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKGEudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksdXopKSl9dmFyIHVOPW51bGw7ZnVuY3Rpb24gdV8oZSl7dU4hPT1lJiYodU49ZSxhLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soYS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxmdW5jdGlvbigpe3VOPT09ZSYmKHVOPW51bGwpO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCs9Myl7dmFyIG49ZVt0XSxyPWVbdCsxXSxsPWVbdCsyXTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7aWYobnVsbD09PXVJKHJ8fG4pKWNvbnRpbnVlO2JyZWFrfXZhciBhPWVPKG4pO251bGwhPT1hJiYoZS5zcGxpY2UodCwzKSx0LT0zLGxsKGEse3BlbmRpbmc6ITAsZGF0YTpsLG1ldGhvZDpuLm1ldGhvZCxhY3Rpb246cn0scixsKSl9fSkpfWZ1bmN0aW9uIHVMKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHVQKHQsZSl9bnVsbCE9PXVtJiZ1UCh1bSxlKSxudWxsIT09dWgmJnVQKHVoLGUpLG51bGwhPT11ZyYmdVAodWcsZSksdXkuZm9yRWFjaCh0KSx1di5mb3JFYWNoKHQpO2Zvcih2YXIgbj0wO248dWIubGVuZ3RoO24rKyl7dmFyIHI9dWJbbl07ci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCl9Zm9yKDswPHViLmxlbmd0aCYmbnVsbD09PShuPXViWzBdKS5ibG9ja2VkT247KXVDKG4pLG51bGw9PT1uLmJsb2NrZWRPbiYmdWIuc2hpZnQoKTtpZihudWxsIT0obj0oZS5vd25lckRvY3VtZW50fHxlKS4kJHJlYWN0Rm9ybVJlcGxheSkpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrPTMpe3ZhciBsPW5bcl0sYT1uW3IrMV0sbz1lRChsKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSlvfHx1XyhuKTtlbHNlIGlmKG8pe3ZhciBpPW51bGw7aWYoYSYmYS5oYXNBdHRyaWJ1dGUoImZvcm1BY3Rpb24iKSl7aWYobD1hLG89ZUQoYSkpaT1vLmZvcm1BY3Rpb247ZWxzZSBpZihudWxsIT09dUkobCkpY29udGludWV9ZWxzZSBpPW8uYWN0aW9uOyJmdW5jdGlvbiI9PXR5cGVvZiBpP25bcisxXT1pOihuLnNwbGljZShyLDMpLHItPTMpLHVfKG4pfX19dmFyIHVUPXMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsdUY9ITA7ZnVuY3Rpb24gdU0oZSx0LG4scil7dmFyIGw9ZWssYT11VC50cmFuc2l0aW9uO3VULnRyYW5zaXRpb249bnVsbDt0cnl7ZWs9Mix1UihlLHQsbixyKX1maW5hbGx5e2VrPWwsdVQudHJhbnNpdGlvbj1hfX1mdW5jdGlvbiB1TyhlLHQsbixyKXt2YXIgbD1layxhPXVULnRyYW5zaXRpb247dVQudHJhbnNpdGlvbj1udWxsO3RyeXtlaz04LHVSKGUsdCxuLHIpfWZpbmFsbHl7ZWs9bCx1VC50cmFuc2l0aW9uPWF9fWZ1bmN0aW9uIHVSKGUsdCxuLHIpe2lmKHVGKXt2YXIgbD11RChyKTtpZihudWxsPT09bClzVShlLHQscix1QSxuKSx1dyhlLHIpO2Vsc2UgaWYoZnVuY3Rpb24oZSx0LG4scixsKXtzd2l0Y2godCl7Y2FzZSJmb2N1c2luIjpyZXR1cm4gdW09dVModW0sZSx0LG4scixsKSwhMDtjYXNlImRyYWdlbnRlciI6cmV0dXJuIHVoPXVTKHVoLGUsdCxuLHIsbCksITA7Y2FzZSJtb3VzZW92ZXIiOnJldHVybiB1Zz11Uyh1ZyxlLHQsbixyLGwpLCEwO2Nhc2UicG9pbnRlcm92ZXIiOnZhciBhPWwucG9pbnRlcklkO3JldHVybiB1eS5zZXQoYSx1Uyh1eS5nZXQoYSl8fG51bGwsZSx0LG4scixsKSksITA7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6cmV0dXJuIGE9bC5wb2ludGVySWQsdXYuc2V0KGEsdVModXYuZ2V0KGEpfHxudWxsLGUsdCxuLHIsbCkpLCEwfXJldHVybiExfShsLGUsdCxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZih1dyhlLHIpLDQmdCYmLTE8dWsuaW5kZXhPZihlKSl7Zm9yKDtudWxsIT09bDspe3ZhciBhPWVPKGwpO2lmKG51bGwhPT1hJiZmdW5jdGlvbihlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMzp2YXIgdD1lLnN0YXRlTm9kZTtpZih0LmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe3ZhciBuPWVkKHQucGVuZGluZ0xhbmVzKTswIT09biYmKGZ1bmN0aW9uKGUsdCl7Zm9yKGUucGVuZGluZ0xhbmVzfD0yLGUuZW50YW5nbGVkTGFuZXN8PTI7dDspe3ZhciBuPTE8PDMxLWVpKHQpO2UuZW50YW5nbGVtZW50c1sxXXw9bix0Jj1+bn19KHQsbiksbnYodCksMD09KDYmb2IpJiYob0k9WSgpKzUwMCxuYighMSkpKX1icmVhaztjYXNlIDEzOm82KGZ1bmN0aW9uKCl7dmFyIHQ9bnMoZSwyKTtudWxsIT09dCYmb0codCxlLDIpfSksaUkoZSwyKX19KGEpLG51bGw9PT0oYT11RChyKSkmJnNVKGUsdCxyLHVBLG4pLGE9PT1sKWJyZWFrO2w9YX1udWxsIT09bCYmci5zdG9wUHJvcGFnYXRpb24oKX1lbHNlIHNVKGUsdCxyLG51bGwsbil9fWZ1bmN0aW9uIHVEKGUpe3JldHVybiB1SShlPXRoKGUpKX12YXIgdUE9bnVsbDtmdW5jdGlvbiB1SShlKXtpZih1QT1udWxsLG51bGwhPT0oZT1lTShlKSkpe3ZhciB0PXR3KGUpO2lmKG51bGw9PT10KWU9bnVsbDtlbHNle3ZhciBuPXQudGFnO2lmKDEzPT09bil7aWYobnVsbCE9PShlPXRTKHQpKSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzPT09bil7aWYodC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gMz09PXQudGFnP3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSB0IT09ZSYmKGU9bnVsbCl9fXJldHVybiB1QT1lLG51bGx9ZnVuY3Rpb24gdVUoZSl7c3dpdGNoKGUpe2Nhc2UiY2FuY2VsIjpjYXNlImNsaWNrIjpjYXNlImNsb3NlIjpjYXNlImNvbnRleHRtZW51IjpjYXNlImNvcHkiOmNhc2UiY3V0IjpjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOmNhc2UiZm9jdXNpbiI6Y2FzZSJmb2N1c291dCI6Y2FzZSJpbnB1dCI6Y2FzZSJpbnZhbGlkIjpjYXNlImtleWRvd24iOmNhc2Uia2V5cHJlc3MiOmNhc2Uia2V5dXAiOmNhc2UibW91c2Vkb3duIjpjYXNlIm1vdXNldXAiOmNhc2UicGFzdGUiOmNhc2UicGF1c2UiOmNhc2UicGxheSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJ1cCI6Y2FzZSJyYXRlY2hhbmdlIjpjYXNlInJlc2V0IjpjYXNlInJlc2l6ZSI6Y2FzZSJzZWVrZWQiOmNhc2Uic3VibWl0IjpjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNoc3RhcnQiOmNhc2Uidm9sdW1lY2hhbmdlIjpjYXNlImNoYW5nZSI6Y2FzZSJzZWxlY3Rpb25jaGFuZ2UiOmNhc2UidGV4dElucHV0IjpjYXNlImNvbXBvc2l0aW9uc3RhcnQiOmNhc2UiY29tcG9zaXRpb25lbmQiOmNhc2UiY29tcG9zaXRpb251cGRhdGUiOmNhc2UiYmVmb3JlYmx1ciI6Y2FzZSJhZnRlcmJsdXIiOmNhc2UiYmVmb3JlaW5wdXQiOmNhc2UiYmx1ciI6Y2FzZSJmdWxsc2NyZWVuY2hhbmdlIjpjYXNlImZvY3VzIjpjYXNlImhhc2hjaGFuZ2UiOmNhc2UicG9wc3RhdGUiOmNhc2Uic2VsZWN0IjpjYXNlInNlbGVjdHN0YXJ0IjpyZXR1cm4gMjtjYXNlImRyYWciOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2Uic2Nyb2xsIjpjYXNlInRvZ2dsZSI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2Uid2hlZWwiOmNhc2UibW91c2VlbnRlciI6Y2FzZSJtb3VzZWxlYXZlIjpjYXNlInBvaW50ZXJlbnRlciI6Y2FzZSJwb2ludGVybGVhdmUiOnJldHVybiA4O2Nhc2UibWVzc2FnZSI6c3dpdGNoKFgoKSl7Y2FzZSBHOnJldHVybiAyO2Nhc2UgWjpyZXR1cm4gODtjYXNlIEo6Y2FzZSBlZTpyZXR1cm4gMzI7Y2FzZSBldDpyZXR1cm4gMjY4NDM1NDU2O2RlZmF1bHQ6cmV0dXJuIDMyfWRlZmF1bHQ6cmV0dXJuIDMyfX12YXIgdUI9bnVsbCx1Vj1udWxsLHVRPW51bGw7ZnVuY3Rpb24gdSQoKXtpZih1USlyZXR1cm4gdVE7dmFyIGUsdCxuPXVWLHI9bi5sZW5ndGgsbD0idmFsdWUiaW4gdUI/dUIudmFsdWU6dUIudGV4dENvbnRlbnQsYT1sLmxlbmd0aDtmb3IoZT0wO2U8ciYmbltlXT09PWxbZV07ZSsrKTt2YXIgbz1yLWU7Zm9yKHQ9MTt0PD1vJiZuW3ItdF09PT1sW2EtdF07dCsrKTtyZXR1cm4gdVE9bC5zbGljZShlLDE8dD8xLXQ6dm9pZCAwKX12YXIgdWo9WzksMTMsMjcsMzJdLHVXPWUkJiYiQ29tcG9zaXRpb25FdmVudCJpbiB3aW5kb3csdUg9bnVsbDtlJCYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmKHVIPWRvY3VtZW50LmRvY3VtZW50TW9kZSk7dmFyIHVxPWUkJiYiVGV4dEV2ZW50ImluIHdpbmRvdyYmIXVILHVLPWUkJiYoIXVXfHx1SCYmODx1SCYmMTE+PXVIKSx1WT0hMTtmdW5jdGlvbiB1WChlLHQpe3N3aXRjaChlKXtjYXNlImtleXVwIjpyZXR1cm4gLTEhPT11ai5pbmRleE9mKHQua2V5Q29kZSk7Y2FzZSJrZXlkb3duIjpyZXR1cm4gMjI5IT09dC5rZXlDb2RlO2Nhc2Uia2V5cHJlc3MiOmNhc2UibW91c2Vkb3duIjpjYXNlImZvY3Vzb3V0IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB1RyhlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mKGU9ZS5kZXRhaWwpJiYiZGF0YSJpbiBlP2UuZGF0YTpudWxsfXZhciB1Wj0hMSx1Sj17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gdTAoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10PyEhdUpbZS50eXBlXToidGV4dGFyZWEiPT09dH1mdW5jdGlvbiB1MShlLHQsbixyKXt0YihyKSwwPCh0PXNWKHQsIm9uQ2hhbmdlIikpLmxlbmd0aCYmKG49bmV3IGkzKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgdTI9bnVsbCx1Mz1udWxsO2Z1bmN0aW9uIHU0KGUpe3NNKGUsMCl9ZnVuY3Rpb24gdTYoZSl7aWYoZTQoZVIoZSkpKXJldHVybiBlfWZ1bmN0aW9uIHU4KGUsdCl7aWYoImNoYW5nZSI9PT1lKXJldHVybiB0fXZhciB1NT0hMTtpZihlJCl7aWYoZSQpe3ZhciB1Nz0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighdTcpe3ZhciB1OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1OS5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IiksdTc9ImZ1bmN0aW9uIj09dHlwZW9mIHU5Lm9uaW5wdXR9cj11N31lbHNlIHI9ITE7dTU9ciYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBzZSgpe3UyJiYodTIuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHN0KSx1Mz11Mj1udWxsKX1mdW5jdGlvbiBzdChlKXtpZigidmFsdWUiPT09ZS5wcm9wZXJ0eU5hbWUmJnU2KHUzKSl7dmFyIHQ9W107dTEodCx1MyxlLHRoKGUpKSxpVih1NCx0KX19ZnVuY3Rpb24gc24oZSx0LG4peyJmb2N1c2luIj09PWU/KHNlKCksdTI9dCx1Mz1uLHUyLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixzdCkpOiJmb2N1c291dCI9PT1lJiZzZSgpfWZ1bmN0aW9uIHNyKGUpe2lmKCJzZWxlY3Rpb25jaGFuZ2UiPT09ZXx8ImtleXVwIj09PWV8fCJrZXlkb3duIj09PWUpcmV0dXJuIHU2KHUzKX1mdW5jdGlvbiBzbChlLHQpe2lmKCJjbGljayI9PT1lKXJldHVybiB1Nih0KX1mdW5jdGlvbiBzYShlLHQpe2lmKCJpbnB1dCI9PT1lfHwiY2hhbmdlIj09PWUpcmV0dXJuIHU2KHQpfWZ1bmN0aW9uIHNvKGUpe2Zvcig7ZSYmZS5maXJzdENoaWxkOyllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX1mdW5jdGlvbiBzaShlLHQpe3ZhciBuLHI9c28oZSk7Zm9yKGU9MDtyOyl7aWYoMz09PXIubm9kZVR5cGUpe2lmKG49ZStyLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZuPj10KXJldHVybntub2RlOnIsb2Zmc2V0OnQtZX07ZT1ufWU6e2Zvcig7cjspe2lmKHIubmV4dFNpYmxpbmcpe3I9ci5uZXh0U2libGluZzticmVhayBlfXI9ci5wYXJlbnROb2RlfXI9dm9pZCAwfXI9c28ocil9fWZ1bmN0aW9uIHN1KCl7Zm9yKHZhciBlPXdpbmRvdyx0PWU2KCk7dCBpbnN0YW5jZW9mIGUuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7dmFyIG49InN0cmluZyI9PXR5cGVvZiB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZn1jYXRjaChlKXtuPSExfWlmKG4pZT10LmNvbnRlbnRXaW5kb3c7ZWxzZSBicmVhazt0PWU2KGUuZG9jdW1lbnQpfXJldHVybiB0fWZ1bmN0aW9uIHNzKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKCJpbnB1dCI9PT10JiYoInRleHQiPT09ZS50eXBlfHwic2VhcmNoIj09PWUudHlwZXx8InRlbCI9PT1lLnR5cGV8fCJ1cmwiPT09ZS50eXBlfHwicGFzc3dvcmQiPT09ZS50eXBlKXx8InRleHRhcmVhIj09PXR8fCJ0cnVlIj09PWUuY29udGVudEVkaXRhYmxlKX12YXIgc2M9ZSQmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsc2Y9bnVsbCxzZD1udWxsLHNwPW51bGwsc209ITE7ZnVuY3Rpb24gc2goZSx0LG4pe3ZhciByPW4ud2luZG93PT09bj9uLmRvY3VtZW50Ojk9PT1uLm5vZGVUeXBlP246bi5vd25lckRvY3VtZW50O3NtfHxudWxsPT1zZnx8c2YhPT1lNihyKXx8KHI9InNlbGVjdGlvblN0YXJ0ImluKHI9c2YpJiZzcyhyKT97c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OnthbmNob3JOb2RlOihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSkuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9LHNwJiZuUShzcCxyKXx8KHNwPXIsMDwocj1zVihzZCwib25TZWxlY3QiKSkubGVuZ3RoJiYodD1uZXcgaTMoIm9uU2VsZWN0Iiwic2VsZWN0IixudWxsLHQsbiksZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczpyfSksdC50YXJnZXQ9c2YpKSl9ZnVuY3Rpb24gc2coZSx0KXt2YXIgbj17fTtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldPXQudG9Mb3dlckNhc2UoKSxuWyJXZWJraXQiK2VdPSJ3ZWJraXQiK3QsblsiTW96IitlXT0ibW96Iit0LG59dmFyIHN5PXthbmltYXRpb25lbmQ6c2coIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkVuZCIpLGFuaW1hdGlvbml0ZXJhdGlvbjpzZygiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0aW9uIiksYW5pbWF0aW9uc3RhcnQ6c2coIkFuaW1hdGlvbiIsIkFuaW1hdGlvblN0YXJ0IiksdHJhbnNpdGlvbmVuZDpzZygiVHJhbnNpdGlvbiIsIlRyYW5zaXRpb25FbmQiKX0sc3Y9e30sc2I9e307ZnVuY3Rpb24gc2soZSl7aWYoc3ZbZV0pcmV0dXJuIHN2W2VdO2lmKCFzeVtlXSlyZXR1cm4gZTt2YXIgdCxuPXN5W2VdO2Zvcih0IGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eSh0KSYmdCBpbiBzYilyZXR1cm4gc3ZbZV09blt0XTtyZXR1cm4gZX1lJCYmKHNiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJBbmltYXRpb25FdmVudCJpbiB3aW5kb3d8fChkZWxldGUgc3kuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgc3kuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgc3kuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSwiVHJhbnNpdGlvbkV2ZW50ImluIHdpbmRvd3x8ZGVsZXRlIHN5LnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7dmFyIHN3PXNrKCJhbmltYXRpb25lbmQiKSxzUz1zaygiYW5pbWF0aW9uaXRlcmF0aW9uIiksc0M9c2soImFuaW1hdGlvbnN0YXJ0Iiksc0U9c2soInRyYW5zaXRpb25lbmQiKSxzeD1uZXcgTWFwLHN6PSJhYm9ydCBhdXhDbGljayBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHNjcm9sbEVuZCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24gc1AoZSx0KXtzeC5zZXQoZSx0KSxlVih0LFtlXSl9Zm9yKHZhciBzTj0wO3NOPHN6Lmxlbmd0aDtzTisrKXt2YXIgc189c3pbc05dO3NQKHNfLnRvTG93ZXJDYXNlKCksIm9uIisoc19bMF0udG9VcHBlckNhc2UoKStzXy5zbGljZSgxKSkpfXNQKHN3LCJvbkFuaW1hdGlvbkVuZCIpLHNQKHNTLCJvbkFuaW1hdGlvbkl0ZXJhdGlvbiIpLHNQKHNDLCJvbkFuaW1hdGlvblN0YXJ0Iiksc1AoImRibGNsaWNrIiwib25Eb3VibGVDbGljayIpLHNQKCJmb2N1c2luIiwib25Gb2N1cyIpLHNQKCJmb2N1c291dCIsIm9uQmx1ciIpLHNQKHNFLCJvblRyYW5zaXRpb25FbmQiKSxlUSgib25Nb3VzZUVudGVyIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pLGVRKCJvbk1vdXNlTGVhdmUiLFsibW91c2VvdXQiLCJtb3VzZW92ZXIiXSksZVEoIm9uUG9pbnRlckVudGVyIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKSxlUSgib25Qb2ludGVyTGVhdmUiLFsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl0pLGVWKCJvbkNoYW5nZSIsImNoYW5nZSBjbGljayBmb2N1c2luIGZvY3Vzb3V0IGlucHV0IGtleWRvd24ga2V5dXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKSxlVigib25TZWxlY3QiLCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpLGVWKCJvbkJlZm9yZUlucHV0IixbImNvbXBvc2l0aW9uZW5kIiwia2V5cHJlc3MiLCJ0ZXh0SW5wdXQiLCJwYXN0ZSJdKSxlVigib25Db21wb3NpdGlvbkVuZCIsImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKSxlVigib25Db21wb3NpdGlvblN0YXJ0IiwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSksZVYoIm9uQ29tcG9zaXRpb25VcGRhdGUiLCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7dmFyIHNMPSJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZyIuc3BsaXQoIiAiKSxzVD1uZXcgU2V0KCJjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCBzY3JvbGxlbmQgdG9nZ2xlIi5zcGxpdCgiICIpLmNvbmNhdChzTCkpO2Z1bmN0aW9uIHNGKGUsdCxuKXt2YXIgcj1lLnR5cGV8fCJ1bmtub3duLWV2ZW50IjtlLmN1cnJlbnRUYXJnZXQ9bixmdW5jdGlvbihlLHQsbixyLGwsYSxvLHUscyl7aWYoYVIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGFMKXtpZihhTCl7dmFyIGM9YVQ7YUw9ITEsYVQ9bnVsbH1lbHNlIHRocm93IEVycm9yKGkoMTk4KSk7YUZ8fChhRj0hMCxhTT1jKX19KHIsdCx2b2lkIDAsZSksZS5jdXJyZW50VGFyZ2V0PW51bGx9ZnVuY3Rpb24gc00oZSx0KXt0PTAhPSg0JnQpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dLGw9ci5ldmVudDtyPXIubGlzdGVuZXJzO2U6e3ZhciBhPXZvaWQgMDtpZih0KWZvcih2YXIgbz1yLmxlbmd0aC0xOzA8PW87by0tKXt2YXIgaT1yW29dLHU9aS5pbnN0YW5jZSxzPWkuY3VycmVudFRhcmdldDtpZihpPWkubGlzdGVuZXIsdSE9PWEmJmwuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO3NGKGwsaSxzKSxhPXV9ZWxzZSBmb3Iobz0wO288ci5sZW5ndGg7bysrKXtpZih1PShpPXJbb10pLmluc3RhbmNlLHM9aS5jdXJyZW50VGFyZ2V0LGk9aS5saXN0ZW5lcix1IT09YSYmbC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7c0YobCxpLHMpLGE9dX19fWlmKGFGKXRocm93IGU9YU0sYUY9ITEsYU09bnVsbCxlfWZ1bmN0aW9uIHNPKGUsdCl7dmFyIG49dFtlUF07dm9pZCAwPT09biYmKG49dFtlUF09bmV3IFNldCk7dmFyIHI9ZSsiX19idWJibGUiO24uaGFzKHIpfHwoc0kodCxlLDIsITEpLG4uYWRkKHIpKX1mdW5jdGlvbiBzUihlLHQsbil7dmFyIHI9MDt0JiYocnw9NCksc0kobixlLHIsdCl9dmFyIHNEPSJfcmVhY3RMaXN0ZW5pbmciK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIHNBKGUpe2lmKCFlW3NEXSl7ZVtzRF09ITAsZVUuZm9yRWFjaChmdW5jdGlvbih0KXsic2VsZWN0aW9uY2hhbmdlIiE9PXQmJihzVC5oYXModCl8fHNSKHQsITEsZSksc1IodCwhMCxlKSl9KTt2YXIgdD05PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudDtudWxsPT09dHx8dFtzRF18fCh0W3NEXT0hMCxzUigic2VsZWN0aW9uY2hhbmdlIiwhMSx0KSl9fWZ1bmN0aW9uIHNJKGUsdCxuLHIpe3N3aXRjaCh1VSh0KSl7Y2FzZSAyOnZhciBsPXVNO2JyZWFrO2Nhc2UgODpsPXVPO2JyZWFrO2RlZmF1bHQ6bD11Un1uPWwuYmluZChudWxsLHQsbixlKSxsPXZvaWQgMCxpJCYmKCJ0b3VjaHN0YXJ0Ij09PXR8fCJ0b3VjaG1vdmUiPT09dHx8IndoZWVsIj09PXQpJiYobD0hMCkscj92b2lkIDAhPT1sP2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4se2NhcHR1cmU6ITAscGFzc2l2ZTpsfSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMCk6dm9pZCAwIT09bD9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtwYXNzaXZlOmx9KTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKX1mdW5jdGlvbiBzVShlLHQsbixyLGwpe3ZhciBhPXI7aWYoMD09KDEmdCkmJjA9PSgyJnQpJiZudWxsIT09cillOmZvcig7Oyl7aWYobnVsbD09PXIpcmV0dXJuO3ZhciBvPXIudGFnO2lmKDM9PT1vfHw0PT09byl7dmFyIGk9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztpZihpPT09bHx8OD09PWkubm9kZVR5cGUmJmkucGFyZW50Tm9kZT09PWwpYnJlYWs7aWYoND09PW8pZm9yKG89ci5yZXR1cm47bnVsbCE9PW87KXt2YXIgdT1vLnRhZztpZigoMz09PXV8fDQ9PT11KSYmKCh1PW8uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pPT09bHx8OD09PXUubm9kZVR5cGUmJnUucGFyZW50Tm9kZT09PWwpKXJldHVybjtvPW8ucmV0dXJufWZvcig7bnVsbCE9PWk7KXtpZihudWxsPT09KG89ZU0oaSkpKXJldHVybjtpZig1PT09KHU9by50YWcpfHw2PT09dXx8MjY9PT11fHwyNz09PXUpe3I9YT1vO2NvbnRpbnVlIGV9aT1pLnBhcmVudE5vZGV9fXI9ci5yZXR1cm59aVYoZnVuY3Rpb24oKXt2YXIgcj1hLGw9dGgobiksbz1bXTtlOnt2YXIgaT1zeC5nZXQoZSk7aWYodm9pZCAwIT09aSl7dmFyIHU9aTMscz1lO3N3aXRjaChlKXtjYXNlImtleXByZXNzIjppZigwPT09aVcobikpYnJlYWsgZTtjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOnU9dXU7YnJlYWs7Y2FzZSJmb2N1c2luIjpzPSJmb2N1cyIsdT1pOTticmVhaztjYXNlImZvY3Vzb3V0IjpzPSJibHVyIix1PWk5O2JyZWFrO2Nhc2UiYmVmb3JlYmx1ciI6Y2FzZSJhZnRlcmJsdXIiOnU9aTk7YnJlYWs7Y2FzZSJjbGljayI6aWYoMj09PW4uYnV0dG9uKWJyZWFrIGU7Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNldXAiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlImNvbnRleHRtZW51Ijp1PWk1O2JyZWFrO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOnU9aTc7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2UidG91Y2hzdGFydCI6dT11YzticmVhaztjYXNlIHN3OmNhc2Ugc1M6Y2FzZSBzQzp1PXVlO2JyZWFrO2Nhc2Ugc0U6dT11ZjticmVhaztjYXNlInNjcm9sbCI6Y2FzZSJzY3JvbGxlbmQiOnU9aTY7YnJlYWs7Y2FzZSJ3aGVlbCI6dT11ZDticmVhaztjYXNlImNvcHkiOmNhc2UiY3V0IjpjYXNlInBhc3RlIjp1PXV0O2JyZWFrO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOmNhc2UibG9zdHBvaW50ZXJjYXB0dXJlIjpjYXNlInBvaW50ZXJjYW5jZWwiOmNhc2UicG9pbnRlcmRvd24iOmNhc2UicG9pbnRlcm1vdmUiOmNhc2UicG9pbnRlcm91dCI6Y2FzZSJwb2ludGVyb3ZlciI6Y2FzZSJwb2ludGVydXAiOnU9dXN9dmFyIGM9MCE9KDQmdCksZj0hYyYmKCJzY3JvbGwiPT09ZXx8InNjcm9sbGVuZCI9PT1lKSxkPWM/bnVsbCE9PWk/aSsiQ2FwdHVyZSI6bnVsbDppO2M9W107Zm9yKHZhciBwLG09cjtudWxsIT09bTspe3ZhciBoPW07aWYocD1oLnN0YXRlTm9kZSw1IT09KGg9aC50YWcpJiYyNiE9PWgmJjI3IT09aHx8bnVsbD09PXB8fG51bGw9PT1kfHxudWxsIT0oaD1pUShtLGQpKSYmYy5wdXNoKHNCKG0saCxwKSksZilicmVhazttPW0ucmV0dXJufTA8Yy5sZW5ndGgmJihpPW5ldyB1KGkscyxudWxsLG4sbCksby5wdXNoKHtldmVudDppLGxpc3RlbmVyczpjfSkpfX1pZigwPT0oNyZ0KSl7aWYoaT0ibW91c2VvdmVyIj09PWV8fCJwb2ludGVyb3ZlciI9PT1lLHU9Im1vdXNlb3V0Ij09PWV8fCJwb2ludGVyb3V0Ij09PWUsIShpJiZuIT09dG0mJihzPW4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCkmJihlTShzKXx8c1tlel0pKSYmKHV8fGkpJiYoaT1sLndpbmRvdz09PWw/bDooaT1sLm93bmVyRG9jdW1lbnQpP2kuZGVmYXVsdFZpZXd8fGkucGFyZW50V2luZG93OndpbmRvdyx1PyhzPW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQsdT1yLG51bGwhPT0ocz1zP2VNKHMpOm51bGwpJiYoZj10dyhzKSxjPXMudGFnLHMhPT1mfHw1IT09YyYmMjchPT1jJiY2IT09YykmJihzPW51bGwpKToodT1udWxsLHM9ciksdSE9PXMpKXtpZihjPWk1LGg9Im9uTW91c2VMZWF2ZSIsZD0ib25Nb3VzZUVudGVyIixtPSJtb3VzZSIsKCJwb2ludGVyb3V0Ij09PWV8fCJwb2ludGVyb3ZlciI9PT1lKSYmKGM9dXMsaD0ib25Qb2ludGVyTGVhdmUiLGQ9Im9uUG9pbnRlckVudGVyIixtPSJwb2ludGVyIiksZj1udWxsPT11P2k6ZVIodSkscD1udWxsPT1zP2k6ZVIocyksKGk9bmV3IGMoaCxtKyJsZWF2ZSIsdSxuLGwpKS50YXJnZXQ9ZixpLnJlbGF0ZWRUYXJnZXQ9cCxoPW51bGwsZU0obCk9PT1yJiYoKGM9bmV3IGMoZCxtKyJlbnRlciIscyxuLGwpKS50YXJnZXQ9cCxjLnJlbGF0ZWRUYXJnZXQ9ZixoPWMpLGY9aCx1JiZzKXQ6e2ZvcihjPXUsZD1zLG09MCxwPWM7cDtwPXNRKHApKW0rKztmb3IocD0wLGg9ZDtoO2g9c1EoaCkpcCsrO2Zvcig7MDxtLXA7KWM9c1EoYyksbS0tO2Zvcig7MDxwLW07KWQ9c1EoZCkscC0tO2Zvcig7bS0tOyl7aWYoYz09PWR8fG51bGwhPT1kJiZjPT09ZC5hbHRlcm5hdGUpYnJlYWsgdDtjPXNRKGMpLGQ9c1EoZCl9Yz1udWxsfWVsc2UgYz1udWxsO251bGwhPT11JiZzJChvLGksdSxjLCExKSxudWxsIT09cyYmbnVsbCE9PWYmJnMkKG8sZixzLGMsITApfWU6e2lmKCJzZWxlY3QiPT09KHU9KGk9cj9lUihyKTp3aW5kb3cpLm5vZGVOYW1lJiZpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpfHwiaW5wdXQiPT09dSYmImZpbGUiPT09aS50eXBlKXZhciBnLHk9dTg7ZWxzZSBpZih1MChpKSl7aWYodTUpeT1zYTtlbHNle3k9c3I7dmFyIHY9c259fWVsc2UodT1pLm5vZGVOYW1lKSYmImlucHV0Ij09PXUudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT1pLnR5cGV8fCJyYWRpbyI9PT1pLnR5cGUpJiYoeT1zbCk7aWYoeSYmKHk9eShlLHIpKSl7dTEobyx5LG4sbCk7YnJlYWsgZX12JiZ2KGUsaSxyKSwiZm9jdXNvdXQiPT09ZSYmciYmIm51bWJlciI9PT1pLnR5cGUmJm51bGwhPXIubWVtb2l6ZWRQcm9wcy52YWx1ZSYmdGUoaSwibnVtYmVyIixpLnZhbHVlKX1zd2l0Y2godj1yP2VSKHIpOndpbmRvdyxlKXtjYXNlImZvY3VzaW4iOih1MCh2KXx8InRydWUiPT09di5jb250ZW50RWRpdGFibGUpJiYoc2Y9dixzZD1yLHNwPW51bGwpO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOnNwPXNkPXNmPW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOnNtPSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6Y2FzZSJkcmFnZW5kIjpzbT0hMSxzaChvLG4sbCk7YnJlYWs7Y2FzZSJzZWxlY3Rpb25jaGFuZ2UiOmlmKHNjKWJyZWFrO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6c2gobyxuLGwpfWlmKHVXKXQ6e3N3aXRjaChlKXtjYXNlImNvbXBvc2l0aW9uc3RhcnQiOnZhciBiPSJvbkNvbXBvc2l0aW9uU3RhcnQiO2JyZWFrIHQ7Y2FzZSJjb21wb3NpdGlvbmVuZCI6Yj0ib25Db21wb3NpdGlvbkVuZCI7YnJlYWsgdDtjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpiPSJvbkNvbXBvc2l0aW9uVXBkYXRlIjticmVhayB0fWI9dm9pZCAwfWVsc2UgdVo/dVgoZSxuKSYmKGI9Im9uQ29tcG9zaXRpb25FbmQiKToia2V5ZG93biI9PT1lJiYyMjk9PT1uLmtleUNvZGUmJihiPSJvbkNvbXBvc2l0aW9uU3RhcnQiKTtiJiYodUsmJiJrbyIhPT1uLmxvY2FsZSYmKHVafHwib25Db21wb3NpdGlvblN0YXJ0IiE9PWI/Im9uQ29tcG9zaXRpb25FbmQiPT09YiYmdVomJihnPXUkKCkpOih1Vj0idmFsdWUiaW4odUI9bCk/dUIudmFsdWU6dUIudGV4dENvbnRlbnQsdVo9ITApKSwwPCh2PXNWKHIsYikpLmxlbmd0aCYmKGI9bmV3IHVuKGIsZSxudWxsLG4sbCksby5wdXNoKHtldmVudDpiLGxpc3RlbmVyczp2fSksZz9iLmRhdGE9ZzpudWxsIT09KGc9dUcobikpJiYoYi5kYXRhPWcpKSksKGc9dXE/ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIHVHKHQpO2Nhc2Uia2V5cHJlc3MiOmlmKDMyIT09dC53aGljaClyZXR1cm4gbnVsbDtyZXR1cm4gdVk9ITAsIiAiO2Nhc2UidGV4dElucHV0IjpyZXR1cm4iICI9PT0oZT10LmRhdGEpJiZ1WT9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19KGUsbik6ZnVuY3Rpb24oZSx0KXtpZih1WilyZXR1cm4iY29tcG9zaXRpb25lbmQiPT09ZXx8IXVXJiZ1WChlLHQpPyhlPXUkKCksdVE9dVY9dUI9bnVsbCx1Wj0hMSxlKTpudWxsO3N3aXRjaChlKXtjYXNlInBhc3RlIjpkZWZhdWx0OnJldHVybiBudWxsO2Nhc2Uia2V5cHJlc3MiOmlmKCEodC5jdHJsS2V5fHx0LmFsdEtleXx8dC5tZXRhS2V5KXx8dC5jdHJsS2V5JiZ0LmFsdEtleSl7aWYodC5jaGFyJiYxPHQuY2hhci5sZW5ndGgpcmV0dXJuIHQuY2hhcjtpZih0LndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpfXJldHVybiBudWxsO2Nhc2UiY29tcG9zaXRpb25lbmQiOnJldHVybiB1SyYmImtvIiE9PXQubG9jYWxlP251bGw6dC5kYXRhfX0oZSxuKSkmJjA8KGI9c1Yociwib25CZWZvcmVJbnB1dCIpKS5sZW5ndGgmJih2PW5ldyB1bigib25CZWZvcmVJbnB1dCIsImJlZm9yZWlucHV0IixudWxsLG4sbCksby5wdXNoKHtldmVudDp2LGxpc3RlbmVyczpifSksdi5kYXRhPWcpLGZ1bmN0aW9uKGUsdCxuLHIsbCl7aWYoInN1Ym1pdCI9PT10JiZuJiZuLnN0YXRlTm9kZT09PWwpe3ZhciBhPWVEKGwpLmFjdGlvbixvPXIuc3VibWl0dGVyO2lmKG8mJm51bGwhPSh0PSh0PWVEKG8pKT90LmZvcm1BY3Rpb246by5nZXRBdHRyaWJ1dGUoImZvcm1BY3Rpb24iKSkmJihhPXQsbz1udWxsKSwiZnVuY3Rpb24iPT10eXBlb2YgYSl7dmFyIGk9bmV3IGkzKCJhY3Rpb24iLCJhY3Rpb24iLG51bGwscixsKTtlLnB1c2goe2V2ZW50OmksbGlzdGVuZXJzOlt7aW5zdGFuY2U6bnVsbCxsaXN0ZW5lcjpmdW5jdGlvbigpe2lmKCFyLmRlZmF1bHRQcmV2ZW50ZWQpe2lmKGkucHJldmVudERlZmF1bHQoKSxvKXt2YXIgZT1vLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtlLm5hbWU9by5uYW1lLGUudmFsdWU9by52YWx1ZSxvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsbyk7dmFyIHQ9bmV3IEZvcm1EYXRhKGwpO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX1lbHNlIHQ9bmV3IEZvcm1EYXRhKGwpO2xsKG4se3BlbmRpbmc6ITAsZGF0YTp0LG1ldGhvZDpsLm1ldGhvZCxhY3Rpb246YX0sYSx0KX19LGN1cnJlbnRUYXJnZXQ6bH1dfSl9fX0obyxlLHIsbixsKX1zTShvLHQpfSl9ZnVuY3Rpb24gc0IoZSx0LG4pe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOnQsY3VycmVudFRhcmdldDpufX1mdW5jdGlvbiBzVihlLHQpe2Zvcih2YXIgbj10KyJDYXB0dXJlIixyPVtdO251bGwhPT1lOyl7dmFyIGw9ZSxhPWwuc3RhdGVOb2RlOzUhPT0obD1sLnRhZykmJjI2IT09bCYmMjchPT1sfHxudWxsPT09YXx8KG51bGwhPShsPWlRKGUsbikpJiZyLnVuc2hpZnQoc0IoZSxsLGEpKSxudWxsIT0obD1pUShlLHQpKSYmci5wdXNoKHNCKGUsbCxhKSkpLGU9ZS5yZXR1cm59cmV0dXJuIHJ9ZnVuY3Rpb24gc1EoZSl7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7ZG8gZT1lLnJldHVybjt3aGlsZShlJiY1IT09ZS50YWcmJjI3IT09ZS50YWcpO3JldHVybiBlfHxudWxsfWZ1bmN0aW9uIHMkKGUsdCxuLHIsbCl7Zm9yKHZhciBhPXQuX3JlYWN0TmFtZSxvPVtdO251bGwhPT1uJiZuIT09cjspe3ZhciBpPW4sdT1pLmFsdGVybmF0ZSxzPWkuc3RhdGVOb2RlO2lmKGk9aS50YWcsbnVsbCE9PXUmJnU9PT1yKWJyZWFrOzUhPT1pJiYyNiE9PWkmJjI3IT09aXx8bnVsbD09PXN8fCh1PXMsbD9udWxsIT0ocz1pUShuLGEpKSYmby51bnNoaWZ0KHNCKG4scyx1KSk6bHx8bnVsbCE9KHM9aVEobixhKSkmJm8ucHVzaChzQihuLHMsdSkpKSxuPW4ucmV0dXJufTAhPT1vLmxlbmd0aCYmZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczpvfSl9dmFyIHNqPS9cclxuPy9nLHNXPS9cdTAwMDB8XHVGRkZEL2c7ZnVuY3Rpb24gc0goZSl7cmV0dXJuKCJzdHJpbmciPT10eXBlb2YgZT9lOiIiK2UpLnJlcGxhY2Uoc2osIlxuIikucmVwbGFjZShzVywiIil9ZnVuY3Rpb24gc3EoZSx0LG4pe2lmKHQ9c0godCksc0goZSkhPT10JiZuKXRocm93IEVycm9yKGkoNDI1KSl9ZnVuY3Rpb24gc0soKXt9ZnVuY3Rpb24gc1koZSx0LG4scixsLGEpe3N3aXRjaChuKXtjYXNlImNoaWxkcmVuIjoic3RyaW5nIj09dHlwZW9mIHI/ImJvZHkiPT09dHx8InRleHRhcmVhIj09PXQmJiIiPT09cnx8dHUoZSxyKToibnVtYmVyIj09dHlwZW9mIHImJiJib2R5IiE9PXQmJnR1KGUsIiIrcik7YnJlYWs7Y2FzZSJjbGFzc05hbWUiOmVLKGUsImNsYXNzIixyKTticmVhaztjYXNlInRhYkluZGV4IjplSyhlLCJ0YWJpbmRleCIscik7YnJlYWs7Y2FzZSJkaXIiOmNhc2Uicm9sZSI6Y2FzZSJ2aWV3Qm94IjpjYXNlIndpZHRoIjpjYXNlImhlaWdodCI6ZUsoZSxuLHIpO2JyZWFrO2Nhc2Uic3R5bGUiOnRmKGUscixhKTticmVhaztjYXNlInNyYyI6Y2FzZSJocmVmIjppZihudWxsPT1yfHwiZnVuY3Rpb24iPT10eXBlb2Ygcnx8InN5bWJvbCI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZShuKTticmVha31lLnNldEF0dHJpYnV0ZShuLCIiK3IpO2JyZWFrO2Nhc2UiYWN0aW9uIjpjYXNlImZvcm1BY3Rpb24iOmlmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXtlLnNldEF0dHJpYnV0ZShuLCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcJ3JlIHRyeWluZyB0byB1c2UgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgaW4gYSBzdWJtaXQgZXZlbnQgaGFuZGxlciwgY29uc2lkZXIgYWxzbyBjYWxsaW5nIGV2ZW50LnByZXZlbnREZWZhdWx0KCkuJykiKTticmVha31pZigiZnVuY3Rpb24iPT10eXBlb2YgYSYmKCJmb3JtQWN0aW9uIj09PW4/KCJpbnB1dCIhPT10JiZzWShlLHQsIm5hbWUiLGwubmFtZSxsLG51bGwpLHNZKGUsdCwiZm9ybUVuY1R5cGUiLGwuZm9ybUVuY1R5cGUsbCxudWxsKSxzWShlLHQsImZvcm1NZXRob2QiLGwuZm9ybU1ldGhvZCxsLG51bGwpLHNZKGUsdCwiZm9ybVRhcmdldCIsbC5mb3JtVGFyZ2V0LGwsbnVsbCkpOihzWShlLHQsImVuY1R5cGUiLGwuZW5jVHlwZSxsLG51bGwpLHNZKGUsdCwibWV0aG9kIixsLm1ldGhvZCxsLG51bGwpLHNZKGUsdCwidGFyZ2V0IixsLnRhcmdldCxsLG51bGwpKSksbnVsbD09cnx8InN5bWJvbCI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZShuKTticmVha31lLnNldEF0dHJpYnV0ZShuLCIiK3IpO2JyZWFrO2Nhc2Uib25DbGljayI6bnVsbCE9ciYmKGUub25jbGljaz1zSyk7YnJlYWs7Y2FzZSJvblNjcm9sbCI6bnVsbCE9ciYmc08oInNjcm9sbCIsZSk7YnJlYWs7Y2FzZSJvblNjcm9sbEVuZCI6bnVsbCE9ciYmc08oInNjcm9sbGVuZCIsZSk7YnJlYWs7Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYobnVsbCE9cil7aWYoIm9iamVjdCIhPXR5cGVvZiByfHwhKCJfX2h0bWwiaW4gcikpdGhyb3cgRXJyb3IoaSg2MSkpO2lmKG51bGwhPShyPXIuX19odG1sKSl7aWYobnVsbCE9bC5jaGlsZHJlbil0aHJvdyBFcnJvcihpKDYwKSk7dGkoZSxyKX19YnJlYWs7Y2FzZSJtdWx0aXBsZSI6ZS5tdWx0aXBsZT1yJiYiZnVuY3Rpb24iIT10eXBlb2YgciYmInN5bWJvbCIhPXR5cGVvZiByO2JyZWFrO2Nhc2UibXV0ZWQiOmUubXV0ZWQ9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHImJiJzeW1ib2wiIT10eXBlb2YgcjticmVhaztjYXNlInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyI6Y2FzZSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciOmNhc2UiZGVmYXVsdFZhbHVlIjpjYXNlImRlZmF1bHRDaGVja2VkIjpjYXNlImlubmVySFRNTCI6Y2FzZSJyZWYiOmNhc2UiYXV0b0ZvY3VzIjpicmVhaztjYXNlInhsaW5rSHJlZiI6aWYobnVsbD09cnx8ImZ1bmN0aW9uIj09dHlwZW9mIHJ8fCJib29sZWFuIj09dHlwZW9mIHJ8fCJzeW1ib2wiPT10eXBlb2Ygcil7ZS5yZW1vdmVBdHRyaWJ1dGUoInhsaW5rOmhyZWYiKTticmVha31lLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6aHJlZiIsIiIrcik7YnJlYWs7Y2FzZSJjb250ZW50RWRpdGFibGUiOmNhc2Uic3BlbGxDaGVjayI6Y2FzZSJkcmFnZ2FibGUiOmNhc2UidmFsdWUiOmNhc2UiYXV0b1JldmVyc2UiOmNhc2UiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCI6Y2FzZSJmb2N1c2FibGUiOmNhc2UicHJlc2VydmVBbHBoYSI6bnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHImJiJzeW1ib2wiIT10eXBlb2Ygcj9lLnNldEF0dHJpYnV0ZShuLCIiK3IpOmUucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrO2Nhc2UiYWxsb3dGdWxsU2NyZWVuIjpjYXNlImFzeW5jIjpjYXNlImF1dG9QbGF5IjpjYXNlImNvbnRyb2xzIjpjYXNlImRlZmF1bHQiOmNhc2UiZGVmZXIiOmNhc2UiZGlzYWJsZWQiOmNhc2UiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUiOmNhc2UiZGlzYWJsZVJlbW90ZVBsYXliYWNrIjpjYXNlImZvcm1Ob1ZhbGlkYXRlIjpjYXNlImhpZGRlbiI6Y2FzZSJsb29wIjpjYXNlIm5vTW9kdWxlIjpjYXNlIm5vVmFsaWRhdGUiOmNhc2Uib3BlbiI6Y2FzZSJwbGF5c0lubGluZSI6Y2FzZSJyZWFkT25seSI6Y2FzZSJyZXF1aXJlZCI6Y2FzZSJyZXZlcnNlZCI6Y2FzZSJzY29wZWQiOmNhc2Uic2VhbWxlc3MiOmNhc2UiaXRlbVNjb3BlIjpyJiYiZnVuY3Rpb24iIT10eXBlb2YgciYmInN5bWJvbCIhPXR5cGVvZiByP2Uuc2V0QXR0cmlidXRlKG4sIiIpOmUucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrO2Nhc2UiY2FwdHVyZSI6Y2FzZSJkb3dubG9hZCI6ITA9PT1yP2Uuc2V0QXR0cmlidXRlKG4sIiIpOiExIT09ciYmbnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHImJiJzeW1ib2wiIT10eXBlb2Ygcj9lLnNldEF0dHJpYnV0ZShuLHIpOmUucmVtb3ZlQXR0cmlidXRlKG4pO2JyZWFrO2Nhc2UiY29scyI6Y2FzZSJyb3dzIjpjYXNlInNpemUiOmNhc2Uic3BhbiI6bnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHImJiJzeW1ib2wiIT10eXBlb2YgciYmIWlzTmFOKHIpJiYxPD1yP2Uuc2V0QXR0cmlidXRlKG4scik6ZS5yZW1vdmVBdHRyaWJ1dGUobik7YnJlYWs7Y2FzZSJyb3dTcGFuIjpjYXNlInN0YXJ0IjpudWxsPT1yfHwiZnVuY3Rpb24iPT10eXBlb2Ygcnx8InN5bWJvbCI9PXR5cGVvZiByfHxpc05hTihyKT9lLnJlbW92ZUF0dHJpYnV0ZShuKTplLnNldEF0dHJpYnV0ZShuLHIpO2JyZWFrO2Nhc2UieGxpbmtBY3R1YXRlIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6YWN0dWF0ZSIscik7YnJlYWs7Y2FzZSJ4bGlua0FyY3JvbGUiOmVZKGUsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bGluazphcmNyb2xlIixyKTticmVhaztjYXNlInhsaW5rUm9sZSI6ZVkoZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOnJvbGUiLHIpO2JyZWFrO2Nhc2UieGxpbmtTaG93IjplWShlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6c2hvdyIscik7YnJlYWs7Y2FzZSJ4bGlua1RpdGxlIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6dGl0bGUiLHIpO2JyZWFrO2Nhc2UieGxpbmtUeXBlIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieGxpbms6dHlwZSIscik7YnJlYWs7Y2FzZSJ4bWxCYXNlIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6YmFzZSIscik7YnJlYWs7Y2FzZSJ4bWxMYW5nIjplWShlLCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6bGFuZyIscik7YnJlYWs7Y2FzZSJ4bWxTcGFjZSI6ZVkoZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIixyKTticmVhaztjYXNlImlzIjplcShlLCJpcyIscik7YnJlYWs7ZGVmYXVsdDoyPG4ubGVuZ3RoJiYoIm8iPT09blswXXx8Ik8iPT09blswXSkmJigibiI9PT1uWzFdfHwiTiI9PT1uWzFdKXx8ZXEoZSxsPXRwLmdldChuKXx8bixyKX19ZnVuY3Rpb24gc1goZSx0LG4scixsLGEpe3N3aXRjaChuKXtjYXNlInN0eWxlIjp0ZihlLHIsYSk7YnJlYWs7Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYobnVsbCE9cil7aWYoIm9iamVjdCIhPXR5cGVvZiByfHwhKCJfX2h0bWwiaW4gcikpdGhyb3cgRXJyb3IoaSg2MSkpO2lmKG51bGwhPSh0PXIuX19odG1sKSl7aWYobnVsbCE9bC5jaGlsZHJlbil0aHJvdyBFcnJvcihpKDYwKSk7dGkoZSx0KX19YnJlYWs7Y2FzZSJjaGlsZHJlbiI6InN0cmluZyI9PXR5cGVvZiByP3R1KGUscik6Im51bWJlciI9PXR5cGVvZiByJiZ0dShlLCIiK3IpO2JyZWFrO2Nhc2Uib25TY3JvbGwiOm51bGwhPXImJnNPKCJzY3JvbGwiLGUpO2JyZWFrO2Nhc2Uib25TY3JvbGxFbmQiOm51bGwhPXImJnNPKCJzY3JvbGxlbmQiLGUpO2JyZWFrO2Nhc2Uib25DbGljayI6bnVsbCE9ciYmKGUub25jbGljaz1zSyk7YnJlYWs7Y2FzZSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciOmNhc2Uic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIjpjYXNlImlubmVySFRNTCI6Y2FzZSJyZWYiOmJyZWFrO2RlZmF1bHQ6ZUIuaGFzT3duUHJvcGVydHkobil8fCgiYm9vbGVhbiI9PXR5cGVvZiByJiYocj0iIityKSxlcShlLG4scikpfX1mdW5jdGlvbiBzRyhlLHQsbil7c3dpdGNoKHQpe2Nhc2UiZGl2IjpjYXNlInNwYW4iOmNhc2Uic3ZnIjpjYXNlInBhdGgiOmNhc2UiYSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UibGkiOmJyZWFrO2Nhc2UiaW5wdXQiOnNPKCJpbnZhbGlkIixlKTt2YXIgcj1udWxsLGw9bnVsbCxhPW51bGwsbz1udWxsLHU9bnVsbCxzPW51bGw7Zm9yKGYgaW4gbilpZihuLmhhc093blByb3BlcnR5KGYpKXt2YXIgYz1uW2ZdO2lmKG51bGwhPWMpc3dpdGNoKGYpe2Nhc2UibmFtZSI6cj1jO2JyZWFrO2Nhc2UidHlwZSI6bD1jO2JyZWFrO2Nhc2UiY2hlY2tlZCI6dT1jO2JyZWFrO2Nhc2UiZGVmYXVsdENoZWNrZWQiOnM9YzticmVhaztjYXNlInZhbHVlIjphPWM7YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOm89YzticmVhaztjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZihudWxsIT1jKXRocm93IEVycm9yKGkoMTM3LHQpKTticmVhaztkZWZhdWx0OnNZKGUsdCxmLGMsbixudWxsKX19ZTkoZSxhLG8sdSxzLGwsciwhMSksZTMoZSk7cmV0dXJuO2Nhc2Uic2VsZWN0IjpzTygiaW52YWxpZCIsZSk7dmFyIGY9bD1hPW51bGw7Zm9yKHIgaW4gbilpZihuLmhhc093blByb3BlcnR5KHIpJiZudWxsIT0obz1uW3JdKSlzd2l0Y2gocil7Y2FzZSJ2YWx1ZSI6YT1vO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpsPW87YnJlYWs7Y2FzZSJtdWx0aXBsZSI6Zj1vO2RlZmF1bHQ6c1koZSx0LHIsbyxuLG51bGwpfXQ9YSxuPWwsZS5tdWx0aXBsZT0hIWYsbnVsbCE9dD90bihlLCEhZix0LCExKTpudWxsIT1uJiZ0bihlLCEhZixuLCEwKTtyZXR1cm47Y2FzZSJ0ZXh0YXJlYSI6Zm9yKGwgaW4gc08oImludmFsaWQiLGUpLGE9cj1mPW51bGwsbilpZihuLmhhc093blByb3BlcnR5KGwpJiZudWxsIT0obz1uW2xdKSlzd2l0Y2gobCl7Y2FzZSJ2YWx1ZSI6Zj1vO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjpyPW87YnJlYWs7Y2FzZSJjaGlsZHJlbiI6YT1vO2JyZWFrO2Nhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOmlmKG51bGwhPW8pdGhyb3cgRXJyb3IoaSg5MSkpO2JyZWFrO2RlZmF1bHQ6c1koZSx0LGwsbyxuLG51bGwpfXRsKGUsZixyLGEpLGUzKGUpO3JldHVybjtjYXNlIm9wdGlvbiI6Zm9yKG8gaW4gbiluLmhhc093blByb3BlcnR5KG8pJiZudWxsIT0oZj1uW29dKSYmKCJzZWxlY3RlZCI9PT1vP2Uuc2VsZWN0ZWQ9ZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGYmJiJzeW1ib2wiIT10eXBlb2YgZjpzWShlLHQsbyxmLG4sbnVsbCkpO3JldHVybjtjYXNlImRpYWxvZyI6c08oImNhbmNlbCIsZSksc08oImNsb3NlIixlKTticmVhaztjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOnNPKCJsb2FkIixlKTticmVhaztjYXNlInZpZGVvIjpjYXNlImF1ZGlvIjpmb3IoZj0wO2Y8c0wubGVuZ3RoO2YrKylzTyhzTFtmXSxlKTticmVhaztjYXNlImltYWdlIjpzTygiZXJyb3IiLGUpLHNPKCJsb2FkIixlKTticmVhaztjYXNlImRldGFpbHMiOnNPKCJ0b2dnbGUiLGUpO2JyZWFrO2Nhc2UiZW1iZWQiOmNhc2Uic291cmNlIjpjYXNlImltZyI6Y2FzZSJsaW5rIjpzTygiZXJyb3IiLGUpLHNPKCJsb2FkIixlKTtjYXNlImFyZWEiOmNhc2UiYmFzZSI6Y2FzZSJiciI6Y2FzZSJjb2wiOmNhc2UiaHIiOmNhc2Uia2V5Z2VuIjpjYXNlIm1ldGEiOmNhc2UicGFyYW0iOmNhc2UidHJhY2siOmNhc2Uid2JyIjpjYXNlIm1lbnVpdGVtIjpmb3IodSBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkodSkmJm51bGwhPShmPW5bdV0pKXN3aXRjaCh1KXtjYXNlImNoaWxkcmVuIjpjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjp0aHJvdyBFcnJvcihpKDEzNyx0KSk7ZGVmYXVsdDpzWShlLHQsdSxmLG4sbnVsbCl9cmV0dXJuO2RlZmF1bHQ6aWYodGQodCkpe2ZvcihzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9KGY9bltzXSkmJnNYKGUsdCxzLGYsbixudWxsKTtyZXR1cm59fWZvcihhIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShhKSYmbnVsbCE9KGY9blthXSkmJnNZKGUsdCxhLGYsbixudWxsKX1mdW5jdGlvbiBzWihlLHQsbixyKXtzd2l0Y2godCl7Y2FzZSJkaXYiOmNhc2Uic3BhbiI6Y2FzZSJzdmciOmNhc2UicGF0aCI6Y2FzZSJhIjpjYXNlImciOmNhc2UicCI6Y2FzZSJsaSI6YnJlYWs7Y2FzZSJpbnB1dCI6dmFyIGw9bnVsbCxhPW51bGwsbz1udWxsLHU9bnVsbCxzPW51bGwsYz1udWxsLGY9bnVsbDtmb3IobSBpbiBuKXt2YXIgZD1uW21dO2lmKG4uaGFzT3duUHJvcGVydHkobSkmJm51bGwhPWQpc3dpdGNoKG0pe2Nhc2UiY2hlY2tlZCI6Y2FzZSJ2YWx1ZSI6YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOnM9ZDtkZWZhdWx0OnIuaGFzT3duUHJvcGVydHkobSl8fHNZKGUsdCxtLG51bGwscixkKX19Zm9yKHZhciBwIGluIHIpe3ZhciBtPXJbcF07aWYoZD1uW3BdLHIuaGFzT3duUHJvcGVydHkocCkmJihudWxsIT1tfHxudWxsIT1kKSlzd2l0Y2gocCl7Y2FzZSJ0eXBlIjphPW07YnJlYWs7Y2FzZSJuYW1lIjpsPW07YnJlYWs7Y2FzZSJjaGVja2VkIjpjPW07YnJlYWs7Y2FzZSJkZWZhdWx0Q2hlY2tlZCI6Zj1tO2JyZWFrO2Nhc2UidmFsdWUiOm89bTticmVhaztjYXNlImRlZmF1bHRWYWx1ZSI6dT1tO2JyZWFrO2Nhc2UiY2hpbGRyZW4iOmNhc2UiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiOmlmKG51bGwhPW0pdGhyb3cgRXJyb3IoaSgxMzcsdCkpO2JyZWFrO2RlZmF1bHQ6bSE9PWQmJnNZKGUsdCxwLG0scixkKX19ZTcoZSxvLHUscyxjLGYsYSxsKTtyZXR1cm47Y2FzZSJzZWxlY3QiOmZvcihhIGluIG09bz11PXA9bnVsbCxuKWlmKHM9blthXSxuLmhhc093blByb3BlcnR5KGEpJiZudWxsIT1zKXN3aXRjaChhKXtjYXNlInZhbHVlIjpicmVhaztjYXNlIm11bHRpcGxlIjptPXM7ZGVmYXVsdDpyLmhhc093blByb3BlcnR5KGEpfHxzWShlLHQsYSxudWxsLHIscyl9Zm9yKGwgaW4gcilpZihhPXJbbF0scz1uW2xdLHIuaGFzT3duUHJvcGVydHkobCkmJihudWxsIT1hfHxudWxsIT1zKSlzd2l0Y2gobCl7Y2FzZSJ2YWx1ZSI6cD1hO2JyZWFrO2Nhc2UiZGVmYXVsdFZhbHVlIjp1PWE7YnJlYWs7Y2FzZSJtdWx0aXBsZSI6bz1hO2RlZmF1bHQ6YSE9PXMmJnNZKGUsdCxsLGEscixzKX10PXUsbj1vLHI9bSxudWxsIT1wP3RuKGUsISFuLHAsITEpOiEhciE9ISFuJiYobnVsbCE9dD90bihlLCEhbix0LCEwKTp0bihlLCEhbixuP1tdOiIiLCExKSk7cmV0dXJuO2Nhc2UidGV4dGFyZWEiOmZvcih1IGluIG09cD1udWxsLG4paWYobD1uW3VdLG4uaGFzT3duUHJvcGVydHkodSkmJm51bGwhPWwmJiFyLmhhc093blByb3BlcnR5KHUpKXN3aXRjaCh1KXtjYXNlInZhbHVlIjpjYXNlImNoaWxkcmVuIjpicmVhaztkZWZhdWx0OnNZKGUsdCx1LG51bGwscixsKX1mb3IobyBpbiByKWlmKGw9cltvXSxhPW5bb10sci5oYXNPd25Qcm9wZXJ0eShvKSYmKG51bGwhPWx8fG51bGwhPWEpKXN3aXRjaChvKXtjYXNlInZhbHVlIjpwPWw7YnJlYWs7Y2FzZSJkZWZhdWx0VmFsdWUiOm09bDticmVhaztjYXNlImNoaWxkcmVuIjpicmVhaztjYXNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIjppZihudWxsIT1sKXRocm93IEVycm9yKGkoOTEpKTticmVhaztkZWZhdWx0OmwhPT1hJiZzWShlLHQsbyxsLHIsYSl9dHIoZSxwLG0pO3JldHVybjtjYXNlIm9wdGlvbiI6Zm9yKHZhciBoIGluIG4pcD1uW2hdLG4uaGFzT3duUHJvcGVydHkoaCkmJm51bGwhPXAmJiFyLmhhc093blByb3BlcnR5KGgpJiYoInNlbGVjdGVkIj09PWg/ZS5zZWxlY3RlZD0hMTpzWShlLHQsaCxudWxsLHIscCkpO2ZvcihzIGluIHIpcD1yW3NdLG09bltzXSxyLmhhc093blByb3BlcnR5KHMpJiZwIT09bSYmKG51bGwhPXB8fG51bGwhPW0pJiYoInNlbGVjdGVkIj09PXM/ZS5zZWxlY3RlZD1wJiYiZnVuY3Rpb24iIT10eXBlb2YgcCYmInN5bWJvbCIhPXR5cGVvZiBwOnNZKGUsdCxzLHAscixtKSk7cmV0dXJuO2Nhc2UiaW1nIjpjYXNlImxpbmsiOmNhc2UiYXJlYSI6Y2FzZSJiYXNlIjpjYXNlImJyIjpjYXNlImNvbCI6Y2FzZSJlbWJlZCI6Y2FzZSJociI6Y2FzZSJrZXlnZW4iOmNhc2UibWV0YSI6Y2FzZSJwYXJhbSI6Y2FzZSJzb3VyY2UiOmNhc2UidHJhY2siOmNhc2Uid2JyIjpjYXNlIm1lbnVpdGVtIjpmb3IodmFyIGcgaW4gbilwPW5bZ10sbi5oYXNPd25Qcm9wZXJ0eShnKSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkoZykmJnNZKGUsdCxnLG51bGwscixwKTtmb3IoYyBpbiByKWlmKHA9cltjXSxtPW5bY10sci5oYXNPd25Qcm9wZXJ0eShjKSYmcCE9PW0mJihudWxsIT1wfHxudWxsIT1tKSlzd2l0Y2goYyl7Y2FzZSJjaGlsZHJlbiI6Y2FzZSJkYW5nZXJvdXNseVNldElubmVySFRNTCI6aWYobnVsbCE9cCl0aHJvdyBFcnJvcihpKDEzNyx0KSk7YnJlYWs7ZGVmYXVsdDpzWShlLHQsYyxwLHIsbSl9cmV0dXJuO2RlZmF1bHQ6aWYodGQodCkpe2Zvcih2YXIgeSBpbiBuKXA9blt5XSxuLmhhc093blByb3BlcnR5KHkpJiZudWxsIT1wJiYhci5oYXNPd25Qcm9wZXJ0eSh5KSYmc1goZSx0LHksbnVsbCxyLHApO2ZvcihmIGluIHIpcD1yW2ZdLG09bltmXSxyLmhhc093blByb3BlcnR5KGYpJiZwIT09bSYmKG51bGwhPXB8fG51bGwhPW0pJiZzWChlLHQsZixwLHIsbSk7cmV0dXJufX1mb3IodmFyIHYgaW4gbilwPW5bdl0sbi5oYXNPd25Qcm9wZXJ0eSh2KSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkodikmJnNZKGUsdCx2LG51bGwscixwKTtmb3IoZCBpbiByKXA9cltkXSxtPW5bZF0sci5oYXNPd25Qcm9wZXJ0eShkKSYmcCE9PW0mJihudWxsIT1wfHxudWxsIT1tKSYmc1koZSx0LGQscCxyLG0pfXZhciBzSj1udWxsLHMwPW51bGw7ZnVuY3Rpb24gczEoZSl7cmV0dXJuIDk9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50fWZ1bmN0aW9uIHMyKGUpe3N3aXRjaChlKXtjYXNlImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpyZXR1cm4gMTtjYXNlImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIHMzKGUsdCl7aWYoMD09PWUpc3dpdGNoKHQpe2Nhc2Uic3ZnIjpyZXR1cm4gMTtjYXNlIm1hdGgiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9cmV0dXJuIDE9PT1lJiYiZm9yZWlnbk9iamVjdCI9PT10PzA6ZX1mdW5jdGlvbiBzNChlLHQpe3JldHVybiJ0ZXh0YXJlYSI9PT1lfHwibm9zY3JpcHQiPT09ZXx8InN0cmluZyI9PXR5cGVvZiB0LmNoaWxkcmVufHwibnVtYmVyIj09dHlwZW9mIHQuY2hpbGRyZW58fCJvYmplY3QiPT10eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfXZhciBzNj1udWxsLHM4PSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6dm9pZCAwLHM1PSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnZvaWQgMCxzNz0iZnVuY3Rpb24iPT10eXBlb2YgUHJvbWlzZT9Qcm9taXNlOnZvaWQgMCxzOT0iZnVuY3Rpb24iPT10eXBlb2YgcXVldWVNaWNyb3Rhc2s/cXVldWVNaWNyb3Rhc2s6dm9pZCAwIT09czc/ZnVuY3Rpb24oZSl7cmV0dXJuIHM3LnJlc29sdmUobnVsbCkudGhlbihlKS5jYXRjaChjZSl9OnM4O2Z1bmN0aW9uIGNlKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj10LHI9MDtkb3t2YXIgbD1uLm5leHRTaWJsaW5nO2lmKGUucmVtb3ZlQ2hpbGQobiksbCYmOD09PWwubm9kZVR5cGUpe2lmKCIvJCI9PT0obj1sLmRhdGEpKXtpZigwPT09cil7ZS5yZW1vdmVDaGlsZChsKSx1TCh0KTtyZXR1cm59ci0tfWVsc2UiJCIhPT1uJiYiJD8iIT09biYmIiQhIiE9PW58fHIrK31uPWx9d2hpbGUobik7dUwodCl9ZnVuY3Rpb24gY24oZSl7dmFyIHQ9ZS5ub2RlVHlwZTtpZig5PT09dCljcihlKTtlbHNlIGlmKDE9PT10KXN3aXRjaChlLm5vZGVOYW1lKXtjYXNlIkhFQUQiOmNhc2UiSFRNTCI6Y2FzZSJCT0RZIjpjcihlKTticmVhaztkZWZhdWx0OmUudGV4dENvbnRlbnQ9IiJ9fWZ1bmN0aW9uIGNyKGUpe3ZhciB0PWUuZmlyc3RDaGlsZDtmb3IodCYmMTA9PT10Lm5vZGVUeXBlJiYodD10Lm5leHRTaWJsaW5nKTt0Oyl7dmFyIG49dDtzd2l0Y2godD10Lm5leHRTaWJsaW5nLG4ubm9kZU5hbWUpe2Nhc2UiSFRNTCI6Y2FzZSJIRUFEIjpjYXNlIkJPRFkiOmNyKG4pLGVGKG4pO2NvbnRpbnVlO2Nhc2UiU0NSSVBUIjpjYXNlIlNUWUxFIjpjb250aW51ZTtjYXNlIkxJTksiOmlmKCJzdHlsZXNoZWV0Ij09PW4ucmVsLnRvTG93ZXJDYXNlKCkpY29udGludWV9ZS5yZW1vdmVDaGlsZChuKX19ZnVuY3Rpb24gY2woZSl7Zm9yKDtudWxsIT1lO2U9ZS5uZXh0U2libGluZyl7dmFyIHQ9ZS5ub2RlVHlwZTtpZigxPT09dHx8Mz09PXQpYnJlYWs7aWYoOD09PXQpe2lmKCIkIj09PSh0PWUuZGF0YSl8fCIkISI9PT10fHwiJD8iPT09dHx8IkYhIj09PXR8fCJGIj09PXQpYnJlYWs7aWYoIi8kIj09PXQpcmV0dXJuIG51bGx9fXJldHVybiBlfWZ1bmN0aW9uIGNhKGUpe3JldHVybiBjbChlLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBjbyhlLHQsbixyLGwpe3N3aXRjaChlW2VFXT1sLGVbZXhdPW4scj0wIT0oMSZsLm1vZGUpLHQpe2Nhc2UiZGlhbG9nIjpzTygiY2FuY2VsIixlKSxzTygiY2xvc2UiLGUpO2JyZWFrO2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6Y2FzZSJlbWJlZCI6c08oImxvYWQiLGUpO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihsPTA7bDxzTC5sZW5ndGg7bCsrKXNPKHNMW2xdLGUpO2JyZWFrO2Nhc2Uic291cmNlIjpzTygiZXJyb3IiLGUpO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOnNPKCJlcnJvciIsZSksc08oImxvYWQiLGUpO2JyZWFrO2Nhc2UiZGV0YWlscyI6c08oInRvZ2dsZSIsZSk7YnJlYWs7Y2FzZSJpbnB1dCI6c08oImludmFsaWQiLGUpLGU5KGUsbi52YWx1ZSxuLmRlZmF1bHRWYWx1ZSxuLmNoZWNrZWQsbi5kZWZhdWx0Q2hlY2tlZCxuLnR5cGUsbi5uYW1lLCEwKSxlMyhlKTticmVhaztjYXNlInNlbGVjdCI6c08oImludmFsaWQiLGUpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOnNPKCJpbnZhbGlkIixlKSx0bChlLG4udmFsdWUsbi5kZWZhdWx0VmFsdWUsbi5jaGlsZHJlbiksZTMoZSl9InN0cmluZyIhPXR5cGVvZihsPW4uY2hpbGRyZW4pJiYibnVtYmVyIiE9dHlwZW9mIGx8fGUudGV4dENvbnRlbnQ9PT0iIitsfHwoITAhPT1uLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyYmc3EoZS50ZXh0Q29udGVudCxsLHIpLHJ8fCJib2R5Ij09PXR8fChlLnRleHRDb250ZW50PWwpKSxudWxsIT1uLm9uU2Nyb2xsJiZzTygic2Nyb2xsIixlKSxudWxsIT1uLm9uU2Nyb2xsRW5kJiZzTygic2Nyb2xsZW5kIixlKSxudWxsIT1uLm9uQ2xpY2smJihlLm9uY2xpY2s9c0spfWZ1bmN0aW9uIGNpKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciB0PTA7ZTspe2lmKDg9PT1lLm5vZGVUeXBlKXt2YXIgbj1lLmRhdGE7aWYoIiQiPT09bnx8IiQhIj09PW58fCIkPyI9PT1uKXtpZigwPT09dClyZXR1cm4gZTt0LS19ZWxzZSIvJCI9PT1uJiZ0Kyt9ZT1lLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiBjdShlLHQsbil7c3dpdGNoKHQ9czEobiksZSl7Y2FzZSJodG1sIjppZighKGU9dC5kb2N1bWVudEVsZW1lbnQpKXRocm93IEVycm9yKGkoNDUyKSk7cmV0dXJuIGU7Y2FzZSJoZWFkIjppZighKGU9dC5oZWFkKSl0aHJvdyBFcnJvcihpKDQ1MykpO3JldHVybiBlO2Nhc2UiYm9keSI6aWYoIShlPXQuYm9keSkpdGhyb3cgRXJyb3IoaSg0NTQpKTtyZXR1cm4gZTtkZWZhdWx0OnRocm93IEVycm9yKGkoNDUxKSl9fXZhciBjcz1uZXcgTWFwLGNjPW5ldyBTZXQ7ZnVuY3Rpb24gY2YoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0Um9vdE5vZGU/ZS5nZXRSb290Tm9kZSgpOmUub3duZXJEb2N1bWVudH12YXIgY2Q9e3ByZWZldGNoRE5TOmZ1bmN0aW9uKGUpe2NwKCJkbnMtcHJlZmV0Y2giLGUsbnVsbCl9LHByZWNvbm5lY3Q6ZnVuY3Rpb24oZSx0KXtjcCgicHJlY29ubmVjdCIsZSx0KX0scHJlbG9hZDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZG9jdW1lbnQ7aWYoZSYmdCYmcil7dmFyIGw9J2xpbmtbcmVsPSJwcmVsb2FkIl1bYXM9IicrZTUodCkrJyJdJzsiaW1hZ2UiPT09dCYmbiYmbi5pbWFnZVNyY1NldD8obCs9J1tpbWFnZXNyY3NldD0iJytlNShuLmltYWdlU3JjU2V0KSsnIl0nLCJzdHJpbmciPT10eXBlb2Ygbi5pbWFnZVNpemVzJiYobCs9J1tpbWFnZXNpemVzPSInK2U1KG4uaW1hZ2VTaXplcykrJyJdJykpOmwrPSdbaHJlZj0iJytlNShlKSsnIl0nO3ZhciBhPWw7c3dpdGNoKHQpe2Nhc2Uic3R5bGUiOmE9Y20oZSk7YnJlYWs7Y2FzZSJzY3JpcHQiOmE9Y3koZSl9Y3MuaGFzKGEpfHwoZT11KHtyZWw6InByZWxvYWQiLGhyZWY6ImltYWdlIj09PXQmJm4mJm4uaW1hZ2VTcmNTZXQ/dm9pZCAwOmUsYXM6dH0sbiksY3Muc2V0KGEsZSksbnVsbCE9PXIucXVlcnlTZWxlY3RvcihsKXx8InN0eWxlIj09PXQmJnIucXVlcnlTZWxlY3RvcihjaChhKSl8fCJzY3JpcHQiPT09dCYmci5xdWVyeVNlbGVjdG9yKGN2KGEpKXx8KHNHKHQ9ci5jcmVhdGVFbGVtZW50KCJsaW5rIiksImxpbmsiLGUpLGVJKHQpLHIuaGVhZC5hcHBlbmRDaGlsZCh0KSkpfX0scHJlbG9hZE1vZHVsZTpmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50O2lmKGUpe3ZhciByPXQmJiJzdHJpbmciPT10eXBlb2YgdC5hcz90LmFzOiJzY3JpcHQiLGw9J2xpbmtbcmVsPSJtb2R1bGVwcmVsb2FkIl1bYXM9IicrZTUocikrJyJdW2hyZWY9IicrZTUoZSkrJyJdJyxhPWw7c3dpdGNoKHIpe2Nhc2UiYXVkaW93b3JrbGV0IjpjYXNlInBhaW50d29ya2xldCI6Y2FzZSJzZXJ2aWNld29ya2VyIjpjYXNlInNoYXJlZHdvcmtlciI6Y2FzZSJ3b3JrZXIiOmNhc2Uic2NyaXB0IjphPWN5KGUpfWlmKCFjcy5oYXMoYSkmJihlPXUoe3JlbDoibW9kdWxlcHJlbG9hZCIsaHJlZjplfSx0KSxjcy5zZXQoYSxlKSxudWxsPT09bi5xdWVyeVNlbGVjdG9yKGwpKSl7c3dpdGNoKHIpe2Nhc2UiYXVkaW93b3JrbGV0IjpjYXNlInBhaW50d29ya2xldCI6Y2FzZSJzZXJ2aWNld29ya2VyIjpjYXNlInNoYXJlZHdvcmtlciI6Y2FzZSJ3b3JrZXIiOmNhc2Uic2NyaXB0IjppZihuLnF1ZXJ5U2VsZWN0b3IoY3YoYSkpKXJldHVybn1zRyhyPW4uY3JlYXRlRWxlbWVudCgibGluayIpLCJsaW5rIixlKSxlSShyKSxuLmhlYWQuYXBwZW5kQ2hpbGQocil9fX0scHJlaW5pdFN0eWxlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1kb2N1bWVudDtpZihlKXt2YXIgbD1lQShyKS5ob2lzdGFibGVTdHlsZXMsYT1jbShlKTt0PXR8fCJkZWZhdWx0Ijt2YXIgbz1sLmdldChhKTtpZighbyl7dmFyIGk9e2xvYWRpbmc6MCxwcmVsb2FkOm51bGx9O2lmKG89ci5xdWVyeVNlbGVjdG9yKGNoKGEpKSlpLmxvYWRpbmc9NTtlbHNle2U9dSh7cmVsOiJzdHlsZXNoZWV0IixocmVmOmUsImRhdGEtcHJlY2VkZW5jZSI6dH0sbiksKG49Y3MuZ2V0KGEpKSYmY3coZSxuKTt2YXIgcz1vPXIuY3JlYXRlRWxlbWVudCgibGluayIpO2VJKHMpLHNHKHMsImxpbmsiLGUpLHMuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtzLm9ubG9hZD1lLHMub25lcnJvcj10fSkscy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe2kubG9hZGluZ3w9MX0pLHMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKCl7aS5sb2FkaW5nfD0yfSksaS5sb2FkaW5nfD00LGNrKG8sdCxyKX1vPXt0eXBlOiJzdHlsZXNoZWV0IixpbnN0YW5jZTpvLGNvdW50OjEsc3RhdGU6aX0sbC5zZXQoYSxvKX19fSxwcmVpbml0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZG9jdW1lbnQ7aWYoZSl7dmFyIHI9ZUEobikuaG9pc3RhYmxlU2NyaXB0cyxsPWN5KGUpLGE9ci5nZXQobCk7YXx8KChhPW4ucXVlcnlTZWxlY3RvcihjdihsKSkpfHwoZT11KHtzcmM6ZSxhc3luYzohMH0sdCksKHQ9Y3MuZ2V0KGwpKSYmY1MoZSx0KSxlSShhPW4uY3JlYXRlRWxlbWVudCgic2NyaXB0IikpLHNHKGEsImxpbmsiLGUpLG4uaGVhZC5hcHBlbmRDaGlsZChhKSksYT17dHlwZToic2NyaXB0IixpbnN0YW5jZTphLGNvdW50OjEsc3RhdGU6bnVsbH0sci5zZXQobCxhKSl9fSxwcmVpbml0TW9kdWxlU2NyaXB0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZG9jdW1lbnQ7aWYoZSl7dmFyIHI9ZUEobikuaG9pc3RhYmxlU2NyaXB0cyxsPWN5KGUpLGE9ci5nZXQobCk7YXx8KChhPW4ucXVlcnlTZWxlY3RvcihjdihsKSkpfHwoZT11KHtzcmM6ZSxhc3luYzohMCx0eXBlOiJtb2R1bGUifSx0KSwodD1jcy5nZXQobCkpJiZjUyhlLHQpLGVJKGE9bi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSksc0coYSwibGluayIsZSksbi5oZWFkLmFwcGVuZENoaWxkKGEpKSxhPXt0eXBlOiJzY3JpcHQiLGluc3RhbmNlOmEsY291bnQ6MSxzdGF0ZTpudWxsfSxyLnNldChsLGEpKX19fTtmdW5jdGlvbiBjcChlLHQsbil7dmFyIHI9ZG9jdW1lbnQ7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0KXt2YXIgbD1lNSh0KTtsPSdsaW5rW3JlbD0iJytlKyciXVtocmVmPSInK2wrJyJdJywic3RyaW5nIj09dHlwZW9mIG4mJihsKz0nW2Nyb3Nzb3JpZ2luPSInK24rJyJdJyksY2MuaGFzKGwpfHwoY2MuYWRkKGwpLGU9e3JlbDplLGNyb3NzT3JpZ2luOm4saHJlZjp0fSxudWxsPT09ci5xdWVyeVNlbGVjdG9yKGwpJiYoc0codD1yLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSwibGluayIsZSksZUkodCksci5oZWFkLmFwcGVuZENoaWxkKHQpKSl9fWZ1bmN0aW9uIGNtKGUpe3JldHVybidocmVmPSInK2U1KGUpKyciJ31mdW5jdGlvbiBjaChlKXtyZXR1cm4nbGlua1tyZWw9InN0eWxlc2hlZXQiXVsnK2UrIl0ifWZ1bmN0aW9uIGNnKGUpe3JldHVybiB1KHt9LGUseyJkYXRhLXByZWNlZGVuY2UiOmUucHJlY2VkZW5jZSxwcmVjZWRlbmNlOm51bGx9KX1mdW5jdGlvbiBjeShlKXtyZXR1cm4nW3NyYz0iJytlNShlKSsnIl0nfWZ1bmN0aW9uIGN2KGUpe3JldHVybiJzY3JpcHRbYXN5bmNdIitlfWZ1bmN0aW9uIGNiKGUsdCxuKXtpZih0LmNvdW50KyssbnVsbD09PXQuaW5zdGFuY2Upc3dpdGNoKHQudHlwZSl7Y2FzZSJzdHlsZSI6dmFyIHI9ZS5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLWhyZWZ+PSInK2U1KG4uaHJlZikrJyJdJyk7aWYocilyZXR1cm4gdC5pbnN0YW5jZT1yLGVJKHIpLHI7dmFyIGw9dSh7fSxuLHsiZGF0YS1ocmVmIjpuLmhyZWYsImRhdGEtcHJlY2VkZW5jZSI6bi5wcmVjZWRlbmNlLGhyZWY6bnVsbCxwcmVjZWRlbmNlOm51bGx9KTtyZXR1cm4gZUkocj0oZS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKSxzRyhyLCJzdHlsZSIsbCksY2socixuLnByZWNlZGVuY2UsZSksdC5pbnN0YW5jZT1yO2Nhc2Uic3R5bGVzaGVldCI6bD1jbShuLmhyZWYpO3ZhciBhPWUucXVlcnlTZWxlY3RvcihjaChsKSk7aWYoYSlyZXR1cm4gdC5zdGF0ZS5sb2FkaW5nfD00LHQuaW5zdGFuY2U9YSxlSShhKSxhO3I9Y2cobiksKGw9Y3MuZ2V0KGwpKSYmY3cocixsKSxlSShhPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSk7dmFyIG89YTtyZXR1cm4gby5fcD1uZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe28ub25sb2FkPWUsby5vbmVycm9yPXR9KSxzRyhhLCJsaW5rIixyKSx0LnN0YXRlLmxvYWRpbmd8PTQsY2soYSxuLnByZWNlZGVuY2UsZSksdC5pbnN0YW5jZT1hO2Nhc2Uic2NyaXB0IjppZihhPWN5KG4uc3JjKSxsPWUucXVlcnlTZWxlY3RvcihjdihhKSkpcmV0dXJuIHQuaW5zdGFuY2U9bCxlSShsKSxsO3JldHVybiByPW4sKGw9Y3MuZ2V0KGEpKSYmY1Mocj11KHt9LG4pLGwpLGVJKGw9KGU9ZS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSksc0cobCwibGluayIsciksZS5oZWFkLmFwcGVuZENoaWxkKGwpLHQuaW5zdGFuY2U9bDtjYXNlInZvaWQiOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgRXJyb3IoaSg0NDMsdC50eXBlKSl9ZWxzZSJzdHlsZXNoZWV0Ij09PXQudHlwZSYmMD09KDQmdC5zdGF0ZS5sb2FkaW5nKSYmKHI9dC5pbnN0YW5jZSx0LnN0YXRlLmxvYWRpbmd8PTQsY2socixuLnByZWNlZGVuY2UsZSkpO3JldHVybiB0Lmluc3RhbmNlfWZ1bmN0aW9uIGNrKGUsdCxuKXtmb3IodmFyIHI9bi5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rW3JlbD0ic3R5bGVzaGVldCJdW2RhdGEtcHJlY2VkZW5jZV0sc3R5bGVbZGF0YS1wcmVjZWRlbmNlXScpLGw9ci5sZW5ndGg/cltyLmxlbmd0aC0xXTpudWxsLGE9bCxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBpPXJbb107aWYoaS5kYXRhc2V0LnByZWNlZGVuY2U9PT10KWE9aTtlbHNlIGlmKGEhPT1sKWJyZWFrfWE/YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGEubmV4dFNpYmxpbmcpOih0PTk9PT1uLm5vZGVUeXBlP24uaGVhZDpuKS5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGN3KGUsdCl7bnVsbD09ZS5jcm9zc09yaWdpbiYmKGUuY3Jvc3NPcmlnaW49dC5jcm9zc09yaWdpbiksbnVsbD09ZS5yZWZlcnJlclBvbGljeSYmKGUucmVmZXJyZXJQb2xpY3k9dC5yZWZlcnJlclBvbGljeSksbnVsbD09ZS50aXRsZSYmKGUudGl0bGU9dC50aXRsZSl9ZnVuY3Rpb24gY1MoZSx0KXtudWxsPT1lLmNyb3NzT3JpZ2luJiYoZS5jcm9zc09yaWdpbj10LmNyb3NzT3JpZ2luKSxudWxsPT1lLnJlZmVycmVyUG9saWN5JiYoZS5yZWZlcnJlclBvbGljeT10LnJlZmVycmVyUG9saWN5KSxudWxsPT1lLmludGVncml0eSYmKGUuaW50ZWdyaXR5PXQuaW50ZWdyaXR5KX12YXIgY0M9bnVsbDtmdW5jdGlvbiBjRShlLHQsbil7aWYobnVsbD09PWNDKXt2YXIgcj1uZXcgTWFwLGw9Y0M9bmV3IE1hcDtsLnNldChuLHIpfWVsc2Uocj0obD1jQykuZ2V0KG4pKXx8KHI9bmV3IE1hcCxsLnNldChuLHIpKTtpZihyLmhhcyhlKSlyZXR1cm4gcjtmb3Ioci5zZXQoZSxudWxsKSxuPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSksbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYT1uW2xdO2lmKCEoYVtlVF18fGFbZUVdfHwibGluayI9PT1lJiYic3R5bGVzaGVldCI9PT1hLmdldEF0dHJpYnV0ZSgicmVsIikpJiYiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIT09YS5uYW1lc3BhY2VVUkkpe3ZhciBvPWEuZ2V0QXR0cmlidXRlKHQpfHwiIjtvPWUrbzt2YXIgaT1yLmdldChvKTtpP2kucHVzaChhKTpyLnNldChvLFthXSl9fXJldHVybiByfWZ1bmN0aW9uIGN4KGUsdCxuKXsoZT1lLm93bmVyRG9jdW1lbnR8fGUpLmhlYWQuaW5zZXJ0QmVmb3JlKG4sInRpdGxlIj09PXQ/ZS5xdWVyeVNlbGVjdG9yKCJoZWFkID4gdGl0bGUiKTpudWxsKX12YXIgY3o9bnVsbDtmdW5jdGlvbiBjUCgpe31mdW5jdGlvbiBjTigpe2lmKHRoaXMuY291bnQtLSwwPT09dGhpcy5jb3VudCl7aWYodGhpcy5zdHlsZXNoZWV0cyljTCh0aGlzLHRoaXMuc3R5bGVzaGVldHMpO2Vsc2UgaWYodGhpcy51bnN1c3BlbmQpe3ZhciBlPXRoaXMudW5zdXNwZW5kO3RoaXMudW5zdXNwZW5kPW51bGwsZSgpfX19dmFyIGNfPW51bGw7ZnVuY3Rpb24gY0woZSx0KXtlLnN0eWxlc2hlZXRzPW51bGwsbnVsbCE9PWUudW5zdXNwZW5kJiYoZS5jb3VudCsrLGNfPW5ldyBNYXAsdC5mb3JFYWNoKGNULGUpLGNfPW51bGwsY04uY2FsbChlKSl9ZnVuY3Rpb24gY1QoZSx0KXtpZighKDQmdC5zdGF0ZS5sb2FkaW5nKSl7dmFyIG49Y18uZ2V0KGUpO2lmKG4pdmFyIHI9bi5nZXQobnVsbCk7ZWxzZXtuPW5ldyBNYXAsY18uc2V0KGUsbik7Zm9yKHZhciBsPWUucXVlcnlTZWxlY3RvckFsbCgibGlua1tkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0iKSxhPTA7YTxsLmxlbmd0aDthKyspe3ZhciBvPWxbYV07KCJsaW5rIj09PW8ubm9kZU5hbWV8fCJub3QgYWxsIiE9PW8uZ2V0QXR0cmlidXRlKCJtZWRpYSIpKSYmKG4uc2V0KG8uZGF0YXNldC5wcmVjZWRlbmNlLG8pLHI9byl9ciYmbi5zZXQobnVsbCxyKX1vPShsPXQuaW5zdGFuY2UpLmdldEF0dHJpYnV0ZSgiZGF0YS1wcmVjZWRlbmNlIiksKGE9bi5nZXQobyl8fHIpPT09ciYmbi5zZXQobnVsbCxsKSxuLnNldChvLGwpLHRoaXMuY291bnQrKyxyPWNOLmJpbmQodGhpcyksbC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxsLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixyKSxhP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobCxhLm5leHRTaWJsaW5nKTooZT05PT09ZS5ub2RlVHlwZT9lLmhlYWQ6ZSkuaW5zZXJ0QmVmb3JlKGwsZS5maXJzdENoaWxkKSx0LnN0YXRlLmxvYWRpbmd8PTR9fXZhciBjRj1vLkRpc3BhdGNoZXI7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKGNGLmN1cnJlbnQ9Y2QpO3ZhciBjTT0iZnVuY3Rpb24iPT10eXBlb2YgcmVwb3J0RXJyb3I/cmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX07ZnVuY3Rpb24gY08oZSl7dGhpcy5faW50ZXJuYWxSb290PWV9ZnVuY3Rpb24gY1IoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9ZnVuY3Rpb24gY0QoZSl7cmV0dXJuISghZXx8MSE9PWUubm9kZVR5cGUmJjkhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGUpfWZ1bmN0aW9uIGNBKGUpe3JldHVybiEoIWV8fDEhPT1lLm5vZGVUeXBlJiY5IT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlJiYoOCE9PWUubm9kZVR5cGV8fCIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIiE9PWUubm9kZVZhbHVlKSl9ZnVuY3Rpb24gY0koKXt9ZnVuY3Rpb24gY1UoZSx0LG4scixsKXt2YXIgYT1uLl9yZWFjdFJvb3RDb250YWluZXI7aWYoYSl7dmFyIG89YTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7dmFyIGk9bDtsPWZ1bmN0aW9uKCl7dmFyIGU9aUQobyk7aS5jYWxsKGUpfX1pUih0LG8sZSxsKX1lbHNlIG89ZnVuY3Rpb24oZSx0LG4scixsKXtpZihsKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcil7dmFyIGE9cjtyPWZ1bmN0aW9uKCl7dmFyIGU9aUQobyk7YS5jYWxsKGUpfX12YXIgbz1pTyh0LHIsZSwwLG51bGwsITEsITEsIiIsY0ksbnVsbCxudWxsKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPW8sZVtlel09by5jdXJyZW50LHNBKDg9PT1lLm5vZGVUeXBlP2UucGFyZW50Tm9kZTplKSxvNigpLG99aWYoY24oZSksImZ1bmN0aW9uIj09dHlwZW9mIHIpe3ZhciBpPXI7cj1mdW5jdGlvbigpe3ZhciBlPWlEKHUpO2kuY2FsbChlKX19dmFyIHU9aUYoZSwwLCExLG51bGwsbnVsbCwhMSwhMSwiIixjSSxudWxsLG51bGwpO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI9dSxlW2V6XT11LmN1cnJlbnQsc0EoOD09PWUubm9kZVR5cGU/ZS5wYXJlbnROb2RlOmUpLG82KGZ1bmN0aW9uKCl7aVIodCx1LG4scil9KSx1fShuLHQsZSxsLHIpO3JldHVybiBpRChvKX1mdW5jdGlvbiBjQihlLHQpe3JldHVybiJmb250Ij09PWU/IiI6InN0cmluZyI9PXR5cGVvZiB0PyJ1c2UtY3JlZGVudGlhbHMiPT09dD90OiIiOnZvaWQgMH1jUi5wcm90b3R5cGUucmVuZGVyPWNPLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290O2lmKG51bGw9PT10KXRocm93IEVycm9yKGkoNDA5KSk7aVIoZSx0LG51bGwsbnVsbCl9LGNSLnByb3RvdHlwZS51bm1vdW50PWNPLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faW50ZXJuYWxSb290O2lmKG51bGwhPT1lKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgdD1lLmNvbnRhaW5lckluZm87bzYoZnVuY3Rpb24oKXtpUihudWxsLGUsbnVsbCxudWxsKX0pLHRbZXpdPW51bGx9fSxjUi5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb249ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZWs7ZT17YmxvY2tlZE9uOm51bGwsdGFyZ2V0OmUscHJpb3JpdHk6dH07Zm9yKHZhciBuPTA7bjx1Yi5sZW5ndGgmJjAhPT10JiZ0PHViW25dLnByaW9yaXR5O24rKyk7dWIuc3BsaWNlKG4sMCxlKSwwPT09biYmdUMoZSl9fTt2YXIgY1Y9by5EaXNwYXRjaGVyO28uRXZlbnRzPVtlTyxlUixlRCx0Yix0ayxvNF07dmFyIGNRPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTplTSxidW5kbGVUeXBlOjAsdmVyc2lvbjoiMTguMy4wLWNhbmFyeS0xNzhjMjY3YTRlLTIwMjQxMjE4IixyZW5kZXJlclBhY2thZ2VOYW1lOiJyZWFjdC1kb20ifSxjJD17YnVuZGxlVHlwZTpjUS5idW5kbGVUeXBlLHZlcnNpb246Y1EudmVyc2lvbixyZW5kZXJlclBhY2thZ2VOYW1lOmNRLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6Y1EucmVuZGVyZXJDb25maWcsb3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzUmVuYW1lUGF0aDpudWxsLHNldEVycm9ySGFuZGxlcjpudWxsLHNldFN1c3BlbnNlSGFuZGxlcjpudWxsLHNjaGVkdWxlVXBkYXRlOm51bGwsY3VycmVudERpc3BhdGNoZXJSZWY6cy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09KGU9dEUoZSkpP251bGw6ZS5zdGF0ZU5vZGV9LGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOmNRLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlfHxmdW5jdGlvbigpe3JldHVybiBudWxsfSxmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6bnVsbCxzY2hlZHVsZVJlZnJlc2g6bnVsbCxzY2hlZHVsZVJvb3Q6bnVsbCxzZXRSZWZyZXNoSGFuZGxlcjpudWxsLGdldEN1cnJlbnRGaWJlcjpudWxsLHJlY29uY2lsZXJWZXJzaW9uOiIxOC4zLjAtY2FuYXJ5LTE3OGMyNjdhNGUtMjAyNDEyMTgifTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyl7dmFyIGNqPV9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztpZighY2ouaXNEaXNhYmxlZCYmY2ouc3VwcG9ydHNGaWJlcil0cnl7ZWw9Y2ouaW5qZWN0KGMkKSxlYT1jan1jYXRjaChlKXt9fXQuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9byx0LmNyZWF0ZVBvcnRhbD1mdW5jdGlvbihlLHQpe3ZhciBuPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKCFjRCh0KSl0aHJvdyBFcnJvcihpKDI5OSkpO3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHI9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOnYsa2V5Om51bGw9PXI/bnVsbDoiIityLGNoaWxkcmVuOmUsY29udGFpbmVySW5mbzp0LGltcGxlbWVudGF0aW9uOm59fShlLHQsbnVsbCxuKX0sdC5jcmVhdGVSb290PWZ1bmN0aW9uKGUsdCl7aWYoIWNEKGUpKXRocm93IEVycm9yKGkoMjk5KSk7dmFyIG49ITEscj0iIixsPWNNLGE9bnVsbDtyZXR1cm4gbnVsbCE9dCYmKCEwPT09dC51bnN0YWJsZV9zdHJpY3RNb2RlJiYobj0hMCksdm9pZCAwIT09dC5pZGVudGlmaWVyUHJlZml4JiYocj10LmlkZW50aWZpZXJQcmVmaXgpLHZvaWQgMCE9PXQub25SZWNvdmVyYWJsZUVycm9yJiYobD10Lm9uUmVjb3ZlcmFibGVFcnJvciksdm9pZCAwIT09dC51bnN0YWJsZV90cmFuc2l0aW9uQ2FsbGJhY2tzJiYoYT10LnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MpKSx0PWlGKGUsMSwhMSxudWxsLG51bGwsbiwhMSxyLGwsYSxudWxsKSxlW2V6XT10LmN1cnJlbnQsY0YuY3VycmVudD1jZCxzQSg4PT09ZS5ub2RlVHlwZT9lLnBhcmVudE5vZGU6ZSksbmV3IGNPKHQpfSx0LmZpbmRET01Ob2RlPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7aWYoMT09PWUubm9kZVR5cGUpcmV0dXJuIGU7dmFyIHQ9ZS5fcmVhY3RJbnRlcm5hbHM7aWYodm9pZCAwPT09dCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUucmVuZGVyKXRocm93IEVycm9yKGkoMTg4KSk7dGhyb3cgRXJyb3IoaSgyNjgsZT1PYmplY3Qua2V5cyhlKS5qb2luKCIsIikpKX1yZXR1cm4gZT1udWxsPT09KGU9dEUodCkpP251bGw6ZS5zdGF0ZU5vZGV9LHQuZmx1c2hTeW5jPWZ1bmN0aW9uKGUpe3JldHVybiBvNihlKX0sdC5oeWRyYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighY0EodCkpdGhyb3cgRXJyb3IoaSgyOTkpKTtyZXR1cm4gY1UobnVsbCxlLHQsITAsbil9LHQuaHlkcmF0ZVJvb3Q9ZnVuY3Rpb24oZSx0LG4pe2lmKCFjRChlKSl0aHJvdyBFcnJvcihpKDI5OSkpO3ZhciByPSExLGw9IiIsYT1jTSxvPW51bGwsdT1udWxsO3JldHVybiBudWxsIT1uJiYoITA9PT1uLnVuc3RhYmxlX3N0cmljdE1vZGUmJihyPSEwKSx2b2lkIDAhPT1uLmlkZW50aWZpZXJQcmVmaXgmJihsPW4uaWRlbnRpZmllclByZWZpeCksdm9pZCAwIT09bi5vblJlY292ZXJhYmxlRXJyb3ImJihhPW4ub25SZWNvdmVyYWJsZUVycm9yKSx2b2lkIDAhPT1uLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MmJihvPW4udW5zdGFibGVfdHJhbnNpdGlvbkNhbGxiYWNrcyksdm9pZCAwIT09bi5mb3JtU3RhdGUmJih1PW4uZm9ybVN0YXRlKSksdD1pTyh0LG51bGwsZSwxLG51bGwhPW4/bjpudWxsLHIsITEsbCxhLG8sdSksZVtlel09dC5jdXJyZW50LGNGLmN1cnJlbnQ9Y2Qsc0EoZSksbmV3IGNSKHQpfSx0LnByZWNvbm5lY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jVi5jdXJyZW50O24mJiJzdHJpbmciPT10eXBlb2YgZSYmKHQ9dD8ic3RyaW5nIj09dHlwZW9mKHQ9dC5jcm9zc09yaWdpbik/InVzZS1jcmVkZW50aWFscyI9PT10P3Q6IiI6dm9pZCAwOm51bGwsbi5wcmVjb25uZWN0KGUsdCkpfSx0LnByZWZldGNoRE5TPWZ1bmN0aW9uKGUpe3ZhciB0PWNWLmN1cnJlbnQ7dCYmInN0cmluZyI9PXR5cGVvZiBlJiZ0LnByZWZldGNoRE5TKGUpfSx0LnByZWluaXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jVi5jdXJyZW50O2lmKG4mJiJzdHJpbmciPT10eXBlb2YgZSYmdCYmInN0cmluZyI9PXR5cGVvZiB0LmFzKXt2YXIgcj10LmFzLGw9Y0Iocix0LmNyb3NzT3JpZ2luKSxhPSJzdHJpbmciPT10eXBlb2YgdC5pbnRlZ3JpdHk/dC5pbnRlZ3JpdHk6dm9pZCAwLG89InN0cmluZyI9PXR5cGVvZiB0LmZldGNoUHJpb3JpdHk/dC5mZXRjaFByaW9yaXR5OnZvaWQgMDsic3R5bGUiPT09cj9uLnByZWluaXRTdHlsZShlLCJzdHJpbmciPT10eXBlb2YgdC5wcmVjZWRlbmNlP3QucHJlY2VkZW5jZTp2b2lkIDAse2Nyb3NzT3JpZ2luOmwsaW50ZWdyaXR5OmEsZmV0Y2hQcmlvcml0eTpvfSk6InNjcmlwdCI9PT1yJiZuLnByZWluaXRTY3JpcHQoZSx7Y3Jvc3NPcmlnaW46bCxpbnRlZ3JpdHk6YSxmZXRjaFByaW9yaXR5Om8sbm9uY2U6InN0cmluZyI9PXR5cGVvZiB0Lm5vbmNlP3Qubm9uY2U6dm9pZCAwfSl9fSx0LnByZWluaXRNb2R1bGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jVi5jdXJyZW50O2lmKG4mJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCl7aWYobnVsbD09dC5hc3x8InNjcmlwdCI9PT10LmFzKXt2YXIgcj1jQih0LmFzLHQuY3Jvc3NPcmlnaW4pO24ucHJlaW5pdE1vZHVsZVNjcmlwdChlLHtjcm9zc09yaWdpbjpyLGludGVncml0eToic3RyaW5nIj09dHlwZW9mIHQuaW50ZWdyaXR5P3QuaW50ZWdyaXR5OnZvaWQgMCxub25jZToic3RyaW5nIj09dHlwZW9mIHQubm9uY2U/dC5ub25jZTp2b2lkIDB9KX19ZWxzZSBudWxsPT10JiZuLnByZWluaXRNb2R1bGVTY3JpcHQoZSl9fSx0LnByZWxvYWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jVi5jdXJyZW50O2lmKG4mJiJzdHJpbmciPT10eXBlb2YgZSYmIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmInN0cmluZyI9PXR5cGVvZiB0LmFzKXt2YXIgcj10LmFzLGw9Y0Iocix0LmNyb3NzT3JpZ2luKTtuLnByZWxvYWQoZSxyLHtjcm9zc09yaWdpbjpsLGludGVncml0eToic3RyaW5nIj09dHlwZW9mIHQuaW50ZWdyaXR5P3QuaW50ZWdyaXR5OnZvaWQgMCxub25jZToic3RyaW5nIj09dHlwZW9mIHQubm9uY2U/dC5ub25jZTp2b2lkIDAsdHlwZToic3RyaW5nIj09dHlwZW9mIHQudHlwZT90LnR5cGU6dm9pZCAwLGZldGNoUHJpb3JpdHk6InN0cmluZyI9PXR5cGVvZiB0LmZldGNoUHJpb3JpdHk/dC5mZXRjaFByaW9yaXR5OnZvaWQgMCxyZWZlcnJlclBvbGljeToic3RyaW5nIj09dHlwZW9mIHQucmVmZXJyZXJQb2xpY3k/dC5yZWZlcnJlclBvbGljeTp2b2lkIDAsaW1hZ2VTcmNTZXQ6InN0cmluZyI9PXR5cGVvZiB0LmltYWdlU3JjU2V0P3QuaW1hZ2VTcmNTZXQ6dm9pZCAwLGltYWdlU2l6ZXM6InN0cmluZyI9PXR5cGVvZiB0LmltYWdlU2l6ZXM/dC5pbWFnZVNpemVzOnZvaWQgMH0pfX0sdC5wcmVsb2FkTW9kdWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49Y1YuY3VycmVudDtpZihuJiYic3RyaW5nIj09dHlwZW9mIGUpe2lmKHQpe3ZhciByPWNCKHQuYXMsdC5jcm9zc09yaWdpbik7bi5wcmVsb2FkTW9kdWxlKGUse2FzOiJzdHJpbmciPT10eXBlb2YgdC5hcyYmInNjcmlwdCIhPT10LmFzP3QuYXM6dm9pZCAwLGNyb3NzT3JpZ2luOnIsaW50ZWdyaXR5OiJzdHJpbmciPT10eXBlb2YgdC5pbnRlZ3JpdHk/dC5pbnRlZ3JpdHk6dm9pZCAwfSl9ZWxzZSBuLnByZWxvYWRNb2R1bGUoZSl9fSx0LnJlbmRlcj1mdW5jdGlvbihlLHQsbil7aWYoIWNBKHQpKXRocm93IEVycm9yKGkoMjk5KSk7cmV0dXJuIGNVKG51bGwsZSx0LCExLG4pfSx0LnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24oZSl7aWYoIWNBKGUpKXRocm93IEVycm9yKGkoMjk5KSk7cmV0dXJuISFlLl9yZWFjdFJvb3RDb250YWluZXImJihvNihmdW5jdGlvbigpe2NVKG51bGwsbnVsbCxlLCExLGZ1bmN0aW9uKCl7ZS5fcmVhY3RSb290Q29udGFpbmVyPW51bGwsZVtlel09bnVsbH0pfSksITApfSx0LnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPW80LHQudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI9ZnVuY3Rpb24oZSx0LG4scil7aWYoIWNBKG4pKXRocm93IEVycm9yKGkoMjk5KSk7aWYobnVsbD09ZXx8dm9pZCAwPT09ZS5fcmVhY3RJbnRlcm5hbHMpdGhyb3cgRXJyb3IoaSgzOCkpO3JldHVybiBjVShlLHQsbiwhMSxyKX0sdC51c2VGb3JtU3RhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjLmN1cnJlbnQudXNlRm9ybVN0YXRlKGUsdCxuKX0sdC51c2VGb3JtU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuY3VycmVudC51c2VIb3N0VHJhbnNpdGlvblN0YXR1cygpfSx0LnZlcnNpb249IjE4LjMuMC1jYW5hcnktMTc4YzI2N2E0ZS0yMDI0MTIxOCJ9fV0pOw=="}},"time_used":261,"timings":{"blocked":-1,"dns":0,"connect":41,"send":0,"wait":87,"receive":85,"ssl":48},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:34.302Z","timestamp":1785111154302,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /unavailable HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=6\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:34 GMT\r\nContent-Type: text/html; charset=utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nvary: RSC, Next-Router-State-Tree, Next-Router-Prefetch\r\nx-nextjs-cache: HIT\r\nCache-Control: s-maxage=31536000, stale-while-revalidate\r\nETag: W/\"10rbqlihx7q75c\"\r\nContent-Encoding: gzip\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":9277,"size_decoded":3611,"mime_type":"text/html; charset=utf-8","magic":"HTML document, Unicode text, UTF-8 text, with very long lines (9271), with no line terminators","md5":"7193946f0ff70f6d0dd858a420fb11b0","sha1":"30ba770d9939401b5bace2077178f8040edfc3a8","sha256":"377af8fc186d9243d1faed7fdc54bb54588fef6637e2f30a7090980de4535f79","sha512":"8210a78a742f57c19fd2f0cdb03e8a9082a14864a8ae6530848c7bff28b9d2c9c1133c35ef3c02622505c75a1d9643d281265a5472b36b09c71692f92216f0b1","ssdeep":"192:jmUOqsnnt97GGFaEcnKlLXslb9KgnqzcJmyO:jrOqMt9z25JO","tlshash":"7a126231a404ed4afc27bd58113e9c3e60cdc96f8baacd7893dcdd6106425ba6b62dc0","first_seen":"2026-07-26T12:48:47.487725Z","last_seen":"2026-07-27T00:14:58.571641Z","times_seen":8,"resource_available":true,"data":"PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZGUiPjxoZWFkPjxtZXRhIGNoYXJTZXQ9InV0Zi04Ii8+PG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvX25leHQvc3RhdGljL2Nzcy9mM2UxYzMzNGJiNzM2NTllLmNzcyIgZGF0YS1wcmVjZWRlbmNlPSJuZXh0Ii8+PGxpbmsgcmVsPSJwcmVsb2FkIiBhcz0ic2NyaXB0IiBmZXRjaFByaW9yaXR5PSJsb3ciIGhyZWY9Ii9fbmV4dC9zdGF0aWMvY2h1bmtzL3dlYnBhY2stYzgxZjdmZDI4NjU5ZDY0Zi5qcyIvPjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9mZDlkMTA1Ni1mMDk3NDRjNWU5Njc0YzdiLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvMTE3LWY5YmYwY2MxNjkzNmU2NTMuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9tYWluLWFwcC03MGVlN2RmOWRiMDI3Y2NjLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvYXBwL2Vycm9yLWYzMjk0YTVlMWI0MjNlN2YuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uvc3ZnK3htbCIgaHJlZj0iL2Zhdmljb24uc3ZnIi8+PGxpbmsgcmVsPSJhbHRlcm5hdGUgaWNvbiIgaHJlZj0iL2Zhdmljb24uaWNvIi8+PHRpdGxlPlBheVBhbDwvdGl0bGU+PG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlBheVBhbCAtIFNlY3VyaXR5IHZlcmlmaWNhdGlvbiIvPjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9wb2x5ZmlsbHMtNDIzNzJlZDEzMDQzMWIwYS5qcyIgbm9Nb2R1bGU9IiI+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjxkaXYgc3R5bGU9Im1pbi1oZWlnaHQ6MTAwdmg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNmNWY3ZmEiPjxzdHlsZT5Aa2V5ZnJhbWVzIHNoaW1tZXIgeyAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDsgfSAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwMCUgMDsgfSB9PC9zdHlsZT48aGVhZGVyIHN0eWxlPSJiYWNrZ3JvdW5kOndoaXRlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTU7cGFkZGluZzoxNnB4IDIwcHgiPjxkaXYgc3R5bGU9Im1heC13aWR0aDo5MDBweDttYXJnaW46MCBhdXRvIj48c3BhbiBzdHlsZT0iY29sb3I6IzAwNzBiYTtmb250LXNpemU6MjJweDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6aXRhbGljIj5QYXlQYWw8L3NwYW4+PC9kaXY+PC9oZWFkZXI+PG1haW4gc3R5bGU9ImZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjQwcHggMTZweCI+PGRpdiBzdHlsZT0id2lkdGg6MTAwJTttYXgtd2lkdGg6NDYwcHgiPjxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MzJweCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMwMDcwYmE7Zm9udC1zaXplOjI4cHg7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXN0eWxlOml0YWxpYyI+UGF5UGFsPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MzJweCAyOHB4O2JveC1zaGFkb3c6MCAycHggMTZweCByZ2JhKDAsMCwwLDAuMDYpIj48ZGl2IHN0eWxlPSJoZWlnaHQ6MjBweDt3aWR0aDo2MCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDo0OHB4O3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDo0OHB4O3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDoyMHB4O3dpZHRoOjQwJTtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgI2UwZTBlMCAyNSUsICNmMGYwZjAgNTAlLCAjZTBlMGUwIDc1JSk7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJTthbmltYXRpb246c2hpbW1lciAxLjVzIGluZmluaXRlO21hcmdpbi1ib3R0b206MTJweDttYXJnaW4tbGVmdDphdXRvIj48L2Rpdj48ZGl2IHN0eWxlPSJoZWlnaHQ6NDhweDt3aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6MjRweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgI2UwZTBlMCAyNSUsICNmMGYwZjAgNTAlLCAjZTBlMGUwIDc1JSk7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJTthbmltYXRpb246c2hpbW1lciAxLjVzIGluZmluaXRlO21hcmdpbi1ib3R0b206MTJweCI+PC9kaXY+PC9kaXY+PC9kaXY+PC9tYWluPjxmb290ZXIgc3R5bGU9ImJhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTtwYWRkaW5nOjIwcHgiPjxkaXYgc3R5bGU9Im1heC13aWR0aDo5MDBweDttYXJnaW46MCBhdXRvO3RleHQtYWxpZ246Y2VudGVyIj48ZGl2IHN0eWxlPSJoZWlnaHQ6MTJweDt3aWR0aDo0MCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjwvZGl2PjwvZm9vdGVyPjwvZGl2PjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy93ZWJwYWNrLWM4MWY3ZmQyODY1OWQ2NGYuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxzY3JpcHQ+KHNlbGYuX19uZXh0X2Y9c2VsZi5fX25leHRfZnx8W10pLnB1c2goWzBdKTtzZWxmLl9fbmV4dF9mLnB1c2goWzIsbnVsbF0pPC9zY3JpcHQ+PHNjcmlwdD5zZWxmLl9fbmV4dF9mLnB1c2goWzEsIjE6SExbXCIvX25leHQvc3RhdGljL2Nzcy9mM2UxYzMzNGJiNzM2NTllLmNzc1wiLFwic3R5bGVcIl1cbiJdKTwvc2NyaXB0PjxzY3JpcHQ+c2VsZi5fX25leHRfZi5wdXNoKFsxLCIyOklbMjg0NixbXSxcIlwiXVxuNDpJWzQ3MDcsW10sXCJcIl1cbjU6SVs2NDIzLFtdLFwiXCJdXG42OklbNzAxMyxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiRmluZ2VycHJpbnRQcm92aWRlclwiXVxuNzpJWzIwMDQsW1wiMTg1XCIsXCJzdGF0aWMvY2h1bmtzL2FwcC9sYXlvdXQtNTU3OWE5ZDUxOTI5Mjg0YS5qc1wiXSxcIlNlY3VyaXR5U2hpZWxkXCJdXG44OklbMjQwMSxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiZGVmYXVsdFwiXVxuOTpJWzgyLFtcIjE4NVwiLFwic3RhdGljL2NodW5rcy9hcHAvbGF5b3V0LTU1NzlhOWQ1MTkyOTI4NGEuanNcIl0sXCJIb25leXBvdEd1YXJkXCJdXG5hOklbNzY2MyxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiU21hcnRDaGFsbGVuZ2VcIl1cbmI6SVszNDkwLFtcIjYwMVwiLFwic3RhdGljL2NodW5rcy9hcHAvZXJyb3ItZjMyOTRhNWUxYjQyM2U3Zi5qc1wiXSxcImRlZmF1bHRcIl1cbmQ6SVsxMDYwLFtdLFwiXCJdXG5lOltdXG4iXSk8L3NjcmlwdD48c2NyaXB0PnNlbGYuX19uZXh0X2YucHVzaChbMSwiMDpbXCIkXCIsXCIkTDJcIixudWxsLHtcImJ1aWxkSWRcIjpcIk1wNm1sMWJXTzhSd3I0dnhzTlhac1wiLFwiYXNzZXRQcmVmaXhcIjpcIlwiLFwidXJsUGFydHNcIjpbXCJcIixcInVuYXZhaWxhYmxlXCJdLFwiaW5pdGlhbFRyZWVcIjpbXCJcIix7XCJjaGlsZHJlblwiOltcInVuYXZhaWxhYmxlXCIse1wiY2hpbGRyZW5cIjpbXCJfX1BBR0VfX1wiLHt9XX1dfSxcIiR1bmRlZmluZWRcIixcIiR1bmRlZmluZWRcIix0cnVlXSxcImluaXRpYWxTZWVkRGF0YVwiOltcIlwiLHtcImNoaWxkcmVuXCI6W1widW5hdmFpbGFibGVcIix7XCJjaGlsZHJlblwiOltcIl9fUEFHRV9fXCIse30sW1tcIiRMM1wiLFtcIiRcIixcImRpdlwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJtaW4taC1zY3JlZW4gZmxleCBmbGV4LWNvbCBiZy13aGl0ZVwiLFwiY2hpbGRyZW5cIjpbW1wiJFwiLFwiaGVhZGVyXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInctZnVsbCBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgcHktNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWF4LXctNXhsIG14LWF1dG8gcHgtNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJzcGFuXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInRleHQtMnhsIGZvbnQtYm9sZCBpdGFsaWNcIixcInN0eWxlXCI6e1wiY29sb3JcIjpcIiMwMDcwYmFcIn0sXCJjaGlsZHJlblwiOlwiUGF5UGFsXCJ9XX1dfV0sW1wiJFwiLFwibWFpblwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWF4LXctbWQgdy1mdWxsIHRleHQtY2VudGVyXCIsXCJjaGlsZHJlblwiOltbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWItNlwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJzdmdcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibXgtYXV0byBoLTE2IHctMTYgdGV4dC1ncmF5LTQwMFwiLFwiZmlsbFwiOlwibm9uZVwiLFwidmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJwYXRoXCIsbnVsbCx7XCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCIsXCJzdHJva2VXaWR0aFwiOjEuNSxcImRcIjpcIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIn1dfV19XSxbXCIkXCIsXCJoMVwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItM1wiLFwiY2hpbGRyZW5cIjpcIlNlcnZpY2UgdGVtcG9yYWlyZW1lbnQgaW5kaXNwb25pYmxlXCJ9XSxbXCIkXCIsXCJwXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInRleHQtZ3JheS02MDAgbWItNlwiLFwiY2hpbGRyZW5cIjpcIk5vdXMgcmVuY29udHJvbnMgYWN0dWVsbGVtZW50IHVuIHByb2Jsw6htZSB0ZWNobmlxdWUuIFZldWlsbGV6IHLDqWVzc2F5ZXIgZGFucyBxdWVscXVlcyBpbnN0YW50cy5cIn1dLFtcIiRcIixcInBcIixudWxsLHtcImNsYXNzTmFtZVwiOlwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCIsXCJjaGlsZHJlblwiOltcIk1lcmNpIGRlIHZvdHJlIHBhdGllbmNlLlwiLFtcIiRcIixcImJyXCIsbnVsbCx7fV0sXCJMJ8OpcXVpcGUgUGF5UGFsXCJdfV1dfV19XSxbXCIkXCIsXCJmb290ZXJcIixudWxsLHtcImNsYXNzTmFtZVwiOlwidy1mdWxsIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBweS02XCIsXCJjaGlsZHJlblwiOltcIiRcIixcImRpdlwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJtYXgtdy01eGwgbXgtYXV0byBweC00IHRleHQtY2VudGVyIHRleHQteHMgdGV4dC1ncmF5LTUwMFwiLFwiY2hpbGRyZW5cIjpbXCLCqSBcIiwyMDI2LFwiIFBheVBhbC4gVG91cyBkcm9pdHMgcsOpc2VydsOpcy5cIl19XX1dXX1dLG51bGxdLG51bGxdLG51bGxdfSxbbnVsbCxbXCIkXCIsXCIkTDRcIixudWxsLHtcInBhcmFsbGVsUm91dGVyS2V5XCI6XCJjaGlsZHJlblwiLFwic2VnbWVudFBhdGhcIjpbXCJjaGlsZHJlblwiLFwidW5hdmFpbGFibGVcIixcImNoaWxkcmVuXCJdLFwiZXJyb3JcIjpcIiR1bmRlZmluZWRcIixcImVycm9yU3R5bGVzXCI6XCIkdW5kZWZpbmVkXCIsXCJlcnJvclNjcmlwdHNcIjpcIiR1bmRlZmluZWRcIixcInRlbXBsYXRlXCI6W1wiJFwiLFwiJEw1XCIsbnVsbCx7fV0sXCJ0ZW1wbGF0ZVN0eWxlc1wiOlwiJHVuZGVmaW5lZFwiLFwidGVtcGxhdGVTY3JpcHRzXCI6XCIkdW5kZWZpbmVkXCIsXCJub3RGb3VuZFwiOlwiJHVuZGVmaW5lZFwiLFwibm90Rm91bmRTdHlsZXNcIjpcIiR1bmRlZmluZWRcIn1dXSxudWxsXX0sW1tbW1wiJFwiLFwibGlua1wiLFwiMFwiLHtcInJlbFwiOlwic3R5bGVzaGVldFwiLFwiaHJlZlwiOlwiL19uZXh0L3N0YXRpYy9jc3MvZjNlMWMzMzRiYjczNjU5ZS5jc3NcIixcInByZWNlZGVuY2VcIjpcIm5leHRcIixcImNyb3NzT3JpZ2luXCI6XCIkdW5kZWZpbmVkXCJ9XV0sW1wiJFwiLFwiaHRtbFwiLG51bGwse1wibGFuZ1wiOlwiZGVcIixcImNoaWxkcmVuXCI6W1tcIiRcIixcImhlYWRcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcImxpbmtcIixudWxsLHtcInJlbFwiOlwiaWNvblwiLFwidHlwZVwiOlwiaW1hZ2Uvc3ZnK3htbFwiLFwiaHJlZlwiOlwiL2Zhdmljb24uc3ZnXCJ9XSxbXCIkXCIsXCJsaW5rXCIsbnVsbCx7XCJyZWxcIjpcImFsdGVybmF0ZSBpY29uXCIsXCJocmVmXCI6XCIvZmF2aWNvbi5pY29cIn1dXX1dLFtcIiRcIixcImJvZHlcIixudWxsLHtcImNoaWxkcmVuXCI6W1wiJFwiLFwiJEw2XCIsbnVsbCx7XCJjaGlsZHJlblwiOltcIiRcIixcIiRMN1wiLG51bGwse1wiY2hpbGRyZW5cIjpbXCIkXCIsXCIkTDhcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcIiRMOVwiLG51bGwse31dLFtcIiRcIixcIiRMYVwiLG51bGwse31dLFtcIiRcIixcIiRMNFwiLG51bGwse1wicGFyYWxsZWxSb3V0ZXJLZXlcIjpcImNoaWxkcmVuXCIsXCJzZWdtZW50UGF0aFwiOltcImNoaWxkcmVuXCJdLFwiZXJyb3JcIjpcIiRiXCIsXCJlcnJvclN0eWxlc1wiOltdLFwiZXJyb3JTY3JpcHRzXCI6W10sXCJ0ZW1wbGF0ZVwiOltcIiRcIixcIiRMNVwiLG51bGwse31dLFwidGVtcGxhdGVTdHlsZXNcIjpcIiR1bmRlZmluZWRcIixcInRlbXBsYXRlU2NyaXB0c1wiOlwiJHVuZGVmaW5lZFwiLFwibm90Rm91bmRcIjpbW1wiJFwiLFwidGl0bGVcIixudWxsLHtcImNoaWxkcmVuXCI6XCI0MDQ6IFRoaXMgcGFnZSBjb3VsZCBub3QgYmUgZm91bmQuXCJ9XSxbXCIkXCIsXCJkaXZcIixudWxsLHtcInN0eWxlXCI6e1wiZm9udEZhbWlseVwiOlwic3lzdGVtLXVpLFxcXCJTZWdvZSBVSVxcXCIsUm9ib3RvLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIlwiLFwiaGVpZ2h0XCI6XCIxMDB2aFwiLFwidGV4dEFsaWduXCI6XCJjZW50ZXJcIixcImRpc3BsYXlcIjpcImZsZXhcIixcImZsZXhEaXJlY3Rpb25cIjpcImNvbHVtblwiLFwiYWxpZ25JdGVtc1wiOlwiY2VudGVyXCIsXCJqdXN0aWZ5Q29udGVudFwiOlwiY2VudGVyXCJ9LFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcInN0eWxlXCIsbnVsbCx7XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOntcIl9faHRtbFwiOlwiYm9keXtjb2xvcjojMDAwO2JhY2tncm91bmQ6I2ZmZjttYXJnaW46MH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7Ym9keXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzAwMH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjMpfX1cIn19XSxbXCIkXCIsXCJoMVwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJuZXh0LWVycm9yLWgxXCIsXCJzdHlsZVwiOntcImRpc3BsYXlcIjpcImlubGluZS1ibG9ja1wiLFwibWFyZ2luXCI6XCIwIDIwcHggMCAwXCIsXCJwYWRkaW5nXCI6XCIwIDIzcHggMCAwXCIsXCJmb250U2l6ZVwiOjI0LFwiZm9udFdlaWdodFwiOjUwMCxcInZlcnRpY2FsQWxpZ25cIjpcInRvcFwiLFwibGluZUhlaWdodFwiOlwiNDlweFwifSxcImNoaWxkcmVuXCI6XCI0MDRcIn1dLFtcIiRcIixcImRpdlwiLG51bGwse1wic3R5bGVcIjp7XCJkaXNwbGF5XCI6XCJpbmxpbmUtYmxvY2tcIn0sXCJjaGlsZHJlblwiOltcIiRcIixcImgyXCIsbnVsbCx7XCJzdHlsZVwiOntcImZvbnRTaXplXCI6MTQsXCJmb250V2VpZ2h0XCI6NDAwLFwibGluZUhlaWdodFwiOlwiNDlweFwiLFwibWFyZ2luXCI6MH0sXCJjaGlsZHJlblwiOlwiVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZC5cIn1dfV1dfV19XV0sXCJub3RGb3VuZFN0eWxlc1wiOltdfV1dfV19XX1dfV1dfV1dLG51bGxdLG51bGxdLFwiY291bGRCZUludGVyY2VwdGVkXCI6ZmFsc2UsXCJpbml0aWFsSGVhZFwiOltudWxsLFwiJExjXCJdLFwiZ2xvYmFsRXJyb3JDb21wb25lbnRcIjpcIiRkXCIsXCJtaXNzaW5nU2xvdHNcIjpcIiRXZVwifV1cbiJdKTwvc2NyaXB0PjxzY3JpcHQ+c2VsZi5fX25leHRfZi5wdXNoKFsxLCJjOltbXCIkXCIsXCJtZXRhXCIsXCIwXCIse1wibmFtZVwiOlwidmlld3BvcnRcIixcImNvbnRlbnRcIjpcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCJ9XSxbXCIkXCIsXCJtZXRhXCIsXCIxXCIse1wiY2hhclNldFwiOlwidXRmLThcIn1dLFtcIiRcIixcInRpdGxlXCIsXCIyXCIse1wiY2hpbGRyZW5cIjpcIlBheVBhbFwifV0sW1wiJFwiLFwibWV0YVwiLFwiM1wiLHtcIm5hbWVcIjpcImRlc2NyaXB0aW9uXCIsXCJjb250ZW50XCI6XCJQYXlQYWwgLSBTZWN1cml0eSB2ZXJpZmljYXRpb25cIn1dXVxuMzpudWxsXG4iXSk8L3NjcmlwdD48L2JvZHk+PC9odG1sPg=="}},"time_used":45,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":45,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/api/security-check","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"fetch","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:34.401Z","timestamp":1785111154401,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"POST /api/security-check HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nContent-Type: application/json\r\nContent-Length: 90\r\nOrigin: https://absicherung-kontakt.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: empty\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=4\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"POST","post_data":{"size":90,"data":"{\"challenge\":{\"mouseMovements\":0,\"touchEvents\":0,\"timeOnPage\":0},\"fingerprint\":\"5cd51249\"}"}},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:34 GMT\r\nContent-Type: application/json\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nvary: RSC, Next-Router-State-Tree, Next-Router-Prefetch\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]},{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":153,"size_decoded":577,"mime_type":"application/json","magic":"JSON text data","md5":"f9b90f01ecf936743740c3e7e1c9492e","sha1":"cd95d19876ea9de3b0e21627c46be79329415314","sha256":"1f51580c0a500e397c4e55f33df77907d9da83cbba0aa621ecbacaf92d7fbd74","sha512":"d21a27b1024c919a6c588f9db8b3218bf691db9d1e2332edaf4c6069a7b56629f915e601076cbcdbf2c65cd7109acfa740170bacbaf2a4c72111527f4ce08d92","ssdeep":"","tlshash":"cac0924a14384ebcc0bc03419904bf2a0c7e1bb712503868feacea485cf20b7002240b","first_seen":"2026-06-15T12:12:41.869977Z","last_seen":"2026-07-27T00:14:58.573947Z","times_seen":31,"resource_available":false,"data":"eyJhbGxvd2VkIjp0cnVlLCJyZWFzb24iOm51bGwsImdlbyI6bnVsbCwiY2hlY2tzIjp7ImlwIjp0cnVlLCJmaW5nZXJwcmludCI6dHJ1ZSwiY2hhbGxlbmdlIjpmYWxzZSwiY291bnRyeSI6dHJ1ZSwidnBuIjp0cnVlLCJwcm94eSI6dHJ1ZSwiaG9zdGluZyI6dHJ1ZX19"}},"time_used":140,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":140,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/api/challenge-status","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"fetch","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:34.553Z","timestamp":1785111154553,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /api/challenge-status HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: empty\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=4\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:34 GMT\r\nContent-Type: application/json\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nvary: RSC, Next-Router-State-Tree, Next-Router-Prefetch\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":109,"size_decoded":533,"mime_type":"application/json","magic":"JSON text data","md5":"a39dbb1f822f91a48669c6d573e683d7","sha1":"0c23d5472c88fe0c9abdeb57f9ed788ca04ad2f4","sha256":"63b6c12304adc8325eae790a0e62f594424be2607844f7bba8f273c8042b5b32","sha512":"06f146d3429e6c4aa6e24a2a60279b4df4be777ef3c73097bdfd0e75bd5e68143799f5a78299b3812c7adc13be7f2f5d33d613cf93cef765b37201405cf254b7","ssdeep":"","tlshash":"72b01205882002e6e78723c84c0e29839e2ec03dc41c7c1af57a9cab06c64097240c3f","first_seen":"2026-07-27T00:13:04.953867Z","last_seen":"2026-07-27T00:13:04.953867Z","times_seen":1,"resource_available":false,"data":"eyJyZXF1aXJlZCI6dHJ1ZSwidHlwZXMiOlsicG93Il0sInR1cm5zdGlsZVNpdGVLZXkiOiIiLCJwb3ciOnsiY2hhbGxlbmdlIjoiODk2MjhlYzUyYThjODZjYSIsImRpZmZpY3VsdHkiOjR9fQ=="}},"time_used":48,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":48,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/api/verify-challenge","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"fetch","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:37.935Z","timestamp":1785111157935,"http_version":"HTTP/1.1","security_state":"secure","security_info":null,"request":{"raw":"POST /api/verify-challenge HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nContent-Type: application/json\r\nContent-Length: 77\r\nOrigin: https://absicherung-kontakt.com\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: empty\r\nSec-Fetch-Mode: cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=4\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"POST","post_data":{"size":77,"data":"{\"powNonce\":\"eab7\",\"powChallenge\":\"89628ec52a8c86ca\",\"fingerprint\":\"unknown\"}"}},"response":{"raw":"","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":null,"data":{"size":0,"size_decoded":0,"mime_type":"","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-07-27T03:50:56.498462Z","times_seen":17555199,"resource_available":true,"data":null}},"time_used":0,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":0,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/main-app-70ee7df9db027ccc.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.093Z","timestamp":1785111158093,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/main-app-70ee7df9db027ccc.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 461\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"1cd-19f99f825a8\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]},{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":461,"size_decoded":989,"mime_type":"application/javascript; charset=UTF-8","magic":"ASCII text, with very long lines (461), with no line terminators","md5":"3eaf12a540fadb070ef6722138574f92","sha1":"990942dc9054283a1d82636a19ce57ce2e8f16f6","sha256":"491a689e0ee919fc28a0ee04cdd9d264b27e10ee8baed794bb9fbf3249249d69","sha512":"ea6330a122f24236f7e8302d97122718c2c8e87618bc4ba3f63ff04bf9ca23ea2852328247f66e9323cb30b46bc544861d167fd3353de64042955f4633d127d8","ssdeep":"","tlshash":"59f012992b4d701f3d13ad24fdd35c2e755e416428a759501a14ddb12c336aca3f1c79","first_seen":"2026-07-26T12:48:47.492553Z","last_seen":"2026-07-27T00:14:58.581761Z","times_seen":8,"resource_available":true,"data":"KHNlbGYud2VicGFja0NodW5rX05fRT1zZWxmLndlYnBhY2tDaHVua19OX0V8fFtdKS5wdXNoKFtbNzQ0XSx7NzU5MTpmdW5jdGlvbihlLG4sdCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbih0LnQuYmluZCh0LDI4NDYsMjMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKHQudC5iaW5kKHQsOTEwNywyMykpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4odC50LmJpbmQodCwxMDYwLDIzKSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbih0LnQuYmluZCh0LDQ3MDcsMjMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKHQudC5iaW5kKHQsODAsMjMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKHQudC5iaW5kKHQsNjQyMywyMykpfX0sZnVuY3Rpb24oZSl7dmFyIG49ZnVuY3Rpb24obil7cmV0dXJuIGUoZS5zPW4pfTtlLk8oMCxbOTcxLDExN10sZnVuY3Rpb24oKXtyZXR1cm4gbig0Mjc4KSxuKDc1OTEpfSksX05fRT1lLk8oKX1dKTs="}},"time_used":76,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":76,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/webpack-c81f7fd28659d64f.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:33.872Z","timestamp":1785111153872,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/webpack-c81f7fd28659d64f.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=4\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:33 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 3557\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"de5-19f99f825b6\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":3557,"size_decoded":4086,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, ASCII text, with very long lines (3557), with no line terminators","md5":"48a0efa196e3561eba1491f20e632cbb","sha1":"b385022103992d75cfb2027770d4539bf9a918ef","sha256":"1bdb0dd87714cecd54db2509fc17767ce17b4606ee0eec9faca0871ab8fd87ca","sha512":"8e540715546e6692a68eda2cc987c811c2428e2250cf32864ed201364c34f1f9c2e99150aec534e7668a092424dcd4b23f929c0dac9c48ed7b8be73d7f724bc3","ssdeep":"","tlshash":"5e7196dd71a1f8ba1783a4a1043f9456f23f28b2281ee4a0cb25d8f5fc355488513fa8","first_seen":"2025-03-01T02:35:14.23303Z","last_seen":"2026-07-27T00:14:58.575499Z","times_seen":159,"resource_available":true,"data":"IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlLHQsbixyLG8sdSxpLGMsZixhPXt9LGw9e307ZnVuY3Rpb24gZChlKXt2YXIgdD1sW2VdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQuZXhwb3J0czt2YXIgbj1sW2VdPXtleHBvcnRzOnt9fSxyPSEwO3RyeXthW2VdKG4sbi5leHBvcnRzLGQpLHI9ITF9ZmluYWxseXtyJiZkZWxldGUgbFtlXX1yZXR1cm4gbi5leHBvcnRzfWQubT1hLGU9W10sZC5PPWZ1bmN0aW9uKHQsbixyLG8pe2lmKG4pe289b3x8MDtmb3IodmFyIHU9ZS5sZW5ndGg7dT4wJiZlW3UtMV1bMl0+bzt1LS0pZVt1XT1lW3UtMV07ZVt1XT1bbixyLG9dO3JldHVybn1mb3IodmFyIGk9MS8wLHU9MDt1PGUubGVuZ3RoO3UrKyl7Zm9yKHZhciBuPWVbdV1bMF0scj1lW3VdWzFdLG89ZVt1XVsyXSxjPSEwLGY9MDtmPG4ubGVuZ3RoO2YrKylpPj1vJiZPYmplY3Qua2V5cyhkLk8pLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBkLk9bZV0obltmXSl9KT9uLnNwbGljZShmLS0sMSk6KGM9ITEsbzxpJiYoaT1vKSk7aWYoYyl7ZS5zcGxpY2UodS0tLDEpO3ZhciBhPXIoKTt2b2lkIDAhPT1hJiYodD1hKX19cmV0dXJuIHR9LGQubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gZC5kKHQse2E6dH0pLHR9LG49T2JqZWN0LmdldFByb3RvdHlwZU9mP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX30sZC50PWZ1bmN0aW9uKGUscil7aWYoMSZyJiYoZT10aGlzKGUpKSw4JnJ8fCJvYmplY3QiPT10eXBlb2YgZSYmZSYmKDQmciYmZS5fX2VzTW9kdWxlfHwxNiZyJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50aGVuKSlyZXR1cm4gZTt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO2QucihvKTt2YXIgdT17fTt0PXR8fFtudWxsLG4oe30pLG4oW10pLG4obildO2Zvcih2YXIgaT0yJnImJmU7Im9iamVjdCI9PXR5cGVvZiBpJiYhfnQuaW5kZXhPZihpKTtpPW4oaSkpT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaSkuZm9yRWFjaChmdW5jdGlvbih0KXt1W3RdPWZ1bmN0aW9uKCl7cmV0dXJuIGVbdF19fSk7cmV0dXJuIHUuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBlfSxkLmQobyx1KSxvfSxkLmQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClkLm8odCxuKSYmIWQubyhlLG4pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9LGQuZj17fSxkLmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKE9iamVjdC5rZXlzKGQuZikucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGQuZltuXShlLHQpLHR9LFtdKSl9LGQudT1mdW5jdGlvbihlKXt9LGQubWluaUNzc0Y9ZnVuY3Rpb24oZSl7fSxkLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHI9e30sbz0iX05fRToiLGQubD1mdW5jdGlvbihlLHQsbix1KXtpZihyW2VdKXtyW2VdLnB1c2godCk7cmV0dXJufWlmKHZvaWQgMCE9PW4pZm9yKHZhciBpLGMsZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksYT0wO2E8Zi5sZW5ndGg7YSsrKXt2YXIgbD1mW2FdO2lmKGwuZ2V0QXR0cmlidXRlKCJzcmMiKT09ZXx8bC5nZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIpPT1vK24pe2k9bDticmVha319aXx8KGM9ITAsKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IikpLmNoYXJzZXQ9InV0Zi04IixpLnRpbWVvdXQ9MTIwLGQubmMmJmkuc2V0QXR0cmlidXRlKCJub25jZSIsZC5uYyksaS5zZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIsbytuKSxpLnNyYz1kLnR1KGUpKSxyW2VdPVt0XTt2YXIgcz1mdW5jdGlvbih0LG4pe2kub25lcnJvcj1pLm9ubG9hZD1udWxsLGNsZWFyVGltZW91dChwKTt2YXIgbz1yW2VdO2lmKGRlbGV0ZSByW2VdLGkucGFyZW50Tm9kZSYmaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpLG8mJm8uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZShuKX0pLHQpcmV0dXJuIHQobil9LHA9c2V0VGltZW91dChzLmJpbmQobnVsbCx2b2lkIDAse3R5cGU6InRpbWVvdXQiLHRhcmdldDppfSksMTJlNCk7aS5vbmVycm9yPXMuYmluZChudWxsLGkub25lcnJvciksaS5vbmxvYWQ9cy5iaW5kKG51bGwsaS5vbmxvYWQpLGMmJmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaSl9LGQucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxkLnR0PWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXUmJih1PXtjcmVhdGVTY3JpcHRVUkw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSwidW5kZWZpbmVkIiE9dHlwZW9mIHRydXN0ZWRUeXBlcyYmdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSYmKHU9dHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgibmV4dGpzI2J1bmRsZXIiLHUpKSksdX0sZC50dT1mdW5jdGlvbihlKXtyZXR1cm4gZC50dCgpLmNyZWF0ZVNjcmlwdFVSTChlKX0sZC5wPSIvX25leHQvIixpPXsyNzI6MCw1ODc6MH0sZC5mLmo9ZnVuY3Rpb24oZSx0KXt2YXIgbj1kLm8oaSxlKT9pW2VdOnZvaWQgMDtpZigwIT09bil7aWYobil0LnB1c2goblsyXSk7ZWxzZSBpZigvXigyNzJ8NTg3KSQvLnRlc3QoZSkpaVtlXT0wO2Vsc2V7dmFyIHI9bmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtuPWlbZV09W3Qscl19KTt0LnB1c2goblsyXT1yKTt2YXIgbz1kLnArZC51KGUpLHU9RXJyb3IoKTtkLmwobyxmdW5jdGlvbih0KXtpZihkLm8oaSxlKSYmKDAhPT0obj1pW2VdKSYmKGlbZV09dm9pZCAwKSxuKSl7dmFyIHI9dCYmKCJsb2FkIj09PXQudHlwZT8ibWlzc2luZyI6dC50eXBlKSxvPXQmJnQudGFyZ2V0JiZ0LnRhcmdldC5zcmM7dS5tZXNzYWdlPSJMb2FkaW5nIGNodW5rICIrZSsiIGZhaWxlZC5cbigiK3IrIjogIitvKyIpIix1Lm5hbWU9IkNodW5rTG9hZEVycm9yIix1LnR5cGU9cix1LnJlcXVlc3Q9byxuWzFdKHUpfX0sImNodW5rLSIrZSxlKX19fSxkLk8uaj1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWlbZV19LGM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89dFswXSx1PXRbMV0sYz10WzJdLGY9MDtpZihvLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1pW2VdfSkpe2ZvcihuIGluIHUpZC5vKHUsbikmJihkLm1bbl09dVtuXSk7aWYoYyl2YXIgYT1jKGQpfWZvcihlJiZlKHQpO2Y8by5sZW5ndGg7ZisrKXI9b1tmXSxkLm8oaSxyKSYmaVtyXSYmaVtyXVswXSgpLGlbcl09MDtyZXR1cm4gZC5PKGEpfSwoZj1zZWxmLndlYnBhY2tDaHVua19OX0U9c2VsZi53ZWJwYWNrQ2h1bmtfTl9FfHxbXSkuZm9yRWFjaChjLmJpbmQobnVsbCwwKSksZi5wdXNoPWMuYmluZChudWxsLGYucHVzaC5iaW5kKGYpKX0oKTs="}},"time_used":135,"timings":{"blocked":-1,"dns":0,"connect":41,"send":0,"wait":48,"receive":0,"ssl":46},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/favicon.svg","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.328Z","timestamp":1785111158328,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /favicon.svg HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=6\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 307 Temporary Redirect\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Length: 12\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nlocation: /unavailable\r\n\r\n","headers":null,"cookies":null,"status_code":"307","status_text":"Temporary Redirect","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":0,"size_decoded":0,"mime_type":"text/html; charset=utf-8","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-07-27T03:50:56.498462Z","times_seen":17555199,"resource_available":true,"data":null}},"time_used":51,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":51,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:38.428Z","timestamp":1785111158428,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /unavailable HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nCookie: __ups_trust=eyJpcCI6IjE5NS42NC4xMTguMTUyIiwiZnAiOiJ1bmtub3duIiwidHMiOjE3ODUxMTExNTc5NzAsInYiOjF9.KT0Unl9bLmL75M5hLLQORKFuEzZs4kX2xNPi99VwVKk%3D\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=6\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:38 GMT\r\nContent-Type: text/html; charset=utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nvary: RSC, Next-Router-State-Tree, Next-Router-Prefetch\r\nx-nextjs-cache: HIT\r\nCache-Control: s-maxage=31536000, stale-while-revalidate\r\nETag: W/\"10rbqlihx7q75c\"\r\nContent-Encoding: gzip\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":9277,"size_decoded":3611,"mime_type":"text/html; charset=utf-8","magic":"HTML document, Unicode text, UTF-8 text, with very long lines (9271), with no line terminators","md5":"7193946f0ff70f6d0dd858a420fb11b0","sha1":"30ba770d9939401b5bace2077178f8040edfc3a8","sha256":"377af8fc186d9243d1faed7fdc54bb54588fef6637e2f30a7090980de4535f79","sha512":"8210a78a742f57c19fd2f0cdb03e8a9082a14864a8ae6530848c7bff28b9d2c9c1133c35ef3c02622505c75a1d9643d281265a5472b36b09c71692f92216f0b1","ssdeep":"192:jmUOqsnnt97GGFaEcnKlLXslb9KgnqzcJmyO:jrOqMt9z25JO","tlshash":"7a126231a404ed4afc27bd58113e9c3e60cdc96f8baacd7893dcdd6106425ba6b62dc0","first_seen":"2026-07-26T12:48:47.487725Z","last_seen":"2026-07-27T00:14:58.571641Z","times_seen":8,"resource_available":true,"data":"PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZGUiPjxoZWFkPjxtZXRhIGNoYXJTZXQ9InV0Zi04Ii8+PG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvX25leHQvc3RhdGljL2Nzcy9mM2UxYzMzNGJiNzM2NTllLmNzcyIgZGF0YS1wcmVjZWRlbmNlPSJuZXh0Ii8+PGxpbmsgcmVsPSJwcmVsb2FkIiBhcz0ic2NyaXB0IiBmZXRjaFByaW9yaXR5PSJsb3ciIGhyZWY9Ii9fbmV4dC9zdGF0aWMvY2h1bmtzL3dlYnBhY2stYzgxZjdmZDI4NjU5ZDY0Zi5qcyIvPjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9mZDlkMTA1Ni1mMDk3NDRjNWU5Njc0YzdiLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvMTE3LWY5YmYwY2MxNjkzNmU2NTMuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9tYWluLWFwcC03MGVlN2RmOWRiMDI3Y2NjLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvYXBwL2Vycm9yLWYzMjk0YTVlMWI0MjNlN2YuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uvc3ZnK3htbCIgaHJlZj0iL2Zhdmljb24uc3ZnIi8+PGxpbmsgcmVsPSJhbHRlcm5hdGUgaWNvbiIgaHJlZj0iL2Zhdmljb24uaWNvIi8+PHRpdGxlPlBheVBhbDwvdGl0bGU+PG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlBheVBhbCAtIFNlY3VyaXR5IHZlcmlmaWNhdGlvbiIvPjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9wb2x5ZmlsbHMtNDIzNzJlZDEzMDQzMWIwYS5qcyIgbm9Nb2R1bGU9IiI+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjxkaXYgc3R5bGU9Im1pbi1oZWlnaHQ6MTAwdmg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNmNWY3ZmEiPjxzdHlsZT5Aa2V5ZnJhbWVzIHNoaW1tZXIgeyAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDsgfSAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwMCUgMDsgfSB9PC9zdHlsZT48aGVhZGVyIHN0eWxlPSJiYWNrZ3JvdW5kOndoaXRlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTU7cGFkZGluZzoxNnB4IDIwcHgiPjxkaXYgc3R5bGU9Im1heC13aWR0aDo5MDBweDttYXJnaW46MCBhdXRvIj48c3BhbiBzdHlsZT0iY29sb3I6IzAwNzBiYTtmb250LXNpemU6MjJweDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6aXRhbGljIj5QYXlQYWw8L3NwYW4+PC9kaXY+PC9oZWFkZXI+PG1haW4gc3R5bGU9ImZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjQwcHggMTZweCI+PGRpdiBzdHlsZT0id2lkdGg6MTAwJTttYXgtd2lkdGg6NDYwcHgiPjxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MzJweCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMwMDcwYmE7Zm9udC1zaXplOjI4cHg7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXN0eWxlOml0YWxpYyI+UGF5UGFsPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MzJweCAyOHB4O2JveC1zaGFkb3c6MCAycHggMTZweCByZ2JhKDAsMCwwLDAuMDYpIj48ZGl2IHN0eWxlPSJoZWlnaHQ6MjBweDt3aWR0aDo2MCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDo0OHB4O3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDo0OHB4O3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDoyMHB4O3dpZHRoOjQwJTtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgI2UwZTBlMCAyNSUsICNmMGYwZjAgNTAlLCAjZTBlMGUwIDc1JSk7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJTthbmltYXRpb246c2hpbW1lciAxLjVzIGluZmluaXRlO21hcmdpbi1ib3R0b206MTJweDttYXJnaW4tbGVmdDphdXRvIj48L2Rpdj48ZGl2IHN0eWxlPSJoZWlnaHQ6NDhweDt3aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6MjRweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgI2UwZTBlMCAyNSUsICNmMGYwZjAgNTAlLCAjZTBlMGUwIDc1JSk7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJTthbmltYXRpb246c2hpbW1lciAxLjVzIGluZmluaXRlO21hcmdpbi1ib3R0b206MTJweCI+PC9kaXY+PC9kaXY+PC9kaXY+PC9tYWluPjxmb290ZXIgc3R5bGU9ImJhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTtwYWRkaW5nOjIwcHgiPjxkaXYgc3R5bGU9Im1heC13aWR0aDo5MDBweDttYXJnaW46MCBhdXRvO3RleHQtYWxpZ246Y2VudGVyIj48ZGl2IHN0eWxlPSJoZWlnaHQ6MTJweDt3aWR0aDo0MCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjwvZGl2PjwvZm9vdGVyPjwvZGl2PjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy93ZWJwYWNrLWM4MWY3ZmQyODY1OWQ2NGYuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxzY3JpcHQ+KHNlbGYuX19uZXh0X2Y9c2VsZi5fX25leHRfZnx8W10pLnB1c2goWzBdKTtzZWxmLl9fbmV4dF9mLnB1c2goWzIsbnVsbF0pPC9zY3JpcHQ+PHNjcmlwdD5zZWxmLl9fbmV4dF9mLnB1c2goWzEsIjE6SExbXCIvX25leHQvc3RhdGljL2Nzcy9mM2UxYzMzNGJiNzM2NTllLmNzc1wiLFwic3R5bGVcIl1cbiJdKTwvc2NyaXB0PjxzY3JpcHQ+c2VsZi5fX25leHRfZi5wdXNoKFsxLCIyOklbMjg0NixbXSxcIlwiXVxuNDpJWzQ3MDcsW10sXCJcIl1cbjU6SVs2NDIzLFtdLFwiXCJdXG42OklbNzAxMyxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiRmluZ2VycHJpbnRQcm92aWRlclwiXVxuNzpJWzIwMDQsW1wiMTg1XCIsXCJzdGF0aWMvY2h1bmtzL2FwcC9sYXlvdXQtNTU3OWE5ZDUxOTI5Mjg0YS5qc1wiXSxcIlNlY3VyaXR5U2hpZWxkXCJdXG44OklbMjQwMSxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiZGVmYXVsdFwiXVxuOTpJWzgyLFtcIjE4NVwiLFwic3RhdGljL2NodW5rcy9hcHAvbGF5b3V0LTU1NzlhOWQ1MTkyOTI4NGEuanNcIl0sXCJIb25leXBvdEd1YXJkXCJdXG5hOklbNzY2MyxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiU21hcnRDaGFsbGVuZ2VcIl1cbmI6SVszNDkwLFtcIjYwMVwiLFwic3RhdGljL2NodW5rcy9hcHAvZXJyb3ItZjMyOTRhNWUxYjQyM2U3Zi5qc1wiXSxcImRlZmF1bHRcIl1cbmQ6SVsxMDYwLFtdLFwiXCJdXG5lOltdXG4iXSk8L3NjcmlwdD48c2NyaXB0PnNlbGYuX19uZXh0X2YucHVzaChbMSwiMDpbXCIkXCIsXCIkTDJcIixudWxsLHtcImJ1aWxkSWRcIjpcIk1wNm1sMWJXTzhSd3I0dnhzTlhac1wiLFwiYXNzZXRQcmVmaXhcIjpcIlwiLFwidXJsUGFydHNcIjpbXCJcIixcInVuYXZhaWxhYmxlXCJdLFwiaW5pdGlhbFRyZWVcIjpbXCJcIix7XCJjaGlsZHJlblwiOltcInVuYXZhaWxhYmxlXCIse1wiY2hpbGRyZW5cIjpbXCJfX1BBR0VfX1wiLHt9XX1dfSxcIiR1bmRlZmluZWRcIixcIiR1bmRlZmluZWRcIix0cnVlXSxcImluaXRpYWxTZWVkRGF0YVwiOltcIlwiLHtcImNoaWxkcmVuXCI6W1widW5hdmFpbGFibGVcIix7XCJjaGlsZHJlblwiOltcIl9fUEFHRV9fXCIse30sW1tcIiRMM1wiLFtcIiRcIixcImRpdlwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJtaW4taC1zY3JlZW4gZmxleCBmbGV4LWNvbCBiZy13aGl0ZVwiLFwiY2hpbGRyZW5cIjpbW1wiJFwiLFwiaGVhZGVyXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInctZnVsbCBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgcHktNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWF4LXctNXhsIG14LWF1dG8gcHgtNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJzcGFuXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInRleHQtMnhsIGZvbnQtYm9sZCBpdGFsaWNcIixcInN0eWxlXCI6e1wiY29sb3JcIjpcIiMwMDcwYmFcIn0sXCJjaGlsZHJlblwiOlwiUGF5UGFsXCJ9XX1dfV0sW1wiJFwiLFwibWFpblwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWF4LXctbWQgdy1mdWxsIHRleHQtY2VudGVyXCIsXCJjaGlsZHJlblwiOltbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWItNlwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJzdmdcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibXgtYXV0byBoLTE2IHctMTYgdGV4dC1ncmF5LTQwMFwiLFwiZmlsbFwiOlwibm9uZVwiLFwidmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJwYXRoXCIsbnVsbCx7XCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCIsXCJzdHJva2VXaWR0aFwiOjEuNSxcImRcIjpcIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIn1dfV19XSxbXCIkXCIsXCJoMVwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItM1wiLFwiY2hpbGRyZW5cIjpcIlNlcnZpY2UgdGVtcG9yYWlyZW1lbnQgaW5kaXNwb25pYmxlXCJ9XSxbXCIkXCIsXCJwXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInRleHQtZ3JheS02MDAgbWItNlwiLFwiY2hpbGRyZW5cIjpcIk5vdXMgcmVuY29udHJvbnMgYWN0dWVsbGVtZW50IHVuIHByb2Jsw6htZSB0ZWNobmlxdWUuIFZldWlsbGV6IHLDqWVzc2F5ZXIgZGFucyBxdWVscXVlcyBpbnN0YW50cy5cIn1dLFtcIiRcIixcInBcIixudWxsLHtcImNsYXNzTmFtZVwiOlwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCIsXCJjaGlsZHJlblwiOltcIk1lcmNpIGRlIHZvdHJlIHBhdGllbmNlLlwiLFtcIiRcIixcImJyXCIsbnVsbCx7fV0sXCJMJ8OpcXVpcGUgUGF5UGFsXCJdfV1dfV19XSxbXCIkXCIsXCJmb290ZXJcIixudWxsLHtcImNsYXNzTmFtZVwiOlwidy1mdWxsIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBweS02XCIsXCJjaGlsZHJlblwiOltcIiRcIixcImRpdlwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJtYXgtdy01eGwgbXgtYXV0byBweC00IHRleHQtY2VudGVyIHRleHQteHMgdGV4dC1ncmF5LTUwMFwiLFwiY2hpbGRyZW5cIjpbXCLCqSBcIiwyMDI2LFwiIFBheVBhbC4gVG91cyBkcm9pdHMgcsOpc2VydsOpcy5cIl19XX1dXX1dLG51bGxdLG51bGxdLG51bGxdfSxbbnVsbCxbXCIkXCIsXCIkTDRcIixudWxsLHtcInBhcmFsbGVsUm91dGVyS2V5XCI6XCJjaGlsZHJlblwiLFwic2VnbWVudFBhdGhcIjpbXCJjaGlsZHJlblwiLFwidW5hdmFpbGFibGVcIixcImNoaWxkcmVuXCJdLFwiZXJyb3JcIjpcIiR1bmRlZmluZWRcIixcImVycm9yU3R5bGVzXCI6XCIkdW5kZWZpbmVkXCIsXCJlcnJvclNjcmlwdHNcIjpcIiR1bmRlZmluZWRcIixcInRlbXBsYXRlXCI6W1wiJFwiLFwiJEw1XCIsbnVsbCx7fV0sXCJ0ZW1wbGF0ZVN0eWxlc1wiOlwiJHVuZGVmaW5lZFwiLFwidGVtcGxhdGVTY3JpcHRzXCI6XCIkdW5kZWZpbmVkXCIsXCJub3RGb3VuZFwiOlwiJHVuZGVmaW5lZFwiLFwibm90Rm91bmRTdHlsZXNcIjpcIiR1bmRlZmluZWRcIn1dXSxudWxsXX0sW1tbW1wiJFwiLFwibGlua1wiLFwiMFwiLHtcInJlbFwiOlwic3R5bGVzaGVldFwiLFwiaHJlZlwiOlwiL19uZXh0L3N0YXRpYy9jc3MvZjNlMWMzMzRiYjczNjU5ZS5jc3NcIixcInByZWNlZGVuY2VcIjpcIm5leHRcIixcImNyb3NzT3JpZ2luXCI6XCIkdW5kZWZpbmVkXCJ9XV0sW1wiJFwiLFwiaHRtbFwiLG51bGwse1wibGFuZ1wiOlwiZGVcIixcImNoaWxkcmVuXCI6W1tcIiRcIixcImhlYWRcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcImxpbmtcIixudWxsLHtcInJlbFwiOlwiaWNvblwiLFwidHlwZVwiOlwiaW1hZ2Uvc3ZnK3htbFwiLFwiaHJlZlwiOlwiL2Zhdmljb24uc3ZnXCJ9XSxbXCIkXCIsXCJsaW5rXCIsbnVsbCx7XCJyZWxcIjpcImFsdGVybmF0ZSBpY29uXCIsXCJocmVmXCI6XCIvZmF2aWNvbi5pY29cIn1dXX1dLFtcIiRcIixcImJvZHlcIixudWxsLHtcImNoaWxkcmVuXCI6W1wiJFwiLFwiJEw2XCIsbnVsbCx7XCJjaGlsZHJlblwiOltcIiRcIixcIiRMN1wiLG51bGwse1wiY2hpbGRyZW5cIjpbXCIkXCIsXCIkTDhcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcIiRMOVwiLG51bGwse31dLFtcIiRcIixcIiRMYVwiLG51bGwse31dLFtcIiRcIixcIiRMNFwiLG51bGwse1wicGFyYWxsZWxSb3V0ZXJLZXlcIjpcImNoaWxkcmVuXCIsXCJzZWdtZW50UGF0aFwiOltcImNoaWxkcmVuXCJdLFwiZXJyb3JcIjpcIiRiXCIsXCJlcnJvclN0eWxlc1wiOltdLFwiZXJyb3JTY3JpcHRzXCI6W10sXCJ0ZW1wbGF0ZVwiOltcIiRcIixcIiRMNVwiLG51bGwse31dLFwidGVtcGxhdGVTdHlsZXNcIjpcIiR1bmRlZmluZWRcIixcInRlbXBsYXRlU2NyaXB0c1wiOlwiJHVuZGVmaW5lZFwiLFwibm90Rm91bmRcIjpbW1wiJFwiLFwidGl0bGVcIixudWxsLHtcImNoaWxkcmVuXCI6XCI0MDQ6IFRoaXMgcGFnZSBjb3VsZCBub3QgYmUgZm91bmQuXCJ9XSxbXCIkXCIsXCJkaXZcIixudWxsLHtcInN0eWxlXCI6e1wiZm9udEZhbWlseVwiOlwic3lzdGVtLXVpLFxcXCJTZWdvZSBVSVxcXCIsUm9ib3RvLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIlwiLFwiaGVpZ2h0XCI6XCIxMDB2aFwiLFwidGV4dEFsaWduXCI6XCJjZW50ZXJcIixcImRpc3BsYXlcIjpcImZsZXhcIixcImZsZXhEaXJlY3Rpb25cIjpcImNvbHVtblwiLFwiYWxpZ25JdGVtc1wiOlwiY2VudGVyXCIsXCJqdXN0aWZ5Q29udGVudFwiOlwiY2VudGVyXCJ9LFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcInN0eWxlXCIsbnVsbCx7XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOntcIl9faHRtbFwiOlwiYm9keXtjb2xvcjojMDAwO2JhY2tncm91bmQ6I2ZmZjttYXJnaW46MH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7Ym9keXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzAwMH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjMpfX1cIn19XSxbXCIkXCIsXCJoMVwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJuZXh0LWVycm9yLWgxXCIsXCJzdHlsZVwiOntcImRpc3BsYXlcIjpcImlubGluZS1ibG9ja1wiLFwibWFyZ2luXCI6XCIwIDIwcHggMCAwXCIsXCJwYWRkaW5nXCI6XCIwIDIzcHggMCAwXCIsXCJmb250U2l6ZVwiOjI0LFwiZm9udFdlaWdodFwiOjUwMCxcInZlcnRpY2FsQWxpZ25cIjpcInRvcFwiLFwibGluZUhlaWdodFwiOlwiNDlweFwifSxcImNoaWxkcmVuXCI6XCI0MDRcIn1dLFtcIiRcIixcImRpdlwiLG51bGwse1wic3R5bGVcIjp7XCJkaXNwbGF5XCI6XCJpbmxpbmUtYmxvY2tcIn0sXCJjaGlsZHJlblwiOltcIiRcIixcImgyXCIsbnVsbCx7XCJzdHlsZVwiOntcImZvbnRTaXplXCI6MTQsXCJmb250V2VpZ2h0XCI6NDAwLFwibGluZUhlaWdodFwiOlwiNDlweFwiLFwibWFyZ2luXCI6MH0sXCJjaGlsZHJlblwiOlwiVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZC5cIn1dfV1dfV19XV0sXCJub3RGb3VuZFN0eWxlc1wiOltdfV1dfV19XX1dfV1dfV1dLG51bGxdLG51bGxdLFwiY291bGRCZUludGVyY2VwdGVkXCI6ZmFsc2UsXCJpbml0aWFsSGVhZFwiOltudWxsLFwiJExjXCJdLFwiZ2xvYmFsRXJyb3JDb21wb25lbnRcIjpcIiRkXCIsXCJtaXNzaW5nU2xvdHNcIjpcIiRXZVwifV1cbiJdKTwvc2NyaXB0PjxzY3JpcHQ+c2VsZi5fX25leHRfZi5wdXNoKFsxLCJjOltbXCIkXCIsXCJtZXRhXCIsXCIwXCIse1wibmFtZVwiOlwidmlld3BvcnRcIixcImNvbnRlbnRcIjpcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCJ9XSxbXCIkXCIsXCJtZXRhXCIsXCIxXCIse1wiY2hhclNldFwiOlwidXRmLThcIn1dLFtcIiRcIixcInRpdGxlXCIsXCIyXCIse1wiY2hpbGRyZW5cIjpcIlBheVBhbFwifV0sW1wiJFwiLFwibWV0YVwiLFwiM1wiLHtcIm5hbWVcIjpcImRlc2NyaXB0aW9uXCIsXCJjb250ZW50XCI6XCJQYXlQYWwgLSBTZWN1cml0eSB2ZXJpZmljYXRpb25cIn1dXVxuMzpudWxsXG4iXSk8L3NjcmlwdD48L2JvZHk+PC9odG1sPg=="}},"time_used":46,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":46,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/unavailable","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T00:12:33.588Z","timestamp":1785111153588,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /unavailable HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nSec-Fetch-Dest: document\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-Site: none\r\nPriority: u=0, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:33 GMT\r\nContent-Type: text/html; charset=utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nvary: RSC, Next-Router-State-Tree, Next-Router-Prefetch\r\nx-nextjs-cache: HIT\r\nCache-Control: s-maxage=31536000, stale-while-revalidate\r\nETag: W/\"10rbqlihx7q75c\"\r\nContent-Encoding: gzip\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":9277,"size_decoded":3611,"mime_type":"text/html; charset=utf-8","magic":"HTML document, Unicode text, UTF-8 text, with very long lines (9271), with no line terminators","md5":"7193946f0ff70f6d0dd858a420fb11b0","sha1":"30ba770d9939401b5bace2077178f8040edfc3a8","sha256":"377af8fc186d9243d1faed7fdc54bb54588fef6637e2f30a7090980de4535f79","sha512":"8210a78a742f57c19fd2f0cdb03e8a9082a14864a8ae6530848c7bff28b9d2c9c1133c35ef3c02622505c75a1d9643d281265a5472b36b09c71692f92216f0b1","ssdeep":"192:jmUOqsnnt97GGFaEcnKlLXslb9KgnqzcJmyO:jrOqMt9z25JO","tlshash":"7a126231a404ed4afc27bd58113e9c3e60cdc96f8baacd7893dcdd6106425ba6b62dc0","first_seen":"2026-07-26T12:48:47.487725Z","last_seen":"2026-07-27T00:14:58.571641Z","times_seen":8,"resource_available":true,"data":"PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZGUiPjxoZWFkPjxtZXRhIGNoYXJTZXQ9InV0Zi04Ii8+PG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvX25leHQvc3RhdGljL2Nzcy9mM2UxYzMzNGJiNzM2NTllLmNzcyIgZGF0YS1wcmVjZWRlbmNlPSJuZXh0Ii8+PGxpbmsgcmVsPSJwcmVsb2FkIiBhcz0ic2NyaXB0IiBmZXRjaFByaW9yaXR5PSJsb3ciIGhyZWY9Ii9fbmV4dC9zdGF0aWMvY2h1bmtzL3dlYnBhY2stYzgxZjdmZDI4NjU5ZDY0Zi5qcyIvPjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9mZDlkMTA1Ni1mMDk3NDRjNWU5Njc0YzdiLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvMTE3LWY5YmYwY2MxNjkzNmU2NTMuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9tYWluLWFwcC03MGVlN2RmOWRiMDI3Y2NjLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzIiBhc3luYz0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL19uZXh0L3N0YXRpYy9jaHVua3MvYXBwL2Vycm9yLWYzMjk0YTVlMWI0MjNlN2YuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uvc3ZnK3htbCIgaHJlZj0iL2Zhdmljb24uc3ZnIi8+PGxpbmsgcmVsPSJhbHRlcm5hdGUgaWNvbiIgaHJlZj0iL2Zhdmljb24uaWNvIi8+PHRpdGxlPlBheVBhbDwvdGl0bGU+PG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlBheVBhbCAtIFNlY3VyaXR5IHZlcmlmaWNhdGlvbiIvPjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy9wb2x5ZmlsbHMtNDIzNzJlZDEzMDQzMWIwYS5qcyIgbm9Nb2R1bGU9IiI+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjxkaXYgc3R5bGU9Im1pbi1oZWlnaHQ6MTAwdmg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNmNWY3ZmEiPjxzdHlsZT5Aa2V5ZnJhbWVzIHNoaW1tZXIgeyAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDsgfSAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwMCUgMDsgfSB9PC9zdHlsZT48aGVhZGVyIHN0eWxlPSJiYWNrZ3JvdW5kOndoaXRlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTU7cGFkZGluZzoxNnB4IDIwcHgiPjxkaXYgc3R5bGU9Im1heC13aWR0aDo5MDBweDttYXJnaW46MCBhdXRvIj48c3BhbiBzdHlsZT0iY29sb3I6IzAwNzBiYTtmb250LXNpemU6MjJweDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6aXRhbGljIj5QYXlQYWw8L3NwYW4+PC9kaXY+PC9oZWFkZXI+PG1haW4gc3R5bGU9ImZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjQwcHggMTZweCI+PGRpdiBzdHlsZT0id2lkdGg6MTAwJTttYXgtd2lkdGg6NDYwcHgiPjxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MzJweCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMwMDcwYmE7Zm9udC1zaXplOjI4cHg7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXN0eWxlOml0YWxpYyI+UGF5UGFsPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MzJweCAyOHB4O2JveC1zaGFkb3c6MCAycHggMTZweCByZ2JhKDAsMCwwLDAuMDYpIj48ZGl2IHN0eWxlPSJoZWlnaHQ6MjBweDt3aWR0aDo2MCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDo0OHB4O3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDo0OHB4O3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjxkaXYgc3R5bGU9ImhlaWdodDoyMHB4O3dpZHRoOjQwJTtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgI2UwZTBlMCAyNSUsICNmMGYwZjAgNTAlLCAjZTBlMGUwIDc1JSk7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJTthbmltYXRpb246c2hpbW1lciAxLjVzIGluZmluaXRlO21hcmdpbi1ib3R0b206MTJweDttYXJnaW4tbGVmdDphdXRvIj48L2Rpdj48ZGl2IHN0eWxlPSJoZWlnaHQ6NDhweDt3aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6MjRweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgI2UwZTBlMCAyNSUsICNmMGYwZjAgNTAlLCAjZTBlMGUwIDc1JSk7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJTthbmltYXRpb246c2hpbW1lciAxLjVzIGluZmluaXRlO21hcmdpbi1ib3R0b206MTJweCI+PC9kaXY+PC9kaXY+PC9kaXY+PC9tYWluPjxmb290ZXIgc3R5bGU9ImJhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTtwYWRkaW5nOjIwcHgiPjxkaXYgc3R5bGU9Im1heC13aWR0aDo5MDBweDttYXJnaW46MCBhdXRvO3RleHQtYWxpZ246Y2VudGVyIj48ZGl2IHN0eWxlPSJoZWlnaHQ6MTJweDt3aWR0aDo0MCU7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNlMGUwZTAgMjUlLCAjZjBmMGYwIDUwJSwgI2UwZTBlMCA3NSUpO2JhY2tncm91bmQtc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnNoaW1tZXIgMS41cyBpbmZpbml0ZTttYXJnaW4tYm90dG9tOjEycHgiPjwvZGl2PjwvZGl2PjwvZm9vdGVyPjwvZGl2PjxzY3JpcHQgc3JjPSIvX25leHQvc3RhdGljL2NodW5rcy93ZWJwYWNrLWM4MWY3ZmQyODY1OWQ2NGYuanMiIGFzeW5jPSIiPjwvc2NyaXB0PjxzY3JpcHQ+KHNlbGYuX19uZXh0X2Y9c2VsZi5fX25leHRfZnx8W10pLnB1c2goWzBdKTtzZWxmLl9fbmV4dF9mLnB1c2goWzIsbnVsbF0pPC9zY3JpcHQ+PHNjcmlwdD5zZWxmLl9fbmV4dF9mLnB1c2goWzEsIjE6SExbXCIvX25leHQvc3RhdGljL2Nzcy9mM2UxYzMzNGJiNzM2NTllLmNzc1wiLFwic3R5bGVcIl1cbiJdKTwvc2NyaXB0PjxzY3JpcHQ+c2VsZi5fX25leHRfZi5wdXNoKFsxLCIyOklbMjg0NixbXSxcIlwiXVxuNDpJWzQ3MDcsW10sXCJcIl1cbjU6SVs2NDIzLFtdLFwiXCJdXG42OklbNzAxMyxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiRmluZ2VycHJpbnRQcm92aWRlclwiXVxuNzpJWzIwMDQsW1wiMTg1XCIsXCJzdGF0aWMvY2h1bmtzL2FwcC9sYXlvdXQtNTU3OWE5ZDUxOTI5Mjg0YS5qc1wiXSxcIlNlY3VyaXR5U2hpZWxkXCJdXG44OklbMjQwMSxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiZGVmYXVsdFwiXVxuOTpJWzgyLFtcIjE4NVwiLFwic3RhdGljL2NodW5rcy9hcHAvbGF5b3V0LTU1NzlhOWQ1MTkyOTI4NGEuanNcIl0sXCJIb25leXBvdEd1YXJkXCJdXG5hOklbNzY2MyxbXCIxODVcIixcInN0YXRpYy9jaHVua3MvYXBwL2xheW91dC01NTc5YTlkNTE5MjkyODRhLmpzXCJdLFwiU21hcnRDaGFsbGVuZ2VcIl1cbmI6SVszNDkwLFtcIjYwMVwiLFwic3RhdGljL2NodW5rcy9hcHAvZXJyb3ItZjMyOTRhNWUxYjQyM2U3Zi5qc1wiXSxcImRlZmF1bHRcIl1cbmQ6SVsxMDYwLFtdLFwiXCJdXG5lOltdXG4iXSk8L3NjcmlwdD48c2NyaXB0PnNlbGYuX19uZXh0X2YucHVzaChbMSwiMDpbXCIkXCIsXCIkTDJcIixudWxsLHtcImJ1aWxkSWRcIjpcIk1wNm1sMWJXTzhSd3I0dnhzTlhac1wiLFwiYXNzZXRQcmVmaXhcIjpcIlwiLFwidXJsUGFydHNcIjpbXCJcIixcInVuYXZhaWxhYmxlXCJdLFwiaW5pdGlhbFRyZWVcIjpbXCJcIix7XCJjaGlsZHJlblwiOltcInVuYXZhaWxhYmxlXCIse1wiY2hpbGRyZW5cIjpbXCJfX1BBR0VfX1wiLHt9XX1dfSxcIiR1bmRlZmluZWRcIixcIiR1bmRlZmluZWRcIix0cnVlXSxcImluaXRpYWxTZWVkRGF0YVwiOltcIlwiLHtcImNoaWxkcmVuXCI6W1widW5hdmFpbGFibGVcIix7XCJjaGlsZHJlblwiOltcIl9fUEFHRV9fXCIse30sW1tcIiRMM1wiLFtcIiRcIixcImRpdlwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJtaW4taC1zY3JlZW4gZmxleCBmbGV4LWNvbCBiZy13aGl0ZVwiLFwiY2hpbGRyZW5cIjpbW1wiJFwiLFwiaGVhZGVyXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInctZnVsbCBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgcHktNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWF4LXctNXhsIG14LWF1dG8gcHgtNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJzcGFuXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInRleHQtMnhsIGZvbnQtYm9sZCBpdGFsaWNcIixcInN0eWxlXCI6e1wiY29sb3JcIjpcIiMwMDcwYmFcIn0sXCJjaGlsZHJlblwiOlwiUGF5UGFsXCJ9XX1dfV0sW1wiJFwiLFwibWFpblwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtNFwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWF4LXctbWQgdy1mdWxsIHRleHQtY2VudGVyXCIsXCJjaGlsZHJlblwiOltbXCIkXCIsXCJkaXZcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibWItNlwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJzdmdcIixudWxsLHtcImNsYXNzTmFtZVwiOlwibXgtYXV0byBoLTE2IHctMTYgdGV4dC1ncmF5LTQwMFwiLFwiZmlsbFwiOlwibm9uZVwiLFwidmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJwYXRoXCIsbnVsbCx7XCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCIsXCJzdHJva2VXaWR0aFwiOjEuNSxcImRcIjpcIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIn1dfV19XSxbXCIkXCIsXCJoMVwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItM1wiLFwiY2hpbGRyZW5cIjpcIlNlcnZpY2UgdGVtcG9yYWlyZW1lbnQgaW5kaXNwb25pYmxlXCJ9XSxbXCIkXCIsXCJwXCIsbnVsbCx7XCJjbGFzc05hbWVcIjpcInRleHQtZ3JheS02MDAgbWItNlwiLFwiY2hpbGRyZW5cIjpcIk5vdXMgcmVuY29udHJvbnMgYWN0dWVsbGVtZW50IHVuIHByb2Jsw6htZSB0ZWNobmlxdWUuIFZldWlsbGV6IHLDqWVzc2F5ZXIgZGFucyBxdWVscXVlcyBpbnN0YW50cy5cIn1dLFtcIiRcIixcInBcIixudWxsLHtcImNsYXNzTmFtZVwiOlwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCIsXCJjaGlsZHJlblwiOltcIk1lcmNpIGRlIHZvdHJlIHBhdGllbmNlLlwiLFtcIiRcIixcImJyXCIsbnVsbCx7fV0sXCJMJ8OpcXVpcGUgUGF5UGFsXCJdfV1dfV19XSxbXCIkXCIsXCJmb290ZXJcIixudWxsLHtcImNsYXNzTmFtZVwiOlwidy1mdWxsIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBweS02XCIsXCJjaGlsZHJlblwiOltcIiRcIixcImRpdlwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJtYXgtdy01eGwgbXgtYXV0byBweC00IHRleHQtY2VudGVyIHRleHQteHMgdGV4dC1ncmF5LTUwMFwiLFwiY2hpbGRyZW5cIjpbXCLCqSBcIiwyMDI2LFwiIFBheVBhbC4gVG91cyBkcm9pdHMgcsOpc2VydsOpcy5cIl19XX1dXX1dLG51bGxdLG51bGxdLG51bGxdfSxbbnVsbCxbXCIkXCIsXCIkTDRcIixudWxsLHtcInBhcmFsbGVsUm91dGVyS2V5XCI6XCJjaGlsZHJlblwiLFwic2VnbWVudFBhdGhcIjpbXCJjaGlsZHJlblwiLFwidW5hdmFpbGFibGVcIixcImNoaWxkcmVuXCJdLFwiZXJyb3JcIjpcIiR1bmRlZmluZWRcIixcImVycm9yU3R5bGVzXCI6XCIkdW5kZWZpbmVkXCIsXCJlcnJvclNjcmlwdHNcIjpcIiR1bmRlZmluZWRcIixcInRlbXBsYXRlXCI6W1wiJFwiLFwiJEw1XCIsbnVsbCx7fV0sXCJ0ZW1wbGF0ZVN0eWxlc1wiOlwiJHVuZGVmaW5lZFwiLFwidGVtcGxhdGVTY3JpcHRzXCI6XCIkdW5kZWZpbmVkXCIsXCJub3RGb3VuZFwiOlwiJHVuZGVmaW5lZFwiLFwibm90Rm91bmRTdHlsZXNcIjpcIiR1bmRlZmluZWRcIn1dXSxudWxsXX0sW1tbW1wiJFwiLFwibGlua1wiLFwiMFwiLHtcInJlbFwiOlwic3R5bGVzaGVldFwiLFwiaHJlZlwiOlwiL19uZXh0L3N0YXRpYy9jc3MvZjNlMWMzMzRiYjczNjU5ZS5jc3NcIixcInByZWNlZGVuY2VcIjpcIm5leHRcIixcImNyb3NzT3JpZ2luXCI6XCIkdW5kZWZpbmVkXCJ9XV0sW1wiJFwiLFwiaHRtbFwiLG51bGwse1wibGFuZ1wiOlwiZGVcIixcImNoaWxkcmVuXCI6W1tcIiRcIixcImhlYWRcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcImxpbmtcIixudWxsLHtcInJlbFwiOlwiaWNvblwiLFwidHlwZVwiOlwiaW1hZ2Uvc3ZnK3htbFwiLFwiaHJlZlwiOlwiL2Zhdmljb24uc3ZnXCJ9XSxbXCIkXCIsXCJsaW5rXCIsbnVsbCx7XCJyZWxcIjpcImFsdGVybmF0ZSBpY29uXCIsXCJocmVmXCI6XCIvZmF2aWNvbi5pY29cIn1dXX1dLFtcIiRcIixcImJvZHlcIixudWxsLHtcImNoaWxkcmVuXCI6W1wiJFwiLFwiJEw2XCIsbnVsbCx7XCJjaGlsZHJlblwiOltcIiRcIixcIiRMN1wiLG51bGwse1wiY2hpbGRyZW5cIjpbXCIkXCIsXCIkTDhcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcIiRMOVwiLG51bGwse31dLFtcIiRcIixcIiRMYVwiLG51bGwse31dLFtcIiRcIixcIiRMNFwiLG51bGwse1wicGFyYWxsZWxSb3V0ZXJLZXlcIjpcImNoaWxkcmVuXCIsXCJzZWdtZW50UGF0aFwiOltcImNoaWxkcmVuXCJdLFwiZXJyb3JcIjpcIiRiXCIsXCJlcnJvclN0eWxlc1wiOltdLFwiZXJyb3JTY3JpcHRzXCI6W10sXCJ0ZW1wbGF0ZVwiOltcIiRcIixcIiRMNVwiLG51bGwse31dLFwidGVtcGxhdGVTdHlsZXNcIjpcIiR1bmRlZmluZWRcIixcInRlbXBsYXRlU2NyaXB0c1wiOlwiJHVuZGVmaW5lZFwiLFwibm90Rm91bmRcIjpbW1wiJFwiLFwidGl0bGVcIixudWxsLHtcImNoaWxkcmVuXCI6XCI0MDQ6IFRoaXMgcGFnZSBjb3VsZCBub3QgYmUgZm91bmQuXCJ9XSxbXCIkXCIsXCJkaXZcIixudWxsLHtcInN0eWxlXCI6e1wiZm9udEZhbWlseVwiOlwic3lzdGVtLXVpLFxcXCJTZWdvZSBVSVxcXCIsUm9ib3RvLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIlwiLFwiaGVpZ2h0XCI6XCIxMDB2aFwiLFwidGV4dEFsaWduXCI6XCJjZW50ZXJcIixcImRpc3BsYXlcIjpcImZsZXhcIixcImZsZXhEaXJlY3Rpb25cIjpcImNvbHVtblwiLFwiYWxpZ25JdGVtc1wiOlwiY2VudGVyXCIsXCJqdXN0aWZ5Q29udGVudFwiOlwiY2VudGVyXCJ9LFwiY2hpbGRyZW5cIjpbXCIkXCIsXCJkaXZcIixudWxsLHtcImNoaWxkcmVuXCI6W1tcIiRcIixcInN0eWxlXCIsbnVsbCx7XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOntcIl9faHRtbFwiOlwiYm9keXtjb2xvcjojMDAwO2JhY2tncm91bmQ6I2ZmZjttYXJnaW46MH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7Ym9keXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzAwMH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjMpfX1cIn19XSxbXCIkXCIsXCJoMVwiLG51bGwse1wiY2xhc3NOYW1lXCI6XCJuZXh0LWVycm9yLWgxXCIsXCJzdHlsZVwiOntcImRpc3BsYXlcIjpcImlubGluZS1ibG9ja1wiLFwibWFyZ2luXCI6XCIwIDIwcHggMCAwXCIsXCJwYWRkaW5nXCI6XCIwIDIzcHggMCAwXCIsXCJmb250U2l6ZVwiOjI0LFwiZm9udFdlaWdodFwiOjUwMCxcInZlcnRpY2FsQWxpZ25cIjpcInRvcFwiLFwibGluZUhlaWdodFwiOlwiNDlweFwifSxcImNoaWxkcmVuXCI6XCI0MDRcIn1dLFtcIiRcIixcImRpdlwiLG51bGwse1wic3R5bGVcIjp7XCJkaXNwbGF5XCI6XCJpbmxpbmUtYmxvY2tcIn0sXCJjaGlsZHJlblwiOltcIiRcIixcImgyXCIsbnVsbCx7XCJzdHlsZVwiOntcImZvbnRTaXplXCI6MTQsXCJmb250V2VpZ2h0XCI6NDAwLFwibGluZUhlaWdodFwiOlwiNDlweFwiLFwibWFyZ2luXCI6MH0sXCJjaGlsZHJlblwiOlwiVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZC5cIn1dfV1dfV19XV0sXCJub3RGb3VuZFN0eWxlc1wiOltdfV1dfV19XX1dfV1dfV1dLG51bGxdLG51bGxdLFwiY291bGRCZUludGVyY2VwdGVkXCI6ZmFsc2UsXCJpbml0aWFsSGVhZFwiOltudWxsLFwiJExjXCJdLFwiZ2xvYmFsRXJyb3JDb21wb25lbnRcIjpcIiRkXCIsXCJtaXNzaW5nU2xvdHNcIjpcIiRXZVwifV1cbiJdKTwvc2NyaXB0PjxzY3JpcHQ+c2VsZi5fX25leHRfZi5wdXNoKFsxLCJjOltbXCIkXCIsXCJtZXRhXCIsXCIwXCIse1wibmFtZVwiOlwidmlld3BvcnRcIixcImNvbnRlbnRcIjpcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCJ9XSxbXCIkXCIsXCJtZXRhXCIsXCIxXCIse1wiY2hhclNldFwiOlwidXRmLThcIn1dLFtcIiRcIixcInRpdGxlXCIsXCIyXCIse1wiY2hpbGRyZW5cIjpcIlBheVBhbFwifV0sW1wiJFwiLFwibWV0YVwiLFwiM1wiLHtcIm5hbWVcIjpcImRlc2NyaXB0aW9uXCIsXCJjb250ZW50XCI6XCJQYXlQYWwgLSBTZWN1cml0eSB2ZXJpZmljYXRpb25cIn1dXVxuMzpudWxsXG4iXSk8L3NjcmlwdD48L2JvZHk+PC9odG1sPg=="}},"time_used":55,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":55,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/117-f9bf0cc16936e653.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:33.877Z","timestamp":1785111153877,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/117-f9bf0cc16936e653.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:34 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 124362\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"1e5ca-19f99f825b7\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]}],"data":{"size":124362,"size_decoded":124895,"mime_type":"application/javascript; charset=UTF-8","magic":"JavaScript source, ASCII text, with very long lines (65536), with no line terminators","md5":"793be48b503ddc3b5bcaba96361c7e84","sha1":"035410aa1815f8fcd8ce8bd99f18655bde3819a3","sha256":"4b9abd79e3e16a44cbc1a96e14bddb9f31e8c3b66e6332a251d6b77b4531b05f","sha512":"9af5a5347cce2b30a2d812ea4642654998634b88aac676c58f626789f95c4e79424472d85091af92f9d2be806d6f9a9c1b9ff3e2136cedc301fd8acde81b0b23","ssdeep":"768:fO9P55eNwbSlPftVDK//d9icrEAKH1ag8xxqKjj3fOpDKdlr/NaO8Qr93UsGoROz:Uiw2l+Wc3mY5jFdl/iPsibn2kJ51oCv7","tlshash":"6bc3d8ba71d0f8e2079744e5843b400af3791c3b146f70a0a7a5cdd9b5a44eea1a3f5e","first_seen":"2026-02-10T12:48:53.828874Z","last_seen":"2026-07-27T00:14:58.57841Z","times_seen":67,"resource_available":true,"data":"KHNlbGYud2VicGFja0NodW5rX05fRT1zZWxmLndlYnBhY2tDaHVua19OX0V8fFtdKS5wdXNoKFtbMTE3XSx7NTE1NzpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7cmV0dXJuIiJ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pfSwxNTcyOmZ1bmN0aW9uKCl7InRyaW1TdGFydCJpbiBTdHJpbmcucHJvdG90eXBlfHwoU3RyaW5nLnByb3RvdHlwZS50cmltU3RhcnQ9U3RyaW5nLnByb3RvdHlwZS50cmltTGVmdCksInRyaW1FbmQiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbUVuZD1TdHJpbmcucHJvdG90eXBlLnRyaW1SaWdodCksImRlc2NyaXB0aW9uImluIFN5bWJvbC5wcm90b3R5cGV8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTeW1ib2wucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgZT0vXCgoLiopXCkvLmV4ZWModGhpcy50b1N0cmluZygpKTtyZXR1cm4gZT9lWzFdOnZvaWQgMH19KSxBcnJheS5wcm90b3R5cGUuZmxhdHx8KEFycmF5LnByb3RvdHlwZS5mbGF0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dGhpcy5jb25jYXQuYXBwbHkoW10sdGhpcyksZT4xJiZ0LnNvbWUoQXJyYXkuaXNBcnJheSk/dC5mbGF0KGUtMSk6dH0sQXJyYXkucHJvdG90eXBlLmZsYXRNYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tYXAoZSx0KS5mbGF0KCl9KSxQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5fHwoUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gdGhpcy50aGVuKGUsZSk7dmFyIHQ9dGhpcy5jb25zdHJ1Y3Rvcnx8UHJvbWlzZTtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiB0LnJlc29sdmUoZSgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24obil7cmV0dXJuIHQucmVzb2x2ZShlKCkpLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyBufSl9KX0pLE9iamVjdC5mcm9tRW50cmllc3x8KE9iamVjdC5mcm9tRW50cmllcz1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0WzBdXT10WzFdLGV9LHt9KX0pLEFycmF5LnByb3RvdHlwZS5hdHx8KEFycmF5LnByb3RvdHlwZS5hdD1mdW5jdGlvbihlKXt2YXIgdD1NYXRoLnRydW5jKGUpfHwwO2lmKHQ8MCYmKHQrPXRoaXMubGVuZ3RoKSwhKHQ8MHx8dD49dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzW3RdfSksT2JqZWN0Lmhhc093bnx8KE9iamVjdC5oYXNPd249ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPYmplY3QoZSksdCl9KSwiY2FuUGFyc2UiaW4gVVJMfHwoVVJMLmNhblBhcnNlPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBuZXcgVVJMKGUsdCksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSl9LDE2MzQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFkZEJhc2VQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX19KTtsZXQgcj1uKDg0OTgpLG89big4NTIxKTtmdW5jdGlvbiB1KGUsdCl7cmV0dXJuKDAsby5ub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCkoKDAsci5hZGRQYXRoUHJlZml4KShlLCIiKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNTI2NjpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3ZhciB0LG47dD1zZWxmLl9fbmV4dF9zLG49KCk9PntlKCl9LHQmJnQubGVuZ3RoP3QucmVkdWNlKChlLHQpPT57bGV0W24scl09dDtyZXR1cm4gZS50aGVuKCgpPT5uZXcgUHJvbWlzZSgoZSx0KT0+e2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKHIpZm9yKGxldCBlIGluIHIpImNoaWxkcmVuIiE9PWUmJm8uc2V0QXR0cmlidXRlKGUscltlXSk7bj8oby5zcmM9bixvLm9ubG9hZD0oKT0+ZSgpLG8ub25lcnJvcj10KTpyJiYoby5pbm5lckhUTUw9ci5jaGlsZHJlbixzZXRUaW1lb3V0KGUpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG8pfSkpfSxQcm9taXNlLnJlc29sdmUoKSkuY2F0Y2goZT0+e2NvbnNvbGUuZXJyb3IoZSl9KS50aGVuKCgpPT57bigpfSk6bigpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXBwQm9vdHN0cmFwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KSx3aW5kb3cubmV4dD17dmVyc2lvbjoiMTQuMi4zNSIsYXBwRGlyOiEwfSwoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwzMDc5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYWxsU2VydmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDI4NDYpO2FzeW5jIGZ1bmN0aW9uIG8oZSx0KXtsZXQgbj0oMCxyLmdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXIpKCk7aWYoIW4pdGhyb3cgRXJyb3IoIkludmFyaWFudDogbWlzc2luZyBhY3Rpb24gZGlzcGF0Y2hlci4iKTtyZXR1cm4gbmV3IFByb21pc2UoKHIsbyk9PntuKHthY3Rpb25JZDplLGFjdGlvbkFyZ3M6dCxyZXNvbHZlOnIscmVqZWN0Om99KX0pfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDIzMDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtsZXQgcixvO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaHlkcmF0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEN9fSk7bGV0IHU9big3MDQzKSxsPW4oMzA5OSksYT1uKDc0MzcpO24oMTU3Mik7bGV0IGk9dS5fKG4oNDA0MCkpLGM9bC5fKG4oMjI2NSkpLHM9big2NjcxKSxmPW4oODcwMSksZD11Ll8obigxNDA0KSkscD1uKDMwNzkpLGg9big5NzIxKSx5PW4oMjEwMyk7big2NDcpO2xldCBfPXdpbmRvdy5jb25zb2xlLmVycm9yO3dpbmRvdy5jb25zb2xlLmVycm9yPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTsoMCxoLmlzTmV4dFJvdXRlckVycm9yKSh0WzBdKXx8Xy5hcHBseSh3aW5kb3cuY29uc29sZSx0KX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixlPT57aWYoKDAsaC5pc05leHRSb3V0ZXJFcnJvcikoZS5lcnJvcikpe2UucHJldmVudERlZmF1bHQoKTtyZXR1cm59fSk7bGV0IHY9ZG9jdW1lbnQsYj1uZXcgVGV4dEVuY29kZXIsZz0hMSxtPSExLFI9bnVsbDtmdW5jdGlvbiBQKGUpe2lmKDA9PT1lWzBdKXI9W107ZWxzZSBpZigxPT09ZVswXSl7aWYoIXIpdGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQgc2VydmVyIGRhdGE6IG1pc3NpbmcgYm9vdHN0cmFwIHNjcmlwdC4iKTtvP28uZW5xdWV1ZShiLmVuY29kZShlWzFdKSk6ci5wdXNoKGVbMV0pfWVsc2UgMj09PWVbMF0mJihSPWVbMV0pfWxldCBqPWZ1bmN0aW9uKCl7byYmIW0mJihvLmNsb3NlKCksbT0hMCxyPXZvaWQgMCksZz0hMH07ImxvYWRpbmciPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixqLCExKTpqKCk7bGV0IE89c2VsZi5fX25leHRfZj1zZWxmLl9fbmV4dF9mfHxbXTtPLmZvckVhY2goUCksTy5wdXNoPVA7bGV0IEU9bmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydChlKXtyJiYoci5mb3JFYWNoKHQ9PntlLmVucXVldWUoYi5lbmNvZGUodCkpfSksZyYmIW0mJihlLmNsb3NlKCksbT0hMCxyPXZvaWQgMCkpLG89ZX19KSxTPSgwLHMuY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtKShFLHtjYWxsU2VydmVyOnAuY2FsbFNlcnZlcn0pO2Z1bmN0aW9uIHcoKXtyZXR1cm4oMCxjLnVzZSkoUyl9bGV0IE09Yy5kZWZhdWx0LkZyYWdtZW50O2Z1bmN0aW9uIFQoZSl7bGV0e2NoaWxkcmVuOnR9PWU7cmV0dXJuIHR9ZnVuY3Rpb24gQygpe2xldCBlPSgwLHkuY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlKSgpLHQ9KDAsYS5qc3gpKE0se2NoaWxkcmVuOigwLGEuanN4KShmLkhlYWRNYW5hZ2VyQ29udGV4dC5Qcm92aWRlcix7dmFsdWU6e2FwcERpcjohMH0sY2hpbGRyZW46KDAsYS5qc3gpKHkuQWN0aW9uUXVldWVDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTplLGNoaWxkcmVuOigwLGEuanN4KShULHtjaGlsZHJlbjooMCxhLmpzeCkodyx7fSl9KX0pfSl9KSxuPXdpbmRvdy5fX25leHRfcm9vdF9sYXlvdXRfbWlzc2luZ190YWdzLHI9ISEobnVsbD09bj92b2lkIDA6bi5sZW5ndGgpLG89e29uUmVjb3ZlcmFibGVFcnJvcjpkLmRlZmF1bHR9OyJfX25leHRfZXJyb3JfXyI9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaWR8fHI/aS5kZWZhdWx0LmNyZWF0ZVJvb3QodixvKS5yZW5kZXIodCk6Yy5kZWZhdWx0LnN0YXJ0VHJhbnNpdGlvbigoKT0+aS5kZWZhdWx0Lmh5ZHJhdGVSb290KHYsdCx7Li4ubyxmb3JtU3RhdGU6Un0pKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw0Mjc4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4oOTUwNiksKDAsbig1MjY2KS5hcHBCb290c3RyYXApKCgpPT57bGV0e2h5ZHJhdGU6ZX09bigyMzA0KTtuKDI4NDYpLG4oNDcwNyksZSgpfSksKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sOTUwNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxuKDUxNTcpO3tsZXQgZT1uLnU7bi51PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZW5jb2RlVVJJKGUoLi4ubikpfX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwyOTU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFjdGlvbkFzeW5jU3RvcmFnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuYWN0aW9uQXN5bmNTdG9yYWdlfX0pO2xldCByPW4oNzE0OSk7KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNjQ5NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQXBwUm91dGVyQW5ub3VuY2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH19KTtsZXQgcj1uKDIyNjUpLG89big0ODg3KSx1PSJuZXh0LXJvdXRlLWFubm91bmNlciI7ZnVuY3Rpb24gbChlKXtsZXR7dHJlZTp0fT1lLFtuLGxdPSgwLHIudXNlU3RhdGUpKG51bGwpOygwLHIudXNlRWZmZWN0KSgoKT0+KGwoZnVuY3Rpb24oKXt2YXIgZTtsZXQgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSh1KVswXTtpZihudWxsPT10P3ZvaWQgMDpudWxsPT0oZT10LnNoYWRvd1Jvb3QpP3ZvaWQgMDplLmNoaWxkTm9kZXNbMF0pcmV0dXJuIHQuc2hhZG93Um9vdC5jaGlsZE5vZGVzWzBdO3tsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHUpO2Uuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGUiO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmFyaWFMaXZlPSJhc3NlcnRpdmUiLHQuaWQ9Il9fbmV4dC1yb3V0ZS1hbm5vdW5jZXJfXyIsdC5yb2xlPSJhbGVydCIsdC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MDt3aWR0aDoxcHg7Y2xpcDpyZWN0KDAgMCAwIDApO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbCIsZS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSkuYXBwZW5kQ2hpbGQodCksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSx0fX0oKSksKCk9PntsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSh1KVswXTsobnVsbD09ZT92b2lkIDA6ZS5pc0Nvbm5lY3RlZCkmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSl9KSxbXSk7bGV0W2EsaV09KDAsci51c2VTdGF0ZSkoIiIpLGM9KDAsci51c2VSZWYpKCk7cmV0dXJuKDAsci51c2VFZmZlY3QpKCgpPT57bGV0IGU9IiI7aWYoZG9jdW1lbnQudGl0bGUpZT1kb2N1bWVudC50aXRsZTtlbHNle2xldCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImgxIik7dCYmKGU9dC5pbm5lclRleHR8fHQudGV4dENvbnRlbnR8fCIiKX12b2lkIDAhPT1jLmN1cnJlbnQmJmMuY3VycmVudCE9PWUmJmkoZSksYy5jdXJyZW50PWV9LFt0XSksbj8oMCxvLmNyZWF0ZVBvcnRhbCkoYSxuKTpudWxsfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDY4NjY6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtBQ1RJT046ZnVuY3Rpb24oKXtyZXR1cm4gcn0sRkxJR0hUX1BBUkFNRVRFUlM6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUjpmdW5jdGlvbigpe3JldHVybiB1fSxORVhUX1JPVVRFUl9TVEFURV9UUkVFOmZ1bmN0aW9uKCl7cmV0dXJuIG99LE5FWFRfUlNDX1VOSU9OX1FVRVJZOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LE5FWFRfVVJMOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LFJTQ19DT05URU5UX1RZUEVfSEVBREVSOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LFJTQ19IRUFERVI6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KTtsZXQgbj0iUlNDIixyPSJOZXh0LUFjdGlvbiIsbz0iTmV4dC1Sb3V0ZXItU3RhdGUtVHJlZSIsdT0iTmV4dC1Sb3V0ZXItUHJlZmV0Y2giLGw9Ik5leHQtVXJsIixhPSJ0ZXh0L3gtY29tcG9uZW50IixpPVtbbl0sW29dLFt1XV0sYz0iX3JzYyIscz0ieC1uZXh0anMtcG9zdHBvbmVkIjsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwyODQ2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtjcmVhdGVFbXB0eUNhY2hlTm9kZTpmdW5jdGlvbigpe3JldHVybiB4fSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIEl9LGdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXI6ZnVuY3Rpb24oKXtyZXR1cm4gU30sdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyOmZ1bmN0aW9uKCl7cmV0dXJuIE19fSk7bGV0IHI9bigzMDk5KSxvPW4oNzQzNyksdT1yLl8obigyMjY1KSksbD1uKDE5NTYpLGE9big0NjczKSxpPW4oMzQ1NiksYz1uKDkwNjApLHM9big3NzQ0KSxmPW4oMTA2MCksZD1uKDI5NTIpLHA9big2MTQ2KSxoPW4oMTYzNCkseT1uKDY0OTUpLF89big0MTIzKSx2PW4oOTMyMCksYj1uKDgxMzcpLGc9big2ODY2KSxtPW4oNTA3NiksUj1uKDEyODMpLFA9big0NTQxKSxqPSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93LE89aj9udWxsOm5ldyBNYXAsRT1udWxsO2Z1bmN0aW9uIFMoKXtyZXR1cm4gRX1sZXQgdz17fTtmdW5jdGlvbiBNKGUpe2xldCB0PW5ldyBVUkwoZSxsb2NhdGlvbi5vcmlnaW4pO3JldHVybiB0LnNlYXJjaFBhcmFtcy5kZWxldGUoZy5ORVhUX1JTQ19VTklPTl9RVUVSWSksdH1mdW5jdGlvbiBUKGUpe3JldHVybiBlLm9yaWdpbiE9PXdpbmRvdy5sb2NhdGlvbi5vcmlnaW59ZnVuY3Rpb24gQyhlKXtsZXR7YXBwUm91dGVyU3RhdGU6dCxzeW5jOm59PWU7cmV0dXJuKDAsdS51c2VJbnNlcnRpb25FZmZlY3QpKCgpPT57bGV0e3RyZWU6ZSxwdXNoUmVmOnIsY2Fub25pY2FsVXJsOm99PXQsdT17Li4uci5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZT93aW5kb3cuaGlzdG9yeS5zdGF0ZTp7fSxfX05BOiEwLF9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU6ZX07ci5wZW5kaW5nUHVzaCYmKDAsaS5jcmVhdGVIcmVmRnJvbVVybCkobmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikpIT09bz8oci5wZW5kaW5nUHVzaD0hMSx3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUodSwiIixvKSk6d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHUsIiIsbyksbih0KX0sW3Qsbl0pLG51bGx9ZnVuY3Rpb24geCgpe3JldHVybntsYXp5RGF0YTpudWxsLHJzYzpudWxsLHByZWZldGNoUnNjOm51bGwsaGVhZDpudWxsLHByZWZldGNoSGVhZDpudWxsLHBhcmFsbGVsUm91dGVzOm5ldyBNYXAsbGF6eURhdGFSZXNvbHZlZDohMSxsb2FkaW5nOm51bGx9fWZ1bmN0aW9uIEEoZSl7bnVsbD09ZSYmKGU9e30pO2xldCB0PXdpbmRvdy5oaXN0b3J5LnN0YXRlLG49bnVsbD09dD92b2lkIDA6dC5fX05BO24mJihlLl9fTkE9bik7bGV0IHI9bnVsbD09dD92b2lkIDA6dC5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFO3JldHVybiByJiYoZS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFPXIpLGV9ZnVuY3Rpb24gTihlKXtsZXR7aGVhZENhY2hlTm9kZTp0fT1lLG49bnVsbCE9PXQ/dC5oZWFkOm51bGwscj1udWxsIT09dD90LnByZWZldGNoSGVhZDpudWxsLG89bnVsbCE9PXI/cjpuO3JldHVybigwLHUudXNlRGVmZXJyZWRWYWx1ZSkobixvKX1mdW5jdGlvbiBEKGUpe2xldCB0LHtidWlsZElkOm4saW5pdGlhbEhlYWQ6cixpbml0aWFsVHJlZTppLHVybFBhcnRzOmYsaW5pdGlhbFNlZWREYXRhOmcsY291bGRCZUludGVyY2VwdGVkOlMsYXNzZXRQcmVmaXg6TSxtaXNzaW5nU2xvdHM6eH09ZSxEPSgwLHUudXNlTWVtbykoKCk9PigwLGQuY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlKSh7YnVpbGRJZDpuLGluaXRpYWxTZWVkRGF0YTpnLHVybFBhcnRzOmYsaW5pdGlhbFRyZWU6aSxpbml0aWFsUGFyYWxsZWxSb3V0ZXM6Tyxsb2NhdGlvbjpqP251bGw6d2luZG93LmxvY2F0aW9uLGluaXRpYWxIZWFkOnIsY291bGRCZUludGVyY2VwdGVkOlN9KSxbbixnLGYsaSxyLFNdKSxbSSxVLGtdPSgwLHMudXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzKShEKTsoMCx1LnVzZUVmZmVjdCkoKCk9PntPPW51bGx9LFtdKTtsZXR7Y2Fub25pY2FsVXJsOkZ9PSgwLHMudXNlVW53cmFwU3RhdGUpKEkpLHtzZWFyY2hQYXJhbXM6TCxwYXRobmFtZTpIfT0oMCx1LnVzZU1lbW8pKCgpPT57bGV0IGU9bmV3IFVSTChGLCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PyJodHRwOi8vbiI6d2luZG93LmxvY2F0aW9uLmhyZWYpO3JldHVybntzZWFyY2hQYXJhbXM6ZS5zZWFyY2hQYXJhbXMscGF0aG5hbWU6KDAsUi5oYXNCYXNlUGF0aCkoZS5wYXRobmFtZSk/KDAsbS5yZW1vdmVCYXNlUGF0aCkoZS5wYXRobmFtZSk6ZS5wYXRobmFtZX19LFtGXSksRz0oMCx1LnVzZUNhbGxiYWNrKShlPT57bGV0e3ByZXZpb3VzVHJlZTp0LHNlcnZlclJlc3BvbnNlOm59PWU7KDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57VSh7dHlwZTphLkFDVElPTl9TRVJWRVJfUEFUQ0gscHJldmlvdXNUcmVlOnQsc2VydmVyUmVzcG9uc2U6bn0pfSl9LFtVXSksJD0oMCx1LnVzZUNhbGxiYWNrKSgoZSx0LG4pPT57bGV0IHI9bmV3IFVSTCgoMCxoLmFkZEJhc2VQYXRoKShlKSxsb2NhdGlvbi5ocmVmKTtyZXR1cm4gVSh7dHlwZTphLkFDVElPTl9OQVZJR0FURSx1cmw6cixpc0V4dGVybmFsVXJsOlQociksbG9jYXRpb25TZWFyY2g6bG9jYXRpb24uc2VhcmNoLHNob3VsZFNjcm9sbDpudWxsPT1ufHxuLG5hdmlnYXRlVHlwZTp0fSl9LFtVXSk7RT0oMCx1LnVzZUNhbGxiYWNrKShlPT57KDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57VSh7Li4uZSx0eXBlOmEuQUNUSU9OX1NFUlZFUl9BQ1RJT059KX0pfSxbVV0pO2xldCB6PSgwLHUudXNlTWVtbykoKCk9Pih7YmFjazooKT0+d2luZG93Lmhpc3RvcnkuYmFjaygpLGZvcndhcmQ6KCk9PndpbmRvdy5oaXN0b3J5LmZvcndhcmQoKSxwcmVmZXRjaDooZSx0KT0+e2xldCBuO2lmKCEoMCxwLmlzQm90KSh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkpe3RyeXtuPW5ldyBVUkwoKDAsaC5hZGRCYXNlUGF0aCkoZSksd2luZG93LmxvY2F0aW9uLmhyZWYpfWNhdGNoKHQpe3Rocm93IEVycm9yKCJDYW5ub3QgcHJlZmV0Y2ggJyIrZSsiJyBiZWNhdXNlIGl0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBVUkwuIil9VChuKXx8KDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57dmFyIGU7VSh7dHlwZTphLkFDVElPTl9QUkVGRVRDSCx1cmw6bixraW5kOm51bGwhPShlPW51bGw9PXQ/dm9pZCAwOnQua2luZCk/ZTphLlByZWZldGNoS2luZC5GVUxMfSl9KX19LHJlcGxhY2U6KGUsdCk9Pnt2b2lkIDA9PT10JiYodD17fSksKDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57dmFyIG47JChlLCJyZXBsYWNlIixudWxsPT0obj10LnNjcm9sbCl8fG4pfSl9LHB1c2g6KGUsdCk9Pnt2b2lkIDA9PT10JiYodD17fSksKDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57dmFyIG47JChlLCJwdXNoIixudWxsPT0obj10LnNjcm9sbCl8fG4pfSl9LHJlZnJlc2g6KCk9PnsoMCx1LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntVKHt0eXBlOmEuQUNUSU9OX1JFRlJFU0gsb3JpZ2luOndpbmRvdy5sb2NhdGlvbi5vcmlnaW59KX0pfSxmYXN0UmVmcmVzaDooKT0+e3Rocm93IEVycm9yKCJmYXN0UmVmcmVzaCBjYW4gb25seSBiZSB1c2VkIGluIGRldmVsb3BtZW50IG1vZGUuIFBsZWFzZSB1c2UgcmVmcmVzaCBpbnN0ZWFkLiIpfX0pLFtVLCRdKTsoMCx1LnVzZUVmZmVjdCkoKCk9Pnt3aW5kb3cubmV4dCYmKHdpbmRvdy5uZXh0LnJvdXRlcj16KX0sW3pdKSwoMCx1LnVzZUVmZmVjdCkoKCk9PntmdW5jdGlvbiBlKGUpe3ZhciB0O2UucGVyc2lzdGVkJiYobnVsbD09KHQ9d2luZG93Lmhpc3Rvcnkuc3RhdGUpP3ZvaWQgMDp0Ll9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUpJiYody5wZW5kaW5nTXBhUGF0aD12b2lkIDAsVSh7dHlwZTphLkFDVElPTl9SRVNUT1JFLHVybDpuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSx0cmVlOndpbmRvdy5oaXN0b3J5LnN0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUV9KSl9cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlc2hvdyIsZSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZXNob3ciLGUpfX0sW1VdKTtsZXR7cHVzaFJlZjpCfT0oMCxzLnVzZVVud3JhcFN0YXRlKShJKTtpZihCLm1wYU5hdmlnYXRpb24pe2lmKHcucGVuZGluZ01wYVBhdGghPT1GKXtsZXQgZT13aW5kb3cubG9jYXRpb247Qi5wZW5kaW5nUHVzaD9lLmFzc2lnbihGKTplLnJlcGxhY2UoRiksdy5wZW5kaW5nTXBhUGF0aD1GfSgwLHUudXNlKShiLnVucmVzb2x2ZWRUaGVuYWJsZSl9KDAsdS51c2VFZmZlY3QpKCgpPT57bGV0IGU9d2luZG93Lmhpc3RvcnkucHVzaFN0YXRlLmJpbmQod2luZG93Lmhpc3RvcnkpLHQ9d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlLmJpbmQod2luZG93Lmhpc3RvcnkpLG49ZT0+e3ZhciB0O2xldCBuPXdpbmRvdy5sb2NhdGlvbi5ocmVmLHI9bnVsbD09KHQ9d2luZG93Lmhpc3Rvcnkuc3RhdGUpP3ZvaWQgMDp0Ll9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU7KDAsdS5zdGFydFRyYW5zaXRpb24pKCgpPT57VSh7dHlwZTphLkFDVElPTl9SRVNUT1JFLHVybDpuZXcgVVJMKG51bGwhPWU/ZTpuLG4pLHRyZWU6cn0pfSl9O3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZT1mdW5jdGlvbih0LHIsbyl7cmV0dXJuKG51bGw9PXQ/dm9pZCAwOnQuX19OQSl8fChudWxsPT10P3ZvaWQgMDp0Ll9OKXx8KHQ9QSh0KSxvJiZuKG8pKSxlKHQscixvKX0sd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKGUscixvKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS5fX05BKXx8KG51bGw9PWU/dm9pZCAwOmUuX04pfHwoZT1BKGUpLG8mJm4obykpLHQoZSxyLG8pfTtsZXQgcj1lPT57bGV0e3N0YXRlOnR9PWU7aWYodCl7aWYoIXQuX19OQSl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO3JldHVybn0oMCx1LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntVKHt0eXBlOmEuQUNUSU9OX1JFU1RPUkUsdXJsOm5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHRyZWU6dC5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFfSl9KX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHIpLCgpPT57d2luZG93Lmhpc3RvcnkucHVzaFN0YXRlPWUsd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlPXQsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixyKX19LFtVXSk7bGV0e2NhY2hlOkssdHJlZTpXLG5leHRVcmw6Vixmb2N1c0FuZFNjcm9sbFJlZjpZfT0oMCxzLnVzZVVud3JhcFN0YXRlKShJKSxYPSgwLHUudXNlTWVtbykoKCk9PigwLHYuZmluZEhlYWRJbkNhY2hlKShLLFdbMV0pLFtLLFddKSxxPSgwLHUudXNlTWVtbykoKCk9PihmdW5jdGlvbiBlKHQsbil7Zm9yKGxldCByIG9mKHZvaWQgMD09PW4mJihuPXt9KSxPYmplY3QudmFsdWVzKHRbMV0pKSl7bGV0IHQ9clswXSxvPUFycmF5LmlzQXJyYXkodCksdT1vP3RbMV06dDshdXx8dS5zdGFydHNXaXRoKFAuUEFHRV9TRUdNRU5UX0tFWSl8fChvJiYoImMiPT09dFsyXXx8Im9jIj09PXRbMl0pP25bdFswXV09dFsxXS5zcGxpdCgiLyIpOm8mJihuW3RbMF1dPXRbMV0pLG49ZShyLG4pKX1yZXR1cm4gbn0pKFcpLFtXXSk7aWYobnVsbCE9PVgpe2xldFtlLG5dPVg7dD0oMCxvLmpzeCkoTix7aGVhZENhY2hlTm9kZTplfSxuKX1lbHNlIHQ9bnVsbDtsZXQgSj0oMCxvLmpzeHMpKF8uUmVkaXJlY3RCb3VuZGFyeSx7Y2hpbGRyZW46W3QsSy5yc2MsKDAsby5qc3gpKHkuQXBwUm91dGVyQW5ub3VuY2VyLHt0cmVlOld9KV19KTtyZXR1cm4oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeCkoQyx7YXBwUm91dGVyU3RhdGU6KDAscy51c2VVbndyYXBTdGF0ZSkoSSksc3luYzprfSksKDAsby5qc3gpKGMuUGF0aFBhcmFtc0NvbnRleHQuUHJvdmlkZXIse3ZhbHVlOnEsY2hpbGRyZW46KDAsby5qc3gpKGMuUGF0aG5hbWVDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTpILGNoaWxkcmVuOigwLG8uanN4KShjLlNlYXJjaFBhcmFtc0NvbnRleHQuUHJvdmlkZXIse3ZhbHVlOkwsY2hpbGRyZW46KDAsby5qc3gpKGwuR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dC5Qcm92aWRlcix7dmFsdWU6e2J1aWxkSWQ6bixjaGFuZ2VCeVNlcnZlclJlc3BvbnNlOkcsdHJlZTpXLGZvY3VzQW5kU2Nyb2xsUmVmOlksbmV4dFVybDpWfSxjaGlsZHJlbjooMCxvLmpzeCkobC5BcHBSb3V0ZXJDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTp6LGNoaWxkcmVuOigwLG8uanN4KShsLkxheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXIse3ZhbHVlOntjaGlsZE5vZGVzOksucGFyYWxsZWxSb3V0ZXMsdHJlZTpXLHVybDpGLGxvYWRpbmc6Sy5sb2FkaW5nfSxjaGlsZHJlbjpKfSl9KX0pfSl9KX0pXX0pfWZ1bmN0aW9uIEkoZSl7bGV0e2dsb2JhbEVycm9yQ29tcG9uZW50OnQsLi4ubn09ZTtyZXR1cm4oMCxvLmpzeCkoZi5FcnJvckJvdW5kYXJ5LHtlcnJvckNvbXBvbmVudDp0LGNoaWxkcmVuOigwLG8uanN4KShELHsuLi5ufSl9KX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw2MTQ5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJiYWlsb3V0VG9DbGllbnRSZW5kZXJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oODk5Myksbz1uKDE4NDUpO2Z1bmN0aW9uIHUoZSl7bGV0IHQ9by5zdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7aWYoKG51bGw9PXR8fCF0LmZvcmNlU3RhdGljKSYmKG51bGw9PXQ/dm9pZCAwOnQuaXNTdGF0aWNHZW5lcmF0aW9uKSl0aHJvdyBuZXcgci5CYWlsb3V0VG9DU1JFcnJvcihlKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw5MTA3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJDbGllbnRQYWdlUm9vdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSk7bGV0IHI9big3NDM3KSxvPW4oNDUzNSk7ZnVuY3Rpb24gdShlKXtsZXR7Q29tcG9uZW50OnQscHJvcHM6bn09ZTtyZXR1cm4gbi5zZWFyY2hQYXJhbXM9KDAsby5jcmVhdGVEeW5hbWljYWxseVRyYWNrZWRTZWFyY2hQYXJhbXMpKG4uc2VhcmNoUGFyYW1zfHx7fSksKDAsci5qc3gpKHQsey4uLm59KX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwxMDYwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtFcnJvckJvdW5kYXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIGh9LEVycm9yQm91bmRhcnlIYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LEdsb2JhbEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gcH19KTtsZXQgcj1uKDcwNDMpLG89big3NDM3KSx1PXIuXyhuKDIyNjUpKSxsPW4oNTQ3NSksYT1uKDk3MjEpLGk9bigxODQ1KSxjPXtlcnJvcjp7Zm9udEZhbWlseTonc3lzdGVtLXVpLCJTZWdvZSBVSSIsUm9ib3RvLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIicsaGVpZ2h0OiIxMDB2aCIsdGV4dEFsaWduOiJjZW50ZXIiLGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sdGV4dDp7Zm9udFNpemU6IjE0cHgiLGZvbnRXZWlnaHQ6NDAwLGxpbmVIZWlnaHQ6IjI4cHgiLG1hcmdpbjoiMCA4cHgifX07ZnVuY3Rpb24gcyhlKXtsZXR7ZXJyb3I6dH09ZSxuPWkuc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZS5nZXRTdG9yZSgpO2lmKChudWxsPT1uP3ZvaWQgMDpuLmlzUmV2YWxpZGF0ZSl8fChudWxsPT1uP3ZvaWQgMDpuLmlzU3RhdGljR2VuZXJhdGlvbikpdGhyb3cgY29uc29sZS5lcnJvcih0KSx0O3JldHVybiBudWxsfWNsYXNzIGYgZXh0ZW5kcyB1LmRlZmF1bHQuQ29tcG9uZW50e3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZSl7aWYoKDAsYS5pc05leHRSb3V0ZXJFcnJvcikoZSkpdGhyb3cgZTtyZXR1cm57ZXJyb3I6ZX19c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhlLHQpe3JldHVybiBlLnBhdGhuYW1lIT09dC5wcmV2aW91c1BhdGhuYW1lJiZ0LmVycm9yP3tlcnJvcjpudWxsLHByZXZpb3VzUGF0aG5hbWU6ZS5wYXRobmFtZX06e2Vycm9yOnQuZXJyb3IscHJldmlvdXNQYXRobmFtZTplLnBhdGhuYW1lfX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5zdGF0ZS5lcnJvcj8oMCxvLmpzeHMpKG8uRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxvLmpzeCkocyx7ZXJyb3I6dGhpcy5zdGF0ZS5lcnJvcn0pLHRoaXMucHJvcHMuZXJyb3JTdHlsZXMsdGhpcy5wcm9wcy5lcnJvclNjcmlwdHMsKDAsby5qc3gpKHRoaXMucHJvcHMuZXJyb3JDb21wb25lbnQse2Vycm9yOnRoaXMuc3RhdGUuZXJyb3IscmVzZXQ6dGhpcy5yZXNldH0pXX0pOnRoaXMucHJvcHMuY2hpbGRyZW59Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5yZXNldD0oKT0+e3RoaXMuc2V0U3RhdGUoe2Vycm9yOm51bGx9KX0sdGhpcy5zdGF0ZT17ZXJyb3I6bnVsbCxwcmV2aW91c1BhdGhuYW1lOnRoaXMucHJvcHMucGF0aG5hbWV9fX1mdW5jdGlvbiBkKGUpe2xldHtlcnJvcjp0fT1lLG49bnVsbD09dD92b2lkIDA6dC5kaWdlc3Q7cmV0dXJuKDAsby5qc3hzKSgiaHRtbCIse2lkOiJfX25leHRfZXJyb3JfXyIsY2hpbGRyZW46WygwLG8uanN4KSgiaGVhZCIse30pLCgwLG8uanN4cykoImJvZHkiLHtjaGlsZHJlbjpbKDAsby5qc3gpKHMse2Vycm9yOnR9KSwoMCxvLmpzeCkoImRpdiIse3N0eWxlOmMuZXJyb3IsY2hpbGRyZW46KDAsby5qc3hzKSgiZGl2Iix7Y2hpbGRyZW46WygwLG8uanN4KSgiaDIiLHtzdHlsZTpjLnRleHQsY2hpbGRyZW46IkFwcGxpY2F0aW9uIGVycm9yOiBhICIrKG4/InNlcnZlciI6ImNsaWVudCIpKyItc2lkZSBleGNlcHRpb24gaGFzIG9jY3VycmVkIChzZWUgdGhlICIrKG4/InNlcnZlciBsb2dzIjoiYnJvd3NlciBjb25zb2xlIikrIiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuIn0pLG4/KDAsby5qc3gpKCJwIix7c3R5bGU6Yy50ZXh0LGNoaWxkcmVuOiJEaWdlc3Q6ICIrbn0pOm51bGxdfSl9KV19KV19KX1sZXQgcD1kO2Z1bmN0aW9uIGgoZSl7bGV0e2Vycm9yQ29tcG9uZW50OnQsZXJyb3JTdHlsZXM6bixlcnJvclNjcmlwdHM6cixjaGlsZHJlbjp1fT1lLGE9KDAsbC51c2VQYXRobmFtZSkoKTtyZXR1cm4gdD8oMCxvLmpzeCkoZix7cGF0aG5hbWU6YSxlcnJvckNvbXBvbmVudDp0LGVycm9yU3R5bGVzOm4sZXJyb3JTY3JpcHRzOnIsY2hpbGRyZW46dX0pOigwLG8uanN4KShvLkZyYWdtZW50LHtjaGlsZHJlbjp1fSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNjE3NzpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse0R5bmFtaWNTZXJ2ZXJFcnJvcjpmdW5jdGlvbigpe3JldHVybiByfSxpc0R5bmFtaWNTZXJ2ZXJFcnJvcjpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCBuPSJEWU5BTUlDX1NFUlZFUl9VU0FHRSI7Y2xhc3MgciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJEeW5hbWljIHNlcnZlciB1c2FnZTogIitlKSx0aGlzLmRlc2NyaXB0aW9uPWUsdGhpcy5kaWdlc3Q9bn19ZnVuY3Rpb24gbyhlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiYiZGlnZXN0ImluIGUmJiJzdHJpbmciPT10eXBlb2YgZS5kaWdlc3QmJmUuZGlnZXN0PT09bn0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw5NzIxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc05leHRSb3V0ZXJFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSk7bGV0IHI9big4MjAwKSxvPW4oODk2OCk7ZnVuY3Rpb24gdShlKXtyZXR1cm4gZSYmZS5kaWdlc3QmJigoMCxvLmlzUmVkaXJlY3RFcnJvcikoZSl8fCgwLHIuaXNOb3RGb3VuZEVycm9yKShlKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNDcwNzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEV9fSk7bGV0IHI9big3MDQzKSxvPW4oMzA5OSksdT1uKDc0MzcpLGw9by5fKG4oMjI2NSkpLGE9ci5fKG4oNDg4NykpLGk9bigxOTU2KSxjPW4oNDg0OCkscz1uKDgxMzcpLGY9bigxMDYwKSxkPW4oNjAxNSkscD1uKDcwOTIpLGg9big0MTIzKSx5PW4oODApLF89bigzMTcxKSx2PW4oODUwNSksYj1uKDgwNzcpLGc9WyJib3R0b20iLCJoZWlnaHQiLCJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJ3aWR0aCIsIngiLCJ5Il07ZnVuY3Rpb24gbShlLHQpe2xldCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4udG9wPj0wJiZuLnRvcDw9dH1jbGFzcyBSIGV4dGVuZHMgbC5kZWZhdWx0LkNvbXBvbmVudHtjb21wb25lbnREaWRNb3VudCgpe3RoaXMuaGFuZGxlUG90ZW50aWFsU2Nyb2xsKCl9Y29tcG9uZW50RGlkVXBkYXRlKCl7dGhpcy5wcm9wcy5mb2N1c0FuZFNjcm9sbFJlZi5hcHBseSYmdGhpcy5oYW5kbGVQb3RlbnRpYWxTY3JvbGwoKX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbn1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLmhhbmRsZVBvdGVudGlhbFNjcm9sbD0oKT0+e2xldHtmb2N1c0FuZFNjcm9sbFJlZjplLHNlZ21lbnRQYXRoOnR9PXRoaXMucHJvcHM7aWYoZS5hcHBseSl7dmFyIG47aWYoMCE9PWUuc2VnbWVudFBhdGhzLmxlbmd0aCYmIWUuc2VnbWVudFBhdGhzLnNvbWUoZT0+dC5ldmVyeSgodCxuKT0+KDAsZC5tYXRjaFNlZ21lbnQpKHQsZVtuXSkpKSlyZXR1cm47bGV0IHI9bnVsbCxvPWUuaGFzaEZyYWdtZW50O2lmKG8mJihyPSJ0b3AiPT09bz9kb2N1bWVudC5ib2R5Om51bGwhPShuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG8pKT9uOmRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKG8pWzBdKSxyfHwocj0idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz9udWxsOmEuZGVmYXVsdC5maW5kRE9NTm9kZSh0aGlzKSksIShyIGluc3RhbmNlb2YgRWxlbWVudCkpcmV0dXJuO2Zvcig7IShyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpfHxmdW5jdGlvbihlKXtpZihbInN0aWNreSIsImZpeGVkIl0uaW5jbHVkZXMoZ2V0Q29tcHV0ZWRTdHlsZShlKS5wb3NpdGlvbikpcmV0dXJuITA7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZy5ldmVyeShlPT4wPT09dFtlXSl9KHIpOyl7aWYobnVsbD09PXIubmV4dEVsZW1lbnRTaWJsaW5nKXJldHVybjtyPXIubmV4dEVsZW1lbnRTaWJsaW5nfWUuYXBwbHk9ITEsZS5oYXNoRnJhZ21lbnQ9bnVsbCxlLnNlZ21lbnRQYXRocz1bXSwoMCxwLmhhbmRsZVNtb290aFNjcm9sbCkoKCk9PntpZihvKXtyLnNjcm9sbEludG9WaWV3KCk7cmV0dXJufWxldCBlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0PWUuY2xpZW50SGVpZ2h0OyFtKHIsdCkmJihlLnNjcm9sbFRvcD0wLG0ocix0KXx8ci5zY3JvbGxJbnRvVmlldygpKX0se2RvbnRGb3JjZUxheW91dDohMCxvbmx5SGFzaENoYW5nZTplLm9ubHlIYXNoQ2hhbmdlfSksZS5vbmx5SGFzaENoYW5nZT0hMSxyLmZvY3VzKCl9fX19ZnVuY3Rpb24gUChlKXtsZXR7c2VnbWVudFBhdGg6dCxjaGlsZHJlbjpufT1lLHI9KDAsbC51c2VDb250ZXh0KShpLkdsb2JhbExheW91dFJvdXRlckNvbnRleHQpO2lmKCFyKXRocm93IEVycm9yKCJpbnZhcmlhbnQgZ2xvYmFsIGxheW91dCByb3V0ZXIgbm90IG1vdW50ZWQiKTtyZXR1cm4oMCx1LmpzeCkoUix7c2VnbWVudFBhdGg6dCxmb2N1c0FuZFNjcm9sbFJlZjpyLmZvY3VzQW5kU2Nyb2xsUmVmLGNoaWxkcmVuOm59KX1mdW5jdGlvbiBqKGUpe2xldHtwYXJhbGxlbFJvdXRlcktleTp0LHVybDpuLGNoaWxkTm9kZXM6cixzZWdtZW50UGF0aDpvLHRyZWU6YSxjYWNoZUtleTpmfT1lLHA9KDAsbC51c2VDb250ZXh0KShpLkdsb2JhbExheW91dFJvdXRlckNvbnRleHQpO2lmKCFwKXRocm93IEVycm9yKCJpbnZhcmlhbnQgZ2xvYmFsIGxheW91dCByb3V0ZXIgbm90IG1vdW50ZWQiKTtsZXR7YnVpbGRJZDpoLGNoYW5nZUJ5U2VydmVyUmVzcG9uc2U6eSx0cmVlOl99PXAsdj1yLmdldChmKTtpZih2b2lkIDA9PT12KXtsZXQgZT17bGF6eURhdGE6bnVsbCxyc2M6bnVsbCxwcmVmZXRjaFJzYzpudWxsLGhlYWQ6bnVsbCxwcmVmZXRjaEhlYWQ6bnVsbCxwYXJhbGxlbFJvdXRlczpuZXcgTWFwLGxhenlEYXRhUmVzb2x2ZWQ6ITEsbG9hZGluZzpudWxsfTt2PWUsci5zZXQoZixlKX1sZXQgZz1udWxsIT09di5wcmVmZXRjaFJzYz92LnByZWZldGNoUnNjOnYucnNjLG09KDAsbC51c2VEZWZlcnJlZFZhbHVlKSh2LnJzYyxnKSxSPSJvYmplY3QiPT10eXBlb2YgbSYmbnVsbCE9PW0mJiJmdW5jdGlvbiI9PXR5cGVvZiBtLnRoZW4/KDAsbC51c2UpKG0pOm07aWYoIVIpe2xldCBlPXYubGF6eURhdGE7aWYobnVsbD09PWUpe2xldCB0PWZ1bmN0aW9uIGUodCxuKXtpZih0KXtsZXRbcixvXT10LHU9Mj09PXQubGVuZ3RoO2lmKCgwLGQubWF0Y2hTZWdtZW50KShuWzBdLHIpJiZuWzFdLmhhc093blByb3BlcnR5KG8pKXtpZih1KXtsZXQgdD1lKHZvaWQgMCxuWzFdW29dKTtyZXR1cm5bblswXSx7Li4ublsxXSxbb106W3RbMF0sdFsxXSx0WzJdLCJyZWZldGNoIl19XX1yZXR1cm5bblswXSx7Li4ublsxXSxbb106ZSh0LnNsaWNlKDIpLG5bMV1bb10pfV19fXJldHVybiBufShbIiIsLi4ub10sXykscj0oMCxiLmhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSkoXyk7di5sYXp5RGF0YT1lPSgwLGMuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkobmV3IFVSTChuLGxvY2F0aW9uLm9yaWdpbiksdCxyP3AubmV4dFVybDpudWxsLGgpLHYubGF6eURhdGFSZXNvbHZlZD0hMX1sZXQgdD0oMCxsLnVzZSkoZSk7di5sYXp5RGF0YVJlc29sdmVkfHwoc2V0VGltZW91dCgoKT0+eygwLGwuc3RhcnRUcmFuc2l0aW9uKSgoKT0+e3koe3ByZXZpb3VzVHJlZTpfLHNlcnZlclJlc3BvbnNlOnR9KX0pfSksdi5sYXp5RGF0YVJlc29sdmVkPSEwKSwoMCxsLnVzZSkocy51bnJlc29sdmVkVGhlbmFibGUpfXJldHVybigwLHUuanN4KShpLkxheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXIse3ZhbHVlOnt0cmVlOmFbMV1bdF0sY2hpbGROb2Rlczp2LnBhcmFsbGVsUm91dGVzLHVybDpuLGxvYWRpbmc6di5sb2FkaW5nfSxjaGlsZHJlbjpSfSl9ZnVuY3Rpb24gTyhlKXtsZXR7Y2hpbGRyZW46dCxoYXNMb2FkaW5nOm4sbG9hZGluZzpyLGxvYWRpbmdTdHlsZXM6byxsb2FkaW5nU2NyaXB0czphfT1lO3JldHVybiBuPygwLHUuanN4KShsLlN1c3BlbnNlLHtmYWxsYmFjazooMCx1LmpzeHMpKHUuRnJhZ21lbnQse2NoaWxkcmVuOltvLGEscl19KSxjaGlsZHJlbjp0fSk6KDAsdS5qc3gpKHUuRnJhZ21lbnQse2NoaWxkcmVuOnR9KX1mdW5jdGlvbiBFKGUpe2xldHtwYXJhbGxlbFJvdXRlcktleTp0LHNlZ21lbnRQYXRoOm4sZXJyb3I6cixlcnJvclN0eWxlczpvLGVycm9yU2NyaXB0czphLHRlbXBsYXRlU3R5bGVzOmMsdGVtcGxhdGVTY3JpcHRzOnMsdGVtcGxhdGU6ZCxub3RGb3VuZDpwLG5vdEZvdW5kU3R5bGVzOmJ9PWUsZz0oMCxsLnVzZUNvbnRleHQpKGkuTGF5b3V0Um91dGVyQ29udGV4dCk7aWYoIWcpdGhyb3cgRXJyb3IoImludmFyaWFudCBleHBlY3RlZCBsYXlvdXQgcm91dGVyIHRvIGJlIG1vdW50ZWQiKTtsZXR7Y2hpbGROb2RlczptLHRyZWU6Uix1cmw6RSxsb2FkaW5nOlN9PWcsdz1tLmdldCh0KTt3fHwodz1uZXcgTWFwLG0uc2V0KHQsdykpO2xldCBNPVJbMV1bdF1bMF0sVD0oMCxfLmdldFNlZ21lbnRWYWx1ZSkoTSksQz1bTV07cmV0dXJuKDAsdS5qc3gpKHUuRnJhZ21lbnQse2NoaWxkcmVuOkMubWFwKGU9PntsZXQgbD0oMCxfLmdldFNlZ21lbnRWYWx1ZSkoZSksZz0oMCx2LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShlKTtyZXR1cm4oMCx1LmpzeHMpKGkuVGVtcGxhdGVDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTooMCx1LmpzeCkoUCx7c2VnbWVudFBhdGg6bixjaGlsZHJlbjooMCx1LmpzeCkoZi5FcnJvckJvdW5kYXJ5LHtlcnJvckNvbXBvbmVudDpyLGVycm9yU3R5bGVzOm8sZXJyb3JTY3JpcHRzOmEsY2hpbGRyZW46KDAsdS5qc3gpKE8se2hhc0xvYWRpbmc6ISFTLGxvYWRpbmc6bnVsbD09Uz92b2lkIDA6U1swXSxsb2FkaW5nU3R5bGVzOm51bGw9PVM/dm9pZCAwOlNbMV0sbG9hZGluZ1NjcmlwdHM6bnVsbD09Uz92b2lkIDA6U1syXSxjaGlsZHJlbjooMCx1LmpzeCkoeS5Ob3RGb3VuZEJvdW5kYXJ5LHtub3RGb3VuZDpwLG5vdEZvdW5kU3R5bGVzOmIsY2hpbGRyZW46KDAsdS5qc3gpKGguUmVkaXJlY3RCb3VuZGFyeSx7Y2hpbGRyZW46KDAsdS5qc3gpKGose3BhcmFsbGVsUm91dGVyS2V5OnQsdXJsOkUsdHJlZTpSLGNoaWxkTm9kZXM6dyxzZWdtZW50UGF0aDpuLGNhY2hlS2V5OmcsaXNBY3RpdmU6VD09PWx9KX0pfSl9KX0pfSksY2hpbGRyZW46W2MscyxkXX0sKDAsdi5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoZSwhMCkpfSl9KX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw2MDE1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtjYW5TZWdtZW50QmVPdmVycmlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHV9LG1hdGNoU2VnbWVudDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oNzQxNyksbz0oZSx0KT0+InN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciPT10eXBlb2YgdCYmZT09PXQ6InN0cmluZyIhPXR5cGVvZiB0JiZlWzBdPT09dFswXSYmZVsxXT09PXRbMV0sdT0oZSx0KT0+e3ZhciBuO3JldHVybiFBcnJheS5pc0FycmF5KGUpJiYhIUFycmF5LmlzQXJyYXkodCkmJihudWxsPT0obj0oMCxyLmdldFNlZ21lbnRQYXJhbSkoZSkpP3ZvaWQgMDpuLnBhcmFtKT09PXRbMF19OygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDU0NzU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse1JlYWRvbmx5VVJMU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKCl7cmV0dXJuIGkuUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXN9LFJlZGlyZWN0VHlwZTpmdW5jdGlvbigpe3JldHVybiBpLlJlZGlyZWN0VHlwZX0sU2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBjLlNlcnZlckluc2VydGVkSFRNTENvbnRleHR9LG5vdEZvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIGkubm90Rm91bmR9LHBlcm1hbmVudFJlZGlyZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucGVybWFuZW50UmVkaXJlY3R9LHJlZGlyZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucmVkaXJlY3R9LHVzZVBhcmFtczpmdW5jdGlvbigpe3JldHVybiBwfSx1c2VQYXRobmFtZTpmdW5jdGlvbigpe3JldHVybiBmfSx1c2VSb3V0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdXNlU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudDpmdW5jdGlvbigpe3JldHVybiB5fSx1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LHVzZVNlcnZlckluc2VydGVkSFRNTDpmdW5jdGlvbigpe3JldHVybiBjLnVzZVNlcnZlckluc2VydGVkSFRNTH19KTtsZXQgcj1uKDIyNjUpLG89bigxOTU2KSx1PW4oOTA2MCksbD1uKDMxNzEpLGE9big0NTQxKSxpPW4oMjY0NiksYz1uKDU1MDEpO2Z1bmN0aW9uIHMoKXtsZXQgZT0oMCxyLnVzZUNvbnRleHQpKHUuU2VhcmNoUGFyYW1zQ29udGV4dCksdD0oMCxyLnVzZU1lbW8pKCgpPT5lP25ldyBpLlJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zKGUpOm51bGwsW2VdKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyl7bGV0e2JhaWxvdXRUb0NsaWVudFJlbmRlcmluZzplfT1uKDYxNDkpO2UoInVzZVNlYXJjaFBhcmFtcygpIil9cmV0dXJuIHR9ZnVuY3Rpb24gZigpe3JldHVybigwLHIudXNlQ29udGV4dCkodS5QYXRobmFtZUNvbnRleHQpfWZ1bmN0aW9uIGQoKXtsZXQgZT0oMCxyLnVzZUNvbnRleHQpKG8uQXBwUm91dGVyQ29udGV4dCk7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoImludmFyaWFudCBleHBlY3RlZCBhcHAgcm91dGVyIHRvIGJlIG1vdW50ZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBwKCl7cmV0dXJuKDAsci51c2VDb250ZXh0KSh1LlBhdGhQYXJhbXNDb250ZXh0KX1mdW5jdGlvbiBoKGUpe3ZvaWQgMD09PWUmJihlPSJjaGlsZHJlbiIpO2xldCB0PSgwLHIudXNlQ29udGV4dCkoby5MYXlvdXRSb3V0ZXJDb250ZXh0KTtyZXR1cm4gdD9mdW5jdGlvbiBlKHQsbixyLG8pe2xldCB1O2lmKHZvaWQgMD09PXImJihyPSEwKSx2b2lkIDA9PT1vJiYobz1bXSkscil1PXRbMV1bbl07ZWxzZXt2YXIgaTtsZXQgZT10WzFdO3U9bnVsbCE9KGk9ZS5jaGlsZHJlbik/aTpPYmplY3QudmFsdWVzKGUpWzBdfWlmKCF1KXJldHVybiBvO2xldCBjPXVbMF0scz0oMCxsLmdldFNlZ21lbnRWYWx1ZSkoYyk7cmV0dXJuIXN8fHMuc3RhcnRzV2l0aChhLlBBR0VfU0VHTUVOVF9LRVkpP286KG8ucHVzaChzKSxlKHUsbiwhMSxvKSl9KHQudHJlZSxlKTpudWxsfWZ1bmN0aW9uIHkoZSl7dm9pZCAwPT09ZSYmKGU9ImNoaWxkcmVuIik7bGV0IHQ9aChlKTtpZighdHx8MD09PXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuPSJjaGlsZHJlbiI9PT1lP3RbMF06dFt0Lmxlbmd0aC0xXTtyZXR1cm4gbj09PWEuREVGQVVMVF9TRUdNRU5UX0tFWT9udWxsOm59KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMjY0NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7UmVhZG9ubHlVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sUmVkaXJlY3RUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHIuUmVkaXJlY3RUeXBlfSxub3RGb3VuZDpmdW5jdGlvbigpe3JldHVybiBvLm5vdEZvdW5kfSxwZXJtYW5lbnRSZWRpcmVjdDpmdW5jdGlvbigpe3JldHVybiByLnBlcm1hbmVudFJlZGlyZWN0fSxyZWRpcmVjdDpmdW5jdGlvbigpe3JldHVybiByLnJlZGlyZWN0fX0pO2xldCByPW4oODk2OCksbz1uKDgyMDApO2NsYXNzIHUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJNZXRob2QgdW5hdmFpbGFibGUgb24gYFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zYC4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXNlYXJjaC1wYXJhbXMjdXBkYXRpbmctc2VhcmNocGFyYW1zIil9fWNsYXNzIGwgZXh0ZW5kcyBVUkxTZWFyY2hQYXJhbXN7YXBwZW5kKCl7dGhyb3cgbmV3IHV9ZGVsZXRlKCl7dGhyb3cgbmV3IHV9c2V0KCl7dGhyb3cgbmV3IHV9c29ydCgpe3Rocm93IG5ldyB1fX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw4MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiTm90Rm91bmRCb3VuZGFyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9fSk7bGV0IHI9bigzMDk5KSxvPW4oNzQzNyksdT1yLl8obigyMjY1KSksbD1uKDU0NzUpLGE9big4MjAwKTtuKDE3NjUpO2xldCBpPW4oMTk1Nik7Y2xhc3MgYyBleHRlbmRzIHUuZGVmYXVsdC5Db21wb25lbnR7Y29tcG9uZW50RGlkQ2F0Y2goKXt9c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlKXtpZigoMCxhLmlzTm90Rm91bmRFcnJvcikoZSkpcmV0dXJue25vdEZvdW5kVHJpZ2dlcmVkOiEwfTt0aHJvdyBlfXN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoZSx0KXtyZXR1cm4gZS5wYXRobmFtZSE9PXQucHJldmlvdXNQYXRobmFtZSYmdC5ub3RGb3VuZFRyaWdnZXJlZD97bm90Rm91bmRUcmlnZ2VyZWQ6ITEscHJldmlvdXNQYXRobmFtZTplLnBhdGhuYW1lfTp7bm90Rm91bmRUcmlnZ2VyZWQ6dC5ub3RGb3VuZFRyaWdnZXJlZCxwcmV2aW91c1BhdGhuYW1lOmUucGF0aG5hbWV9fXJlbmRlcigpe3JldHVybiB0aGlzLnN0YXRlLm5vdEZvdW5kVHJpZ2dlcmVkPygwLG8uanN4cykoby5GcmFnbWVudCx7Y2hpbGRyZW46WygwLG8uanN4KSgibWV0YSIse25hbWU6InJvYm90cyIsY29udGVudDoibm9pbmRleCJ9KSwhMSx0aGlzLnByb3BzLm5vdEZvdW5kU3R5bGVzLHRoaXMucHJvcHMubm90Rm91bmRdfSk6dGhpcy5wcm9wcy5jaGlsZHJlbn1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXRlPXtub3RGb3VuZFRyaWdnZXJlZDohIWUuYXNOb3RGb3VuZCxwcmV2aW91c1BhdGhuYW1lOmUucGF0aG5hbWV9fX1mdW5jdGlvbiBzKGUpe2xldHtub3RGb3VuZDp0LG5vdEZvdW5kU3R5bGVzOm4sYXNOb3RGb3VuZDpyLGNoaWxkcmVuOmF9PWUscz0oMCxsLnVzZVBhdGhuYW1lKSgpLGY9KDAsdS51c2VDb250ZXh0KShpLk1pc3NpbmdTbG90Q29udGV4dCk7cmV0dXJuIHQ/KDAsby5qc3gpKGMse3BhdGhuYW1lOnMsbm90Rm91bmQ6dCxub3RGb3VuZFN0eWxlczpuLGFzTm90Rm91bmQ6cixtaXNzaW5nU2xvdHM6ZixjaGlsZHJlbjphfSk6KDAsby5qc3gpKG8uRnJhZ21lbnQse2NoaWxkcmVuOmF9KX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw4MjAwOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7aXNOb3RGb3VuZEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99LG5vdEZvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fSk7bGV0IG49Ik5FWFRfTk9UX0ZPVU5EIjtmdW5jdGlvbiByKCl7bGV0IGU9RXJyb3Iobik7dGhyb3cgZS5kaWdlc3Q9bixlfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmImRpZ2VzdCJpbiBlJiZlLmRpZ2VzdD09PW59KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sOTc0NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUHJvbWlzZVF1ZXVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTtsZXQgcj1uKDI1MjIpLG89big2NzUpO3ZhciB1PW8uXygiX21heENvbmN1cnJlbmN5IiksbD1vLl8oIl9ydW5uaW5nQ291bnQiKSxhPW8uXygiX3F1ZXVlIiksaT1vLl8oIl9wcm9jZXNzTmV4dCIpO2NsYXNzIGN7ZW5xdWV1ZShlKXtsZXQgdCxuO2xldCBvPW5ldyBQcm9taXNlKChlLHIpPT57dD1lLG49cn0pLHU9YXN5bmMoKT0+e3RyeXtyLl8odGhpcyxsKVtsXSsrO2xldCBuPWF3YWl0IGUoKTt0KG4pfWNhdGNoKGUpe24oZSl9ZmluYWxseXtyLl8odGhpcyxsKVtsXS0tLHIuXyh0aGlzLGkpW2ldKCl9fTtyZXR1cm4gci5fKHRoaXMsYSlbYV0ucHVzaCh7cHJvbWlzZUZuOm8sdGFzazp1fSksci5fKHRoaXMsaSlbaV0oKSxvfWJ1bXAoZSl7bGV0IHQ9ci5fKHRoaXMsYSlbYV0uZmluZEluZGV4KHQ9PnQucHJvbWlzZUZuPT09ZSk7aWYodD4tMSl7bGV0IGU9ci5fKHRoaXMsYSlbYV0uc3BsaWNlKHQsMSlbMF07ci5fKHRoaXMsYSlbYV0udW5zaGlmdChlKSxyLl8odGhpcyxpKVtpXSghMCl9fWNvbnN0cnVjdG9yKGU9NSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsaSx7dmFsdWU6c30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHUse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGwse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHIuXyh0aGlzLHUpW3VdPWUsci5fKHRoaXMsbClbbF09MCxyLl8odGhpcyxhKVthXT1bXX19ZnVuY3Rpb24gcyhlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksKHIuXyh0aGlzLGwpW2xdPHIuXyh0aGlzLHUpW3VdfHxlKSYmci5fKHRoaXMsYSlbYV0ubGVuZ3RoPjApe3ZhciB0O251bGw9PSh0PXIuXyh0aGlzLGEpW2FdLnNoaWZ0KCkpfHx0LnRhc2soKX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNDEyMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7UmVkaXJlY3RCb3VuZGFyeTpmdW5jdGlvbigpe3JldHVybiBzfSxSZWRpcmVjdEVycm9yQm91bmRhcnk6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTtsZXQgcj1uKDMwOTkpLG89big3NDM3KSx1PXIuXyhuKDIyNjUpKSxsPW4oNTQ3NSksYT1uKDg5NjgpO2Z1bmN0aW9uIGkoZSl7bGV0e3JlZGlyZWN0OnQscmVzZXQ6bixyZWRpcmVjdFR5cGU6cn09ZSxvPSgwLGwudXNlUm91dGVyKSgpO3JldHVybigwLHUudXNlRWZmZWN0KSgoKT0+e3UuZGVmYXVsdC5zdGFydFRyYW5zaXRpb24oKCk9PntyPT09YS5SZWRpcmVjdFR5cGUucHVzaD9vLnB1c2godCx7fSk6by5yZXBsYWNlKHQse30pLG4oKX0pfSxbdCxyLG4sb10pLG51bGx9Y2xhc3MgYyBleHRlbmRzIHUuZGVmYXVsdC5Db21wb25lbnR7c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlKXtpZigoMCxhLmlzUmVkaXJlY3RFcnJvcikoZSkpcmV0dXJue3JlZGlyZWN0OigwLGEuZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IpKGUpLHJlZGlyZWN0VHlwZTooMCxhLmdldFJlZGlyZWN0VHlwZUZyb21FcnJvcikoZSl9O3Rocm93IGV9cmVuZGVyKCl7bGV0e3JlZGlyZWN0OmUscmVkaXJlY3RUeXBlOnR9PXRoaXMuc3RhdGU7cmV0dXJuIG51bGwhPT1lJiZudWxsIT09dD8oMCxvLmpzeCkoaSx7cmVkaXJlY3Q6ZSxyZWRpcmVjdFR5cGU6dCxyZXNldDooKT0+dGhpcy5zZXRTdGF0ZSh7cmVkaXJlY3Q6bnVsbH0pfSk6dGhpcy5wcm9wcy5jaGlsZHJlbn1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXRlPXtyZWRpcmVjdDpudWxsLHJlZGlyZWN0VHlwZTpudWxsfX19ZnVuY3Rpb24gcyhlKXtsZXR7Y2hpbGRyZW46dH09ZSxuPSgwLGwudXNlUm91dGVyKSgpO3JldHVybigwLG8uanN4KShjLHtyb3V0ZXI6bixjaGlsZHJlbjp0fSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNTAwMTpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixyO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVkaXJlY3RTdGF0dXNDb2RlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KSwocj1ufHwobj17fSkpW3IuU2VlT3RoZXI9MzAzXT0iU2VlT3RoZXIiLHJbci5UZW1wb3JhcnlSZWRpcmVjdD0zMDddPSJUZW1wb3JhcnlSZWRpcmVjdCIscltyLlBlcm1hbmVudFJlZGlyZWN0PTMwOF09IlBlcm1hbmVudFJlZGlyZWN0IiwoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw4OTY4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbztPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse1JlZGlyZWN0VHlwZTpmdW5jdGlvbigpe3JldHVybiByfSxnZXRSZWRpcmVjdEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGdldFJlZGlyZWN0U3RhdHVzQ29kZUZyb21FcnJvcjpmdW5jdGlvbigpe3JldHVybiB5fSxnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gcH0saXNSZWRpcmVjdEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LHBlcm1hbmVudFJlZGlyZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHJlZGlyZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9fSk7bGV0IHU9big1NDQpLGw9bigyOTUpLGE9big1MDAxKSxpPSJORVhUX1JFRElSRUNUIjtmdW5jdGlvbiBjKGUsdCxuKXt2b2lkIDA9PT1uJiYobj1hLlJlZGlyZWN0U3RhdHVzQ29kZS5UZW1wb3JhcnlSZWRpcmVjdCk7bGV0IHI9RXJyb3IoaSk7ci5kaWdlc3Q9aSsiOyIrdCsiOyIrZSsiOyIrbisiOyI7bGV0IG89dS5yZXF1ZXN0QXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7cmV0dXJuIG8mJihyLm11dGFibGVDb29raWVzPW8ubXV0YWJsZUNvb2tpZXMpLHJ9ZnVuY3Rpb24gcyhlLHQpe3ZvaWQgMD09PXQmJih0PSJyZXBsYWNlIik7bGV0IG49bC5hY3Rpb25Bc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKTt0aHJvdyBjKGUsdCwobnVsbD09bj92b2lkIDA6bi5pc0FjdGlvbik/YS5SZWRpcmVjdFN0YXR1c0NvZGUuU2VlT3RoZXI6YS5SZWRpcmVjdFN0YXR1c0NvZGUuVGVtcG9yYXJ5UmVkaXJlY3QpfWZ1bmN0aW9uIGYoZSx0KXt2b2lkIDA9PT10JiYodD0icmVwbGFjZSIpO2xldCBuPWwuYWN0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7dGhyb3cgYyhlLHQsKG51bGw9PW4/dm9pZCAwOm4uaXNBY3Rpb24pP2EuUmVkaXJlY3RTdGF0dXNDb2RlLlNlZU90aGVyOmEuUmVkaXJlY3RTdGF0dXNDb2RlLlBlcm1hbmVudFJlZGlyZWN0KX1mdW5jdGlvbiBkKGUpe2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWV8fCEoImRpZ2VzdCJpbiBlKXx8InN0cmluZyIhPXR5cGVvZiBlLmRpZ2VzdClyZXR1cm4hMTtsZXRbdCxuLHIsb109ZS5kaWdlc3Quc3BsaXQoIjsiLDQpLHU9TnVtYmVyKG8pO3JldHVybiB0PT09aSYmKCJyZXBsYWNlIj09PW58fCJwdXNoIj09PW4pJiYic3RyaW5nIj09dHlwZW9mIHImJiFpc05hTih1KSYmdSBpbiBhLlJlZGlyZWN0U3RhdHVzQ29kZX1mdW5jdGlvbiBwKGUpe3JldHVybiBkKGUpP2UuZGlnZXN0LnNwbGl0KCI7IiwzKVsyXTpudWxsfWZ1bmN0aW9uIGgoZSl7aWYoIWQoZSkpdGhyb3cgRXJyb3IoIk5vdCBhIHJlZGlyZWN0IGVycm9yIik7cmV0dXJuIGUuZGlnZXN0LnNwbGl0KCI7IiwyKVsxXX1mdW5jdGlvbiB5KGUpe2lmKCFkKGUpKXRocm93IEVycm9yKCJOb3QgYSByZWRpcmVjdCBlcnJvciIpO3JldHVybiBOdW1iZXIoZS5kaWdlc3Quc3BsaXQoIjsiLDQpWzNdKX0obz1yfHwocj17fSkpLnB1c2g9InB1c2giLG8ucmVwbGFjZT0icmVwbGFjZSIsKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNjQyMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9fSk7bGV0IHI9bigzMDk5KSxvPW4oNzQzNyksdT1yLl8obigyMjY1KSksbD1uKDE5NTYpO2Z1bmN0aW9uIGEoKXtsZXQgZT0oMCx1LnVzZUNvbnRleHQpKGwuVGVtcGxhdGVDb250ZXh0KTtyZXR1cm4oMCxvLmpzeCkoby5GcmFnbWVudCx7Y2hpbGRyZW46ZX0pfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDU0NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7Z2V0RXhwZWN0ZWRSZXF1ZXN0U3RvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gb30scmVxdWVzdEFzeW5jU3RvcmFnZTpmdW5jdGlvbigpe3JldHVybiByLnJlcXVlc3RBc3luY1N0b3JhZ2V9fSk7bGV0IHI9big5MTM0KTtmdW5jdGlvbiBvKGUpe2xldCB0PXIucmVxdWVzdEFzeW5jU3RvcmFnZS5nZXRTdG9yZSgpO2lmKHQpcmV0dXJuIHQ7dGhyb3cgRXJyb3IoImAiK2UrImAgd2FzIGNhbGxlZCBvdXRzaWRlIGEgcmVxdWVzdCBzY29wZS4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uZXh0LWR5bmFtaWMtYXBpLXdyb25nLWNvbnRleHQiKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwyMzU2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhcHBseUZsaWdodERhdGEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oNzQyMCksbz1uKDI1NzYpO2Z1bmN0aW9uIHUoZSx0LG4sdSl7bGV0W2wsYSxpXT1uLnNsaWNlKC0zKTtpZihudWxsPT09YSlyZXR1cm4hMTtpZigzPT09bi5sZW5ndGgpe2xldCBuPWFbMl0sbz1hWzNdO3QubG9hZGluZz1vLHQucnNjPW4sdC5wcmVmZXRjaFJzYz1udWxsLCgwLHIuZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQpKHQsZSxsLGEsaSx1KX1lbHNlIHQucnNjPWUucnNjLHQucHJlZmV0Y2hSc2M9ZS5wcmVmZXRjaFJzYyx0LnBhcmFsbGVsUm91dGVzPW5ldyBNYXAoZS5wYXJhbGxlbFJvdXRlcyksdC5sb2FkaW5nPWUubG9hZGluZywoMCxvLmZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YSkodCxlLG4sdSk7cmV0dXJuITB9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMTkzNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4scixhKXtsZXQgaTtsZXRbYyxzLGYsZCxwXT1uO2lmKDE9PT10Lmxlbmd0aCl7bGV0IGU9bChuLHIsdCk7cmV0dXJuKDAsdS5hZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzKShlLGEpLGV9bGV0W2gseV09dDtpZighKDAsby5tYXRjaFNlZ21lbnQpKGgsYykpcmV0dXJuIG51bGw7aWYoMj09PXQubGVuZ3RoKWk9bChzW3ldLHIsdCk7ZWxzZSBpZihudWxsPT09KGk9ZSh0LnNsaWNlKDIpLHNbeV0scixhKSkpcmV0dXJuIG51bGw7bGV0IF89W3RbMF0sey4uLnMsW3ldOml9LGYsZF07cmV0dXJuIHAmJihfWzRdPSEwKSwoMCx1LmFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMpKF8sYSksX319fSk7bGV0IHI9big0NTQxKSxvPW4oNjAxNSksdT1uKDIzMik7ZnVuY3Rpb24gbChlLHQsbil7bGV0W3UsYV09ZSxbaSxjXT10O2lmKGk9PT1yLkRFRkFVTFRfU0VHTUVOVF9LRVkmJnUhPT1yLkRFRkFVTFRfU0VHTUVOVF9LRVkpcmV0dXJuIGU7aWYoKDAsby5tYXRjaFNlZ21lbnQpKHUsaSkpe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBhKXZvaWQgMCE9PWNbZV0/dFtlXT1sKGFbZV0sY1tlXSxuKTp0W2VdPWFbZV07Zm9yKGxldCBlIGluIGMpdFtlXXx8KHRbZV09Y1tlXSk7bGV0IHI9W3UsdF07cmV0dXJuIGVbMl0mJihyWzJdPWVbMl0pLGVbM10mJihyWzNdPWVbM10pLGVbNF0mJihyWzRdPWVbNF0pLHJ9cmV0dXJuIHR9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNTU1NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY2xlYXJDYWNoZU5vZGVEYXRhRm9yU2VnbWVudFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQsbixvKXtsZXQgdT1vLmxlbmd0aDw9MixbbCxhXT1vLGk9KDAsci5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoYSksYz1uLnBhcmFsbGVsUm91dGVzLmdldChsKSxzPXQucGFyYWxsZWxSb3V0ZXMuZ2V0KGwpO3MmJnMhPT1jfHwocz1uZXcgTWFwKGMpLHQucGFyYWxsZWxSb3V0ZXMuc2V0KGwscykpO2xldCBmPW51bGw9PWM/dm9pZCAwOmMuZ2V0KGkpLGQ9cy5nZXQoaSk7aWYodSl7ZCYmZC5sYXp5RGF0YSYmZCE9PWZ8fHMuc2V0KGkse2xhenlEYXRhOm51bGwscnNjOm51bGwscHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcCxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6bnVsbH0pO3JldHVybn1pZighZHx8IWYpe2R8fHMuc2V0KGkse2xhenlEYXRhOm51bGwscnNjOm51bGwscHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcCxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6bnVsbH0pO3JldHVybn1yZXR1cm4gZD09PWYmJihkPXtsYXp5RGF0YTpkLmxhenlEYXRhLHJzYzpkLnJzYyxwcmVmZXRjaFJzYzpkLnByZWZldGNoUnNjLGhlYWQ6ZC5oZWFkLHByZWZldGNoSGVhZDpkLnByZWZldGNoSGVhZCxwYXJhbGxlbFJvdXRlczpuZXcgTWFwKGQucGFyYWxsZWxSb3V0ZXMpLGxhenlEYXRhUmVzb2x2ZWQ6ZC5sYXp5RGF0YVJlc29sdmVkLGxvYWRpbmc6ZC5sb2FkaW5nfSxzLnNldChpLGQpKSxlKGQsZixvLnNsaWNlKDIpKX19fSk7bGV0IHI9big4NTA1KTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw1NDEwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtjb21wdXRlQ2hhbmdlZFBhdGg6ZnVuY3Rpb24oKXtyZXR1cm4gc30sZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTtsZXQgcj1uKDExODIpLG89big0NTQxKSx1PW4oNjAxNSksbD1lPT4iLyI9PT1lWzBdP2Uuc2xpY2UoMSk6ZSxhPWU9PiJzdHJpbmciPT10eXBlb2YgZT8iY2hpbGRyZW4iPT09ZT8iIjplOmVbMV07ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5yZWR1Y2UoKGUsdCk9PiIiPT09KHQ9bCh0KSl8fCgwLG8uaXNHcm91cFNlZ21lbnQpKHQpP2U6ZSsiLyIrdCwiIil8fCIvIn1mdW5jdGlvbiBjKGUpe3ZhciB0O2xldCBuPUFycmF5LmlzQXJyYXkoZVswXSk/ZVswXVsxXTplWzBdO2lmKG49PT1vLkRFRkFVTFRfU0VHTUVOVF9LRVl8fHIuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuc29tZShlPT5uLnN0YXJ0c1dpdGgoZSkpKXJldHVybjtpZihuLnN0YXJ0c1dpdGgoby5QQUdFX1NFR01FTlRfS0VZKSlyZXR1cm4iIjtsZXQgdT1bYShuKV0sbD1udWxsIT0odD1lWzFdKT90Ont9LHM9bC5jaGlsZHJlbj9jKGwuY2hpbGRyZW4pOnZvaWQgMDtpZih2b2lkIDAhPT1zKXUucHVzaChzKTtlbHNlIGZvcihsZXRbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGwpKXtpZigiY2hpbGRyZW4iPT09ZSljb250aW51ZTtsZXQgbj1jKHQpO3ZvaWQgMCE9PW4mJnUucHVzaChuKX1yZXR1cm4gaSh1KX1mdW5jdGlvbiBzKGUsdCl7bGV0IG49ZnVuY3Rpb24gZSh0LG4pe2xldFtvLGxdPXQsW2ksc109bixmPWEobyksZD1hKGkpO2lmKHIuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuc29tZShlPT5mLnN0YXJ0c1dpdGgoZSl8fGQuc3RhcnRzV2l0aChlKSkpcmV0dXJuIiI7aWYoISgwLHUubWF0Y2hTZWdtZW50KShvLGkpKXt2YXIgcDtyZXR1cm4gbnVsbCE9KHA9YyhuKSk/cDoiIn1mb3IobGV0IHQgaW4gbClpZihzW3RdKXtsZXQgbj1lKGxbdF0sc1t0XSk7aWYobnVsbCE9PW4pcmV0dXJuIGEoaSkrIi8iK259cmV0dXJuIG51bGx9KGUsdCk7cmV0dXJuIG51bGw9PW58fCIvIj09PW4/bjppKG4uc3BsaXQoIi8iKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMzQ1NjpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSxlLnBhdGhuYW1lK2Uuc2VhcmNoKyh0P2UuaGFzaDoiIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVIcmVmRnJvbVVybCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59fSksKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMjk1MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTtsZXQgcj1uKDM0NTYpLG89big3NDIwKSx1PW4oNTQxMCksbD1uKDMwNSksYT1uKDQ2NzMpLGk9bigyMzIpO2Z1bmN0aW9uIGMoZSl7dmFyIHQ7bGV0e2J1aWxkSWQ6bixpbml0aWFsVHJlZTpjLGluaXRpYWxTZWVkRGF0YTpzLHVybFBhcnRzOmYsaW5pdGlhbFBhcmFsbGVsUm91dGVzOmQsbG9jYXRpb246cCxpbml0aWFsSGVhZDpoLGNvdWxkQmVJbnRlcmNlcHRlZDp5fT1lLF89Zi5qb2luKCIvIiksdj0hcCxiPXtsYXp5RGF0YTpudWxsLHJzYzpzWzJdLHByZWZldGNoUnNjOm51bGwsaGVhZDpudWxsLHByZWZldGNoSGVhZDpudWxsLHBhcmFsbGVsUm91dGVzOnY/bmV3IE1hcDpkLGxhenlEYXRhUmVzb2x2ZWQ6ITEsbG9hZGluZzpzWzNdfSxnPXA/KDAsci5jcmVhdGVIcmVmRnJvbVVybCkocCk6XzsoMCxpLmFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMpKGMsZyk7bGV0IG09bmV3IE1hcDsobnVsbD09PWR8fDA9PT1kLnNpemUpJiYoMCxvLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKShiLHZvaWQgMCxjLHMsaCk7bGV0IFI9e2J1aWxkSWQ6bix0cmVlOmMsY2FjaGU6YixwcmVmZXRjaENhY2hlOm0scHVzaFJlZjp7cGVuZGluZ1B1c2g6ITEsbXBhTmF2aWdhdGlvbjohMSxwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZTohMH0sZm9jdXNBbmRTY3JvbGxSZWY6e2FwcGx5OiExLG9ubHlIYXNoQ2hhbmdlOiExLGhhc2hGcmFnbWVudDpudWxsLHNlZ21lbnRQYXRoczpbXX0sY2Fub25pY2FsVXJsOmcsbmV4dFVybDpudWxsIT0odD0oMCx1LmV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKShjKXx8KG51bGw9PXA/dm9pZCAwOnAucGF0aG5hbWUpKT90Om51bGx9O2lmKHApe2xldCBlPW5ldyBVUkwoIiIrcC5wYXRobmFtZStwLnNlYXJjaCxwLm9yaWdpbiksdD1bWyIiLGMsbnVsbCxudWxsXV07KDAsbC5jcmVhdGVQcmVmZXRjaENhY2hlRW50cnlGb3JJbml0aWFsTG9hZCkoe3VybDplLGtpbmQ6YS5QcmVmZXRjaEtpbmQuQVVUTyxkYXRhOlt0LHZvaWQgMCwhMSx5XSx0cmVlOlIudHJlZSxwcmVmZXRjaENhY2hlOlIucHJlZmV0Y2hDYWNoZSxuZXh0VXJsOlIubmV4dFVybH0pfXJldHVybiBSfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDg1MDU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNyZWF0ZVJvdXRlckNhY2hlS2V5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDQ1NDEpO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4odm9pZCAwPT09dCYmKHQ9ITEpLEFycmF5LmlzQXJyYXkoZSkpP2VbMF0rInwiK2VbMV0rInwiK2VbMl06dCYmZS5zdGFydHNXaXRoKHIuUEFHRV9TRUdNRU5UX0tFWSk/ci5QQUdFX1NFR01FTlRfS0VZOmV9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNDg0ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9fSk7bGV0IHI9big2ODY2KSxvPW4oMjg0NiksdT1uKDMwNzkpLGw9big0NjczKSxhPW4oNzIwNyksaT1uKDEzMTEpLHtjcmVhdGVGcm9tRmV0Y2g6Y309big2NjcxKTtmdW5jdGlvbiBzKGUpe3JldHVyblsoMCxvLnVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcikoZSkudG9TdHJpbmcoKSx2b2lkIDAsITEsITFdfWFzeW5jIGZ1bmN0aW9uIGYoZSx0LG4sZixkKXtsZXQgcD17W3IuUlNDX0hFQURFUl06IjEiLFtyLk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVdOigwLGkucHJlcGFyZUZsaWdodFJvdXRlclN0YXRlRm9yUmVxdWVzdCkodCl9O2Q9PT1sLlByZWZldGNoS2luZC5BVVRPJiYocFtyLk5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl09IjEiKSxuJiYocFtyLk5FWFRfVVJMXT1uKTtsZXQgaD0oMCxhLmhleEhhc2gpKFtwW3IuTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSXXx8IjAiLHBbci5ORVhUX1JPVVRFUl9TVEFURV9UUkVFXSxwW3IuTkVYVF9VUkxdXS5qb2luKCIsIikpO3RyeXt2YXIgeTtsZXQgdD1uZXcgVVJMKGUpO3Quc2VhcmNoUGFyYW1zLnNldChyLk5FWFRfUlNDX1VOSU9OX1FVRVJZLGgpO2xldCBuPWF3YWl0IGZldGNoKHQse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiIsaGVhZGVyczpwfSksbD0oMCxvLnVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcikobi51cmwpLGE9bi5yZWRpcmVjdGVkP2w6dm9pZCAwLGk9bi5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCIiLGQ9ISFuLmhlYWRlcnMuZ2V0KHIuTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSKSxfPSEhKG51bGw9PSh5PW4uaGVhZGVycy5nZXQoInZhcnkiKSk/dm9pZCAwOnkuaW5jbHVkZXMoci5ORVhUX1VSTCkpO2lmKGkhPT1yLlJTQ19DT05URU5UX1RZUEVfSEVBREVSfHwhbi5vaylyZXR1cm4gZS5oYXNoJiYobC5oYXNoPWUuaGFzaCkscyhsLnRvU3RyaW5nKCkpO2xldFt2LGJdPWF3YWl0IGMoUHJvbWlzZS5yZXNvbHZlKG4pLHtjYWxsU2VydmVyOnUuY2FsbFNlcnZlcn0pO2lmKGYhPT12KXJldHVybiBzKG4udXJsKTtyZXR1cm5bYixhLGQsX119Y2F0Y2godCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBmZXRjaCBSU0MgcGF5bG9hZCBmb3IgIitlKyIuIEZhbGxpbmcgYmFjayB0byBicm93c2VyIG5hdmlnYXRpb24uIix0KSxbZS50b1N0cmluZygpLHZvaWQgMCwhMSwhMV19fSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDI1NzY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLGwsYSl7bGV0IGk9bC5sZW5ndGg8PTUsW2Msc109bCxmPSgwLHUuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKHMpLGQ9bi5wYXJhbGxlbFJvdXRlcy5nZXQoYyk7aWYoIWQpcmV0dXJuO2xldCBwPXQucGFyYWxsZWxSb3V0ZXMuZ2V0KGMpO3AmJnAhPT1kfHwocD1uZXcgTWFwKGQpLHQucGFyYWxsZWxSb3V0ZXMuc2V0KGMscCkpO2xldCBoPWQuZ2V0KGYpLHk9cC5nZXQoZik7aWYoaSl7aWYoIXl8fCF5LmxhenlEYXRhfHx5PT09aCl7bGV0IGU9bFszXTt5PXtsYXp5RGF0YTpudWxsLHJzYzplWzJdLHByZWZldGNoUnNjOm51bGwsaGVhZDpudWxsLHByZWZldGNoSGVhZDpudWxsLGxvYWRpbmc6ZVszXSxwYXJhbGxlbFJvdXRlczpoP25ldyBNYXAoaC5wYXJhbGxlbFJvdXRlcyk6bmV3IE1hcCxsYXp5RGF0YVJlc29sdmVkOiExfSxoJiYoMCxyLmludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGUpKHksaCxsWzJdKSwoMCxvLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKSh5LGgsbFsyXSxlLGxbNF0sYSkscC5zZXQoZix5KX1yZXR1cm59eSYmaCYmKHk9PT1oJiYoeT17bGF6eURhdGE6eS5sYXp5RGF0YSxyc2M6eS5yc2MscHJlZmV0Y2hSc2M6eS5wcmVmZXRjaFJzYyxoZWFkOnkuaGVhZCxwcmVmZXRjaEhlYWQ6eS5wcmVmZXRjaEhlYWQscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcCh5LnBhcmFsbGVsUm91dGVzKSxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6eS5sb2FkaW5nfSxwLnNldChmLHkpKSxlKHksaCxsLnNsaWNlKDIpLGEpKX19fSk7bGV0IHI9big0Mzc3KSxvPW4oNzQyMCksdT1uKDg1MDUpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDc0MjA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4sdSxsLGEsaSl7aWYoMD09PU9iamVjdC5rZXlzKHVbMV0pLmxlbmd0aCl7dC5oZWFkPWE7cmV0dXJufWZvcihsZXQgYyBpbiB1WzFdKXtsZXQgcztsZXQgZj11WzFdW2NdLGQ9ZlswXSxwPSgwLHIuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKGQpLGg9bnVsbCE9PWwmJnZvaWQgMCE9PWxbMV1bY10/bFsxXVtjXTpudWxsO2lmKG4pe2xldCByPW4ucGFyYWxsZWxSb3V0ZXMuZ2V0KGMpO2lmKHIpe2xldCBuO2xldCB1PShudWxsPT1pP3ZvaWQgMDppLmtpbmQpPT09ImF1dG8iJiZpLnN0YXR1cz09PW8uUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnJldXNhYmxlLGw9bmV3IE1hcChyKSxzPWwuZ2V0KHApO249bnVsbCE9PWg/e2xhenlEYXRhOm51bGwscnNjOmhbMl0scHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwsbG9hZGluZzpoWzNdLHBhcmFsbGVsUm91dGVzOm5ldyBNYXAobnVsbD09cz92b2lkIDA6cy5wYXJhbGxlbFJvdXRlcyksbGF6eURhdGFSZXNvbHZlZDohMX06dSYmcz97bGF6eURhdGE6cy5sYXp5RGF0YSxyc2M6cy5yc2MscHJlZmV0Y2hSc2M6cy5wcmVmZXRjaFJzYyxoZWFkOnMuaGVhZCxwcmVmZXRjaEhlYWQ6cy5wcmVmZXRjaEhlYWQscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcChzLnBhcmFsbGVsUm91dGVzKSxsYXp5RGF0YVJlc29sdmVkOnMubGF6eURhdGFSZXNvbHZlZCxsb2FkaW5nOnMubG9hZGluZ306e2xhenlEYXRhOm51bGwscnNjOm51bGwscHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcChudWxsPT1zP3ZvaWQgMDpzLnBhcmFsbGVsUm91dGVzKSxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6bnVsbH0sbC5zZXQocCxuKSxlKG4scyxmLGh8fG51bGwsYSxpKSx0LnBhcmFsbGVsUm91dGVzLnNldChjLGwpO2NvbnRpbnVlfX1pZihudWxsIT09aCl7bGV0IGU9aFsyXSx0PWhbM107cz17bGF6eURhdGE6bnVsbCxyc2M6ZSxwcmVmZXRjaFJzYzpudWxsLGhlYWQ6bnVsbCxwcmVmZXRjaEhlYWQ6bnVsbCxwYXJhbGxlbFJvdXRlczpuZXcgTWFwLGxhenlEYXRhUmVzb2x2ZWQ6ITEsbG9hZGluZzp0fX1lbHNlIHM9e2xhenlEYXRhOm51bGwscnNjOm51bGwscHJlZmV0Y2hSc2M6bnVsbCxoZWFkOm51bGwscHJlZmV0Y2hIZWFkOm51bGwscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcCxsYXp5RGF0YVJlc29sdmVkOiExLGxvYWRpbmc6bnVsbH07bGV0IHk9dC5wYXJhbGxlbFJvdXRlcy5nZXQoYyk7eT95LnNldChwLHMpOnQucGFyYWxsZWxSb3V0ZXMuc2V0KGMsbmV3IE1hcChbW3Asc11dKSksZShzLHZvaWQgMCxmLGgsYSxpKX19fX0pO2xldCByPW4oODUwNSksbz1uKDQ2NzMpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDQ1MTA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImhhbmRsZU11dGFibGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oNTQxMCk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdm9pZCAwIT09ZX1mdW5jdGlvbiB1KGUsdCl7dmFyIG4sdSxsO2xldCBhPW51bGw9PSh1PXQuc2hvdWxkU2Nyb2xsKXx8dSxpPWUubmV4dFVybDtpZihvKHQucGF0Y2hlZFRyZWUpKXtsZXQgbj0oMCxyLmNvbXB1dGVDaGFuZ2VkUGF0aCkoZS50cmVlLHQucGF0Y2hlZFRyZWUpO24/aT1uOml8fChpPWUuY2Fub25pY2FsVXJsKX1yZXR1cm57YnVpbGRJZDplLmJ1aWxkSWQsY2Fub25pY2FsVXJsOm8odC5jYW5vbmljYWxVcmwpP3QuY2Fub25pY2FsVXJsPT09ZS5jYW5vbmljYWxVcmw/ZS5jYW5vbmljYWxVcmw6dC5jYW5vbmljYWxVcmw6ZS5jYW5vbmljYWxVcmwscHVzaFJlZjp7cGVuZGluZ1B1c2g6byh0LnBlbmRpbmdQdXNoKT90LnBlbmRpbmdQdXNoOmUucHVzaFJlZi5wZW5kaW5nUHVzaCxtcGFOYXZpZ2F0aW9uOm8odC5tcGFOYXZpZ2F0aW9uKT90Lm1wYU5hdmlnYXRpb246ZS5wdXNoUmVmLm1wYU5hdmlnYXRpb24scHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6byh0LnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlKT90LnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlOmUucHVzaFJlZi5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZX0sZm9jdXNBbmRTY3JvbGxSZWY6e2FwcGx5OiEhYSYmKCEhbyhudWxsPT10P3ZvaWQgMDp0LnNjcm9sbGFibGVTZWdtZW50cyl8fGUuZm9jdXNBbmRTY3JvbGxSZWYuYXBwbHkpLG9ubHlIYXNoQ2hhbmdlOiEhdC5oYXNoRnJhZ21lbnQmJmUuY2Fub25pY2FsVXJsLnNwbGl0KCIjIiwxKVswXT09PShudWxsPT0obj10LmNhbm9uaWNhbFVybCk/dm9pZCAwOm4uc3BsaXQoIiMiLDEpWzBdKSxoYXNoRnJhZ21lbnQ6YT90Lmhhc2hGcmFnbWVudCYmIiIhPT10Lmhhc2hGcmFnbWVudD9kZWNvZGVVUklDb21wb25lbnQodC5oYXNoRnJhZ21lbnQuc2xpY2UoMSkpOmUuZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50Om51bGwsc2VnbWVudFBhdGhzOmE/bnVsbCE9KGw9bnVsbD09dD92b2lkIDA6dC5zY3JvbGxhYmxlU2VnbWVudHMpP2w6ZS5mb2N1c0FuZFNjcm9sbFJlZi5zZWdtZW50UGF0aHM6W119LGNhY2hlOnQuY2FjaGU/dC5jYWNoZTplLmNhY2hlLHByZWZldGNoQ2FjaGU6dC5wcmVmZXRjaENhY2hlP3QucHJlZmV0Y2hDYWNoZTplLnByZWZldGNoQ2FjaGUsdHJlZTpvKHQucGF0Y2hlZFRyZWUpP3QucGF0Y2hlZFRyZWU6ZS50cmVlLG5leHRVcmw6aX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNzgzMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGFuZGxlU2VnbWVudE1pc21hdGNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDU5NjcpO2Z1bmN0aW9uIG8oZSx0LG4pe3JldHVybigwLHIuaGFuZGxlRXh0ZXJuYWxVcmwpKGUse30sZS5jYW5vbmljYWxVcmwsITApfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDcwNTg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQsbixvKXtsZXQgdT1vLmxlbmd0aDw9MixbbCxhXT1vLGk9KDAsci5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoYSksYz1uLnBhcmFsbGVsUm91dGVzLmdldChsKTtpZighYylyZXR1cm47bGV0IHM9dC5wYXJhbGxlbFJvdXRlcy5nZXQobCk7aWYocyYmcyE9PWN8fChzPW5ldyBNYXAoYyksdC5wYXJhbGxlbFJvdXRlcy5zZXQobCxzKSksdSl7cy5kZWxldGUoaSk7cmV0dXJufWxldCBmPWMuZ2V0KGkpLGQ9cy5nZXQoaSk7ZCYmZiYmKGQ9PT1mJiYoZD17bGF6eURhdGE6ZC5sYXp5RGF0YSxyc2M6ZC5yc2MscHJlZmV0Y2hSc2M6ZC5wcmVmZXRjaFJzYyxoZWFkOmQuaGVhZCxwcmVmZXRjaEhlYWQ6ZC5wcmVmZXRjaEhlYWQscGFyYWxsZWxSb3V0ZXM6bmV3IE1hcChkLnBhcmFsbGVsUm91dGVzKSxsYXp5RGF0YVJlc29sdmVkOmQubGF6eURhdGFSZXNvbHZlZH0scy5zZXQoaSxkKSksZShkLGYsby5zbGljZSgyKSkpfX19KTtsZXQgcj1uKDg1MDUpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDQzNzc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oODUwNSk7ZnVuY3Rpb24gbyhlLHQsbil7Zm9yKGxldCBvIGluIG5bMV0pe2xldCB1PW5bMV1bb11bMF0sbD0oMCxyLmNyZWF0ZVJvdXRlckNhY2hlS2V5KSh1KSxhPXQucGFyYWxsZWxSb3V0ZXMuZ2V0KG8pO2lmKGEpe2xldCB0PW5ldyBNYXAoYSk7dC5kZWxldGUobCksZS5wYXJhbGxlbFJvdXRlcy5zZXQobyx0KX19fSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDMyMzc6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQsbil7bGV0IHI9dFswXSxvPW5bMF07aWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShvKSl7aWYoclswXSE9PW9bMF18fHJbMl0hPT1vWzJdKXJldHVybiEwfWVsc2UgaWYociE9PW8pcmV0dXJuITA7aWYodFs0XSlyZXR1cm4hbls0XTtpZihuWzRdKXJldHVybiEwO2xldCB1PU9iamVjdC52YWx1ZXModFsxXSlbMF0sbD1PYmplY3QudmFsdWVzKG5bMV0pWzBdO3JldHVybiF1fHwhbHx8ZSh1LGwpfX19KSwoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw2MTE4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHthYm9ydFRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gY30sbGlzdGVuRm9yRHluYW1pY1JlcXVlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLGEsYyxzKXtsZXQgZj1uWzFdLGQ9YVsxXSxwPWNbMV0saD10LnBhcmFsbGVsUm91dGVzLHk9bmV3IE1hcChoKSxfPXt9LHY9bnVsbDtmb3IobGV0IHQgaW4gZCl7bGV0IG47bGV0IGE9ZFt0XSxjPWZbdF0sYj1oLmdldCh0KSxnPXBbdF0sbT1hWzBdLFI9KDAsdS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkobSksUD12b2lkIDAhPT1jP2NbMF06dm9pZCAwLGo9dm9pZCAwIT09Yj9iLmdldChSKTp2b2lkIDA7aWYobnVsbCE9PShuPW09PT1yLlBBR0VfU0VHTUVOVF9LRVk/bChhLHZvaWQgMCE9PWc/ZzpudWxsLHMpOm09PT1yLkRFRkFVTFRfU0VHTUVOVF9LRVk/dm9pZCAwIT09Yz97cm91dGU6Yyxub2RlOm51bGwsY2hpbGRyZW46bnVsbH06bChhLHZvaWQgMCE9PWc/ZzpudWxsLHMpOnZvaWQgMCE9PVAmJigwLG8ubWF0Y2hTZWdtZW50KShtLFApJiZ2b2lkIDAhPT1qJiZ2b2lkIDAhPT1jP251bGwhPWc/ZShqLGMsYSxnLHMpOmZ1bmN0aW9uKGUpe2xldCB0PWkoZSxudWxsLG51bGwpO3JldHVybntyb3V0ZTplLG5vZGU6dCxjaGlsZHJlbjpudWxsfX0oYSk6bChhLHZvaWQgMCE9PWc/ZzpudWxsLHMpKSl7bnVsbD09PXYmJih2PW5ldyBNYXApLHYuc2V0KHQsbik7bGV0IGU9bi5ub2RlO2lmKG51bGwhPT1lKXtsZXQgbj1uZXcgTWFwKGIpO24uc2V0KFIsZSkseS5zZXQodCxuKX1fW3RdPW4ucm91dGV9ZWxzZSBfW3RdPWF9aWYobnVsbD09PXYpcmV0dXJuIG51bGw7bGV0IGI9e2xhenlEYXRhOm51bGwscnNjOnQucnNjLHByZWZldGNoUnNjOnQucHJlZmV0Y2hSc2MsaGVhZDp0LmhlYWQscHJlZmV0Y2hIZWFkOnQucHJlZmV0Y2hIZWFkLGxvYWRpbmc6dC5sb2FkaW5nLHBhcmFsbGVsUm91dGVzOnksbGF6eURhdGFSZXNvbHZlZDohMX07cmV0dXJue3JvdXRlOmZ1bmN0aW9uKGUsdCl7bGV0IG49W2VbMF0sdF07cmV0dXJuIDIgaW4gZSYmKG5bMl09ZVsyXSksMyBpbiBlJiYoblszXT1lWzNdKSw0IGluIGUmJihuWzRdPWVbNF0pLG59KGEsXyksbm9kZTpiLGNoaWxkcmVuOnZ9fX0sdXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtsZXQgcj1uWzFdLG89dC5wYXJhbGxlbFJvdXRlcyxsPW5ldyBNYXAobyk7Zm9yKGxldCB0IGluIHIpe2xldCBuPXJbdF0sYT1uWzBdLGk9KDAsdS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoYSksYz1vLmdldCh0KTtpZih2b2lkIDAhPT1jKXtsZXQgcj1jLmdldChpKTtpZih2b2lkIDAhPT1yKXtsZXQgbz1lKHIsbiksdT1uZXcgTWFwKGMpO3Uuc2V0KGksbyksbC5zZXQodCx1KX19fWxldCBhPXQucnNjLGk9ZChhKSYmInBlbmRpbmciPT09YS5zdGF0dXM7cmV0dXJue2xhenlEYXRhOm51bGwscnNjOmEsaGVhZDp0LmhlYWQscHJlZmV0Y2hIZWFkOmk/dC5wcmVmZXRjaEhlYWQ6bnVsbCxwcmVmZXRjaFJzYzppP3QucHJlZmV0Y2hSc2M6bnVsbCxsb2FkaW5nOmk/dC5sb2FkaW5nOm51bGwscGFyYWxsZWxSb3V0ZXM6bCxsYXp5RGF0YVJlc29sdmVkOiExfX19fSk7bGV0IHI9big0NTQxKSxvPW4oNjAxNSksdT1uKDg1MDUpO2Z1bmN0aW9uIGwoZSx0LG4pe2xldCByPWkoZSx0LG4pO3JldHVybntyb3V0ZTplLG5vZGU6cixjaGlsZHJlbjpudWxsfX1mdW5jdGlvbiBhKGUsdCl7dC50aGVuKHQ9Pntmb3IobGV0IG4gb2YgdFswXSl7bGV0IHQ9bi5zbGljZSgwLC0zKSxyPW5bbi5sZW5ndGgtM10sbD1uW24ubGVuZ3RoLTJdLGE9bltuLmxlbmd0aC0xXTsic3RyaW5nIiE9dHlwZW9mIHQmJmZ1bmN0aW9uKGUsdCxuLHIsbCl7bGV0IGE9ZTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrPTIpe2xldCBuPXRbZV0scj10W2UrMV0sdT1hLmNoaWxkcmVuO2lmKG51bGwhPT11KXtsZXQgZT11LmdldChuKTtpZih2b2lkIDAhPT1lKXtsZXQgdD1lLnJvdXRlWzBdO2lmKCgwLG8ubWF0Y2hTZWdtZW50KShyLHQpKXthPWU7Y29udGludWV9fX1yZXR1cm59IWZ1bmN0aW9uIGUodCxuLHIsbCl7bGV0IGE9dC5jaGlsZHJlbixpPXQubm9kZTtpZihudWxsPT09YSl7bnVsbCE9PWkmJihmdW5jdGlvbiBlKHQsbixyLGwsYSl7bGV0IGk9blsxXSxjPXJbMV0sZj1sWzFdLHA9dC5wYXJhbGxlbFJvdXRlcztmb3IobGV0IHQgaW4gaSl7bGV0IG49aVt0XSxyPWNbdF0sbD1mW3RdLGQ9cC5nZXQodCksaD1uWzBdLHk9KDAsdS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoaCksXz12b2lkIDAhPT1kP2QuZ2V0KHkpOnZvaWQgMDt2b2lkIDAhPT1fJiYodm9pZCAwIT09ciYmKDAsby5tYXRjaFNlZ21lbnQpKGgsclswXSkmJm51bGwhPWw/ZShfLG4scixsLGEpOnMobixfLG51bGwpKX1sZXQgaD10LnJzYyx5PWxbMl07bnVsbD09PWg/dC5yc2M9eTpkKGgpJiZoLnJlc29sdmUoeSk7bGV0IF89dC5oZWFkO2QoXykmJl8ucmVzb2x2ZShhKX0oaSx0LnJvdXRlLG4scixsKSx0Lm5vZGU9bnVsbCk7cmV0dXJufWxldCBjPW5bMV0sZj1yWzFdO2ZvcihsZXQgdCBpbiBuKXtsZXQgbj1jW3RdLHI9Zlt0XSx1PWEuZ2V0KHQpO2lmKHZvaWQgMCE9PXUpe2xldCB0PXUucm91dGVbMF07aWYoKDAsby5tYXRjaFNlZ21lbnQpKG5bMF0sdCkmJm51bGwhPXIpcmV0dXJuIGUodSxuLHIsbCl9fX0oYSxuLHIsbCl9KGUsdCxyLGwsYSl9YyhlLG51bGwpfSx0PT57YyhlLHQpfSl9ZnVuY3Rpb24gaShlLHQsbil7bGV0IHI9ZVsxXSxvPW51bGwhPT10P3RbMV06bnVsbCxsPW5ldyBNYXA7Zm9yKGxldCBlIGluIHIpe2xldCB0PXJbZV0sYT1udWxsIT09bz9vW2VdOm51bGwsYz10WzBdLHM9KDAsdS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoYyksZj1pKHQsdm9pZCAwPT09YT9udWxsOmEsbiksZD1uZXcgTWFwO2Quc2V0KHMsZiksbC5zZXQoZSxkKX1sZXQgYT0wPT09bC5zaXplLGM9bnVsbCE9PXQ/dFsyXTpudWxsLHM9bnVsbCE9PXQ/dFszXTpudWxsO3JldHVybntsYXp5RGF0YTpudWxsLHBhcmFsbGVsUm91dGVzOmwscHJlZmV0Y2hSc2M6dm9pZCAwIT09Yz9jOm51bGwscHJlZmV0Y2hIZWFkOmE/bjpudWxsLGxvYWRpbmc6dm9pZCAwIT09cz9zOm51bGwscnNjOnAoKSxoZWFkOmE/cCgpOm51bGwsbGF6eURhdGFSZXNvbHZlZDohMX19ZnVuY3Rpb24gYyhlLHQpe2xldCBuPWUubm9kZTtpZihudWxsPT09bilyZXR1cm47bGV0IHI9ZS5jaGlsZHJlbjtpZihudWxsPT09cilzKGUucm91dGUsbix0KTtlbHNlIGZvcihsZXQgZSBvZiByLnZhbHVlcygpKWMoZSx0KTtlLm5vZGU9bnVsbH1mdW5jdGlvbiBzKGUsdCxuKXtsZXQgcj1lWzFdLG89dC5wYXJhbGxlbFJvdXRlcztmb3IobGV0IGUgaW4gcil7bGV0IHQ9cltlXSxsPW8uZ2V0KGUpO2lmKHZvaWQgMD09PWwpY29udGludWU7bGV0IGE9dFswXSxpPSgwLHUuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKGEpLGM9bC5nZXQoaSk7dm9pZCAwIT09YyYmcyh0LGMsbil9bGV0IGw9dC5yc2M7ZChsKSYmKG51bGw9PT1uP2wucmVzb2x2ZShudWxsKTpsLnJlamVjdChuKSk7bGV0IGE9dC5oZWFkO2QoYSkmJmEucmVzb2x2ZShudWxsKX1sZXQgZj1TeW1ib2woKTtmdW5jdGlvbiBkKGUpe3JldHVybiBlJiZlLnRhZz09PWZ9ZnVuY3Rpb24gcCgpe2xldCBlLHQ7bGV0IG49bmV3IFByb21pc2UoKG4scik9PntlPW4sdD1yfSk7cmV0dXJuIG4uc3RhdHVzPSJwZW5kaW5nIixuLnJlc29sdmU9dD0+eyJwZW5kaW5nIj09PW4uc3RhdHVzJiYobi5zdGF0dXM9ImZ1bGZpbGxlZCIsbi52YWx1ZT10LGUodCkpfSxuLnJlamVjdD1lPT57InBlbmRpbmciPT09bi5zdGF0dXMmJihuLnN0YXR1cz0icmVqZWN0ZWQiLG4ucmVhc29uPWUsdChlKSl9LG4udGFnPWYsbn0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwzMDU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse2NyZWF0ZVByZWZldGNoQ2FjaGVFbnRyeUZvckluaXRpYWxMb2FkOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHBydW5lUHJlZmV0Y2hDYWNoZTpmdW5jdGlvbigpe3JldHVybiBmfX0pO2xldCByPW4oMzQ1Niksbz1uKDQ4NDgpLHU9big0NjczKSxsPW4oNDgxOSk7ZnVuY3Rpb24gYShlLHQpe2xldCBuPSgwLHIuY3JlYXRlSHJlZkZyb21VcmwpKGUsITEpO3JldHVybiB0P3QrIiUiK246bn1mdW5jdGlvbiBpKGUpe2xldCB0LHt1cmw6bixuZXh0VXJsOnIsdHJlZTpvLGJ1aWxkSWQ6bCxwcmVmZXRjaENhY2hlOmksa2luZDpjfT1lLGY9YShuLHIpLGQ9aS5nZXQoZik7aWYoZCl0PWQ7ZWxzZXtsZXQgZT1hKG4pLHI9aS5nZXQoZSk7ciYmKHQ9cil9cmV0dXJuIHQ/KHQuc3RhdHVzPWgodCksdC5raW5kIT09dS5QcmVmZXRjaEtpbmQuRlVMTCYmYz09PXUuUHJlZmV0Y2hLaW5kLkZVTEwpP3Moe3RyZWU6byx1cmw6bixidWlsZElkOmwsbmV4dFVybDpyLHByZWZldGNoQ2FjaGU6aSxraW5kOm51bGwhPWM/Yzp1LlByZWZldGNoS2luZC5URU1QT1JBUll9KTooYyYmdC5raW5kPT09dS5QcmVmZXRjaEtpbmQuVEVNUE9SQVJZJiYodC5raW5kPWMpLHQpOnMoe3RyZWU6byx1cmw6bixidWlsZElkOmwsbmV4dFVybDpyLHByZWZldGNoQ2FjaGU6aSxraW5kOmN8fHUuUHJlZmV0Y2hLaW5kLlRFTVBPUkFSWX0pfWZ1bmN0aW9uIGMoZSl7bGV0e25leHRVcmw6dCx0cmVlOm4scHJlZmV0Y2hDYWNoZTpyLHVybDpvLGtpbmQ6bCxkYXRhOml9PWUsWywsLGNdPWkscz1jP2Eobyx0KTphKG8pLGY9e3RyZWVBdFRpbWVPZlByZWZldGNoOm4sZGF0YTpQcm9taXNlLnJlc29sdmUoaSksa2luZDpsLHByZWZldGNoVGltZTpEYXRlLm5vdygpLGxhc3RVc2VkVGltZTpEYXRlLm5vdygpLGtleTpzLHN0YXR1czp1LlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5mcmVzaH07cmV0dXJuIHIuc2V0KHMsZiksZn1mdW5jdGlvbiBzKGUpe2xldHt1cmw6dCxraW5kOm4sdHJlZTpyLG5leHRVcmw6aSxidWlsZElkOmMscHJlZmV0Y2hDYWNoZTpzfT1lLGY9YSh0KSxkPWwucHJlZmV0Y2hRdWV1ZS5lbnF1ZXVlKCgpPT4oMCxvLmZldGNoU2VydmVyUmVzcG9uc2UpKHQscixpLGMsbikudGhlbihlPT57bGV0WywsLG5dPWU7cmV0dXJuIG4mJmZ1bmN0aW9uKGUpe2xldHt1cmw6dCxuZXh0VXJsOm4scHJlZmV0Y2hDYWNoZTpyfT1lLG89YSh0KSx1PXIuZ2V0KG8pO2lmKCF1KXJldHVybjtsZXQgbD1hKHQsbik7ci5zZXQobCx1KSxyLmRlbGV0ZShvKX0oe3VybDp0LG5leHRVcmw6aSxwcmVmZXRjaENhY2hlOnN9KSxlfSkpLHA9e3RyZWVBdFRpbWVPZlByZWZldGNoOnIsZGF0YTpkLGtpbmQ6bixwcmVmZXRjaFRpbWU6RGF0ZS5ub3coKSxsYXN0VXNlZFRpbWU6bnVsbCxrZXk6ZixzdGF0dXM6dS5QcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuZnJlc2h9O3JldHVybiBzLnNldChmLHApLHB9ZnVuY3Rpb24gZihlKXtmb3IobGV0W3Qsbl1vZiBlKWgobik9PT11LlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5leHBpcmVkJiZlLmRlbGV0ZSh0KX1sZXQgZD0xZTMqTnVtYmVyKCIzMCIpLHA9MWUzKk51bWJlcigiMzAwIik7ZnVuY3Rpb24gaChlKXtsZXR7a2luZDp0LHByZWZldGNoVGltZTpuLGxhc3RVc2VkVGltZTpyfT1lO3JldHVybiBEYXRlLm5vdygpPChudWxsIT1yP3I6bikrZD9yP3UuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnJldXNhYmxlOnUuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmZyZXNoOiJhdXRvIj09PXQmJkRhdGUubm93KCk8bitwP3UuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnN0YWxlOiJmdWxsIj09PXQmJkRhdGUubm93KCk8bitwP3UuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnJldXNhYmxlOnUuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmV4cGlyZWR9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNDUyOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZmFzdFJlZnJlc2hSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KSxuKDQ4NDgpLG4oMzQ1NiksbigxOTM1KSxuKDMyMzcpLG4oNTk2Nyksbig0NTEwKSxuKDIzNTYpLG4oMjg0Niksbig3ODMxKSxuKDgwNzcpO2xldCByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9OygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDkzMjA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImZpbmRIZWFkSW5DYWNoZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7bGV0IHI9big4NTA1KTtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLG8pe2lmKDA9PT1PYmplY3Qua2V5cyhuKS5sZW5ndGgpcmV0dXJuW3Qsb107Zm9yKGxldCB1IGluIG4pe2xldFtsLGFdPW5bdV0saT10LnBhcmFsbGVsUm91dGVzLmdldCh1KTtpZighaSljb250aW51ZTtsZXQgYz0oMCxyLmNyZWF0ZVJvdXRlckNhY2hlS2V5KShsKSxzPWkuZ2V0KGMpO2lmKCFzKWNvbnRpbnVlO2xldCBmPWUocyxhLG8rIi8iK2MpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9KGUsdCwiIil9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMzE3MTpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2VbMV06ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldFNlZ21lbnRWYWx1ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59fSksKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sODA3NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0KXtsZXRbbixvXT10O2lmKEFycmF5LmlzQXJyYXkobikmJigiZGkiPT09blsyXXx8ImNpIj09PW5bMl0pfHwic3RyaW5nIj09dHlwZW9mIG4mJigwLHIuaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgpKG4pKXJldHVybiEwO2lmKG8pe2ZvcihsZXQgdCBpbiBvKWlmKGUob1t0XSkpcmV0dXJuITB9cmV0dXJuITF9fX0pO2xldCByPW4oMTE4Mik7KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sNTk2NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7aGFuZGxlRXh0ZXJuYWxVcmw6ZnVuY3Rpb24oKXtyZXR1cm4gX30sbmF2aWdhdGVSZWR1Y2VyOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9fSksbig0ODQ4KTtsZXQgcj1uKDM0NTYpLG89big3MDU4KSx1PW4oMTkzNSksbD1uKDM3MjgpLGE9bigzMjM3KSxpPW4oNDY3MyksYz1uKDQ1MTApLHM9bigyMzU2KSxmPW4oNDgxOSksZD1uKDI4NDYpLHA9big0NTQxKTtuKDYxMTgpO2xldCBoPW4oMzA1KSx5PW4oNTU1Nik7ZnVuY3Rpb24gXyhlLHQsbixyKXtyZXR1cm4gdC5tcGFOYXZpZ2F0aW9uPSEwLHQuY2Fub25pY2FsVXJsPW4sdC5wZW5kaW5nUHVzaD1yLHQuc2Nyb2xsYWJsZVNlZ21lbnRzPXZvaWQgMCwoMCxjLmhhbmRsZU11dGFibGUpKGUsdCl9ZnVuY3Rpb24gdihlKXtsZXQgdD1bXSxbbixyXT1lO2lmKDA9PT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpcmV0dXJuW1tuXV07Zm9yKGxldFtlLG9db2YgT2JqZWN0LmVudHJpZXMocikpZm9yKGxldCByIG9mIHYobykpIiI9PT1uP3QucHVzaChbZSwuLi5yXSk6dC5wdXNoKFtuLGUsLi4ucl0pO3JldHVybiB0fWxldCBiPWZ1bmN0aW9uKGUsdCl7bGV0e3VybDpuLGlzRXh0ZXJuYWxVcmw6YixuYXZpZ2F0ZVR5cGU6ZyxzaG91bGRTY3JvbGw6bX09dCxSPXt9LHtoYXNoOlB9PW4saj0oMCxyLmNyZWF0ZUhyZWZGcm9tVXJsKShuKSxPPSJwdXNoIj09PWc7aWYoKDAsaC5wcnVuZVByZWZldGNoQ2FjaGUpKGUucHJlZmV0Y2hDYWNoZSksUi5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZT0hMSxiKXJldHVybiBfKGUsUixuLnRvU3RyaW5nKCksTyk7bGV0IEU9KDAsaC5nZXRPckNyZWF0ZVByZWZldGNoQ2FjaGVFbnRyeSkoe3VybDpuLG5leHRVcmw6ZS5uZXh0VXJsLHRyZWU6ZS50cmVlLGJ1aWxkSWQ6ZS5idWlsZElkLHByZWZldGNoQ2FjaGU6ZS5wcmVmZXRjaENhY2hlfSkse3RyZWVBdFRpbWVPZlByZWZldGNoOlMsZGF0YTp3fT1FO3JldHVybiBmLnByZWZldGNoUXVldWUuYnVtcCh3KSx3LnRoZW4odD0+e2xldFtuLGZdPXQsaD0hMTtpZihFLmxhc3RVc2VkVGltZXx8KEUubGFzdFVzZWRUaW1lPURhdGUubm93KCksaD0hMCksInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBfKGUsUixuLE8pO2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX25leHQtcGFnZS1yZWRpcmVjdCIpKXJldHVybiBfKGUsUixqLE8pO2xldCBiPWUudHJlZSxnPWUuY2FjaGUsdz1bXTtmb3IobGV0IHQgb2Ygbil7bGV0IG49dC5zbGljZSgwLC00KSxyPXQuc2xpY2UoLTMpWzBdLGM9WyIiLC4uLm5dLGY9KDAsdS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUpKGMsYixyLGopO2lmKG51bGw9PT1mJiYoZj0oMCx1LmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSkoYyxTLHIsaikpLG51bGwhPT1mKXtpZigoMCxhLmlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCkoYixmKSlyZXR1cm4gXyhlLFIsaixPKTtsZXQgdT0oMCxkLmNyZWF0ZUVtcHR5Q2FjaGVOb2RlKSgpLG09ITE7Zm9yKGxldCBlIG9mKEUuc3RhdHVzIT09aS5QcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuc3RhbGV8fGg/bT0oMCxzLmFwcGx5RmxpZ2h0RGF0YSkoZyx1LHQsRSk6KG09ZnVuY3Rpb24oZSx0LG4scil7bGV0IG89ITE7Zm9yKGxldCB1IG9mKGUucnNjPXQucnNjLGUucHJlZmV0Y2hSc2M9dC5wcmVmZXRjaFJzYyxlLmxvYWRpbmc9dC5sb2FkaW5nLGUucGFyYWxsZWxSb3V0ZXM9bmV3IE1hcCh0LnBhcmFsbGVsUm91dGVzKSx2KHIpLm1hcChlPT5bLi4ubiwuLi5lXSkpKSgwLHkuY2xlYXJDYWNoZU5vZGVEYXRhRm9yU2VnbWVudFBhdGgpKGUsdCx1KSxvPSEwO3JldHVybiBvfSh1LGcsbixyKSxFLmxhc3RVc2VkVGltZT1EYXRlLm5vdygpKSwoMCxsLnNob3VsZEhhcmROYXZpZ2F0ZSkoYyxiKT8odS5yc2M9Zy5yc2MsdS5wcmVmZXRjaFJzYz1nLnByZWZldGNoUnNjLCgwLG8uaW52YWxpZGF0ZUNhY2hlQmVsb3dGbGlnaHRTZWdtZW50UGF0aCkodSxnLG4pLFIuY2FjaGU9dSk6bSYmKFIuY2FjaGU9dSxnPXUpLGI9Zix2KHIpKSl7bGV0IHQ9Wy4uLm4sLi4uZV07dFt0Lmxlbmd0aC0xXSE9PXAuREVGQVVMVF9TRUdNRU5UX0tFWSYmdy5wdXNoKHQpfX19cmV0dXJuIFIucGF0Y2hlZFRyZWU9YixSLmNhbm9uaWNhbFVybD1mPygwLHIuY3JlYXRlSHJlZkZyb21VcmwpKGYpOmosUi5wZW5kaW5nUHVzaD1PLFIuc2Nyb2xsYWJsZVNlZ21lbnRzPXcsUi5oYXNoRnJhZ21lbnQ9UCxSLnNob3VsZFNjcm9sbD1tLCgwLGMuaGFuZGxlTXV0YWJsZSkoZSxSKX0sKCk9PmUpfTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw0ODE5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtwcmVmZXRjaFF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHByZWZldGNoUmVkdWNlcjpmdW5jdGlvbigpe3JldHVybiBhfX0pO2xldCByPW4oNjg2Niksbz1uKDk3NDQpLHU9bigzMDUpLGw9bmV3IG8uUHJvbWlzZVF1ZXVlKDUpO2Z1bmN0aW9uIGEoZSx0KXsoMCx1LnBydW5lUHJlZmV0Y2hDYWNoZSkoZS5wcmVmZXRjaENhY2hlKTtsZXR7dXJsOm59PXQ7cmV0dXJuIG4uc2VhcmNoUGFyYW1zLmRlbGV0ZShyLk5FWFRfUlNDX1VOSU9OX1FVRVJZKSwoMCx1LmdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5KSh7dXJsOm4sbmV4dFVybDplLm5leHRVcmwscHJlZmV0Y2hDYWNoZTplLnByZWZldGNoQ2FjaGUsa2luZDp0LmtpbmQsdHJlZTplLnRyZWUsYnVpbGRJZDplLmJ1aWxkSWR9KSxlfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDk2MDE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlZnJlc2hSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH19KTtsZXQgcj1uKDQ4NDgpLG89bigzNDU2KSx1PW4oMTkzNSksbD1uKDMyMzcpLGE9big1OTY3KSxpPW4oNDUxMCksYz1uKDc0MjApLHM9bigyODQ2KSxmPW4oNzgzMSksZD1uKDgwNzcpLHA9bigyMzIpO2Z1bmN0aW9uIGgoZSx0KXtsZXR7b3JpZ2luOm59PXQsaD17fSx5PWUuY2Fub25pY2FsVXJsLF89ZS50cmVlO2gucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU9ITE7bGV0IHY9KDAscy5jcmVhdGVFbXB0eUNhY2hlTm9kZSkoKSxiPSgwLGQuaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlKShlLnRyZWUpO3JldHVybiB2LmxhenlEYXRhPSgwLHIuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkobmV3IFVSTCh5LG4pLFtfWzBdLF9bMV0sX1syXSwicmVmZXRjaCJdLGI/ZS5uZXh0VXJsOm51bGwsZS5idWlsZElkKSx2LmxhenlEYXRhLnRoZW4oYXN5bmMgbj0+e2xldFtyLHNdPW47aWYoInN0cmluZyI9PXR5cGVvZiByKXJldHVybigwLGEuaGFuZGxlRXh0ZXJuYWxVcmwpKGUsaCxyLGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7Zm9yKGxldCBuIG9mKHYubGF6eURhdGE9bnVsbCxyKSl7aWYoMyE9PW4ubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiUkVGUkVTSCBGQUlMRUQiKSxlO2xldFtyXT1uLGk9KDAsdS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUpKFsiIl0sXyxyLGUuY2Fub25pY2FsVXJsKTtpZihudWxsPT09aSlyZXR1cm4oMCxmLmhhbmRsZVNlZ21lbnRNaXNtYXRjaCkoZSx0LHIpO2lmKCgwLGwuaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KShfLGkpKXJldHVybigwLGEuaGFuZGxlRXh0ZXJuYWxVcmwpKGUsaCx5LGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7bGV0IGQ9cz8oMCxvLmNyZWF0ZUhyZWZGcm9tVXJsKShzKTp2b2lkIDA7cyYmKGguY2Fub25pY2FsVXJsPWQpO2xldFtnLG1dPW4uc2xpY2UoLTIpO2lmKG51bGwhPT1nKXtsZXQgZT1nWzJdO3YucnNjPWUsdi5wcmVmZXRjaFJzYz1udWxsLCgwLGMuZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQpKHYsdm9pZCAwLHIsZyxtKSxoLnByZWZldGNoQ2FjaGU9bmV3IE1hcH1hd2FpdCAoMCxwLnJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHMpKHtzdGF0ZTplLHVwZGF0ZWRUcmVlOmksdXBkYXRlZENhY2hlOnYsaW5jbHVkZU5leHRVcmw6YixjYW5vbmljYWxVcmw6aC5jYW5vbmljYWxVcmx8fGUuY2Fub25pY2FsVXJsfSksaC5jYWNoZT12LGgucGF0Y2hlZFRyZWU9aSxoLmNhbm9uaWNhbFVybD15LF89aX1yZXR1cm4oMCxpLmhhbmRsZU11dGFibGUpKGUsaCl9LCgpPT5lKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw3Nzg0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyZXN0b3JlUmVkdWNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSk7bGV0IHI9bigzNDU2KSxvPW4oNTQxMCk7ZnVuY3Rpb24gdShlLHQpe3ZhciBuO2xldHt1cmw6dSx0cmVlOmx9PXQsYT0oMCxyLmNyZWF0ZUhyZWZGcm9tVXJsKSh1KSxpPWx8fGUudHJlZSxjPWUuY2FjaGU7cmV0dXJue2J1aWxkSWQ6ZS5idWlsZElkLGNhbm9uaWNhbFVybDphLHB1c2hSZWY6e3BlbmRpbmdQdXNoOiExLG1wYU5hdmlnYXRpb246ITEscHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6ITB9LGZvY3VzQW5kU2Nyb2xsUmVmOmUuZm9jdXNBbmRTY3JvbGxSZWYsY2FjaGU6YyxwcmVmZXRjaENhY2hlOmUucHJlZmV0Y2hDYWNoZSx0cmVlOmksbmV4dFVybDpudWxsIT0obj0oMCxvLmV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKShpKSk/bjp1LnBhdGhuYW1lfX1uKDYxMTgpLCgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDM3MjI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNlcnZlckFjdGlvblJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtfX0pO2xldCByPW4oMzA3OSksbz1uKDY4NjYpLHU9bigxNjM0KSxsPW4oMzQ1NiksYT1uKDU5NjcpLGk9bigxOTM1KSxjPW4oMzIzNykscz1uKDQ1MTApLGY9big3NDIwKSxkPW4oMjg0NikscD1uKDgwNzcpLGg9big3ODMxKSx5PW4oMjMyKSxfPW4oMTMxMSkse2NyZWF0ZUZyb21GZXRjaDp2LGVuY29kZVJlcGx5OmJ9PW4oNjY3MSk7YXN5bmMgZnVuY3Rpb24gZyhlLHQsbil7bGV0IGwse2FjdGlvbklkOmEsYWN0aW9uQXJnczppfT1uLGM9YXdhaXQgYihpKSxzPWF3YWl0IGZldGNoKCIiLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6e0FjY2VwdDpvLlJTQ19DT05URU5UX1RZUEVfSEVBREVSLFtvLkFDVElPTl06YSxbby5ORVhUX1JPVVRFUl9TVEFURV9UUkVFXTooMCxfLnByZXBhcmVGbGlnaHRSb3V0ZXJTdGF0ZUZvclJlcXVlc3QpKGUudHJlZSksLi4udD97W28uTkVYVF9VUkxdOnR9Ont9fSxib2R5OmN9KSxmPXMuaGVhZGVycy5nZXQoIngtYWN0aW9uLXJlZGlyZWN0Iik7dHJ5e2xldCBlPUpTT04ucGFyc2Uocy5oZWFkZXJzLmdldCgieC1hY3Rpb24tcmV2YWxpZGF0ZWQiKXx8IltbXSwwLDBdIik7bD17cGF0aHM6ZVswXXx8W10sdGFnOiEhZVsxXSxjb29raWU6ZVsyXX19Y2F0Y2goZSl7bD17cGF0aHM6W10sdGFnOiExLGNvb2tpZTohMX19bGV0IGQ9Zj9uZXcgVVJMKCgwLHUuYWRkQmFzZVBhdGgpKGYpLG5ldyBVUkwoZS5jYW5vbmljYWxVcmwsd2luZG93LmxvY2F0aW9uLmhyZWYpKTp2b2lkIDA7aWYocy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik9PT1vLlJTQ19DT05URU5UX1RZUEVfSEVBREVSKXtsZXQgZT1hd2FpdCB2KFByb21pc2UucmVzb2x2ZShzKSx7Y2FsbFNlcnZlcjpyLmNhbGxTZXJ2ZXJ9KTtpZihmKXtsZXRbLHRdPW51bGwhPWU/ZTpbXTtyZXR1cm57YWN0aW9uRmxpZ2h0RGF0YTp0LHJlZGlyZWN0TG9jYXRpb246ZCxyZXZhbGlkYXRlZFBhcnRzOmx9fWxldFt0LFssbl1dPW51bGwhPWU/ZTpbXTtyZXR1cm57YWN0aW9uUmVzdWx0OnQsYWN0aW9uRmxpZ2h0RGF0YTpuLHJlZGlyZWN0TG9jYXRpb246ZCxyZXZhbGlkYXRlZFBhcnRzOmx9fXJldHVybntyZWRpcmVjdExvY2F0aW9uOmQscmV2YWxpZGF0ZWRQYXJ0czpsfX1mdW5jdGlvbiBtKGUsdCl7bGV0e3Jlc29sdmU6bixyZWplY3Q6cn09dCxvPXt9LHU9ZS5jYW5vbmljYWxVcmwsXz1lLnRyZWU7by5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZT0hMTtsZXQgdj1lLm5leHRVcmwmJigwLHAuaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlKShlLnRyZWUpP2UubmV4dFVybDpudWxsO3JldHVybiBvLmluRmxpZ2h0U2VydmVyQWN0aW9uPWcoZSx2LHQpLG8uaW5GbGlnaHRTZXJ2ZXJBY3Rpb24udGhlbihhc3luYyByPT57bGV0e2FjdGlvblJlc3VsdDpwLGFjdGlvbkZsaWdodERhdGE6YixyZWRpcmVjdExvY2F0aW9uOmd9PXI7aWYoZyYmKGUucHVzaFJlZi5wZW5kaW5nUHVzaD0hMCxvLnBlbmRpbmdQdXNoPSEwKSwhYilyZXR1cm4obihwKSxnKT8oMCxhLmhhbmRsZUV4dGVybmFsVXJsKShlLG8sZy5ocmVmLGUucHVzaFJlZi5wZW5kaW5nUHVzaCk6ZTtpZigic3RyaW5nIj09dHlwZW9mIGIpcmV0dXJuKDAsYS5oYW5kbGVFeHRlcm5hbFVybCkoZSxvLGIsZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtpZihvLmluRmxpZ2h0U2VydmVyQWN0aW9uPW51bGwsZyl7bGV0IGU9KDAsbC5jcmVhdGVIcmVmRnJvbVVybCkoZywhMSk7by5jYW5vbmljYWxVcmw9ZX1mb3IobGV0IG4gb2YgYil7aWYoMyE9PW4ubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiU0VSVkVSIEFDVElPTiBBUFBMWSBGQUlMRUQiKSxlO2xldFtyXT1uLHM9KDAsaS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUpKFsiIl0sXyxyLGc/KDAsbC5jcmVhdGVIcmVmRnJvbVVybCkoZyk6ZS5jYW5vbmljYWxVcmwpO2lmKG51bGw9PT1zKXJldHVybigwLGguaGFuZGxlU2VnbWVudE1pc21hdGNoKShlLHQscik7aWYoKDAsYy5pc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQpKF8scykpcmV0dXJuKDAsYS5oYW5kbGVFeHRlcm5hbFVybCkoZSxvLHUsZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtsZXRbcCxiXT1uLnNsaWNlKC0yKSxtPW51bGwhPT1wP3BbMl06bnVsbDtpZihudWxsIT09bSl7bGV0IHQ9KDAsZC5jcmVhdGVFbXB0eUNhY2hlTm9kZSkoKTt0LnJzYz1tLHQucHJlZmV0Y2hSc2M9bnVsbCwoMCxmLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKSh0LHZvaWQgMCxyLHAsYiksYXdhaXQgKDAseS5yZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzKSh7c3RhdGU6ZSx1cGRhdGVkVHJlZTpzLHVwZGF0ZWRDYWNoZTp0LGluY2x1ZGVOZXh0VXJsOiEhdixjYW5vbmljYWxVcmw6by5jYW5vbmljYWxVcmx8fGUuY2Fub25pY2FsVXJsfSksby5jYWNoZT10LG8ucHJlZmV0Y2hDYWNoZT1uZXcgTWFwfW8ucGF0Y2hlZFRyZWU9cyxfPXN9cmV0dXJuIG4ocCksKDAscy5oYW5kbGVNdXRhYmxlKShlLG8pfSx0PT4ocih0KSxlKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sODQ0ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2VydmVyUGF0Y2hSZWR1Y2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn19KTtsZXQgcj1uKDM0NTYpLG89bigxOTM1KSx1PW4oMzIzNyksbD1uKDU5NjcpLGE9bigyMzU2KSxpPW4oNDUxMCksYz1uKDI4NDYpLHM9big3ODMxKTtmdW5jdGlvbiBmKGUsdCl7bGV0e3NlcnZlclJlc3BvbnNlOm59PXQsW2YsZF09bixwPXt9O2lmKHAucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU9ITEsInN0cmluZyI9PXR5cGVvZiBmKXJldHVybigwLGwuaGFuZGxlRXh0ZXJuYWxVcmwpKGUscCxmLGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7bGV0IGg9ZS50cmVlLHk9ZS5jYWNoZTtmb3IobGV0IG4gb2YgZil7bGV0IGk9bi5zbGljZSgwLC00KSxbZl09bi5zbGljZSgtMywtMiksXz0oMCxvLmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSkoWyIiLC4uLmldLGgsZixlLmNhbm9uaWNhbFVybCk7aWYobnVsbD09PV8pcmV0dXJuKDAscy5oYW5kbGVTZWdtZW50TWlzbWF0Y2gpKGUsdCxmKTtpZigoMCx1LmlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCkoaCxfKSlyZXR1cm4oMCxsLmhhbmRsZUV4dGVybmFsVXJsKShlLHAsZS5jYW5vbmljYWxVcmwsZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtsZXQgdj1kPygwLHIuY3JlYXRlSHJlZkZyb21VcmwpKGQpOnZvaWQgMDt2JiYocC5jYW5vbmljYWxVcmw9dik7bGV0IGI9KDAsYy5jcmVhdGVFbXB0eUNhY2hlTm9kZSkoKTsoMCxhLmFwcGx5RmxpZ2h0RGF0YSkoeSxiLG4pLHAucGF0Y2hlZFRyZWU9XyxwLmNhY2hlPWIseT1iLGg9X31yZXR1cm4oMCxpLmhhbmRsZU11dGFibGUpKGUscCl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMjMyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHthZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtsZXRbcixvLCxsXT10O2ZvcihsZXQgYSBpbiByLmluY2x1ZGVzKHUuUEFHRV9TRUdNRU5UX0tFWSkmJiJyZWZyZXNoIiE9PWwmJih0WzJdPW4sdFszXT0icmVmcmVzaCIpLG8pZShvW2FdLG4pfX0scmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50czpmdW5jdGlvbigpe3JldHVybiBsfX0pO2xldCByPW4oMjM1Niksbz1uKDQ4NDgpLHU9big0NTQxKTthc3luYyBmdW5jdGlvbiBsKGUpe2xldCB0PW5ldyBTZXQ7YXdhaXQgYSh7Li4uZSxyb290VHJlZTplLnVwZGF0ZWRUcmVlLGZldGNoZWRTZWdtZW50czp0fSl9YXN5bmMgZnVuY3Rpb24gYShlKXtsZXR7c3RhdGU6dCx1cGRhdGVkVHJlZTpuLHVwZGF0ZWRDYWNoZTp1LGluY2x1ZGVOZXh0VXJsOmwsZmV0Y2hlZFNlZ21lbnRzOmkscm9vdFRyZWU6Yz1uLGNhbm9uaWNhbFVybDpzfT1lLFssZixkLHBdPW4saD1bXTtpZihkJiZkIT09cyYmInJlZnJlc2giPT09cCYmIWkuaGFzKGQpKXtpLmFkZChkKTtsZXQgZT0oMCxvLmZldGNoU2VydmVyUmVzcG9uc2UpKG5ldyBVUkwoZCxsb2NhdGlvbi5vcmlnaW4pLFtjWzBdLGNbMV0sY1syXSwicmVmZXRjaCJdLGw/dC5uZXh0VXJsOm51bGwsdC5idWlsZElkKS50aGVuKGU9PntsZXQgdD1lWzBdO2lmKCJzdHJpbmciIT10eXBlb2YgdClmb3IobGV0IGUgb2YgdCkoMCxyLmFwcGx5RmxpZ2h0RGF0YSkodSx1LGUpfSk7aC5wdXNoKGUpfWZvcihsZXQgZSBpbiBmKXtsZXQgbj1hKHtzdGF0ZTp0LHVwZGF0ZWRUcmVlOmZbZV0sdXBkYXRlZENhY2hlOnUsaW5jbHVkZU5leHRVcmw6bCxmZXRjaGVkU2VnbWVudHM6aSxyb290VHJlZTpjLGNhbm9uaWNhbFVybDpzfSk7aC5wdXNoKG4pfWF3YWl0IFByb21pc2UuYWxsKGgpfSgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDQ2NzM6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG4scixvLHU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtBQ1RJT05fRkFTVF9SRUZSRVNIOmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LEFDVElPTl9OQVZJR0FURTpmdW5jdGlvbigpe3JldHVybiBhfSxBQ1RJT05fUFJFRkVUQ0g6ZnVuY3Rpb24oKXtyZXR1cm4gc30sQUNUSU9OX1JFRlJFU0g6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sQUNUSU9OX1JFU1RPUkU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sQUNUSU9OX1NFUlZFUl9BQ1RJT046ZnVuY3Rpb24oKXtyZXR1cm4gZH0sQUNUSU9OX1NFUlZFUl9QQVRDSDpmdW5jdGlvbigpe3JldHVybiBjfSxQcmVmZXRjaENhY2hlRW50cnlTdGF0dXM6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sUHJlZmV0Y2hLaW5kOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGlzVGhlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gcH19KTtsZXQgbD0icmVmcmVzaCIsYT0ibmF2aWdhdGUiLGk9InJlc3RvcmUiLGM9InNlcnZlci1wYXRjaCIscz0icHJlZmV0Y2giLGY9ImZhc3QtcmVmcmVzaCIsZD0ic2VydmVyLWFjdGlvbiI7ZnVuY3Rpb24gcChlKXtyZXR1cm4gZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50aGVufShvPW58fChuPXt9KSkuQVVUTz0iYXV0byIsby5GVUxMPSJmdWxsIixvLlRFTVBPUkFSWT0idGVtcG9yYXJ5IiwodT1yfHwocj17fSkpLmZyZXNoPSJmcmVzaCIsdS5yZXVzYWJsZT0icmV1c2FibGUiLHUuZXhwaXJlZD0iZXhwaXJlZCIsdS5zdGFsZT0ic3RhbGUiLCgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDE0NTA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlZHVjZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmfX0pO2xldCByPW4oNDY3Myksbz1uKDU5NjcpLHU9big4NDQ4KSxsPW4oNzc4NCksYT1uKDk2MDEpLGk9big0ODE5KSxjPW4oNDUyOSkscz1uKDM3MjIpLGY9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX06ZnVuY3Rpb24oZSx0KXtzd2l0Y2godC50eXBlKXtjYXNlIHIuQUNUSU9OX05BVklHQVRFOnJldHVybigwLG8ubmF2aWdhdGVSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fU0VSVkVSX1BBVENIOnJldHVybigwLHUuc2VydmVyUGF0Y2hSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fUkVTVE9SRTpyZXR1cm4oMCxsLnJlc3RvcmVSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fUkVGUkVTSDpyZXR1cm4oMCxhLnJlZnJlc2hSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fRkFTVF9SRUZSRVNIOnJldHVybigwLGMuZmFzdFJlZnJlc2hSZWR1Y2VyKShlLHQpO2Nhc2Ugci5BQ1RJT05fUFJFRkVUQ0g6cmV0dXJuKDAsaS5wcmVmZXRjaFJlZHVjZXIpKGUsdCk7Y2FzZSByLkFDVElPTl9TRVJWRVJfQUNUSU9OOnJldHVybigwLHMuc2VydmVyQWN0aW9uUmVkdWNlcikoZSx0KTtkZWZhdWx0OnRocm93IEVycm9yKCJVbmtub3duIGFjdGlvbiIpfX07KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMzcyODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hvdWxkSGFyZE5hdmlnYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4pe2xldFtvLHVdPW4sW2wsYV09dDtyZXR1cm4oMCxyLm1hdGNoU2VnbWVudCkobCxvKT8hKHQubGVuZ3RoPD0yKSYmZSh0LnNsaWNlKDIpLHVbYV0pOiEhQXJyYXkuaXNBcnJheShsKX19fSk7bGV0IHI9big2MDE1KTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw0NTM1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtjcmVhdGVEeW5hbWljYWxseVRyYWNrZWRTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sY3JlYXRlVW50cmFja2VkU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKCl7cmV0dXJuIGx9fSk7bGV0IHI9bigxODQ1KSxvPW4oNjk5OSksdT1uKDY1MCk7ZnVuY3Rpb24gbChlKXtsZXQgdD1yLnN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKTtyZXR1cm4gdCYmdC5mb3JjZVN0YXRpYz97fTplfWZ1bmN0aW9uIGEoZSl7bGV0IHQ9ci5zdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7cmV0dXJuIHQ/dC5mb3JjZVN0YXRpYz97fTp0LmlzU3RhdGljR2VuZXJhdGlvbnx8dC5keW5hbWljU2hvdWxkRXJyb3I/bmV3IFByb3h5KHt9LHtnZXQ6KGUsbixyKT0+KCJzdHJpbmciPT10eXBlb2YgbiYmKDAsby50cmFja0R5bmFtaWNEYXRhQWNjZXNzZWQpKHQsInNlYXJjaFBhcmFtcy4iK24pLHUuUmVmbGVjdEFkYXB0ZXIuZ2V0KGUsbixyKSksaGFzOihlLG4pPT4oInN0cmluZyI9PXR5cGVvZiBuJiYoMCxvLnRyYWNrRHluYW1pY0RhdGFBY2Nlc3NlZCkodCwic2VhcmNoUGFyYW1zLiIrbiksUmVmbGVjdC5oYXMoZSxuKSksb3duS2V5czplPT4oKDAsby50cmFja0R5bmFtaWNEYXRhQWNjZXNzZWQpKHQsInNlYXJjaFBhcmFtcyIpLFJlZmxlY3Qub3duS2V5cyhlKSl9KTplOmV9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMTg0NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZX19KTtsZXQgcj1uKDMwKTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw2ODY0OmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7U3RhdGljR2VuQmFpbG91dEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGlzU3RhdGljR2VuQmFpbG91dEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7bGV0IG49Ik5FWFRfU1RBVElDX0dFTl9CQUlMT1VUIjtjbGFzcyByIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSksdGhpcy5jb2RlPW59fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmImNvZGUiaW4gZSYmZS5jb2RlPT09bn0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw4MTM3OmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidW5yZXNvbHZlZFRoZW5hYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KTtsZXQgbj17dGhlbjooKT0+e319OygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDc3NDQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse3VzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29sczpmdW5jdGlvbigpe3JldHVybiBpfSx1c2VVbndyYXBTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBhfX0pO2xldCByPW4oMzA5OSkuXyhuKDIyNjUpKSxvPW4oNDY3MyksdT1uKDIxMDMpO2Z1bmN0aW9uIGwoZSl7aWYoZSBpbnN0YW5jZW9mIE1hcCl7bGV0IHQ9e307Zm9yKGxldFtuLHJdb2YgZS5lbnRyaWVzKCkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXt0W25dPSJmbigpIjtjb250aW51ZX1pZigib2JqZWN0Ij09dHlwZW9mIHImJm51bGwhPT1yKXtpZihyLiQkdHlwZW9mKXt0W25dPXIuJCR0eXBlb2YudG9TdHJpbmcoKTtjb250aW51ZX1pZihyLl9idW5kbGVyQ29uZmlnKXt0W25dPSJGbGlnaHREYXRhIjtjb250aW51ZX19dFtuXT1sKHIpfXJldHVybiB0fWlmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKXtsZXQgcj1lW25dO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXt0W25dPSJmbigpIjtjb250aW51ZX1pZigib2JqZWN0Ij09dHlwZW9mIHImJm51bGwhPT1yKXtpZihyLiQkdHlwZW9mKXt0W25dPXIuJCR0eXBlb2YudG9TdHJpbmcoKTtjb250aW51ZX1pZihyLmhhc093blByb3BlcnR5KCJfYnVuZGxlckNvbmZpZyIpKXt0W25dPSJGbGlnaHREYXRhIjtjb250aW51ZX19dFtuXT1sKHIpfXJldHVybiB0fXJldHVybiBBcnJheS5pc0FycmF5KGUpP2UubWFwKGwpOmV9ZnVuY3Rpb24gYShlKXtyZXR1cm4oMCxvLmlzVGhlbmFibGUpKGUpPygwLHIudXNlKShlKTplfWxldCBpPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P2Z1bmN0aW9uKGUpe2xldFt0LG5dPXIuZGVmYXVsdC51c2VTdGF0ZShlKSxvPSgwLHIudXNlQ29udGV4dCkodS5BY3Rpb25RdWV1ZUNvbnRleHQpO2lmKCFvKXRocm93IEVycm9yKCJJbnZhcmlhbnQ6IE1pc3NpbmcgQWN0aW9uUXVldWVDb250ZXh0Iik7bGV0IGE9KDAsci51c2VSZWYpKCksaT0oMCxyLnVzZVJlZikoKTtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKCk9PntpZighYS5jdXJyZW50JiYhMSE9PWkuY3VycmVudCl7aWYodm9pZCAwPT09aS5jdXJyZW50JiZ2b2lkIDA9PT13aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyl7aS5jdXJyZW50PSExO3JldHVybn1yZXR1cm4gYS5jdXJyZW50PXdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fLmNvbm5lY3Qoe2luc3RhbmNlSWQ6OGUzLG5hbWU6Im5leHQtcm91dGVyIn0pLGEuY3VycmVudCYmKGEuY3VycmVudC5pbml0KGwoZSkpLG8mJihvLmRldlRvb2xzSW5zdGFuY2U9YS5jdXJyZW50KSksKCk9PnthLmN1cnJlbnQ9dm9pZCAwfX19LFtlLG9dKSxbdCwoMCxyLnVzZUNhbGxiYWNrKSh0PT57by5zdGF0ZXx8KG8uc3RhdGU9ZSksby5kaXNwYXRjaCh0LG4pfSxbbyxlXSksKDAsci51c2VDYWxsYmFjaykoZT0+e2EuY3VycmVudCYmYS5jdXJyZW50LnNlbmQoe3R5cGU6IlJFTkRFUl9TWU5DIn0sbChlKSl9LFtdKV19OmZ1bmN0aW9uKGUpe3JldHVybltlLCgpPT57fSwoKT0+e31dfTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwxMzExOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcmVwYXJlRmxpZ2h0Um91dGVyU3RhdGVGb3JSZXF1ZXN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDQ1NDEpO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gdD9lbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZSkpOmVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShmdW5jdGlvbiBlKHQpe2xldFtuLG8sLHUsbF09dCxhPSJzdHJpbmciPT10eXBlb2YgbiYmbi5zdGFydHNXaXRoKHIuUEFHRV9TRUdNRU5UX0tFWSsiPyIpP3IuUEFHRV9TRUdNRU5UX0tFWTpuLGk9e307Zm9yKGxldFt0LG5db2YgT2JqZWN0LmVudHJpZXMobykpaVt0XT1lKG4pO2xldCBjPVthLGksbnVsbCx1JiYicmVmcmVzaCIhPT11P3U6bnVsbF07cmV0dXJuIHZvaWQgMCE9PWwmJihjWzRdPWwpLGN9KGUpKSl9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sMTI4MzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGFzQmFzZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oNTgwKTtmdW5jdGlvbiBvKGUpe3JldHVybigwLHIucGF0aEhhc1ByZWZpeCkoZSwiIil9KCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlZmF1bHR8fCJvYmplY3QiPT10eXBlb2YgdC5kZWZhdWx0JiZudWxsIT09dC5kZWZhdWx0KSYmdm9pZCAwPT09dC5kZWZhdWx0Ll9fZXNNb2R1bGUmJihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0KX0sODUyMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oNjY3NCksbz1uKDMzODEpLHU9ZT0+e2lmKCFlLnN0YXJ0c1dpdGgoIi8iKSlyZXR1cm4gZTtsZXR7cGF0aG5hbWU6dCxxdWVyeTpuLGhhc2g6dX09KDAsby5wYXJzZVBhdGgpKGUpO3JldHVybiIiKygwLHIucmVtb3ZlVHJhaWxpbmdTbGFzaCkodCkrbit1fTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSwxNDA0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDg5OTMpO2Z1bmN0aW9uIG8oZSl7bGV0IHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcG9ydEVycm9yP3JlcG9ydEVycm9yOmU9Pnt3aW5kb3cuY29uc29sZS5lcnJvcihlKX07KDAsci5pc0JhaWxvdXRUb0NTUkVycm9yKShlKXx8dChlKX0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw1MDc2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlbW92ZUJhc2VQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KSxuKDEyODMpLCgiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDIwMTA6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3ZhciBuPWUubGVuZ3RoO2ZvcihlLnB1c2godCk7MDxuOyl7dmFyIHI9bi0xPj4+MSxvPWVbcl07aWYoMDx1KG8sdCkpZVtyXT10LGVbbl09byxuPXI7ZWxzZSBicmVha319ZnVuY3Rpb24gcihlKXtyZXR1cm4gMD09PWUubGVuZ3RoP251bGw6ZVswXX1mdW5jdGlvbiBvKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgdD1lWzBdLG49ZS5wb3AoKTtpZihuIT09dCl7ZVswXT1uO2Zvcih2YXIgcj0wLG89ZS5sZW5ndGgsbD1vPj4+MTtyPGw7KXt2YXIgYT0yKihyKzEpLTEsaT1lW2FdLGM9YSsxLHM9ZVtjXTtpZigwPnUoaSxuKSljPG8mJjA+dShzLGkpPyhlW3JdPXMsZVtjXT1uLHI9Yyk6KGVbcl09aSxlW2FdPW4scj1hKTtlbHNlIGlmKGM8byYmMD51KHMsbikpZVtyXT1zLGVbY109bixyPWM7ZWxzZSBicmVha319cmV0dXJuIHR9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPWUuc29ydEluZGV4LXQuc29ydEluZGV4O3JldHVybiAwIT09bj9uOmUuaWQtdC5pZH1pZih0LnVuc3RhYmxlX25vdz12b2lkIDAsIm9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIHBlcmZvcm1hbmNlLm5vdyl7dmFyIGwsYT1wZXJmb3JtYW5jZTt0LnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBhLm5vdygpfX1lbHNle3ZhciBpPURhdGUsYz1pLm5vdygpO3QudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGkubm93KCktY319dmFyIHM9W10sZj1bXSxkPTEscD1udWxsLGg9Myx5PSExLF89ITEsdj0hMSxiPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bnVsbCxnPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Om51bGwsbT0idW5kZWZpbmVkIiE9dHlwZW9mIHNldEltbWVkaWF0ZT9zZXRJbW1lZGlhdGU6bnVsbDtmdW5jdGlvbiBSKGUpe2Zvcih2YXIgdD1yKGYpO251bGwhPT10Oyl7aWYobnVsbD09PXQuY2FsbGJhY2spbyhmKTtlbHNlIGlmKHQuc3RhcnRUaW1lPD1lKW8oZiksdC5zb3J0SW5kZXg9dC5leHBpcmF0aW9uVGltZSxuKHMsdCk7ZWxzZSBicmVhazt0PXIoZil9fWZ1bmN0aW9uIFAoZSl7aWYodj0hMSxSKGUpLCFfKXtpZihudWxsIT09cihzKSlfPSEwLHgoKTtlbHNle3ZhciB0PXIoZik7bnVsbCE9PXQmJkEoUCx0LnN0YXJ0VGltZS1lKX19fSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZ2b2lkIDAhPT1uYXZpZ2F0b3Iuc2NoZWR1bGluZyYmdm9pZCAwIT09bmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcmJm5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nLmJpbmQobmF2aWdhdG9yLnNjaGVkdWxpbmcpO3ZhciBqPSExLE89LTEsRT01LFM9LTE7ZnVuY3Rpb24gdygpe3JldHVybiEodC51bnN0YWJsZV9ub3coKS1TPEUpfWZ1bmN0aW9uIE0oKXtpZihqKXt2YXIgZT10LnVuc3RhYmxlX25vdygpO1M9ZTt2YXIgbj0hMDt0cnl7ZTp7Xz0hMSx2JiYodj0hMSxnKE8pLE89LTEpLHk9ITA7dmFyIHU9aDt0cnl7dDp7Zm9yKFIoZSkscD1yKHMpO251bGwhPT1wJiYhKHAuZXhwaXJhdGlvblRpbWU+ZSYmdygpKTspe3ZhciBhPXAuY2FsbGJhY2s7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpe3AuY2FsbGJhY2s9bnVsbCxoPXAucHJpb3JpdHlMZXZlbDt2YXIgaT1hKHAuZXhwaXJhdGlvblRpbWU8PWUpO2lmKGU9dC51bnN0YWJsZV9ub3coKSwiZnVuY3Rpb24iPT10eXBlb2YgaSl7cC5jYWxsYmFjaz1pLFIoZSksbj0hMDticmVhayB0fXA9PT1yKHMpJiZvKHMpLFIoZSl9ZWxzZSBvKHMpO3A9cihzKX1pZihudWxsIT09cCluPSEwO2Vsc2V7dmFyIGM9cihmKTtudWxsIT09YyYmQShQLGMuc3RhcnRUaW1lLWUpLG49ITF9fWJyZWFrIGV9ZmluYWxseXtwPW51bGwsaD11LHk9ITF9bj12b2lkIDB9fWZpbmFsbHl7bj9sKCk6aj0hMX19fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBtKWw9ZnVuY3Rpb24oKXttKE0pfTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwpe3ZhciBUPW5ldyBNZXNzYWdlQ2hhbm5lbCxDPVQucG9ydDI7VC5wb3J0MS5vbm1lc3NhZ2U9TSxsPWZ1bmN0aW9uKCl7Qy5wb3N0TWVzc2FnZShudWxsKX19ZWxzZSBsPWZ1bmN0aW9uKCl7YihNLDApfTtmdW5jdGlvbiB4KCl7anx8KGo9ITAsbCgpKX1mdW5jdGlvbiBBKGUsbil7Tz1iKGZ1bmN0aW9uKCl7ZSh0LnVuc3RhYmxlX25vdygpKX0sbil9dC51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NSx0LnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTEsdC51bnN0YWJsZV9Mb3dQcmlvcml0eT00LHQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9Myx0LnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsLHQudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9Mix0LnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKGUpe2UuY2FsbGJhY2s9bnVsbH0sdC51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe198fHl8fChfPSEwLHgoKSl9LHQudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oZSl7MD5lfHwxMjU8ZT9jb25zb2xlLmVycm9yKCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQiKTpFPTA8ZT9NYXRoLmZsb29yKDFlMy9lKTo1fSx0LnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGh9LHQudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gcihzKX0sdC51bnN0YWJsZV9uZXh0PWZ1bmN0aW9uKGUpe3N3aXRjaChoKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzp2YXIgdD0zO2JyZWFrO2RlZmF1bHQ6dD1ofXZhciBuPWg7aD10O3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7aD1ufX0sdC51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbj1mdW5jdGlvbigpe30sdC51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ9ZnVuY3Rpb24oKXt9LHQudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDplPTN9dmFyIG49aDtoPWU7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtoPW59fSx0LnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24oZSxvLHUpe3ZhciBsPXQudW5zdGFibGVfbm93KCk7c3dpdGNoKHU9Im9iamVjdCI9PXR5cGVvZiB1JiZudWxsIT09dSYmIm51bWJlciI9PXR5cGVvZih1PXUuZGVsYXkpJiYwPHU/bCt1OmwsZSl7Y2FzZSAxOnZhciBhPS0xO2JyZWFrO2Nhc2UgMjphPTI1MDticmVhaztjYXNlIDU6YT0xMDczNzQxODIzO2JyZWFrO2Nhc2UgNDphPTFlNDticmVhaztkZWZhdWx0OmE9NWUzfXJldHVybiBhPXUrYSxlPXtpZDpkKyssY2FsbGJhY2s6byxwcmlvcml0eUxldmVsOmUsc3RhcnRUaW1lOnUsZXhwaXJhdGlvblRpbWU6YSxzb3J0SW5kZXg6LTF9LHU+bD8oZS5zb3J0SW5kZXg9dSxuKGYsZSksbnVsbD09PXIocykmJmU9PT1yKGYpJiYodj8oZyhPKSxPPS0xKTp2PSEwLEEoUCx1LWwpKSk6KGUuc29ydEluZGV4PWEsbihzLGUpLF98fHl8fChfPSEwLHgoKSkpLGV9LHQudW5zdGFibGVfc2hvdWxkWWllbGQ9dyx0LnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD1oO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWg7aD10O3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtoPW59fX19LDE3Njc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigyMDEwKX0sOTM0OmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7Z2V0UGF0aG5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gcn0saXNGdWxsU3RyaW5nVXJsOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHBhcnNlVXJsOmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSk7bGV0IG49Imh0dHA6Ly9uIjtmdW5jdGlvbiByKGUpe3JldHVybiBuZXcgVVJMKGUsbikucGF0aG5hbWV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4vaHR0cHM/OlwvXC8vLnRlc3QoZSl9ZnVuY3Rpb24gdShlKXtsZXQgdDt0cnl7dD1uZXcgVVJMKGUsbil9Y2F0Y2h7fXJldHVybiB0fX0sNjk5OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7UG9zdHBvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sY3JlYXRlUG9zdHBvbmVkQWJvcnRTaWduYWw6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sY3JlYXRlUHJlcmVuZGVyU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sZm9ybWF0RHluYW1pY0FQSUFjY2Vzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIF99LG1hcmtDdXJyZW50U2NvcGVBc0R5bmFtaWM6ZnVuY3Rpb24oKXtyZXR1cm4gc30sdHJhY2tEeW5hbWljRGF0YUFjY2Vzc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHRyYWNrRHluYW1pY0ZldGNoOmZ1bmN0aW9uKCl7cmV0dXJuIHB9LHVzZWREeW5hbWljQVBJczpmdW5jdGlvbigpe3JldHVybiB5fX0pO2xldCBvPShyPW4oMjI2NSkpJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfSx1PW4oNjE3NyksbD1uKDY4NjQpLGE9big5MzQpLGk9ImZ1bmN0aW9uIj09dHlwZW9mIG8uZGVmYXVsdC51bnN0YWJsZV9wb3N0cG9uZTtmdW5jdGlvbiBjKGUpe3JldHVybntpc0RlYnVnU2tlbGV0b246ZSxkeW5hbWljQWNjZXNzZXM6W119fWZ1bmN0aW9uIHMoZSx0KXtsZXQgbj0oMCxhLmdldFBhdGhuYW1lKShlLnVybFBhdGhuYW1lKTtpZighZS5pc1Vuc3RhYmxlQ2FjaGVDYWxsYmFjayl7aWYoZS5keW5hbWljU2hvdWxkRXJyb3IpdGhyb3cgbmV3IGwuU3RhdGljR2VuQmFpbG91dEVycm9yKGBSb3V0ZSAke259IHdpdGggXGBkeW5hbWljID0gImVycm9yIlxgIGNvdWxkbid0IGJlIHJlbmRlcmVkIHN0YXRpY2FsbHkgYmVjYXVzZSBpdCB1c2VkIFxgJHt0fVxgLiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9zdGF0aWMtYW5kLWR5bmFtaWMjZHluYW1pYy1yZW5kZXJpbmdgKTtpZihlLnByZXJlbmRlclN0YXRlKWgoZS5wcmVyZW5kZXJTdGF0ZSx0LG4pO2Vsc2UgaWYoZS5yZXZhbGlkYXRlPTAsZS5pc1N0YXRpY0dlbmVyYXRpb24pe2xldCByPW5ldyB1LkR5bmFtaWNTZXJ2ZXJFcnJvcihgUm91dGUgJHtufSBjb3VsZG4ndCBiZSByZW5kZXJlZCBzdGF0aWNhbGx5IGJlY2F1c2UgaXQgdXNlZCAke3R9LiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2R5bmFtaWMtc2VydmVyLWVycm9yYCk7dGhyb3cgZS5keW5hbWljVXNhZ2VEZXNjcmlwdGlvbj10LGUuZHluYW1pY1VzYWdlU3RhY2s9ci5zdGFjayxyfX19ZnVuY3Rpb24gZihlLHQpe2xldCBuPSgwLGEuZ2V0UGF0aG5hbWUpKGUudXJsUGF0aG5hbWUpO2lmKGUuaXNVbnN0YWJsZUNhY2hlQ2FsbGJhY2spdGhyb3cgRXJyb3IoYFJvdXRlICR7bn0gdXNlZCAiJHt0fSIgaW5zaWRlIGEgZnVuY3Rpb24gY2FjaGVkIHdpdGggInVuc3RhYmxlX2NhY2hlKC4uLikiLiBBY2Nlc3NpbmcgRHluYW1pYyBkYXRhIHNvdXJjZXMgaW5zaWRlIGEgY2FjaGUgc2NvcGUgaXMgbm90IHN1cHBvcnRlZC4gSWYgeW91IG5lZWQgdGhpcyBkYXRhIGluc2lkZSBhIGNhY2hlZCBmdW5jdGlvbiB1c2UgIiR7dH0iIG91dHNpZGUgb2YgdGhlIGNhY2hlZCBmdW5jdGlvbiBhbmQgcGFzcyB0aGUgcmVxdWlyZWQgZHluYW1pYyBkYXRhIGluIGFzIGFuIGFyZ3VtZW50LiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91bnN0YWJsZV9jYWNoZWApO2lmKGUuZHluYW1pY1Nob3VsZEVycm9yKXRocm93IG5ldyBsLlN0YXRpY0dlbkJhaWxvdXRFcnJvcihgUm91dGUgJHtufSB3aXRoIFxgZHluYW1pYyA9ICJlcnJvciJcYCBjb3VsZG4ndCBiZSByZW5kZXJlZCBzdGF0aWNhbGx5IGJlY2F1c2UgaXQgdXNlZCBcYCR7dH1cYC4gU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc3RhdGljLWFuZC1keW5hbWljI2R5bmFtaWMtcmVuZGVyaW5nYCk7aWYoZS5wcmVyZW5kZXJTdGF0ZSloKGUucHJlcmVuZGVyU3RhdGUsdCxuKTtlbHNlIGlmKGUucmV2YWxpZGF0ZT0wLGUuaXNTdGF0aWNHZW5lcmF0aW9uKXtsZXQgcj1uZXcgdS5EeW5hbWljU2VydmVyRXJyb3IoYFJvdXRlICR7bn0gY291bGRuJ3QgYmUgcmVuZGVyZWQgc3RhdGljYWxseSBiZWNhdXNlIGl0IHVzZWQgXGAke3R9XGAuIFNlZSBtb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZHluYW1pYy1zZXJ2ZXItZXJyb3JgKTt0aHJvdyBlLmR5bmFtaWNVc2FnZURlc2NyaXB0aW9uPXQsZS5keW5hbWljVXNhZ2VTdGFjaz1yLnN0YWNrLHJ9fWZ1bmN0aW9uIGQoe3JlYXNvbjplLHByZXJlbmRlclN0YXRlOnQscGF0aG5hbWU6bn0pe2godCxlLG4pfWZ1bmN0aW9uIHAoZSx0KXtlLnByZXJlbmRlclN0YXRlJiZoKGUucHJlcmVuZGVyU3RhdGUsdCxlLnVybFBhdGhuYW1lKX1mdW5jdGlvbiBoKGUsdCxuKXt2KCk7bGV0IHI9YFJvdXRlICR7bn0gbmVlZHMgdG8gYmFpbCBvdXQgb2YgcHJlcmVuZGVyaW5nIGF0IHRoaXMgcG9pbnQgYmVjYXVzZSBpdCB1c2VkICR7dH0uIFJlYWN0IHRocm93cyB0aGlzIHNwZWNpYWwgb2JqZWN0IHRvIGluZGljYXRlIHdoZXJlLiBJdCBzaG91bGQgbm90IGJlIGNhdWdodCBieSB5b3VyIG93biB0cnkvY2F0Y2guIExlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3Bwci1jYXVnaHQtZXJyb3JgO2UuZHluYW1pY0FjY2Vzc2VzLnB1c2goe3N0YWNrOmUuaXNEZWJ1Z1NrZWxldG9uP0Vycm9yKCkuc3RhY2s6dm9pZCAwLGV4cHJlc3Npb246dH0pLG8uZGVmYXVsdC51bnN0YWJsZV9wb3N0cG9uZShyKX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLmR5bmFtaWNBY2Nlc3Nlcy5sZW5ndGg+MH1mdW5jdGlvbiBfKGUpe3JldHVybiBlLmR5bmFtaWNBY2Nlc3Nlcy5maWx0ZXIoZT0+InN0cmluZyI9PXR5cGVvZiBlLnN0YWNrJiZlLnN0YWNrLmxlbmd0aD4wKS5tYXAoKHtleHByZXNzaW9uOmUsc3RhY2s6dH0pPT4odD10LnNwbGl0KCJcbiIpLnNsaWNlKDQpLmZpbHRlcihlPT4hKGUuaW5jbHVkZXMoIm5vZGVfbW9kdWxlcy9uZXh0LyIpfHxlLmluY2x1ZGVzKCIgKDxhbm9ueW1vdXM+KSIpfHxlLmluY2x1ZGVzKCIgKG5vZGU6IikpKS5qb2luKCJcbiIpLGBEeW5hbWljIEFQSSBVc2FnZSBEZWJ1ZyAtICR7ZX06CiR7dH1gKSl9ZnVuY3Rpb24gdigpe2lmKCFpKXRocm93IEVycm9yKCJJbnZhcmlhbnQ6IFJlYWN0LnVuc3RhYmxlX3Bvc3Rwb25lIGlzIG5vdCBkZWZpbmVkLiBUaGlzIHN1Z2dlc3RzIHRoZSB3cm9uZyB2ZXJzaW9uIG9mIFJlYWN0IHdhcyBsb2FkZWQuIFRoaXMgaXMgYSBidWcgaW4gTmV4dC5qcyIpfWZ1bmN0aW9uIGIoZSl7digpO2xldCB0PW5ldyBBYm9ydENvbnRyb2xsZXI7dHJ5e28uZGVmYXVsdC51bnN0YWJsZV9wb3N0cG9uZShlKX1jYXRjaChlKXt0LmFib3J0KGUpfXJldHVybiB0LnNpZ25hbH19LDc0MTc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldFNlZ21lbnRQYXJhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7bGV0IHI9bigxMTgyKTtmdW5jdGlvbiBvKGUpe2xldCB0PXIuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCh0PT5lLnN0YXJ0c1dpdGgodCkpO3JldHVybih0JiYoZT1lLnNsaWNlKHQubGVuZ3RoKSksZS5zdGFydHNXaXRoKCJbWy4uLiIpJiZlLmVuZHNXaXRoKCJdXSIpKT97dHlwZToib3B0aW9uYWwtY2F0Y2hhbGwiLHBhcmFtOmUuc2xpY2UoNSwtMil9OmUuc3RhcnRzV2l0aCgiWy4uLiIpJiZlLmVuZHNXaXRoKCJdIik/e3R5cGU6dD8iY2F0Y2hhbGwtaW50ZXJjZXB0ZWQiOiJjYXRjaGFsbCIscGFyYW06ZS5zbGljZSg0LC0xKX06ZS5zdGFydHNXaXRoKCJbIikmJmUuZW5kc1dpdGgoIl0iKT97dHlwZTp0PyJkeW5hbWljLWludGVyY2VwdGVkIjoiZHluYW1pYyIscGFyYW06ZS5zbGljZSgxLC0xKX06bnVsbH19LDY0NzpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixyO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KSwocj1ufHwobj17fSkpLkFEREVEX1BBR0U9ImFkZGVkUGFnZSIsci5SRU1PVkVEX1BBR0U9InJlbW92ZWRQYWdlIixyLlJFTE9BRF9QQUdFPSJyZWxvYWRQYWdlIixyLlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUz0ic2VydmVyQ29tcG9uZW50Q2hhbmdlcyIsci5NSURETEVXQVJFX0NIQU5HRVM9Im1pZGRsZXdhcmVDaGFuZ2VzIixyLkNMSUVOVF9DSEFOR0VTPSJjbGllbnRDaGFuZ2VzIixyLlNFUlZFUl9PTkxZX0NIQU5HRVM9InNlcnZlck9ubHlDaGFuZ2VzIixyLlNZTkM9InN5bmMiLHIuQlVJTFQ9ImJ1aWx0IixyLkJVSUxESU5HPSJidWlsZGluZyIsci5ERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFPSJkZXZQYWdlc01hbmlmZXN0VXBkYXRlIixyLlRVUkJPUEFDS19NRVNTQUdFPSJ0dXJib3BhY2stbWVzc2FnZSIsci5TRVJWRVJfRVJST1I9InNlcnZlckVycm9yIixyLlRVUkJPUEFDS19DT05ORUNURUQ9InR1cmJvcGFjay1jb25uZWN0ZWQifSwxMTgyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUzpmdW5jdGlvbigpe3JldHVybiBvfSxleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjpmdW5jdGlvbigpe3JldHVybiBsfSxpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCByPW4oOTI2KSxvPVsiKC4uKSguLikiLCIoLikiLCIoLi4pIiwiKC4uLikiXTtmdW5jdGlvbiB1KGUpe3JldHVybiB2b2lkIDAhPT1lLnNwbGl0KCIvIikuZmluZChlPT5vLmZpbmQodD0+ZS5zdGFydHNXaXRoKHQpKSl9ZnVuY3Rpb24gbChlKXtsZXQgdCxuLHU7Zm9yKGxldCByIG9mIGUuc3BsaXQoIi8iKSlpZihuPW8uZmluZChlPT5yLnN0YXJ0c1dpdGgoZSkpKXtbdCx1XT1lLnNwbGl0KG4sMik7YnJlYWt9aWYoIXR8fCFufHwhdSl0aHJvdyBFcnJvcihgSW52YWxpZCBpbnRlcmNlcHRpb24gcm91dGU6ICR7ZX0uIE11c3QgYmUgaW4gdGhlIGZvcm1hdCAvPGludGVyY2VwdGluZyByb3V0ZT4vKC4ufC4uLnwuLikoLi4pLzxpbnRlcmNlcHRlZCByb3V0ZT5gKTtzd2l0Y2godD0oMCxyLm5vcm1hbGl6ZUFwcFBhdGgpKHQpLG4pe2Nhc2UiKC4pIjp1PSIvIj09PXQ/YC8ke3V9YDp0KyIvIit1O2JyZWFrO2Nhc2UiKC4uKSI6aWYoIi8iPT09dCl0aHJvdyBFcnJvcihgSW52YWxpZCBpbnRlcmNlcHRpb24gcm91dGU6ICR7ZX0uIENhbm5vdCB1c2UgKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwsIHVzZSAoLikgaW5zdGVhZC5gKTt1PXQuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25jYXQodSkuam9pbigiLyIpO2JyZWFrO2Nhc2UiKC4uLikiOnU9Ii8iK3U7YnJlYWs7Y2FzZSIoLi4pKC4uKSI6bGV0IGw9dC5zcGxpdCgiLyIpO2lmKGwubGVuZ3RoPD0yKXRocm93IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtlfS4gQ2Fubm90IHVzZSAoLi4pKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwgb3Igb25lIGxldmVsIHVwLmApO3U9bC5zbGljZSgwLC0yKS5jb25jYXQodSkuam9pbigiLyIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIkludmFyaWFudDogdW5leHBlY3RlZCBtYXJrZXIiKX1yZXR1cm57aW50ZXJjZXB0aW5nUm91dGU6dCxpbnRlcmNlcHRlZFJvdXRlOnV9fX0sNjUwOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVmbGVjdEFkYXB0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pO2NsYXNzIG57c3RhdGljIGdldChlLHQsbil7bGV0IHI9UmVmbGVjdC5nZXQoZSx0LG4pO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYmluZChlKTpyfXN0YXRpYyBzZXQoZSx0LG4scil7cmV0dXJuIFJlZmxlY3Quc2V0KGUsdCxuLHIpfXN0YXRpYyBoYXMoZSx0KXtyZXR1cm4gUmVmbGVjdC5oYXMoZSx0KX1zdGF0aWMgZGVsZXRlUHJvcGVydHkoZSx0KXtyZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShlLHQpfX19LDE5NTY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDp0W25dfSl9KHQse0FwcFJvdXRlckNvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBsfSxMYXlvdXRSb3V0ZXJDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9LE1pc3NpbmdTbG90Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiBpfSxUZW1wbGF0ZUNvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX19KTtsZXQgcj1uKDcwNDMpLl8obigyMjY1KSksbz1yLmRlZmF1bHQuY3JlYXRlQ29udGV4dChudWxsKSx1PXIuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG51bGwpLGw9ci5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobnVsbCksYT1yLmRlZmF1bHQuY3JlYXRlQ29udGV4dChudWxsKSxpPXIuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG5ldyBTZXQpfSw3MjA3OmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7bGV0IHQ9NTM4MTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0PSh0PDw1KSt0K2UuY2hhckNvZGVBdChuKSY0Mjk0OTY3Mjk1O3JldHVybiB0Pj4+MH1mdW5jdGlvbiByKGUpe3JldHVybiBuKGUpLnRvU3RyaW5nKDM2KS5zbGljZSgwLDUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7ZGpiMkhhc2g6ZnVuY3Rpb24oKXtyZXR1cm4gbn0saGV4SGFzaDpmdW5jdGlvbigpe3JldHVybiByfX0pfSw4NzAxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJIZWFkTWFuYWdlckNvbnRleHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByfX0pO2xldCByPW4oNzA0MykuXyhuKDIyNjUpKS5kZWZhdWx0LmNyZWF0ZUNvbnRleHQoe30pfSw5MDYwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtQYXRoUGFyYW1zQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBsfSxQYXRobmFtZUNvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sU2VhcmNoUGFyYW1zQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oMjI2NSksbz0oMCxyLmNyZWF0ZUNvbnRleHQpKG51bGwpLHU9KDAsci5jcmVhdGVDb250ZXh0KShudWxsKSxsPSgwLHIuY3JlYXRlQ29udGV4dCkobnVsbCl9LDg5OTM6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtCYWlsb3V0VG9DU1JFcnJvcjpmdW5jdGlvbigpe3JldHVybiByfSxpc0JhaWxvdXRUb0NTUkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7bGV0IG49IkJBSUxPVVRfVE9fQ0xJRU5UX1NJREVfUkVOREVSSU5HIjtjbGFzcyByIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoIkJhaWwgb3V0IHRvIGNsaWVudC1zaWRlIHJlbmRlcmluZzogIitlKSx0aGlzLnJlYXNvbj1lLHRoaXMuZGlnZXN0PW59fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmImRpZ2VzdCJpbiBlJiZlLmRpZ2VzdD09PW59fSw4MTYyOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiLyIpP2U6Ii8iK2V9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJlbnN1cmVMZWFkaW5nU2xhc2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pfSwyMTAzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtBY3Rpb25RdWV1ZUNvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIHN9fSk7bGV0IHI9bigzMDk5KSxvPW4oNDY3MyksdT1uKDE0NTApLGw9ci5fKG4oMjI2NSkpLGE9bC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobnVsbCk7ZnVuY3Rpb24gaShlLHQpe251bGwhPT1lLnBlbmRpbmcmJihlLnBlbmRpbmc9ZS5wZW5kaW5nLm5leHQsbnVsbCE9PWUucGVuZGluZz9jKHthY3Rpb25RdWV1ZTplLGFjdGlvbjplLnBlbmRpbmcsc2V0U3RhdGU6dH0pOmUubmVlZHNSZWZyZXNoJiYoZS5uZWVkc1JlZnJlc2g9ITEsZS5kaXNwYXRjaCh7dHlwZTpvLkFDVElPTl9SRUZSRVNILG9yaWdpbjp3aW5kb3cubG9jYXRpb24ub3JpZ2lufSx0KSkpfWFzeW5jIGZ1bmN0aW9uIGMoZSl7bGV0e2FjdGlvblF1ZXVlOnQsYWN0aW9uOm4sc2V0U3RhdGU6cn09ZSx1PXQuc3RhdGU7aWYoIXUpdGhyb3cgRXJyb3IoIkludmFyaWFudDogUm91dGVyIHN0YXRlIG5vdCBpbml0aWFsaXplZCIpO3QucGVuZGluZz1uO2xldCBsPW4ucGF5bG9hZCxhPXQuYWN0aW9uKHUsbCk7ZnVuY3Rpb24gYyhlKXtuLmRpc2NhcmRlZHx8KHQuc3RhdGU9ZSx0LmRldlRvb2xzSW5zdGFuY2UmJnQuZGV2VG9vbHNJbnN0YW5jZS5zZW5kKGwsZSksaSh0LHIpLG4ucmVzb2x2ZShlKSl9KDAsby5pc1RoZW5hYmxlKShhKT9hLnRoZW4oYyxlPT57aSh0LHIpLG4ucmVqZWN0KGUpfSk6YyhhKX1mdW5jdGlvbiBzKCl7bGV0IGU9e3N0YXRlOm51bGwsZGlzcGF0Y2g6KHQsbik9PihmdW5jdGlvbihlLHQsbil7bGV0IHI9e3Jlc29sdmU6bixyZWplY3Q6KCk9Pnt9fTtpZih0LnR5cGUhPT1vLkFDVElPTl9SRVNUT1JFKXtsZXQgZT1uZXcgUHJvbWlzZSgoZSx0KT0+e3I9e3Jlc29sdmU6ZSxyZWplY3Q6dH19KTsoMCxsLnN0YXJ0VHJhbnNpdGlvbikoKCk9PntuKGUpfSl9bGV0IHU9e3BheWxvYWQ6dCxuZXh0Om51bGwscmVzb2x2ZTpyLnJlc29sdmUscmVqZWN0OnIucmVqZWN0fTtudWxsPT09ZS5wZW5kaW5nPyhlLmxhc3Q9dSxjKHthY3Rpb25RdWV1ZTplLGFjdGlvbjp1LHNldFN0YXRlOm59KSk6dC50eXBlPT09by5BQ1RJT05fTkFWSUdBVEV8fHQudHlwZT09PW8uQUNUSU9OX1JFU1RPUkU/KGUucGVuZGluZy5kaXNjYXJkZWQ9ITAsZS5sYXN0PXUsZS5wZW5kaW5nLnBheWxvYWQudHlwZT09PW8uQUNUSU9OX1NFUlZFUl9BQ1RJT04mJihlLm5lZWRzUmVmcmVzaD0hMCksYyh7YWN0aW9uUXVldWU6ZSxhY3Rpb246dSxzZXRTdGF0ZTpufSkpOihudWxsIT09ZS5sYXN0JiYoZS5sYXN0Lm5leHQ9dSksZS5sYXN0PXUpfSkoZSx0LG4pLGFjdGlvbjphc3luYyhlLHQpPT57aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoIkludmFyaWFudDogUm91dGVyIHN0YXRlIG5vdCBpbml0aWFsaXplZCIpO3JldHVybigwLHUucmVkdWNlcikoZSx0KX0scGVuZGluZzpudWxsLGxhc3Q6bnVsbH07cmV0dXJuIGV9fSw4NDk4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJhZGRQYXRoUHJlZml4Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KTtsZXQgcj1uKDMzODEpO2Z1bmN0aW9uIG8oZSx0KXtpZighZS5zdGFydHNXaXRoKCIvIil8fCF0KXJldHVybiBlO2xldHtwYXRobmFtZTpuLHF1ZXJ5Om8saGFzaDp1fT0oMCxyLnBhcnNlUGF0aCkoZSk7cmV0dXJuIiIrdCtuK28rdX19LDkyNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7bm9ybWFsaXplQXBwUGF0aDpmdW5jdGlvbigpe3JldHVybiB1fSxub3JtYWxpemVSc2NVUkw6ZnVuY3Rpb24oKXtyZXR1cm4gbH19KTtsZXQgcj1uKDgxNjIpLG89big0NTQxKTtmdW5jdGlvbiB1KGUpe3JldHVybigwLHIuZW5zdXJlTGVhZGluZ1NsYXNoKShlLnNwbGl0KCIvIikucmVkdWNlKChlLHQsbixyKT0+IXR8fCgwLG8uaXNHcm91cFNlZ21lbnQpKHQpfHwiQCI9PT10WzBdfHwoInBhZ2UiPT09dHx8InJvdXRlIj09PXQpJiZuPT09ci5sZW5ndGgtMT9lOmUrIi8iK3QsIiIpKX1mdW5jdGlvbiBsKGUpe3JldHVybiBlLnJlcGxhY2UoL1wucnNjKCR8XD8pLywiJDEiKX19LDcwOTI6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PXt9KSx0Lm9ubHlIYXNoQ2hhbmdlKXtlKCk7cmV0dXJufWxldCBuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPW4uc3R5bGUuc2Nyb2xsQmVoYXZpb3I7bi5zdHlsZS5zY3JvbGxCZWhhdmlvcj0iYXV0byIsdC5kb250Rm9yY2VMYXlvdXR8fG4uZ2V0Q2xpZW50UmVjdHMoKSxlKCksbi5zdHlsZS5zY3JvbGxCZWhhdmlvcj1yfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaGFuZGxlU21vb3RoU2Nyb2xsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KX0sNjE0NjpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybi9Hb29nbGVib3R8TWVkaWFwYXJ0bmVycy1Hb29nbGV8QWRzQm90LUdvb2dsZXxnb29nbGV3ZWJsaWdodHxTdG9yZWJvdC1Hb29nbGV8R29vZ2xlLVBhZ2VSZW5kZXJlcnxCaW5nYm90fEJpbmdQcmV2aWV3fFNsdXJwfER1Y2tEdWNrQm90fGJhaWR1c3BpZGVyfHlhbmRleHxzb2dvdXxMaW5rZWRJbkJvdHxiaXRseWJvdHx0dW1ibHJ8dmtTaGFyZXxxdW9yYSBsaW5rIHByZXZpZXd8ZmFjZWJvb2tleHRlcm5hbGhpdHxmYWNlYm9va2NhdGFsb2d8VHdpdHRlcmJvdHxhcHBsZWJvdHxyZWRkaXRib3R8U2xhY2tib3R8RGlzY29yZGJvdHxXaGF0c0FwcHxTa3lwZVVyaVByZXZpZXd8aWFfYXJjaGl2ZXIvaS50ZXN0KGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNCb3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pfSwzMzgxOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7bGV0IHQ9ZS5pbmRleE9mKCIjIiksbj1lLmluZGV4T2YoIj8iKSxyPW4+LTEmJih0PDB8fG48dCk7cmV0dXJuIHJ8fHQ+LTE/e3BhdGhuYW1lOmUuc3Vic3RyaW5nKDAscj9uOnQpLHF1ZXJ5OnI/ZS5zdWJzdHJpbmcobix0Pi0xP3Q6dm9pZCAwKToiIixoYXNoOnQ+LTE/ZS5zbGljZSh0KToiIn06e3BhdGhuYW1lOmUscXVlcnk6IiIsaGFzaDoiIn19T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwYXJzZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0pfSw1ODA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInBhdGhIYXNQcmVmaXgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvfX0pO2xldCByPW4oMzM4MSk7ZnVuY3Rpb24gbyhlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTtsZXR7cGF0aG5hbWU6bn09KDAsci5wYXJzZVBhdGgpKGUpO3JldHVybiBuPT09dHx8bi5zdGFydHNXaXRoKHQrIi8iKX19LDY2NzQ6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cLyQvLCIiKXx8Ii8ifU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicmVtb3ZlVHJhaWxpbmdTbGFzaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59fSl9LDQ1NDE6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4iKCI9PT1lWzBdJiZlLmVuZHNXaXRoKCIpIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6dFtuXX0pfSh0LHtERUZBVUxUX1NFR01FTlRfS0VZOmZ1bmN0aW9uKCl7cmV0dXJuIG99LFBBR0VfU0VHTUVOVF9LRVk6ZnVuY3Rpb24oKXtyZXR1cm4gcn0saXNHcm91cFNlZ21lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn19KTtsZXQgcj0iX19QQUdFX18iLG89Il9fREVGQVVMVF9fIn0sNTUwMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0odCx7U2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiBvfSx1c2VTZXJ2ZXJJbnNlcnRlZEhUTUw6ZnVuY3Rpb24oKXtyZXR1cm4gdX19KTtsZXQgcj1uKDMwOTkpLl8obigyMjY1KSksbz1yLmRlZmF1bHQuY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiB1KGUpe2xldCB0PSgwLHIudXNlQ29udGV4dCkobyk7dCYmdChlKX19LDE3NjU6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ3YXJuT25jZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59fSk7bGV0IG49ZT0+e319LDcxNDk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImFjdGlvbkFzeW5jU3RvcmFnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fSk7bGV0IHI9KDAsbig0ODMyKS5jcmVhdGVBc3luY0xvY2FsU3RvcmFnZSkoKTsoImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw0ODMyOmZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3JlYXRlQXN5bmNMb2NhbFN0b3JhZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0pO2xldCBuPUVycm9yKCJJbnZhcmlhbnQ6IEFzeW5jTG9jYWxTdG9yYWdlIGFjY2Vzc2VkIGluIHJ1bnRpbWUgd2hlcmUgaXQgaXMgbm90IGF2YWlsYWJsZSIpO2NsYXNzIHJ7ZGlzYWJsZSgpe3Rocm93IG59Z2V0U3RvcmUoKXt9cnVuKCl7dGhyb3cgbn1leGl0KCl7dGhyb3cgbn1lbnRlcldpdGgoKXt0aHJvdyBufX1sZXQgbz1nbG9iYWxUaGlzLkFzeW5jTG9jYWxTdG9yYWdlO2Z1bmN0aW9uIHUoKXtyZXR1cm4gbz9uZXcgbzpuZXcgcn0oImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVmYXVsdHx8Im9iamVjdCI9PXR5cGVvZiB0LmRlZmF1bHQmJm51bGwhPT10LmRlZmF1bHQpJiZ2b2lkIDA9PT10LmRlZmF1bHQuX19lc01vZHVsZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5hc3NpZ24odC5kZWZhdWx0LHQpLGUuZXhwb3J0cz10LmRlZmF1bHQpfSw5MTM0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyZXF1ZXN0QXN5bmNTdG9yYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KTtsZXQgcj0oMCxuKDQ4MzIpLmNyZWF0ZUFzeW5jTG9jYWxTdG9yYWdlKSgpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDMwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KTtsZXQgcj0oMCxuKDQ4MzIpLmNyZWF0ZUFzeW5jTG9jYWxTdG9yYWdlKSgpOygiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWZhdWx0fHwib2JqZWN0Ij09dHlwZW9mIHQuZGVmYXVsdCYmbnVsbCE9PXQuZGVmYXVsdCkmJnZvaWQgMD09PXQuZGVmYXVsdC5fX2VzTW9kdWxlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQuZGVmYXVsdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCksZS5leHBvcnRzPXQuZGVmYXVsdCl9LDQwNDA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ4ODcpO3QuY3JlYXRlUm9vdD1yLmNyZWF0ZVJvb3QsdC5oeWRyYXRlUm9vdD1yLmh5ZHJhdGVSb290fSw0ODg3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uIGUoKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmImZ1bmN0aW9uIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGUpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fSgpLGUuZXhwb3J0cz1uKDQ0MTcpfSw3OTUwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0ODg3KSxvPXtzdHJlYW06ITB9LHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxsPW5ldyBNYXA7ZnVuY3Rpb24gYShlKXt2YXIgdD1uKGUpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LnRoZW58fCJmdWxmaWxsZWQiPT09dC5zdGF0dXM/bnVsbDoodC50aGVuKGZ1bmN0aW9uKGUpe3Quc3RhdHVzPSJmdWxmaWxsZWQiLHQudmFsdWU9ZX0sZnVuY3Rpb24oZSl7dC5zdGF0dXM9InJlamVjdGVkIix0LnJlYXNvbj1lfSksdCl9ZnVuY3Rpb24gaSgpe312YXIgYz1uZXcgTWFwLHM9bi51O24udT1mdW5jdGlvbihlKXt2YXIgdD1jLmdldChlKTtyZXR1cm4gdm9pZCAwIT09dD90OnMoZSl9O3ZhciBmPXIuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuRGlzcGF0Y2hlcixkPVN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSxwPVN5bWJvbC5mb3IoInJlYWN0LmxhenkiKSxoPVN5bWJvbC5pdGVyYXRvcix5PUFycmF5LmlzQXJyYXksXz1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdj1PYmplY3QucHJvdG90eXBlLGI9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZyhlLHQsbixyKXt0aGlzLnN0YXR1cz1lLHRoaXMudmFsdWU9dCx0aGlzLnJlYXNvbj1uLHRoaXMuX3Jlc3BvbnNlPXJ9ZnVuY3Rpb24gbShlKXtzd2l0Y2goZS5zdGF0dXMpe2Nhc2UicmVzb2x2ZWRfbW9kZWwiOncoZSk7YnJlYWs7Y2FzZSJyZXNvbHZlZF9tb2R1bGUiOk0oZSl9c3dpdGNoKGUuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIGUudmFsdWU7Y2FzZSJwZW5kaW5nIjpjYXNlImJsb2NrZWQiOmNhc2UiY3ljbGljIjp0aHJvdyBlO2RlZmF1bHQ6dGhyb3cgZS5yZWFzb259fWZ1bmN0aW9uIFIoZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKykoMCxlW25dKSh0KX1mdW5jdGlvbiBQKGUsdCxuKXtzd2l0Y2goZS5zdGF0dXMpe2Nhc2UiZnVsZmlsbGVkIjpSKHQsZS52YWx1ZSk7YnJlYWs7Y2FzZSJwZW5kaW5nIjpjYXNlImJsb2NrZWQiOmNhc2UiY3ljbGljIjplLnZhbHVlPXQsZS5yZWFzb249bjticmVhaztjYXNlInJlamVjdGVkIjpuJiZSKG4sZS5yZWFzb24pfX1mdW5jdGlvbiBqKGUsdCl7aWYoInBlbmRpbmciPT09ZS5zdGF0dXN8fCJibG9ja2VkIj09PWUuc3RhdHVzKXt2YXIgbj1lLnJlYXNvbjtlLnN0YXR1cz0icmVqZWN0ZWQiLGUucmVhc29uPXQsbnVsbCE9PW4mJlIobix0KX19ZnVuY3Rpb24gTyhlLHQpe2lmKCJwZW5kaW5nIj09PWUuc3RhdHVzfHwiYmxvY2tlZCI9PT1lLnN0YXR1cyl7dmFyIG49ZS52YWx1ZSxyPWUucmVhc29uO2Uuc3RhdHVzPSJyZXNvbHZlZF9tb2R1bGUiLGUudmFsdWU9dCxudWxsIT09biYmKE0oZSksUChlLG4scikpfX1nLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFByb21pc2UucHJvdG90eXBlKSxnLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuc3RhdHVzKXtjYXNlInJlc29sdmVkX21vZGVsIjp3KHRoaXMpO2JyZWFrO2Nhc2UicmVzb2x2ZWRfbW9kdWxlIjpNKHRoaXMpfXN3aXRjaCh0aGlzLnN0YXR1cyl7Y2FzZSJmdWxmaWxsZWQiOmUodGhpcy52YWx1ZSk7YnJlYWs7Y2FzZSJwZW5kaW5nIjpjYXNlImJsb2NrZWQiOmNhc2UiY3ljbGljIjplJiYobnVsbD09PXRoaXMudmFsdWUmJih0aGlzLnZhbHVlPVtdKSx0aGlzLnZhbHVlLnB1c2goZSkpLHQmJihudWxsPT09dGhpcy5yZWFzb24mJih0aGlzLnJlYXNvbj1bXSksdGhpcy5yZWFzb24ucHVzaCh0KSk7YnJlYWs7ZGVmYXVsdDp0KHRoaXMucmVhc29uKX19O3ZhciBFPW51bGwsUz1udWxsO2Z1bmN0aW9uIHcoZSl7dmFyIHQ9RSxuPVM7RT1lLFM9bnVsbDt2YXIgcj1lLnZhbHVlO2Uuc3RhdHVzPSJjeWNsaWMiLGUudmFsdWU9bnVsbCxlLnJlYXNvbj1udWxsO3RyeXt2YXIgbz1KU09OLnBhcnNlKHIsZS5fcmVzcG9uc2UuX2Zyb21KU09OKTtpZihudWxsIT09UyYmMDxTLmRlcHMpUy52YWx1ZT1vLGUuc3RhdHVzPSJibG9ja2VkIixlLnZhbHVlPW51bGwsZS5yZWFzb249bnVsbDtlbHNle3ZhciB1PWUudmFsdWU7ZS5zdGF0dXM9ImZ1bGZpbGxlZCIsZS52YWx1ZT1vLG51bGwhPT11JiZSKHUsbyl9fWNhdGNoKHQpe2Uuc3RhdHVzPSJyZWplY3RlZCIsZS5yZWFzb249dH1maW5hbGx5e0U9dCxTPW59fWZ1bmN0aW9uIE0oZSl7dHJ5e3ZhciB0PWUudmFsdWUscj1uKHRbMF0pO2lmKDQ9PT10Lmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHIudGhlbil7aWYoImZ1bGZpbGxlZCI9PT1yLnN0YXR1cylyPXIudmFsdWU7ZWxzZSB0aHJvdyByLnJlYXNvbn12YXIgbz0iKiI9PT10WzJdP3I6IiI9PT10WzJdP3IuX19lc01vZHVsZT9yLmRlZmF1bHQ6cjp1LmNhbGwocix0WzJdKT9yW3RbMl1dOnZvaWQgMDtlLnN0YXR1cz0iZnVsZmlsbGVkIixlLnZhbHVlPW99Y2F0Y2godCl7ZS5zdGF0dXM9InJlamVjdGVkIixlLnJlYXNvbj10fX1mdW5jdGlvbiBUKGUsdCl7ZS5fY2h1bmtzLmZvckVhY2goZnVuY3Rpb24oZSl7InBlbmRpbmciPT09ZS5zdGF0dXMmJmooZSx0KX0pfWZ1bmN0aW9uIEMoZSx0KXt2YXIgbj1lLl9jaHVua3Mscj1uLmdldCh0KTtyZXR1cm4gcnx8KHI9bmV3IGcoInBlbmRpbmciLG51bGwsbnVsbCxlKSxuLnNldCh0LHIpKSxyfWZ1bmN0aW9uIHgoZSx0KXtpZigicmVzb2x2ZWRfbW9kZWwiPT09KGU9QyhlLHQpKS5zdGF0dXMmJncoZSksImZ1bGZpbGxlZCI9PT1lLnN0YXR1cylyZXR1cm4gZS52YWx1ZTt0aHJvdyBlLnJlYXNvbn1mdW5jdGlvbiBBKCl7dGhyb3cgRXJyb3IoJ1RyeWluZyB0byBjYWxsIGEgZnVuY3Rpb24gZnJvbSAidXNlIHNlcnZlciIgYnV0IHRoZSBjYWxsU2VydmVyIG9wdGlvbiB3YXMgbm90IGltcGxlbWVudGVkIGluIHlvdXIgcm91dGVyIHJ1bnRpbWUuJyl9ZnVuY3Rpb24gTihlLHQsbixyLG8pe3ZhciB1O3JldHVybihlPXtfYnVuZGxlckNvbmZpZzplLF9tb2R1bGVMb2FkaW5nOnQsX2NhbGxTZXJ2ZXI6dm9pZCAwIT09bj9uOkEsX2VuY29kZUZvcm1BY3Rpb246cixfbm9uY2U6byxfY2h1bmtzOm5ldyBNYXAsX3N0cmluZ0RlY29kZXI6bmV3IFRleHREZWNvZGVyLF9mcm9tSlNPTjpudWxsLF9yb3dTdGF0ZTowLF9yb3dJRDowLF9yb3dUYWc6MCxfcm93TGVuZ3RoOjAsX2J1ZmZlcjpbXX0pLl9mcm9tSlNPTj0odT1lLGZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxuLHIpe2lmKCIkIj09PXJbMF0pe2lmKCIkIj09PXIpcmV0dXJuIGQ7c3dpdGNoKHJbMV0pe2Nhc2UiJCI6cmV0dXJuIHIuc2xpY2UoMSk7Y2FzZSJMIjpyZXR1cm57JCR0eXBlb2Y6cCxfcGF5bG9hZDplPUMoZSx0PXBhcnNlSW50KHIuc2xpY2UoMiksMTYpKSxfaW5pdDptfTtjYXNlIkAiOmlmKDI9PT1yLmxlbmd0aClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt9KTtyZXR1cm4gQyhlLHQ9cGFyc2VJbnQoci5zbGljZSgyKSwxNikpO2Nhc2UiUyI6cmV0dXJuIFN5bWJvbC5mb3Ioci5zbGljZSgyKSk7Y2FzZSJoIjpyZXR1cm4gdD14KGUsdD1wYXJzZUludChyLnNsaWNlKDIpLDE2KSksZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxuPXQuYm91bmQ7cmV0dXJuIG4/ImZ1bGZpbGxlZCI9PT1uLnN0YXR1cz9yKHQuaWQsbi52YWx1ZS5jb25jYXQoZSkpOlByb21pc2UucmVzb2x2ZShuKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiByKHQuaWQsbi5jb25jYXQoZSkpfSk6cih0LmlkLGUpfXZhciByPWUuX2NhbGxTZXJ2ZXI7cmV0dXJuIGIuc2V0KG4sdCksbn0oZSx0KTtjYXNlIlEiOnJldHVybiBuZXcgTWFwKGU9eChlLHQ9cGFyc2VJbnQoci5zbGljZSgyKSwxNikpKTtjYXNlIlciOnJldHVybiBuZXcgU2V0KGU9eChlLHQ9cGFyc2VJbnQoci5zbGljZSgyKSwxNikpKTtjYXNlIkkiOnJldHVybiAxLzA7Y2FzZSItIjpyZXR1cm4iJC0wIj09PXI/LTA6LTEvMDtjYXNlIk4iOnJldHVybiBOYU47Y2FzZSJ1IjpyZXR1cm47Y2FzZSJEIjpyZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShyLnNsaWNlKDIpKSk7Y2FzZSJuIjpyZXR1cm4gQmlnSW50KHIuc2xpY2UoMikpO2RlZmF1bHQ6c3dpdGNoKChlPUMoZSxyPXBhcnNlSW50KHIuc2xpY2UoMSksMTYpKSkuc3RhdHVzKXtjYXNlInJlc29sdmVkX21vZGVsIjp3KGUpO2JyZWFrO2Nhc2UicmVzb2x2ZWRfbW9kdWxlIjpNKGUpfXN3aXRjaChlLnN0YXR1cyl7Y2FzZSJmdWxmaWxsZWQiOnJldHVybiBlLnZhbHVlO2Nhc2UicGVuZGluZyI6Y2FzZSJibG9ja2VkIjpjYXNlImN5Y2xpYyI6dmFyIG87cmV0dXJuIHI9RSxlLnRoZW4oZnVuY3Rpb24oZSx0LG4scil7aWYoUyl7dmFyIG89UztyfHxvLmRlcHMrK31lbHNlIG89Uz17ZGVwczpyPzA6MSx2YWx1ZTpudWxsfTtyZXR1cm4gZnVuY3Rpb24ocil7dFtuXT1yLG8uZGVwcy0tLDA9PT1vLmRlcHMmJiJibG9ja2VkIj09PWUuc3RhdHVzJiYocj1lLnZhbHVlLGUuc3RhdHVzPSJmdWxmaWxsZWQiLGUudmFsdWU9by52YWx1ZSxudWxsIT09ciYmUihyLG8udmFsdWUpKX19KHIsdCxuLCJjeWNsaWMiPT09ZS5zdGF0dXMpLChvPXIsZnVuY3Rpb24oZSl7cmV0dXJuIGoobyxlKX0pKSxudWxsO2RlZmF1bHQ6dGhyb3cgZS5yZWFzb259fX1yZXR1cm4gcn0odSx0aGlzLGUsdCk6Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dD9lPXRbMF09PT1kP3skJHR5cGVvZjpkLHR5cGU6dFsxXSxrZXk6dFsyXSxyZWY6bnVsbCxwcm9wczp0WzNdLF9vd25lcjpudWxsfTp0OnR9KSxlfWZ1bmN0aW9uIEQoZSx0KXtmdW5jdGlvbiByKHQpe1QoZSx0KX12YXIgdT10LmdldFJlYWRlcigpO3UucmVhZCgpLnRoZW4oZnVuY3Rpb24gdChzKXt2YXIgZD1zLnZhbHVlO2lmKHMuZG9uZSlUKGUsRXJyb3IoIkNvbm5lY3Rpb24gY2xvc2VkLiIpKTtlbHNle3ZhciBwPTAsaD1lLl9yb3dTdGF0ZSx5PWUuX3Jvd0lELF89ZS5fcm93VGFnLHY9ZS5fcm93TGVuZ3RoO3M9ZS5fYnVmZmVyO2Zvcih2YXIgYj1kLmxlbmd0aDtwPGI7KXt2YXIgbT0tMTtzd2l0Y2goaCl7Y2FzZSAwOjU4PT09KG09ZFtwKytdKT9oPTE6eT15PDw0fCg5NjxtP20tODc6bS00OCk7Y29udGludWU7Y2FzZSAxOjg0PT09KGg9ZFtwXSk/KF89aCxoPTIscCsrKTo2NDxoJiY5MT5oPyhfPWgsaD0zLHArKyk6KF89MCxoPTMpO2NvbnRpbnVlO2Nhc2UgMjo0ND09PShtPWRbcCsrXSk/aD00OnY9djw8NHwoOTY8bT9tLTg3Om0tNDgpO2NvbnRpbnVlO2Nhc2UgMzptPWQuaW5kZXhPZigxMCxwKTticmVhaztjYXNlIDQ6KG09cCt2KT5kLmxlbmd0aCYmKG09LTEpfXZhciBSPWQuYnl0ZU9mZnNldCtwO2lmKC0xPG0pe3A9bmV3IFVpbnQ4QXJyYXkoZC5idWZmZXIsUixtLXApLHY9ZSxSPV87dmFyIEU9di5fc3RyaW5nRGVjb2RlcjtfPSIiO2Zvcih2YXIgUz0wO1M8cy5sZW5ndGg7UysrKV8rPUUuZGVjb2RlKHNbU10sbyk7c3dpdGNoKF8rPUUuZGVjb2RlKHApLFIpe2Nhc2UgNzM6IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbz1lLl9jaHVua3MsdT1vLmdldCh0KTtyPUpTT04ucGFyc2UocixlLl9mcm9tSlNPTik7dmFyIHM9ZnVuY3Rpb24oZSx0KXtpZihlKXt2YXIgbj1lW3RbMF1dO2lmKGU9blt0WzJdXSluPWUubmFtZTtlbHNle2lmKCEoZT1uWyIqIl0pKXRocm93IEVycm9yKCdDb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlICInK3RbMF0rJyIgaW4gdGhlIFJlYWN0IFNTUiBNYW5pZmVzdC4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgUmVhY3QgU2VydmVyIENvbXBvbmVudHMgYnVuZGxlci4nKTtuPXRbMl19cmV0dXJuIDQ9PT10Lmxlbmd0aD9bZS5pZCxlLmNodW5rcyxuLDFdOltlLmlkLGUuY2h1bmtzLG5dfXJldHVybiB0fShlLl9idW5kbGVyQ29uZmlnLHIpO2lmKHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWVbMV0scj1bXSxvPTA7bzx0Lmxlbmd0aDspe3ZhciB1PXRbbysrXSxzPXRbbysrXSxmPWwuZ2V0KHUpO3ZvaWQgMD09PWY/KGMuc2V0KHUscykscz1uLmUodSksci5wdXNoKHMpLGY9bC5zZXQuYmluZChsLHUsbnVsbCkscy50aGVuKGYsaSksbC5zZXQodSxzKSk6bnVsbCE9PWYmJnIucHVzaChmKX1yZXR1cm4gND09PWUubGVuZ3RoPzA9PT1yLmxlbmd0aD9hKGVbMF0pOlByb21pc2UuYWxsKHIpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gYShlWzBdKX0pOjA8ci5sZW5ndGg/UHJvbWlzZS5hbGwocik6bnVsbH0ocykpe2lmKHUpe3ZhciBmPXU7Zi5zdGF0dXM9ImJsb2NrZWQifWVsc2UgZj1uZXcgZygiYmxvY2tlZCIsbnVsbCxudWxsLGUpLG8uc2V0KHQsZik7ci50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIE8oZixzKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGooZixlKX0pfWVsc2UgdT9PKHUscyk6by5zZXQodCxuZXcgZygicmVzb2x2ZWRfbW9kdWxlIixzLG51bGwsZSkpfSh2LHksXyk7YnJlYWs7Y2FzZSA3MjppZih5PV9bMF0sdj1KU09OLnBhcnNlKF89Xy5zbGljZSgxKSx2Ll9mcm9tSlNPTiksXz1mLmN1cnJlbnQpc3dpdGNoKHkpe2Nhc2UiRCI6Xy5wcmVmZXRjaEROUyh2KTticmVhaztjYXNlIkMiOiJzdHJpbmciPT10eXBlb2Ygdj9fLnByZWNvbm5lY3Qodik6Xy5wcmVjb25uZWN0KHZbMF0sdlsxXSk7YnJlYWs7Y2FzZSJMIjp5PXZbMF0scD12WzFdLDM9PT12Lmxlbmd0aD9fLnByZWxvYWQoeSxwLHZbMl0pOl8ucHJlbG9hZCh5LHApO2JyZWFrO2Nhc2UibSI6InN0cmluZyI9PXR5cGVvZiB2P18ucHJlbG9hZE1vZHVsZSh2KTpfLnByZWxvYWRNb2R1bGUodlswXSx2WzFdKTticmVhaztjYXNlIlMiOiJzdHJpbmciPT10eXBlb2Ygdj9fLnByZWluaXRTdHlsZSh2KTpfLnByZWluaXRTdHlsZSh2WzBdLDA9PT12WzFdP3ZvaWQgMDp2WzFdLDM9PT12Lmxlbmd0aD92WzJdOnZvaWQgMCk7YnJlYWs7Y2FzZSJYIjoic3RyaW5nIj09dHlwZW9mIHY/Xy5wcmVpbml0U2NyaXB0KHYpOl8ucHJlaW5pdFNjcmlwdCh2WzBdLHZbMV0pO2JyZWFrO2Nhc2UiTSI6InN0cmluZyI9PXR5cGVvZiB2P18ucHJlaW5pdE1vZHVsZVNjcmlwdCh2KTpfLnByZWluaXRNb2R1bGVTY3JpcHQodlswXSx2WzFdKX1icmVhaztjYXNlIDY5OnA9KF89SlNPTi5wYXJzZShfKSkuZGlnZXN0LChfPUVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgU2VydmVyIENvbXBvbmVudHMgcmVuZGVyLiBUaGUgc3BlY2lmaWMgbWVzc2FnZSBpcyBvbWl0dGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzIHRvIGF2b2lkIGxlYWtpbmcgc2Vuc2l0aXZlIGRldGFpbHMuIEEgZGlnZXN0IHByb3BlcnR5IGlzIGluY2x1ZGVkIG9uIHRoaXMgZXJyb3IgaW5zdGFuY2Ugd2hpY2ggbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLiIpKS5zdGFjaz0iRXJyb3I6ICIrXy5tZXNzYWdlLF8uZGlnZXN0PXAsKFI9KHA9di5fY2h1bmtzKS5nZXQoeSkpP2ooUixfKTpwLnNldCh5LG5ldyBnKCJyZWplY3RlZCIsbnVsbCxfLHYpKTticmVhaztjYXNlIDg0OnYuX2NodW5rcy5zZXQoeSxuZXcgZygiZnVsZmlsbGVkIixfLG51bGwsdikpO2JyZWFrO2Nhc2UgNjg6Y2FzZSA4Nzp0aHJvdyBFcnJvcigiRmFpbGVkIHRvIHJlYWQgYSBSU0MgcGF5bG9hZCBjcmVhdGVkIGJ5IGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiBSZWFjdCBvbiB0aGUgc2VydmVyIHdoaWxlIHVzaW5nIGEgcHJvZHVjdGlvbiB2ZXJzaW9uIG9uIHRoZSBjbGllbnQuIEFsd2F5cyB1c2UgbWF0Y2hpbmcgdmVyc2lvbnMgb24gdGhlIHNlcnZlciBhbmQgdGhlIGNsaWVudC4iKTtkZWZhdWx0OihSPShwPXYuX2NodW5rcykuZ2V0KHkpKT8odj1SLHk9XywicGVuZGluZyI9PT12LnN0YXR1cyYmKF89di52YWx1ZSxwPXYucmVhc29uLHYuc3RhdHVzPSJyZXNvbHZlZF9tb2RlbCIsdi52YWx1ZT15LG51bGwhPT1fJiYodyh2KSxQKHYsXyxwKSkpKTpwLnNldCh5LG5ldyBnKCJyZXNvbHZlZF9tb2RlbCIsXyxudWxsLHYpKX1wPW0sMz09PWgmJnArKyx2PXk9Xz1oPTAscy5sZW5ndGg9MH1lbHNle2Q9bmV3IFVpbnQ4QXJyYXkoZC5idWZmZXIsUixkLmJ5dGVMZW5ndGgtcCkscy5wdXNoKGQpLHYtPWQuYnl0ZUxlbmd0aDticmVha319cmV0dXJuIGUuX3Jvd1N0YXRlPWgsZS5fcm93SUQ9eSxlLl9yb3dUYWc9XyxlLl9yb3dMZW5ndGg9dix1LnJlYWQoKS50aGVuKHQpLmNhdGNoKHIpfX0pLmNhdGNoKHIpfXQuY3JlYXRlRnJvbUZldGNoPWZ1bmN0aW9uKGUsdCl7dmFyIG49TihudWxsLG51bGwsdCYmdC5jYWxsU2VydmVyP3QuY2FsbFNlcnZlcjp2b2lkIDAsdm9pZCAwLHZvaWQgMCk7cmV0dXJuIGUudGhlbihmdW5jdGlvbihlKXtEKG4sZS5ib2R5KX0sZnVuY3Rpb24oZSl7VChuLGUpfSksQyhuLDApfSx0LmNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbT1mdW5jdGlvbihlLHQpe3JldHVybiBEKHQ9TihudWxsLG51bGwsdCYmdC5jYWxsU2VydmVyP3QuY2FsbFNlcnZlcjp2b2lkIDAsdm9pZCAwLHZvaWQgMCksZSksQyh0LDApfSx0LmNyZWF0ZVNlcnZlclJlZmVyZW5jZT1mdW5jdGlvbihlLHQpe3ZhciBuO2Z1bmN0aW9uIHIoKXt2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0KGUsbil9cmV0dXJuIG49e2lkOmUsYm91bmQ6bnVsbH0sYi5zZXQocixuKSxyfSx0LmVuY29kZVJlcGx5PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe3ZhciByLG8sdSxsO289MSx1PTAsbD1udWxsLHI9SlNPTi5zdHJpbmdpZnkocj1lLGZ1bmN0aW9uIGUocixhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtpZigib2JqZWN0Ij09dHlwZW9mIGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhLnRoZW4pe251bGw9PT1sJiYobD1uZXcgRm9ybURhdGEpLHUrKzt2YXIgaSxjLHM9bysrO3JldHVybiBhLnRoZW4oZnVuY3Rpb24obil7bj1KU09OLnN0cmluZ2lmeShuLGUpO3ZhciByPWw7ci5hcHBlbmQoIiIrcyxuKSwwPT0tLXUmJnQocil9LGZ1bmN0aW9uKGUpe24oZSl9KSwiJEAiK3MudG9TdHJpbmcoMTYpfWlmKHkoYSkpcmV0dXJuIGE7aWYoYSBpbnN0YW5jZW9mIEZvcm1EYXRhKXtudWxsPT09bCYmKGw9bmV3IEZvcm1EYXRhKTt2YXIgZj1sLGQ9IiIrKHI9bysrKSsiXyI7cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihlLHQpe2YuYXBwZW5kKGQrdCxlKX0pLCIkSyIrci50b1N0cmluZygxNil9aWYoYSBpbnN0YW5jZW9mIE1hcClyZXR1cm4gYT1KU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGEpLGUpLG51bGw9PT1sJiYobD1uZXcgRm9ybURhdGEpLHI9bysrLGwuYXBwZW5kKCIiK3IsYSksIiRRIityLnRvU3RyaW5nKDE2KTtpZihhIGluc3RhbmNlb2YgU2V0KXJldHVybiBhPUpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oYSksZSksbnVsbD09PWwmJihsPW5ldyBGb3JtRGF0YSkscj1vKyssbC5hcHBlbmQoIiIrcixhKSwiJFciK3IudG9TdHJpbmcoMTYpO2lmKG51bGw9PT0oYz1hKXx8Im9iamVjdCIhPXR5cGVvZiBjP251bGw6ImZ1bmN0aW9uIj09dHlwZW9mKGM9aCYmY1toXXx8Y1siQEBpdGVyYXRvciJdKT9jOm51bGwpcmV0dXJuIEFycmF5LmZyb20oYSk7aWYoKHI9XyhhKSkhPT12JiYobnVsbD09PXJ8fG51bGwhPT1fKHIpKSl0aHJvdyBFcnJvcigiT25seSBwbGFpbiBvYmplY3RzLCBhbmQgYSBmZXcgYnVpbHQtaW5zLCBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBBY3Rpb25zLiBDbGFzc2VzIG9yIG51bGwgcHJvdG90eXBlcyBhcmUgbm90IHN1cHBvcnRlZC4iKTtyZXR1cm4gYX1pZigic3RyaW5nIj09dHlwZW9mIGEpcmV0dXJuIloiPT09YVthLmxlbmd0aC0xXSYmdGhpc1tyXWluc3RhbmNlb2YgRGF0ZT8iJEQiK2E6YT0iJCI9PT1hWzBdPyIkIithOmE7aWYoImJvb2xlYW4iPT10eXBlb2YgYSlyZXR1cm4gYTtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIE51bWJlci5pc0Zpbml0ZShpPWEpPzA9PT1pJiYtMS8wPT0xL2k/IiQtMCI6aToxLzA9PT1pPyIkSW5maW5pdHkiOi0xLzA9PT1pPyIkLUluZmluaXR5IjoiJE5hTiI7aWYodm9pZCAwPT09YSlyZXR1cm4iJHVuZGVmaW5lZCI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpe2lmKHZvaWQgMCE9PShhPWIuZ2V0KGEpKSlyZXR1cm4gYT1KU09OLnN0cmluZ2lmeShhLGUpLG51bGw9PT1sJiYobD1uZXcgRm9ybURhdGEpLHI9bysrLGwuc2V0KCIiK3IsYSksIiRoIityLnRvU3RyaW5nKDE2KTt0aHJvdyBFcnJvcigiQ2xpZW50IEZ1bmN0aW9ucyBjYW5ub3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIFNlcnZlciBGdW5jdGlvbnMuIE9ubHkgRnVuY3Rpb25zIHBhc3NlZCBmcm9tIHRoZSBTZXJ2ZXIgY2FuIGJlIHBhc3NlZCBiYWNrIGFnYWluLiIpfWlmKCJzeW1ib2wiPT10eXBlb2YgYSl7aWYoU3ltYm9sLmZvcihyPWEuZGVzY3JpcHRpb24pIT09YSl0aHJvdyBFcnJvcigiT25seSBnbG9iYWwgc3ltYm9scyByZWNlaXZlZCBmcm9tIFN5bWJvbC5mb3IoLi4uKSBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMuIFRoZSBzeW1ib2wgU3ltYm9sLmZvcigiK2EuZGVzY3JpcHRpb24rIikgY2Fubm90IGJlIGZvdW5kIGFtb25nIGdsb2JhbCBzeW1ib2xzLiIpO3JldHVybiIkUyIrcn1pZigiYmlnaW50Ij09dHlwZW9mIGEpcmV0dXJuIiRuIithLnRvU3RyaW5nKDEwKTt0aHJvdyBFcnJvcigiVHlwZSAiK3R5cGVvZiBhKyIgaXMgbm90IHN1cHBvcnRlZCBhcyBhbiBhcmd1bWVudCB0byBhIFNlcnZlciBGdW5jdGlvbi4iKX0pLG51bGw9PT1sP3Qocik6KGwuc2V0KCIwIixyKSwwPT09dSYmdChsKSl9KX19LDY3MDM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9big3OTUwKX0sNjY3MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKDY3MDMpfSw2MjI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIyNjUpLG89U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLHU9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxsPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1yLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyO2Z1bmN0aW9uIGkoZSx0LG4pe3ZhciByLHU9e30saT1udWxsLGM9bnVsbDtmb3IociBpbiB2b2lkIDAhPT1uJiYoaT0iIituKSx2b2lkIDAhPT10LmtleSYmKGk9IiIrdC5rZXkpLHZvaWQgMCE9PXQucmVmJiYoYz10LnJlZiksdClsLmNhbGwodCxyKSYmImtleSIhPT1yJiYicmVmIiE9PXImJih1W3JdPXRbcl0pO2lmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIHQ9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09dVtyXSYmKHVbcl09dFtyXSk7cmV0dXJueyQkdHlwZW9mOm8sdHlwZTplLGtleTppLHJlZjpjLHByb3BzOnUsX293bmVyOmEuY3VycmVudH19dC5GcmFnbWVudD11LHQuanN4PWksdC5qc3hzPWl9LDc4Njk6ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLHI9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksbz1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpLHU9U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKSxsPVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksYT1TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpLGk9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLGM9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSxzPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksZj1TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIiksZD1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IikscD1TeW1ib2wuaXRlcmF0b3IsaD17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0seT1PYmplY3QuYXNzaWduLF89e307ZnVuY3Rpb24gdihlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1fLHRoaXMudXBkYXRlcj1ufHxofWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gZyhlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1fLHRoaXMudXBkYXRlcj1ufHxofXYucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sdi5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT1lKXRocm93IEVycm9yKCJ0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4iKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSx0LCJzZXRTdGF0ZSIpfSx2LnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX0sYi5wcm90b3R5cGU9di5wcm90b3R5cGU7dmFyIG09Zy5wcm90b3R5cGU9bmV3IGI7bS5jb25zdHJ1Y3Rvcj1nLHkobSx2LnByb3RvdHlwZSksbS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgUj1BcnJheS5pc0FycmF5LFA9e2N1cnJlbnQ6bnVsbH0saj17Y3VycmVudDpudWxsfSxPPXt0cmFuc2l0aW9uOm51bGx9LEU9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6UCxSZWFjdEN1cnJlbnRDYWNoZTpqLFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOk8sUmVhY3RDdXJyZW50T3duZXI6e2N1cnJlbnQ6bnVsbH19LFM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx3PUUuUmVhY3RDdXJyZW50T3duZXI7ZnVuY3Rpb24gTShlLHQscil7dmFyIG8sdT17fSxsPW51bGwsYT1udWxsO2lmKG51bGwhPXQpZm9yKG8gaW4gdm9pZCAwIT09dC5yZWYmJihhPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKGw9IiIrdC5rZXkpLHQpUy5jYWxsKHQsbykmJiJrZXkiIT09byYmInJlZiIhPT1vJiYiX19zZWxmIiE9PW8mJiJfX3NvdXJjZSIhPT1vJiYodVtvXT10W29dKTt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWkpdS5jaGlsZHJlbj1yO2Vsc2UgaWYoMTxpKXtmb3IodmFyIGM9QXJyYXkoaSkscz0wO3M8aTtzKyspY1tzXT1hcmd1bWVudHNbcysyXTt1LmNoaWxkcmVuPWN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gaT1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT11W29dJiYodVtvXT1pW29dKTtyZXR1cm57JCR0eXBlb2Y6bix0eXBlOmUsa2V5OmwscmVmOmEscHJvcHM6dSxfb3duZXI6dy5jdXJyZW50fX1mdW5jdGlvbiBUKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1ufXZhciBDPS9cLysvZztmdW5jdGlvbiB4KGUsdCl7dmFyIG4scjtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT8obj0iIitlLmtleSxyPXsiPSI6Ij0wIiwiOiI6Ij0yIn0sIiQiK24ucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiByW2VdfSkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIEEoKXt9ZnVuY3Rpb24gTihlLHQsbyl7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgdT1bXSxsPTA7cmV0dXJuIWZ1bmN0aW9uIGUodCxvLHUsbCxhKXt2YXIgaSxjLHMsZj10eXBlb2YgdDsoInVuZGVmaW5lZCI9PT1mfHwiYm9vbGVhbiI9PT1mKSYmKHQ9bnVsbCk7dmFyIGg9ITE7aWYobnVsbD09PXQpaD0hMDtlbHNlIHN3aXRjaChmKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmg9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIG46Y2FzZSByOmg9ITA7YnJlYWs7Y2FzZSBkOnJldHVybiBlKChoPXQuX2luaXQpKHQuX3BheWxvYWQpLG8sdSxsLGEpfX1pZihoKXJldHVybiBhPWEodCksaD0iIj09PWw/Ii4iK3godCwwKTpsLFIoYSk/KHU9IiIsbnVsbCE9aCYmKHU9aC5yZXBsYWNlKEMsIiQmLyIpKyIvIiksZShhLG8sdSwiIixmdW5jdGlvbihlKXtyZXR1cm4gZX0pKTpudWxsIT1hJiYoVChhKSYmKGk9YSxjPXUrKCFhLmtleXx8dCYmdC5rZXk9PT1hLmtleT8iIjooIiIrYS5rZXkpLnJlcGxhY2UoQywiJCYvIikrIi8iKStoLGE9eyQkdHlwZW9mOm4sdHlwZTppLnR5cGUsa2V5OmMscmVmOmkucmVmLHByb3BzOmkucHJvcHMsX293bmVyOmkuX293bmVyfSksby5wdXNoKGEpKSwxO2g9MDt2YXIgeT0iIj09PWw/Ii4iOmwrIjoiO2lmKFIodCkpZm9yKHZhciBfPTA7Xzx0Lmxlbmd0aDtfKyspZj15K3gobD10W19dLF8pLGgrPWUobCxvLHUsZixhKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZihfPW51bGw9PT0ocz10KXx8Im9iamVjdCIhPXR5cGVvZiBzP251bGw6ImZ1bmN0aW9uIj09dHlwZW9mKHM9cCYmc1twXXx8c1siQEBpdGVyYXRvciJdKT9zOm51bGwpKWZvcih0PV8uY2FsbCh0KSxfPTA7IShsPXQubmV4dCgpKS5kb25lOylmPXkreChsPWwudmFsdWUsXysrKSxoKz1lKGwsbyx1LGYsYSk7ZWxzZSBpZigib2JqZWN0Ij09PWYpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW4pcmV0dXJuIGUoZnVuY3Rpb24oZSl7c3dpdGNoKGUuc3RhdHVzKXtjYXNlImZ1bGZpbGxlZCI6cmV0dXJuIGUudmFsdWU7Y2FzZSJyZWplY3RlZCI6dGhyb3cgZS5yZWFzb247ZGVmYXVsdDpzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlLnN0YXR1cz9lLnRoZW4oQSxBKTooZS5zdGF0dXM9InBlbmRpbmciLGUudGhlbihmdW5jdGlvbih0KXsicGVuZGluZyI9PT1lLnN0YXR1cyYmKGUuc3RhdHVzPSJmdWxmaWxsZWQiLGUudmFsdWU9dCl9LGZ1bmN0aW9uKHQpeyJwZW5kaW5nIj09PWUuc3RhdHVzJiYoZS5zdGF0dXM9InJlamVjdGVkIixlLnJlYXNvbj10KX0pKSxlLnN0YXR1cyl7Y2FzZSJmdWxmaWxsZWQiOnJldHVybiBlLnZhbHVlO2Nhc2UicmVqZWN0ZWQiOnRocm93IGUucmVhc29ufX10aHJvdyBlfSh0KSxvLHUsbCxhKTt0aHJvdyBFcnJvcigiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiAiKygiW29iamVjdCBPYmplY3RdIj09PShvPVN0cmluZyh0KSk/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXModCkuam9pbigiLCAiKSsifSI6bykrIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC4iKX1yZXR1cm4gaH0oZSx1LCIiLCIiLGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobyxlLGwrKyl9KSx1fWZ1bmN0aW9uIEQoZSl7aWYoLTE9PT1lLl9zdGF0dXMpe3ZhciB0PWUuX3Jlc3VsdDsodD10KCkpLnRoZW4oZnVuY3Rpb24odCl7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD10KX0sZnVuY3Rpb24odCl7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD10KX0pLC0xPT09ZS5fc3RhdHVzJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKDE9PT1lLl9zdGF0dXMpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH1mdW5jdGlvbiBJKCl7cmV0dXJuIG5ldyBXZWFrTWFwfWZ1bmN0aW9uIFUoKXtyZXR1cm57czowLHY6dm9pZCAwLG86bnVsbCxwOm51bGx9fWZ1bmN0aW9uIGsoKXt9dmFyIEY9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcG9ydEVycm9yP3JlcG9ydEVycm9yOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9O3QuQ2hpbGRyZW49e21hcDpOLGZvckVhY2g6ZnVuY3Rpb24oZSx0LG4pe04oZSxmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuKX0sY291bnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9MDtyZXR1cm4gTihlLGZ1bmN0aW9uKCl7dCsrfSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gTihlLGZ1bmN0aW9uKGUpe3JldHVybiBlfSl8fFtdfSxvbmx5OmZ1bmN0aW9uKGUpe2lmKCFUKGUpKXRocm93IEVycm9yKCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4iKTtyZXR1cm4gZX19LHQuQ29tcG9uZW50PXYsdC5GcmFnbWVudD1vLHQuUHJvZmlsZXI9bCx0LlB1cmVDb21wb25lbnQ9Zyx0LlN0cmljdE1vZGU9dSx0LlN1c3BlbnNlPXMsdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1FLHQuYWN0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoImFjdCguLi4pIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgb2YgUmVhY3QuIil9LHQuY2FjaGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ai5jdXJyZW50O2lmKCF0KXJldHVybiBlLmFwcGx5KG51bGwsYXJndW1lbnRzKTt2YXIgbj10LmdldENhY2hlRm9yVHlwZShJKTt2b2lkIDA9PT0odD1uLmdldChlKSkmJih0PVUoKSxuLnNldChlLHQpKSxuPTA7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKyl7dmFyIG89YXJndW1lbnRzW25dO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBvfHwib2JqZWN0Ij09dHlwZW9mIG8mJm51bGwhPT1vKXt2YXIgdT10Lm87bnVsbD09PXUmJih0Lm89dT1uZXcgV2Vha01hcCksdm9pZCAwPT09KHQ9dS5nZXQobykpJiYodD1VKCksdS5zZXQobyx0KSl9ZWxzZSBudWxsPT09KHU9dC5wKSYmKHQucD11PW5ldyBNYXApLHZvaWQgMD09PSh0PXUuZ2V0KG8pKSYmKHQ9VSgpLHUuc2V0KG8sdCkpfWlmKDE9PT10LnMpcmV0dXJuIHQudjtpZigyPT09dC5zKXRocm93IHQudjt0cnl7dmFyIGw9ZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuKG49dCkucz0xLG4udj1sfWNhdGNoKGUpe3Rocm93KGw9dCkucz0yLGwudj1lLGV9fX0sdC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LHIpe2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoIlRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgIitlKyIuIik7dmFyIG89eSh7fSxlLnByb3BzKSx1PWUua2V5LGw9ZS5yZWYsYT1lLl9vd25lcjtpZihudWxsIT10KXtpZih2b2lkIDAhPT10LnJlZiYmKGw9dC5yZWYsYT13LmN1cnJlbnQpLHZvaWQgMCE9PXQua2V5JiYodT0iIit0LmtleSksZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzKXZhciBpPWUudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGMgaW4gdClTLmNhbGwodCxjKSYmImtleSIhPT1jJiYicmVmIiE9PWMmJiJfX3NlbGYiIT09YyYmIl9fc291cmNlIiE9PWMmJihvW2NdPXZvaWQgMD09PXRbY10mJnZvaWQgMCE9PWk/aVtjXTp0W2NdKX12YXIgYz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWMpby5jaGlsZHJlbj1yO2Vsc2UgaWYoMTxjKXtpPUFycmF5KGMpO2Zvcih2YXIgcz0wO3M8YztzKyspaVtzXT1hcmd1bWVudHNbcysyXTtvLmNoaWxkcmVuPWl9cmV0dXJueyQkdHlwZW9mOm4sdHlwZTplLnR5cGUsa2V5OnUscmVmOmwscHJvcHM6byxfb3duZXI6YX19LHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4oZT17JCR0eXBlb2Y6aSxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9KS5Qcm92aWRlcj17JCR0eXBlb2Y6YSxfY29udGV4dDplfSxlLkNvbnN1bWVyPWV9LHQuY3JlYXRlRWxlbWVudD1NLHQuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdD1NLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0sdC5jcmVhdGVSZWY9ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX0sdC5mb3J3YXJkUmVmPWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpjLHJlbmRlcjplfX0sdC5pc1ZhbGlkRWxlbWVudD1ULHQubGF6eT1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6ZCxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmV9LF9pbml0OkR9fSx0Lm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6Zix0eXBlOmUsY29tcGFyZTp2b2lkIDA9PT10P251bGw6dH19LHQuc3RhcnRUcmFuc2l0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PU8udHJhbnNpdGlvbixuPW5ldyBTZXQ7Ty50cmFuc2l0aW9uPXtfY2FsbGJhY2tzOm59O3ZhciByPU8udHJhbnNpdGlvbjt0cnl7dmFyIG89ZSgpOyJvYmplY3QiPT10eXBlb2YgbyYmbnVsbCE9PW8mJiJmdW5jdGlvbiI9PXR5cGVvZiBvLnRoZW4mJihuLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUocixvKX0pLG8udGhlbihrLEYpKX1jYXRjaChlKXtGKGUpfWZpbmFsbHl7Ty50cmFuc2l0aW9uPXR9fSx0LnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaD1mdW5jdGlvbigpe3JldHVybiBQLmN1cnJlbnQudXNlQ2FjaGVSZWZyZXNoKCl9LHQudXNlPWZ1bmN0aW9uKGUpe3JldHVybiBQLmN1cnJlbnQudXNlKGUpfSx0LnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFAuY3VycmVudC51c2VDYWxsYmFjayhlLHQpfSx0LnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFAuY3VycmVudC51c2VDb250ZXh0KGUpfSx0LnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LHQudXNlRGVmZXJyZWRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiBQLmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZShlLHQpfSx0LnVzZUVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBQLmN1cnJlbnQudXNlRWZmZWN0KGUsdCl9LHQudXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gUC5jdXJyZW50LnVzZUlkKCl9LHQudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFAuY3VycmVudC51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxuKX0sdC51c2VJbnNlcnRpb25FZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUC5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChlLHQpfSx0LnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBQLmN1cnJlbnQudXNlTGF5b3V0RWZmZWN0KGUsdCl9LHQudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBQLmN1cnJlbnQudXNlTWVtbyhlLHQpfSx0LnVzZU9wdGltaXN0aWM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUC5jdXJyZW50LnVzZU9wdGltaXN0aWMoZSx0KX0sdC51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUC5jdXJyZW50LnVzZVJlZHVjZXIoZSx0LG4pfSx0LnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gUC5jdXJyZW50LnVzZVJlZihlKX0sdC51c2VTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gUC5jdXJyZW50LnVzZVN0YXRlKGUpfSx0LnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUC5jdXJyZW50LnVzZVN5bmNFeHRlcm5hbFN0b3JlKGUsdCxuKX0sdC51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIFAuY3VycmVudC51c2VUcmFuc2l0aW9uKCl9LHQudmVyc2lvbj0iMTguMy4wLWNhbmFyeS0xNzhjMjY3YTRlLTIwMjQxMjE4In0sMjI2NTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKDc4NjkpfSw3NDM3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oNjIyKX0sMjUyMjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkpdGhyb3cgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gdXNlIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGV9bi5yKHQpLG4uZCh0LHtfOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2U6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KX0sNjc1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpLG4uZCh0LHtfOmZ1bmN0aW9uKCl7cmV0dXJuIG99LF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleTpmdW5jdGlvbigpe3JldHVybiBvfX0pO3ZhciByPTA7ZnVuY3Rpb24gbyhlKXtyZXR1cm4iX19wcml2YXRlXyIrcisrKyJfIitlfX0sNzA0MzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4ucih0KSxuLmQodCx7XzpmdW5jdGlvbigpe3JldHVybiByfSxfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn19KX0sMzA5OTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuIG51bGw7dmFyIHQ9bmV3IFdlYWtNYXAsbj1uZXcgV2Vha01hcDtyZXR1cm4ocj1mdW5jdGlvbihlKXtyZXR1cm4gZT9uOnR9KShlKX1mdW5jdGlvbiBvKGUsdCl7aWYoIXQmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm57ZGVmYXVsdDplfTt2YXIgbj1yKHQpO2lmKG4mJm4uaGFzKGUpKXJldHVybiBuLmdldChlKTt2YXIgbz17X19wcm90b19fOm51bGx9LHU9T2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2Zvcih2YXIgbCBpbiBlKWlmKCJkZWZhdWx0IiE9PWwmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGwpKXt2YXIgYT11P09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxsKTpudWxsO2EmJihhLmdldHx8YS5zZXQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLGwsYSk6b1tsXT1lW2xdfXJldHVybiBvLmRlZmF1bHQ9ZSxuJiZuLnNldChlLG8pLG99bi5yKHQpLG4uZCh0LHtfOmZ1bmN0aW9uKCl7cmV0dXJuIG99LF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQ6ZnVuY3Rpb24oKXtyZXR1cm4gb319KX19XSk7"}},"time_used":278,"timings":{"blocked":-1,"dns":0,"connect":42,"send":0,"wait":103,"receive":82,"ssl":51},"alerts":{"ids":null,"analyzer":[{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"absicherung-kontakt.com/_next/static/chunks/main-app-70ee7df9db027ccc.js","fqdn":"absicherung-kontakt.com","domain":"absicherung-kontakt.com","tld":"com"},"ip":{"addr":"46.151.182.84","port":443,"asn":44477,"as":"Stark Industries Solutions Ltd","country":"The Netherlands","country_code":"NL"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://absicherung-kontakt.com/unavailable","date":"2026-07-27T00:12:33.879Z","timestamp":1785111153879,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"absicherung-kontakt.com","organization":""},"issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validity":{"start":"Sat, 25 Jul 2026 14:53:48 GMT","end":"Fri, 23 Oct 2026 14:53:47 GMT"},"fingerprint":{"sha1":"B8:68:6F:79:25:59:CC:8C:D3:A0:8F:9C:B8:A5:5B:98:76:65:51:C2","sha256":"E4:CF:72:43:AF:FD:B7:E9:39:EA:B1:A5:37:D1:1D:7C:2B:53:29:92:2C:0A:E0:7A:7B:4E:21:02:16:1B:2A:D3"}}},"request":{"raw":"GET /_next/static/chunks/main-app-70ee7df9db027ccc.js HTTP/1.1\r\nHost: absicherung-kontakt.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://absicherung-kontakt.com/unavailable\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nServer: nginx/1.24.0 (Ubuntu)\r\nDate: Mon, 27 Jul 2026 00:12:33 GMT\r\nContent-Type: application/javascript; charset=UTF-8\r\nContent-Length: 461\r\nConnection: keep-alive\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nReferrer-Policy: strict-origin-when-cross-origin\r\nPermissions-Policy: camera=(), microphone=(), geolocation=()\r\nX-DNS-Prefetch-Control: on\r\nCache-Control: public, max-age=31536000, immutable\r\nAccept-Ranges: bytes\r\nLast-Modified: Sat, 25 Jul 2026 15:50:04 GMT\r\nETag: W/\"1cd-19f99f825a8\"\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Ubuntu","description":"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.","website":"https://www.ubuntu.com/server","common_platform_enumeration":"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*","icon":"Ubuntu.svg","categories":["Operating systems"]},{"name":"Nginx:1.24.0","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":461,"size_decoded":989,"mime_type":"application/javascript; charset=UTF-8","magic":"ASCII text, with very long lines (461), with no line terminators","md5":"3eaf12a540fadb070ef6722138574f92","sha1":"990942dc9054283a1d82636a19ce57ce2e8f16f6","sha256":"491a689e0ee919fc28a0ee04cdd9d264b27e10ee8baed794bb9fbf3249249d69","sha512":"ea6330a122f24236f7e8302d97122718c2c8e87618bc4ba3f63ff04bf9ca23ea2852328247f66e9323cb30b46bc544861d167fd3353de64042955f4633d127d8","ssdeep":"","tlshash":"59f012992b4d701f3d13ad24fdd35c2e755e416428a759501a14ddb12c336aca3f1c79","first_seen":"2026-07-26T12:48:47.492553Z","last_seen":"2026-07-27T00:14:58.581761Z","times_seen":8,"resource_available":true,"data":"KHNlbGYud2VicGFja0NodW5rX05fRT1zZWxmLndlYnBhY2tDaHVua19OX0V8fFtdKS5wdXNoKFtbNzQ0XSx7NzU5MTpmdW5jdGlvbihlLG4sdCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbih0LnQuYmluZCh0LDI4NDYsMjMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKHQudC5iaW5kKHQsOTEwNywyMykpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4odC50LmJpbmQodCwxMDYwLDIzKSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbih0LnQuYmluZCh0LDQ3MDcsMjMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKHQudC5iaW5kKHQsODAsMjMpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKHQudC5iaW5kKHQsNjQyMywyMykpfX0sZnVuY3Rpb24oZSl7dmFyIG49ZnVuY3Rpb24obil7cmV0dXJuIGUoZS5zPW4pfTtlLk8oMCxbOTcxLDExN10sZnVuY3Rpb24oKXtyZXR1cm4gbig0Mjc4KSxuKDc1OTEpfSksX05fRT1lLk8oKX1dKTs="}},"time_used":100,"timings":{"blocked":-1,"dns":0,"connect":41,"send":0,"wait":59,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"ultradns","sensor_type":"DNS","title":"DigiCert UltraDNS","description":"DigiCert UltraDNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://vercara.digicert.com/ultra-dns-public","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"cira_dns","sensor_type":"DNS","title":"CIRA Canadian Shield DNS","description":"CIRA Canadian Shield DNS","scan_date":"2026-07-26","alert":"Sinkholed","trigger":"absicherung-kontakt.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cira.ca/en/canadian-shield/","meta":null}],"urlquery":null}}]}
