{"id":6404,"date":"2026-07-11T01:11:09","date_gmt":"2026-07-11T01:11:09","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-7-test-1-reading\/"},"modified":"2026-07-12T03:24:33","modified_gmt":"2026-07-12T03:24:33","slug":"celpip-set-7-test-1-reading","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-7-test-1-reading\/","title":{"rendered":"CELPIP Reading \u2014 Set 7 \u00b7 Practice Test 1"},"content":{"rendered":"<div class=\"clpr-wrap\" id=\"clprWrap\">\n<section class=\"clpr-hero\">\n<div class=\"clpr-aurora\"><span><\/span><span><\/span><span><\/span><\/div>\n<div class=\"clpr-hero-badges\"> <span class=\"clpr-badge-brand\">AllEnglish4U<\/span> <span class=\"clpr-badge-set\">CELPIP General &middot; Set 7<\/span> <\/div>\n<h1>Reading Practice Test 1<\/h1>\n<p class=\"clpr-hero-sub\">4 parts &middot; 38 questions &middot; about 55 minutes. Read each passage and choose the best option for every drop-down. Official Paragon question set with verified answer key.<\/p>\n<div class=\"clpr-hero-chips\"> <span class=\"clpr-chip\">Part 1 &middot; Correspondence<\/span> <span class=\"clpr-chip\">Part 2 &middot; Apply a Diagram<\/span> <span class=\"clpr-chip\">Part 3 &middot; Information<\/span> <span class=\"clpr-chip\">Part 4 &middot; Viewpoints<\/span> <\/div>\n<p> <button class=\"clpr-cta\" id=\"clprStart\">Start the Reading Test<\/button> <\/section>\n<div class=\"clpr-toolbar\" id=\"clprToolbar\" hidden> <span class=\"clpr-score-chip\" id=\"clprScoreChip\">0 \/ 38 answered<\/span> <span class=\"clpr-toolbar-spacer\"><\/span> <button class=\"clpr-tbtn\" id=\"clprReset\">Reset<\/button> <button class=\"clpr-tbtn clpr-tbtn-check\" id=\"clprCheck\">Check answers<\/button> <\/div>\n<div class=\"clpr-sim\" id=\"clprSim\" hidden>\n<div class=\"clpr-dots\" id=\"clprDots\"><\/div>\n<div class=\"clpr-cat\" id=\"clprCat\"><\/div>\n<\/p><\/div>\n<div class=\"clpr-results\" id=\"clprResults\" hidden><\/div>\n<\/p><\/div>\n<p><script>eval(atob(\"J3VzZSBzdHJpY3QnOwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ0VMUElQIFJlYWRpbmcgXHUyMDE0IFByYWN0aWNlIFRlc3QgMSAoU2V0IDEpCiAgIFNvdXJjZTogUGFyYWdvbiBvZmZpY2lhbCAiUHJhY3RpY2UgVGVzdCAxIFNldCAxIC0gUmVhZGluZyIgKDM3IHBwKS4KICAgQWxsIHN0ZW1zLCBvcHRpb25zIGFuZCBrZXlzIHZlcmlmaWVkIGFnYWluc3QgdGhlIHByaW50ZWQgQW5zd2VyIEtleS4KICAgRGF0YSBtb2RlbDogcGFydHNbXSAtPiB7IHBhc3NhZ2UobGVmdCkgLCBibG9ja3NbXShyaWdodCkgfQogICAgIGJsb2NrLnR5cGU6ICdzdGVtbGlzdCcgfCAnY2xvemUnIHwgJ21hdGNoJwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KdmFyIFJEQVRBID0geyJ0ZXN0TGFiZWwiOiJQcmFjdGljZSBUZXN0IDEiLCJwYXJ0cyI6W3siaWQiOjEsIm5hbWUiOiJSZWFkaW5nIFBhcnQgMTogUmVhZGluZyBDb3JyZXNwb25kZW5jZSIsInRpbWUiOiIxMCBtaW51dGVzIiwicGFzc2FnZSI6eyJ0eXBlIjoidGV4dCIsImxhYmVsIjoiUmVhZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UuIiwiaHRtbCI6IjxwPkRlYXIgTWFnZ2llIGFuZCBBbGV4LDwvcD48cD5JIHNhdyB0aGUgbmV3cyBhYm91dCB0aGUgdGVycmlibGUgc3Rvcm0gYW5kIGZsb29kIHRoYXQgaGl0IFNwaXJpdHdvb2QgbGFzdCB3ZWVrLiBJIHdhcyByZWxpZXZlZCB3aGVuIEkgcmVjZWl2ZWQgYW4gZW1haWwgZnJvbSB5b3UuIEl0IHdhcyBnb29kIHRvIGxlYXJuIHRoYXQgeW91IGFyZSBib3RoIG9rYXkgYnV0IHVuZm9ydHVuYXRlIHRvIGhlYXIgdGhhdCB5b3VyIGhvdXNlIHdhcyBkYW1hZ2VkLiBTdGlsbCwgeW91IHdlcmUgbHVja3kgdGhhdCB0aGVyZSB3ZXJlIG9ubHkgc29tZSBicm9rZW4gd2luZG93cyBhbmQgYSBsaXR0bGUgZmxvb2RpbmcgaW4gYSBmZXcgcm9vbXMuIFdlIHJlYWxpemUgdGhhdCBtYW55IHBlb3BsZSB3ZXJlIGxlc3MgZm9ydHVuYXRlLiBUaGUgbmV3cyBwcm9ncmFtcyBzaG93ZWQgcGljdHVyZXMgb2YgYWxsIHRoZSBob3JyaWJsZSBkZXN0cnVjdGlvbiB0aGF0IHRoZSB3aW5kIGFuZCBoZWF2eSByYWlucyBjYXVzZWQmbWRhc2g7dGhlIHRyYWdpYyBsb3NzIG9mIGxpdmVzIGFuZCBob21lcywgYW5kIHRoZSBmbG9vZGluZyBvZiBmYXJtbGFuZC48L3A+PHA+T3VyIGhlYXJ0cyBnbyBvdXQgdG8gdGhlIGZsb29kIHZpY3RpbXMgYW5kLCBhcyB5b3UgaGFkIHJlcXVlc3RlZCwgUGV0ZXIgYW5kIEkgaGF2ZSBwdXQgdG9nZXRoZXIgc29tZSByZWxpZWYgcGFja2FnZXMgZm9yIHRob3NlIHdobyBsb3N0IHRoZWlyIGhvbWVzIGFuZCBiZWxvbmdpbmdzIGluIHRoZSBzdG9ybS4gV2l0aCB0aGUgaGVscCBvZiBvdXIgbmVpZ2hib3JzLCB3ZSBoYXZlIGNvbGxlY3RlZCBzb21lIGJhc2ljIHN1cHBsaWVzLCBibGFua2V0cywgY2xvdGhpbmcsIGNhbm5lZCBmb29kLCBhbmQgYm90dGxlZCB3YXRlci4gQSBmcmllbmQgb2Ygb3VycywgdHJhdmVsbGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIFNwaXJpdHdvb2QgaW4gYSBmZXcgZGF5cywgaGFzIG9mZmVyZWQgdG8gZHJvcCBvZmYgdGhlIHBhY2thZ2VzLiBXZSBhcmUgbm93IGRpc2N1c3NpbmcgaG93IHdlIGNvdWxkIG9yZ2FuaXplIGEgbGFyZ2VyIGZvb2QgYW5kIGNsb3RoaW5nIGRyaXZlIGFuZCBnZXQgdGhlIGVudGlyZSB0b3duIG9mIEdsYWRzdG9uZSBpbnZvbHZlZC4gSSZyc3F1bztsbCBiZSBtZWV0aW5nIHdpdGggdGhlIG1heW9yLCBTYXJhaCBTdGFubGV5LCBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGRpc2N1c3MgaG93IHRvIG9yZ2FuaXplIHRoZSByZWxpZWYgZWZmb3J0LjwvcD48cD5CZWNhdXNlIG9mIHRoZSBkb2N0b3Igc2hvcnRhZ2UgaW4gR2xhZHN0b25lLCBQZXRlciBhbmQgSSBoYXZlIGJlZW4gd29ya2luZyByZWFsbHkgbG9uZyBob3VycyBhdCB0aGUgY2xpbmljIGxhdGVseS4gT3RoZXJ3aXNlLCB3ZSBjb3VsZCBoYXZlIHByb3ZpZGVkIG91ciBtZWRpY2FsIGV4cGVydGlzZSB0byB0aGUgZmxvb2QgdmljdGltcy4gU3RpbGwsIG91ciB5b3VuZ2VyIHNvbiBKYW1lcyBoYXMgdm9sdW50ZWVyZWQgd2l0aCBhIGdyb3VwIHRoYXQgd2lsbCBoZWxwIGNsZWFuIHVwIHRoZSBmbG9vZGVkIGFyZWEuIEphbWVzIGlzIGZpbmlzaGluZyBoaXMgbGFzdCBzZW1lc3RlciBvZiB1bml2ZXJzaXR5IG5leHQgd2Vlaywgc28gaGUmcnNxdW87bGwgYmUgZmx5aW5nIG91dCByaWdodCBhZnRlciBoaXMgY2xhc3NlcyBlbmQgb24gRnJpZGF5LjwvcD48cD5QbGVhc2Uga2VlcCB1cyBpbmZvcm1lZCBvZiB0aGUgZXZvbHZpbmcgc2l0dWF0aW9uIGluIFNwaXJpdHdvb2QuIElmIHRoZXJlIGlzIGFueXRoaW5nIHlvdSBuZWVkLCBkb24mcnNxdW87dCBoZXNpdGF0ZSB0byBhc2suIFNpbmNlIHdlIGFsbCBtZXQgaW4gbWVkaWNhbCBzY2hvb2wsIHlvdSBoYXZlIGJvdGggYmVlbiBsaWtlIGZhbWlseSB0byBQZXRlciBhbmQgSS4gV2UgaGF2ZSBhIGd1ZXN0IHJvb20gdGhhdCB5b3UgYXJlIG1vcmUgdGhhbiB3ZWxjb21lIHRvIHN0YXkgaW4gZm9yIGFzIGxvbmcgYXMgeW91IG5lZWQgdG8uPC9wPjxwPk91ciB0aG91Z2h0cyBhcmUgd2l0aCB5b3UgYm90aCwgYXMgd2VsbCBhcyB3aXRoIGFsbCB0aGUgcGVvcGxlIGluIHRoZSBmbG9vZC1kZXZhc3RhdGVkIGFyZWEuPC9wPjxwPkFybGVuZTwvcD4ifSwiYmxvY2tzIjpbeyJ0eXBlIjoic3RlbWxpc3QiLCJpbnN0ciI6IlVzaW5nIHRoZSBkcm9wLWRvd24gbWVudSAoICYjOTY2MjsgKSwgY2hvb3NlIHRoZSBiZXN0IG9wdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGluZm9ybWF0aW9uIGdpdmVuIGluIHRoZSBtZXNzYWdlLiIsIml0ZW1zIjpbeyJuIjoxLCJwcmUiOiJXaGF0IGlzIEFybGVuZVx1MjAxOXMgam9iPyIsIm9wdGlvbnMiOlsiYSByZWxpZWYgd29ya2VyIiwiYSB2b2x1bnRlZXIiLCJhIGRvY3RvciIsImEgZ292ZXJubWVudCBvZmZpY2VyIl0sImtleSI6M30seyJuIjoyLCJwcmUiOiJBcmxlbmUgaXMiLCJvcHRpb25zIjpbImFza2luZyB0aGUgbWF5b3Igb2YgU3Bpcml0d29vZCBmb3IgaGVscC4iLCJyZW50aW5nIGhlciBndWVzdCByb29tIHRvIGZhbWlsaWVzIGluIG5lZWQuIiwiZ2V0dGluZyBoZWxwIGZyb20gaGVyIGNvbW11bml0eS4iLCJ0cmFpbmluZyBhcyBhbiBlbnZpcm9ubWVudGFsIGNsZWFuLXVwIGV4cGVydC4iXSwia2V5IjozfSx7Im4iOjMsInByZSI6Ik1hZ2dpZSBhbmQgQWxleFx1MjAxOXMgaG91c2UiLCJvcHRpb25zIjpbInJlY2VpdmVkIHNvbWUgbWlub3IgZGFtYWdlLiIsInN1ZmZlcmVkIGRhbWFnZSB0byB0aGUgZ3Vlc3Qgcm9vbS4iLCJ3YXMgdmVyeSBiYWRseSBkYW1hZ2VkLiIsIndhcyBsZXNzIGRhbWFnZWQgdGhhbiB0aGVpciBmYXJtLiJdLCJrZXkiOjF9LHsibiI6NCwicHJlIjoiQXJsZW5lIGlzIiwib3B0aW9ucyI6WyJwbGFubmluZyB0byB2aXNpdCBNYWdnaWUgYW5kIEFsZXguIiwiY29uY2VybmVkIGFib3V0IE1hZ2dpZSBhbmQgQWxleFx1MjAxOXMgaGVhbHRoLiIsInNlbmRpbmcgdXNlZnVsIGdvb2RzIHRvIFNwaXJpdHdvb2QuIiwid29ycmllZCBhYm91dCBKYW1lc1x1MjAxOSB3ZWxsLWJlaW5nLiJdLCJrZXkiOjN9LHsibiI6NSwicHJlIjoiQXJsZW5lIGlzIHdyaXRpbmcgdG8iLCJvcHRpb25zIjpbIm9mZmVyIGZpbmFuY2lhbCBoZWxwIHRvIGhlciBmcmllbmRzLiIsIm9mZmVyIGhlciBzeW1wYXRoeSBhbmQgc3VwcG9ydC4iLCJyZXF1ZXN0IGFzc2lzdGFuY2UgaW4gaGVyIG1lZGljYWwgY2xpbmljLiIsInJlcXVlc3QgZG9uYXRpb25zIGZvciBhZmZlY3RlZCBmYW1pbGllcy4iXSwia2V5IjoyfSx7Im4iOjYsInByZSI6IkFybGVuZSBhbmQgUGV0ZXJcdTIwMTlzIHNvbiB3aWxsIiwib3B0aW9ucyI6WyJjdXQgc2hvcnQgaGlzIHN0dWRpZXMgdG8gaGVscC4iLCJkZWxpdmVyIG1lZGljYWwgc3VwcGxpZXMuIiwib3JnYW5pemUgYWlkIGluIEdsYWRzdG9uZS4iLCJ0cmF2ZWwgdG8gU3Bpcml0d29vZC4iXSwia2V5Ijo0fV19LHsidHlwZSI6ImNsb3plIiwiaW5zdHIiOiJIZXJlIGlzIGEgcmVzcG9uc2UgdG8gdGhlIG1lc3NhZ2UuIENvbXBsZXRlIHRoZSByZXNwb25zZSBieSBmaWxsaW5nIGluIHRoZSBibGFua3MuIFNlbGVjdCB0aGUgYmVzdCBjaG9pY2UgZm9yIGVhY2ggYmxhbmsgZnJvbSB0aGUgZHJvcC1kb3duIG1lbnUgKCAmIzk2NjI7ICkuIiwiYm9keSI6WyJIaSBBcmxlbmUsXG5cblRoYW5rIHlvdSBzbyBtdWNoIGZvciB5b3VyIG9mZmVyIG9mICIseyJiIjo3LCJvcHRpb25zIjpbImJ1aWxkaW5nIHN1cHBsaWVzIiwibWVkaWNhbCBzdXBwbGllcyIsInBsYW5lIHRpY2tldHMgdG8gR2xhZHN0b25lIiwiYSBwbGFjZSB0byBzdGF5Il0sImtleSI6NH0sIi4gQXQgdGhlIG1vbWVudCwgdGhvdWdoLCBJIHRoaW5rIHdlIGFyZSBva2F5LiBUaGUgZ292ZXJubWVudCBoYXMgYmVlbiBhIHRyZW1lbmRvdXMgaGVscCwgaGF2aW5nIGZsb3duIGluIGZvb2QsIHN1cHBsaWVzLCBhbmQgdGVtcG9yYXJ5IHNoZWx0ZXJzLiBGb3J0dW5hdGVseSwgd2UgaGF2ZSBiZWVuIGFibGUgdG8gIix7ImIiOjgsIm9wdGlvbnMiOlsicmVidWlsZCBvdXIgaG91c2UiLCJzdGF5IGluIG91ciBvd24gaG9tZSIsInJlcGFpciB0aGUgcm9vZiIsImNsZWFyIHRoZSBicm9rZW4gdHJlZXMiXSwia2V5IjoyfSwiLlxuXG5Ib3dldmVyLCBhbGwgb2YgdGhlIHJvYWRzIGluIGFuZCBvdXQgb2YgdG93biBjb250aW51ZSB0byBiZSBibG9ja2VkLCBzbywgaG9wZWZ1bGx5LCB0aGUgIix7ImIiOjksIm9wdGlvbnMiOlsiYXJteSBwZXJzb25uZWwiLCJtYXlvciIsIm1lZGljYWwgdGVhbSIsInJlbGllZiBwYWNrYWdlcyJdLCJrZXkiOjR9LCIgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIG1ha2UgaXQgdGhyb3VnaCBzb21laG93LiBDb25zaWRlcmluZyB0aGUgc3RhdGUgb2YgdGhpbmdzIGhlcmUsIEkgYW0gbHVja3kgdG8gZXZlbiBoYXZlIGEgd2F5IHRvIGNvbnRhY3QgeW91LiBBbWF6aW5nbHksIGRlc3BpdGUgdGhlIGRpc3J1cHRpb24gb2YgbWFueSBjb21tdW5pY2F0aW9uIHNlcnZpY2VzLCAiLHsiYiI6MTAsIm9wdGlvbnMiOlsib3VyIHJhZGlvIiwidGhlIGludGVybmV0IiwidGhlIHBob25lIHNlcnZpY2UiLCJ0aGUgcG9zdGFsIHNlcnZpY2UiXSwia2V5IjoyfSwiIGlzIHN0aWxsIHdvcmtpbmcuXG5cbkFueXdheXMsIHBsZWFzZSB0ZWxsIEphbWVzIGhpcyAiLHsiYiI6MTEsIm9wdGlvbnMiOlsiY2xvdGhpbmcgZG9uYXRpb25zIGFyZSIsIm1lZGljYWwgc3VwcGxpZXMgYXJlIiwidGVhbSBvZiB2b2x1bnRlZXJzIGlzIiwidW5pdmVyc2l0eSBmcmllbmRzIGFyZSJdLCJrZXkiOjN9LCIgbW9zdCB3ZWxjb21lLiBXZSBuZWVkIGFsbCB0aGUgaGVscCB3ZSBjYW4gZ2V0IHRhY2tsaW5nIHRoaXMgbWVzcy5cblxuTWFnZ2llIl19XX0seyJpZCI6MiwibmFtZSI6IlJlYWRpbmcgUGFydCAyOiBSZWFkaW5nIHRvIEFwcGx5IGEgRGlhZ3JhbSIsInRpbWUiOiI4IG1pbnV0ZXMiLCJwYXNzYWdlIjp7InR5cGUiOiJ0ZXh0IiwibGFiZWwiOiJSZWFkIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbS4iLCJodG1sIjoiPHN0eWxlPi5hZS11Y2ZseWVye2JvcmRlcjoxcHggc29saWQgI2NiZDVlMTtib3JkZXItcmFkaXVzOjhweDtvdmVyZmxvdzpoaWRkZW47Zm9udC1zaXplOjE0cHg7YmFja2dyb3VuZDojZmZmfS5hZS11Y2hlYWR7YmFja2dyb3VuZDojMWYyOTM3O2NvbG9yOiNmZmY7cGFkZGluZzoxMnB4IDE0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmFlLXVjaGVhZCBoM3ttYXJnaW46MDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToyMHB4O2xldHRlci1zcGFjaW5nOjFweDtmb250LXN0eWxlOml0YWxpY30uYWUtdWNoZWFkIHB7bWFyZ2luOjNweCAwIDA7Zm9udC1zaXplOjEyLjVweDtjb2xvcjojZTVlN2VifS5hZS11Y2dyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxcHg7YmFja2dyb3VuZDojY2JkNWUxfS5hZS11Y2NlbGx7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MTBweCAxMnB4fS5hZS11Y2NlbGwgaDR7bWFyZ2luOjAgMCA0cHg7Zm9udC1zaXplOjE1cHg7Y29sb3I6IzExMTgyN30uYWUtdWNjZWxsIHB7bWFyZ2luOjAgMCA2cHg7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS40NX0uYWUtdWNwaG90b3tiYWNrZ3JvdW5kOiNlZWYyZjc7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYWUtdWNwaG90byBzdmd7d2lkdGg6MTUwcHg7bWF4LXdpZHRoOjkyJTtoZWlnaHQ6YXV0b30uYWUtdWNwaG90byBzcGFue2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM0NzU1Njk7bWFyZ2luLXRvcDo0cHh9PC9zdHlsZT48ZGl2IGNsYXNzPVwiYWUtdWNmbHllclwiPjxkaXYgY2xhc3M9XCJhZS11Y2hlYWRcIj48aDM+VE9NTVkmcnNxdW87UyBVU0VEIENBUlM8L2gzPjxwPjxzdHJvbmc+NzggSGlnaHdheSA2LCBTb3V0aCBCYXksIE9udGFyaW88L3N0cm9uZz48YnI+MS04MDAtMjYyLTk5OTk8YnI+UGVyc29uYWxpemVkIFB1cmNoYXNlIE9wdGlvbnMgU2hlZXQgZm9yIDxzdHJvbmc+TEVTTElFIFdJTlRFUkdSRUVOPC9zdHJvbmc+PGJyPlByZXBhcmVkIGJ5IFRvbW15IEpvbmVzIG9uIEp1bHkgMTYsIDIwMTYsIHRvbW15QHRvbW15cy11c2VkLWNhcnMuY29tPC9wPjwvZGl2PjxkaXYgY2xhc3M9XCJhZS11Y2dyaWRcIj48ZGl2IGNsYXNzPVwiYWUtdWNjZWxsIGFlLXVjcGhvdG9cIj48c3ZnIHZpZXdCb3g9XCIwIDAgMTIwIDUwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPVwidmVoaWNsZSBwaG90b1wiPjxwYXRoIGQ9XCJNMjAgMzYgUTE2IDI1IDMyIDIyIEw0NCAxMiBRNDYgMTAgNTAgMTAgTDc2IDEwIFE4MCAxMCA4MyAxMyBMOTIgMjIgUTEwNCAyNCAxMDYgMzAgTDEwNiAzNiBaXCIgZmlsbD1cIiM5M2M1ZmRcIiBzdHJva2U9XCIjNjQ3NDhiXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPjxyZWN0IHg9XCI0OFwiIHk9XCIxNFwiIHdpZHRoPVwiMjZcIiBoZWlnaHQ9XCI5XCIgcng9XCIyXCIgZmlsbD1cIiNkYmVhZmVcIi8+PGNpcmNsZSBjeD1cIjM2XCIgY3k9XCIzOFwiIHI9XCI3XCIgZmlsbD1cIiMzMzQxNTVcIi8+PGNpcmNsZSBjeD1cIjkwXCIgY3k9XCIzOFwiIHI9XCI3XCIgZmlsbD1cIiMzMzQxNTVcIi8+PGNpcmNsZSBjeD1cIjM2XCIgY3k9XCIzOFwiIHI9XCIzXCIgZmlsbD1cIiM5NGEzYjhcIi8+PGNpcmNsZSBjeD1cIjkwXCIgY3k9XCIzOFwiIHI9XCIzXCIgZmlsbD1cIiM5NGEzYjhcIi8+PC9zdmc+PHNwYW4+VmVoaWNsZSAjMTwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPVwiYWUtdWNjZWxsXCI+PGg0PiMxICQ5LDk5OTwvaDQ+PHA+PHN0cm9uZz4yMDA5IG1vZGVsICZuZGFzaDsgb25seSA1MCwwMDAga20uISE8L3N0cm9uZz48L3A+PHA+RHJpdmVuIGFzIGEgd2Vla2VuZCBjYXIgb25seSwgdGhpcyB2ZWhpY2xlIGJvYXN0cyBib3RoIHBvd2VyIGJyYWtlcyBhbmQgcG93ZXIgc3RlZXJpbmcuIEl0IGhhcyBiZWVuIHdlbGwtbWFpbnRhaW5lZCBieSBpdHMgcHJldmlvdXMgb3duZXIsIGFuZCBwcm92aWRlcyBleGNlbGxlbnQgZnVlbCBlZmZpY2llbmN5LiBUaGlzIGlzIGEgbWFudWFsIHRyYW5zbWlzc2lvbiBjYXIuIEl0cyBsaWdodC1ibHVlIGZpbmlzaCBpcyB1bmlxdWUgdG8gdGhhdCB5ZWFyLCBtYWtpbmcgaXQgYSByYXJlIGZpbmQhPC9wPjwvZGl2PjxkaXYgY2xhc3M9XCJhZS11Y2NlbGxcIj48aDQ+IzIgJDE0LDk5OTwvaDQ+PHA+PHN0cm9uZz4yMDEwIG1vZGVsICZuZGFzaDsgNzEsMDAwIGttLjwvc3Ryb25nPjwvcD48cD5XaXRoIHN1bW1lciBvbiB0aGUgd2F5LCB5b3UmcnNxdW87bGwgd2FudCB0byBzdGVwIGludG8gdGhpcyBzbGVlaywgYWlyLWNvbmRpdGlvbmVkIHNlZGFuIGZlYXR1cmluZyBhbiB1cGdyYWRlZCBzb3VuZCBzeXN0ZW0uIFRoZSBhZGRpdGlvbmFsIHJlYXIgc3BlYWtlcnMgYWxsb3cgcGFzc2VuZ2VycyB0byBlbmpveSBtdXNpYywgZXZlbiBkdXJpbmcgbG91ZGVyIGhpZ2h3YXkgZHJpdmluZy4gVGhpcyA1LXNwZWVkIGF1dG9tYXRpYyBjb21lcyB3aXRoIHBvd2VyIGJyYWtlcyBhbmQgcG93ZXIgc3RlZXJpbmcuIFNhZmV0eSBmZWF0dXJlcyBpbmNsdWRlIGZyb250LCByZWFyLCBhbmQgc2lkZSBhaXJiYWdzLjwvcD48L2Rpdj48ZGl2IGNsYXNzPVwiYWUtdWNjZWxsIGFlLXVjcGhvdG9cIj48c3ZnIHZpZXdCb3g9XCIwIDAgMTIwIDUwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPVwidmVoaWNsZSBwaG90b1wiPjxwYXRoIGQ9XCJNMjAgMzYgUTE2IDI1IDMyIDIyIEw0NCAxMiBRNDYgMTAgNTAgMTAgTDc2IDEwIFE4MCAxMCA4MyAxMyBMOTIgMjIgUTEwNCAyNCAxMDYgMzAgTDEwNiAzNiBaXCIgZmlsbD1cIiNjYmQ1ZTFcIiBzdHJva2U9XCIjNjQ3NDhiXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPjxyZWN0IHg9XCI0OFwiIHk9XCIxNFwiIHdpZHRoPVwiMjZcIiBoZWlnaHQ9XCI5XCIgcng9XCIyXCIgZmlsbD1cIiNkYmVhZmVcIi8+PGNpcmNsZSBjeD1cIjM2XCIgY3k9XCIzOFwiIHI9XCI3XCIgZmlsbD1cIiMzMzQxNTVcIi8+PGNpcmNsZSBjeD1cIjkwXCIgY3k9XCIzOFwiIHI9XCI3XCIgZmlsbD1cIiMzMzQxNTVcIi8+PGNpcmNsZSBjeD1cIjM2XCIgY3k9XCIzOFwiIHI9XCIzXCIgZmlsbD1cIiM5NGEzYjhcIi8+PGNpcmNsZSBjeD1cIjkwXCIgY3k9XCIzOFwiIHI9XCIzXCIgZmlsbD1cIiM5NGEzYjhcIi8+PC9zdmc+PHNwYW4+VmVoaWNsZSAjMjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPVwiYWUtdWNjZWxsIGFlLXVjcGhvdG9cIj48c3ZnIHZpZXdCb3g9XCIwIDAgMTIwIDUwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPVwidmVoaWNsZSBwaG90b1wiPjxwYXRoIGQ9XCJNMjAgMzYgUTE2IDI1IDMyIDIyIEw0NCAxMiBRNDYgMTAgNTAgMTAgTDc2IDEwIFE4MCAxMCA4MyAxMyBMOTIgMjIgUTEwNCAyNCAxMDYgMzAgTDEwNiAzNiBaXCIgZmlsbD1cIiNmOGZhZmNcIiBzdHJva2U9XCIjNjQ3NDhiXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPjxyZWN0IHg9XCI0OFwiIHk9XCIxNFwiIHdpZHRoPVwiMjZcIiBoZWlnaHQ9XCI5XCIgcng9XCIyXCIgZmlsbD1cIiNkYmVhZmVcIi8+PGNpcmNsZSBjeD1cIjM2XCIgY3k9XCIzOFwiIHI9XCI3XCIgZmlsbD1cIiMzMzQxNTVcIi8+PGNpcmNsZSBjeD1cIjkwXCIgY3k9XCIzOFwiIHI9XCI3XCIgZmlsbD1cIiMzMzQxNTVcIi8+PGNpcmNsZSBjeD1cIjM2XCIgY3k9XCIzOFwiIHI9XCIzXCIgZmlsbD1cIiM5NGEzYjhcIi8+PGNpcmNsZSBjeD1cIjkwXCIgY3k9XCIzOFwiIHI9XCIzXCIgZmlsbD1cIiM5NGEzYjhcIi8+PC9zdmc+PHNwYW4+VmVoaWNsZSAjMzwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPVwiYWUtdWNjZWxsXCI+PGg0PiMzICQxMiw5OTk8L2g0PjxwPjxzdHJvbmc+MjAxMiBtb2RlbCAmbmRhc2g7IDE5LDAwMCBrbS48L3N0cm9uZz48L3A+PHA+VGhpcyBoaXAgaGF0Y2hiYWNrIGhhcyBuZXdseSByZXBsYWNlZCBicmFrZXMgYW5kIGEgYnJhbmQgbmV3IG11ZmZsZXIhIEludGVyaW9yIGluY2x1ZGVzIGJsYWNrIGxlYXRoZXIgc2VhdHMuIENvbWVzIHdpdGggc3RhbmRhcmQgYWxsLXNlYXNvbiB0aXJlcywgYXMgd2VsbCBhcyB3aW50ZXIgdGlyZXMuIE5lZWQgdG8gdGFrZSBhIHRyaXAgdG8gdGhlIGZ1cm5pdHVyZSBvciBob21lIGltcHJvdmVtZW50IHN0b3JlPyBUaGUgYmFjayBzZWF0cyBmb2xkIGRvd24gZm9yIGluY3JlYXNlZCBjYXJnbyBjYXBhY2l0eS48L3A+PC9kaXY+PGRpdiBjbGFzcz1cImFlLXVjY2VsbFwiPjxoND4jNCAkOCw5OTk8L2g0PjxwPjxzdHJvbmc+MTk5MCBtb2RlbCAmbmRhc2g7IDE1MCwwMDAga20uPC9zdHJvbmc+PC9wPjxwPlRoaXMgdmVoaWNsZSZyc3F1bztzIHJvb215IGludGVyaW9yIHdpbGwgZW5zdXJlIHlvdSBhbmQgeW91ciBwYXNzZW5nZXJzIGdldCBmcm9tIEEgdG8gQiBpbiB1bHRpbWF0ZSBjb21mb3J0ISBUaGUgdmlueWwtY29hdGVkIHNlYXRzIGNhbiBhbHNvIGJlIHJlY2xpbmVkIGluIHRoZSBiYWNrIGZvciB0aG9zZSB3aG8gd2FudCB0byBzdHJldGNoIHRoZWlyIGxlZ3MuIEl0IGNvbWVzIHdpdGggYWxsLXNlYXNvbiB0aXJlcyAocmVwbGFjZWQgaW4gMjAxMCkgYW5kIG5ldyBicmFrZXMuPC9wPjwvZGl2PjxkaXYgY2xhc3M9XCJhZS11Y2NlbGwgYWUtdWNwaG90b1wiPjxzdmcgdmlld0JveD1cIjAgMCAxMjAgNTBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgcm9sZT1cImltZ1wiIGFyaWEtbGFiZWw9XCJ2ZWhpY2xlIHBob3RvXCI+PHJlY3QgeD1cIjE0XCIgeT1cIjEwXCIgd2lkdGg9XCI5MlwiIGhlaWdodD1cIjI2XCIgcng9XCI1XCIgZmlsbD1cIiNlN2UwYzlcIiBzdHJva2U9XCIjNjQ3NDhiXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPjxyZWN0IHg9XCIyMFwiIHk9XCIxNFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxMFwiIHJ4PVwiMlwiIGZpbGw9XCIjZGJlYWZlXCIvPjxyZWN0IHg9XCI0MlwiIHk9XCIxNFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxMFwiIHJ4PVwiMlwiIGZpbGw9XCIjZGJlYWZlXCIvPjxyZWN0IHg9XCI2NFwiIHk9XCIxNFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxMFwiIHJ4PVwiMlwiIGZpbGw9XCIjZGJlYWZlXCIvPjxjaXJjbGUgY3g9XCIzNlwiIGN5PVwiMzhcIiByPVwiN1wiIGZpbGw9XCIjMzM0MTU1XCIvPjxjaXJjbGUgY3g9XCI5MFwiIGN5PVwiMzhcIiByPVwiN1wiIGZpbGw9XCIjMzM0MTU1XCIvPjxjaXJjbGUgY3g9XCIzNlwiIGN5PVwiMzhcIiByPVwiM1wiIGZpbGw9XCIjOTRhM2I4XCIvPjxjaXJjbGUgY3g9XCI5MFwiIGN5PVwiMzhcIiByPVwiM1wiIGZpbGw9XCIjOTRhM2I4XCIvPjwvc3ZnPjxzcGFuPlZlaGljbGUgIzQ8L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+In0sImJsb2NrcyI6W3sidHlwZSI6ImNsb3plIiwiaW5zdHIiOiJSZWFkIHRoZSBmb2xsb3dpbmcgZW1haWwgbWVzc2FnZSBhYm91dCB0aGUgZGlhZ3JhbSBvbiB0aGUgbGVmdC4gQ29tcGxldGUgdGhlIGVtYWlsIGJ5IGZpbGxpbmcgaW4gdGhlIGJsYW5rcy4gU2VsZWN0IHRoZSBiZXN0IGNob2ljZSBmb3IgZWFjaCBibGFuayBmcm9tIHRoZSBkcm9wLWRvd24gbWVudSAoICYjOTY2MjsgKS4iLCJib2R5IjpbIlN1YmplY3Q6IFB1cmNoYXNlIE9wdGlvbnMgU2hlZXRcblRvOiBMZXNsaWUgV2ludGVyZ3JlZW4gPGx3aW50ZXJncmVlbkBtYWlsbWFpbC5jYT5cbkZyb206IFRvbW15IEpvbmVzIDx0b21teUB0b21teXMtdXNlZC1jYXJzLmNvbT5cblxuRGVhciBMZXNsaWUgV2ludGVyZ3JlZW4sXG5cblRoYW5rIHlvdSBmb3IgdmlzaXRpbmcgb3VyIGxvdCB5ZXN0ZXJkYXkuIFdlIGFyZSBnbGFkIHRoYXQgeW91IGhhdmUgY2hvc2VuIFRvbW15XHUyMDE5cyBmb3IgeW91ciB1c2VkIGNhciBwdXJjaGFzZS4gSVx1MjAxOXZlIHJlc2VhcmNoZWQgb3VyIHdpZGUgcmFuZ2Ugb2YgaW52ZW50b3J5IGFuZCBoYXZlIGNyZWF0ZWQgIix7ImIiOjEsIm9wdGlvbnMiOlsiYSBjb21wbGV0ZSBsaXN0IG9mIG91ciBjYXJzIiwiYSBjdXN0b21pemVkIHByZXNlbnRhdGlvbiIsImFuIHVwLXRvLWRhdGUgd2Vla2x5IGZseWVyIiwiYW4gaW1hZ2UgZnJvbSBvdXIgd2ViIHBhZ2UiXSwia2V5IjoyfSwiLiBQbGVhc2Ugc2VlIGF0dGFjaGVkLlxuXG5BbGwgdGhlIHZlaGljbGVzIGV4Y2VwdCB0aGUgZm91cnRoIG9uZSBoYXZlICIseyJiIjoyLCJvcHRpb25zIjpbImJvdGggYWxsLXNlYXNvbiBhbmQgd2ludGVyIHRpcmVzIiwibmV3bHkgcmVwbGFjZWQgYnJha2VzIGFuZCBtdWZmbGVycyIsInVuZGVyIGEgaHVuZHJlZCB0aG91c2FuZCBraWxvbWV0cmVzIiwidXBncmFkZWQgc3RlcmVvIHNvdW5kIHN5c3RlbXMiXSwia2V5IjozfSwiLCBhcyBpbmRpY2F0ZWQuIEFsbCBvZiB0aGUgY2FycyAiLHsiYiI6Mywib3B0aW9ucyI6WyJoYXZlIGF1dG9tYXRpYyB0cmFuc21pc3Npb25zIiwiaGF2ZSBhaXIgY29uZGl0aW9uaW5nIiwiYXJlIDIxc3QgY2VudHVyeSBtb2RlbHMiLCJhcmUgZ29pbmcgZm9yIHVuZGVyIDE1SyJdLCJrZXkiOjR9LCIuXG5cbllvdSBtZW50aW9uZWQgdGhhdCB5b3Ugd2FudGVkIGEgY2FyIHdpdGggIix7ImIiOjQsIm9wdGlvbnMiOlsiYSBzZXQgb2Ygd2ludGVyIHRpcmVzIiwiZnVlbCBlZmZpY2llbmN5Iiwic3BhY2UgZm9yIHlvdXIgZmFtaWx5IiwicmVjbGluaW5nIGZyb250IHNlYXRzIl0sImtleSI6M30sIiwgc28gSSB3b3VsZCByZWNvbW1lbmQgdGhlIHZlaGljbGUgcGljdHVyZWQgaW4gdGhlIGJvdHRvbSByaWdodCBjb3JuZXIuIFNpbmNlIHlvdSBmZWVsIHN0cm9uZ2x5IGFib3V0IGJ1eWluZyBhIGNhciB3aXRoIHZlcnkgbG93IG1pbGVhZ2UsIEkgYW0gYWxzbyBnb2luZyB0byBjaGVjayBteSBmcmllbmRcdTIwMTlzIGxvdCBvbiBNb25kYXkgdG8gc2VlIHdoYXQgaGUgaGFzIGF2YWlsYWJsZS4gSSB3aWxsIHNlbmQgeW91IHRoZSBkZXRhaWxzIGFmdGVyd2FyZHMuICIseyJiIjo1LCJvcHRpb25zIjpbIk90aGVyd2lzZSIsIkZvciB0aGlzIHJlYXNvbiIsIkkgcmVwZWF0IiwiVG8gc3VtIHVwIl0sImtleSI6MX0sIiwgcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdVx1MjAxOWQgbGlrZSB0byB0ZXN0IGRyaXZlIGFueSBvZiB0aGVzZSBmb3VyIGNhcnMgdGhpcyB3ZWVrZW5kLlxuXG5SZWdhcmRzLFxuXG5Ub21teSJdfSx7InR5cGUiOiJzdGVtbGlzdCIsImluc3RyIjoiVXNpbmcgdGhlIGRyb3AtZG93biBtZW51ICggJiM5NjYyOyApLCBjaG9vc2UgdGhlIGJlc3Qgb3B0aW9uLiIsIml0ZW1zIjpbeyJuIjo2LCJwcmUiOiJUb21teSBzZW50IHRoaXMgZW1haWwgdG8iLCJvcHRpb25zIjpbImFycmFuZ2UgYSB0ZXN0IGRyaXZlLiIsImludHJvZHVjZSBoaW1zZWxmIHRvIGEgcHJvc3BlY3RpdmUgYnV5ZXIuIiwicHJvdmlkZSBpbmZvcm1hdGlvbi4iLCJzZWxsIExlc2xpZSBXaW50ZXJncmVlbiBhIHNlY29uZCB2ZWhpY2xlLiJdLCJrZXkiOjN9LHsibiI6NywicHJlIjoiVG9tbXkgYW5kIExlc2xpZSBoYXZlIHByb2JhYmx5Iiwib3B0aW9ucyI6WyJuZXZlciBtZXQuIiwibWV0IG9uY2UuIiwiY2hhdHRlZCB2aWEgdGhlIGRlYWxlcnNoaXBcdTIwMTlzIHdlYnNpdGUuIiwidGFsa2VkIG9uIHRoZSBwaG9uZSB0aGUiXSwia2V5IjoyfSx7Im4iOjgsInByZSI6IlRvbW15IHdpbGwgbW9zdCBsaWtlbHkiLCJvcHRpb25zIjpbIm9mZmVyIExlc2xpZSBhIHNwZWNpYWwgbG95YWx0eSBkaXNjb3VudC4iLCJjYWxsIExlc2xpZSB3aXRoIG1vcmUgb3B0aW9ucy4iLCJlbWFpbCBMZXNsaWUgYWdhaW4gaW4gYSBmZXcgZGF5cy4iLCJyZWZlciBMZXNsaWUgdG8gaGlzIGZyaWVuZFx1MjAxOXMgY2FyIGxvdC4iXSwia2V5IjozfV19XX0seyJpZCI6MywibmFtZSI6IlJlYWRpbmcgUGFydCAzOiBSZWFkaW5nIGZvciBJbmZvcm1hdGlvbiIsInRpbWUiOiI5IG1pbnV0ZXMiLCJwYXNzYWdlIjp7InR5cGUiOiJ0ZXh0IiwibGFiZWwiOiJSZWFkIHRoZSBmb2xsb3dpbmcgcGFzc2FnZS4iLCJodG1sIjoiPHA+PHN0cm9uZz5BLjwvc3Ryb25nPiBTaXR1YXRlZCBpbiBMYWtlIE5pY2FyYWd1YSwgT21ldGVwZSBpcyBhIG15c3RpY2FsIGFuZCBmYXNjaW5hdGluZyBpc2xhbmQuIEl0cyBuYW1lIG1lYW5zICZsZHF1bzt0d28gbW91bnRhaW5zJnJkcXVvOyBpbiB0aGUgbG9jYWwgTmFodWF0bCBsYW5ndWFnZSwgYXBwcm9wcmlhdGUgc2luY2UgdGhlIGlzbGFuZCBpcyBtYWRlIHVwIG9mIHR3byB2b2xjYW5vZXMgdGhhdCBhcmUgY29ubmVjdGVkIGJ5IGEgbmFycm93IHN0cmlwIG9mIGxhbmQuIFRoaXMgaGF2ZW4gaXMgYWRtaXJlZCBieSBib3RoIHJlc2lkZW50cyBhbmQgdG91cmlzdHMgYWxpa2UgZHVlIHRvIGl0cyByaWNoIGhpc3RvcnksIGFyY2hhZW9sb2dpY2FsIGJhY2tncm91bmQsIGxhbmRzY2FwZXMsIGFuZCBiaW9kaXZlcnNpdHkuIExpZmUgb24gdGhlIGlzbGFuZCByZXZvbHZlcyBhcm91bmQgdGhlIHR3byB2b2xjYW5vZXMsIGFib3V0IHdoaWNoIG1hbnkgZW5kdXJpbmcgbXl0aHMgYW5kIGxlZ2VuZHMgaGF2ZSBiZWVuIHRvbGQgYW5kIHBhc3NlZCBmcm9tIGdlbmVyYXRpb24gdG8gZ2VuZXJhdGlvbi48L3A+PHA+PHN0cm9uZz5CLjwvc3Ryb25nPiBGZWF0dXJpbmcgdHdvIHZvbGNhbm9lcywgQ29uY2VwY2lvbiBhbmQgTWFkZXJhcywgT21ldGVwZSBpcyB0aGUgd29ybGQmcnNxdW87cyBsYXJnZXN0IHZvbGNhbmljIGlzbGFuZCBsb2NhdGVkIGluIGZyZXNoIHdhdGVyLiBDb25jZXBjaW9uLCBhIHBlcmZlY3RseSBzeW1tZXRyaWNhbCBhbmQgY29uZS1zaGFwZWQgdm9sY2FubywgZG9taW5hdGVzIHRoZSBub3J0aGVybiBoYWxmIG9mIHRoZSBpc2xhbmQuIExhcmdlciB0aGFuIGl0cyBjb3VudGVycGFydCwgQ29uY2VwY2lvbiBpcyBhY3RpdmUgYW5kIGhhcyBlcnVwdGVkIG11bHRpcGxlIHRpbWVzIHNpbmNlIHRoZSAxODAwcy4gSGVyZSBvbmUgYWxzbyBmaW5kcyB0aGUgaXNsYW5kJnJzcXVvO3MgdHdvIG1vc3QgcG9wdWxhdGVkIHZpbGxhZ2VzLCBNb3lvZ2FscGEgYW5kIEFsdGFncmFjaWEuIE9uIHRoZSBzb3V0aGVybiBwYXJ0IG9mIHRoZSBpc2xhbmQgaXMgTWFkZXJhcywgbm8gbG9uZ2VyIGFjdGl2ZSBhbmQgYSBwb3B1bGFyIHNwb3QgZm9yIGVjb3RvdXJpc3RzIHdpdGggaXRzIGx1c2ggcmFpbmZvcmVzdHMsIGNsb3VkIGZvcmVzdHMsIGFuZCBhIGxhZ29vbiBsYWtlIGxvY2F0ZWQgaW4gaXRzIGNyYXRlci48L3A+PHA+PHN0cm9uZz5DLjwvc3Ryb25nPiBBcmNoYWVvbG9naWNhbCBldmlkZW5jZSBzdWdnZXN0cyB0aGF0IE9tZXRlcGUgd2FzIGZpcnN0IGRpc2NvdmVyZWQgYnkgaW5kaWdlbm91cyB0cmliZXMgZnJvbSBNZXhpY28gd2hvIHdlcmUgdHJhdmVsaW5nIHNvdXRoIGluIHNlYXJjaCBvZiBhIHBhcmFkaXNlIGRlc2NyaWJlZCBieSBwcm9waGV0cy4gVGhlIE5haHVhIHdlcmUgdGhlIGZpcnN0IHRvIGluaGFiaXQgdGhlIGlzbGFuZCBhcm91bmQgMjAwMC01MDAgQkMsIGZvbGxvd2VkIGJ5IG51bWVyb3VzIG90aGVyIHRyaWJlcy4gRm9yIGNlbnR1cmllcywgT21ldGVwZSB3YXMgYSByZWZ1Z2UgZm9yIHZhcmlvdXMgc29jaWV0aWVzIHVudGlsIGl0IHdhcyBkaXNjb3ZlcmVkIGJ5IHBpcmF0ZXMgaW4gdGhlIHNpeHRlZW50aCBjZW50dXJ5LiBUaGUgaW52YWRlcnMgcGlsbGFnZWQgdGhlIGxvY2FsIHNldHRsZW1lbnRzLCBzdGVhbGluZyBsaXZlc3RvY2ssIGhhcnZlc3RzLCBhbmQgcG9zc2Vzc2lvbnMsIHRodXMgZm9yY2luZyB0aGUgaW5oYWJpdGFudHMgdG8gbW92ZSB0byBoaWdoZXIgZ3JvdW5kLiBJbiB0aGUgbGF0ZSAxNTAwcywgU3BhbmlzaCBjb25xdWlzdGFkb3JzIGNvbG9uaXplZCBPbWV0ZXBlLCBjb252ZXJ0aW5nIGl0cyByZXNpZGVudHMgdG8gQ2F0aG9saWNpc20uIEV2ZW4gc28sIHRoZSBsb2NhbHMgaW5jb3Jwb3JhdGVkIG1hbnkgb2YgdGhlaXIgdHJhZGl0aW9uYWwgY3VzdG9tcyBhbmQgYmVsaWVmcyBpbnRvIENocmlzdGlhbml0eSBjdXJyZW50bHkgY2VsZWJyYXRlIG1vcmUgcmVsaWdpb3VzIGFuZCBmb2xrIGZlc3RpdmFscyB0aGFuIGFueSBvdGhlciBwYXJ0IG9mIE5pY2FyYWd1YS48L3A+PHA+PHN0cm9uZz5ELjwvc3Ryb25nPiBUaGUgaXNsYW5kJnJzcXVvO3MgZWNvbm9teSBpcyBmdWVsbGVkIHByaW1hcmlseSBieSBhZ3JpY3VsdHVyZSwgYnV0IHRvdXJpc20gaXMgYWxzbyBncm93aW5nLiBUaGUgcHJlc2VuY2Ugb2Ygdm9sY2FuaWMgYXNoIG1ha2VzIHRoZSBzb2lsIGV4dHJlbWVseSBmZXJ0aWxlLiBGYXJtZXJzIGNhbiBwbGFudCB0aGUgZmllbGRzIGNvbnRpbnVvdXNseSwgd2l0aG91dCB0aGUgbmVlZCB0byBsZWF2ZSB0aGVtIHVuc2VlZGVkIGZvciBhIHNlYXNvbi4gVGhlIG1haW4gY3JvcCBpcyBwbGFudGFpbnMsIGFsdGhvdWdoIHRvYmFjY28gYW5kIGNvZmZlZSBhcmUgYWxzbyBwcm9kdWNlZC4gVHJhdmVsIHRvIHRoZSBpc2xhbmQgaGFzIGJvb21lZCBpbiByZWNlbnQgZGVjYWRlcyBhbmQgdGhlIGxvY2FscyBoYXZlIGJlY29tZSBrbm93biBmb3IgdGhlaXIgd2FybXRoLCBob3NwaXRhbGl0eSwgYW5kIGxvdmUgb2YgdGhlIGlzbGFuZC4gRHVlIHRvIHJpc2luZyBpbnRlcmVzdCBpbiBlY290b3VyaXNtLCB0aGUgbWFqb3JpdHkgb2YgdmlzaXRvcnMgZ28gdG8gYXBwcmVjaWF0ZSB0aGUgaXNsYW5kJnJzcXVvO3MgbmF0dXJhbCBiZWF1dHk7IGhpa2luZyBpcyBlc3BlY2lhbGx5IHBvcHVsYXIuIEhvd2V2ZXIsIG90aGVyIGF0dHJhY3Rpb25zIGFib3VuZC4gT21ldGVwZSBpcyBmYW1vdXMgZm9yIGl0cyB0aG91c2FuZHMgb2Ygcm9jayBjYXJ2aW5ncyBhbmQgc3RvbmUgc3RhdHVlcyBsZWZ0IGJ5IGFuY2llbnQgY2l2aWxpemF0aW9ucy48L3A+PHA+PHN0cm9uZz5FLjwvc3Ryb25nPiBOb3QgZ2l2ZW4gaW4gYW55IG9mIHRoZSBhYm92ZSBwYXJhZ3JhcGhzLjwvcD4ifSwiYmxvY2tzIjpbeyJ0eXBlIjoibWF0Y2giLCJpbnN0ciI6IkRlY2lkZSB3aGljaCBwYXJhZ3JhcGgsIEEgdG8gRCwgaGFzIHRoZSBpbmZvcm1hdGlvbiBnaXZlbiBpbiBlYWNoIHN0YXRlbWVudCBiZWxvdy4gU2VsZWN0IEUgaWYgdGhlIGluZm9ybWF0aW9uIGlzIG5vdCBnaXZlbiBpbiBhbnkgb2YgdGhlIHBhcmFncmFwaHMuIiwibGV0dGVycyI6WyJBIiwiQiIsIkMiLCJEIiwiRSJdLCJpdGVtcyI6W3sibiI6MSwidGV4dCI6IlRyYW5zcG9ydGF0aW9uIHRvIE9tZXRlcGUgaXMgdmVyeSBleHBlbnNpdmUuIiwia2V5Ijo1fSx7Im4iOjIsInRleHQiOiJBcnQgcHJvZHVjZWQgYnkgT21ldGVwZVx1MjAxOXMgcGFzdCBjdWx0dXJlcyBhbHNvIGRyYXdzIHZpc2l0b3JzLiIsImtleSI6NH0seyJuIjozLCJ0ZXh0IjoiTG9jYWxzIGhhdmUgcGFzc2VkIGRvd24gdHJhZGl0aW9uYWwgc3RvcmllcyBhYm91dCB0aGUgdm9sY2Fub2VzIHRocm91Z2ggdGhlIGFnZXMuIiwia2V5IjoxfSx7Im4iOjQsInRleHQiOiJUaGUgaXNsYW5kIHdhcyBob21lIHRvIGEgc3VjY2Vzc2lvbiBvZiBpbmhhYml0YW50cyBvdmVyIHNldmVyYWwgbWlsbGVubmlhLiIsImtleSI6M30seyJuIjo1LCJ0ZXh0IjoiT21ldGVwZVx1MjAxOXMgYXBwZWFyYW5jZSBpcyBkb21pbmF0ZWQgYnkgdGhlIHR3byB2b2xjYW5vZXMuIiwia2V5IjoxfSx7Im4iOjYsInRleHQiOiJPbWV0ZXBlXHUyMDE5cyBpbmhhYml0YW50cyB3ZWxjb21lIHNpZ2h0c2VlcnMuIiwia2V5Ijo0fSx7Im4iOjcsInRleHQiOiJQaXJhdGUgaW52YWRlcnMgYnVpbHQgbmV3IHNldHRsZW1lbnRzIGluIEFsdGFncmFjaWEuIiwia2V5Ijo1fSx7Im4iOjgsInRleHQiOiJNYW55IGluaGFiaXRhbnRzIGxpdmUgb24gdGhlIG5vcnRoIHNpZGUgb2YgdGhlIGlzbGFuZC4iLCJrZXkiOjJ9LHsibiI6OSwidGV4dCI6IkNlbGVicmF0aW9ucyBpbiBPbWV0ZXBlIGhhdmUgZGl2ZXJzZSBoaXN0b3JpY2FsIG9yaWdpbnMuIiwia2V5IjozfV19XX0seyJpZCI6NCwibmFtZSI6IlJlYWRpbmcgUGFydCA0OiBSZWFkaW5nIGZvciBWaWV3cG9pbnRzIiwidGltZSI6IjEyIG1pbnV0ZXMiLCJwYXNzYWdlIjp7InR5cGUiOiJ0ZXh0IiwibGFiZWwiOiJSZWFkIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSBmcm9tIGEgd2Vic2l0ZS4iLCJodG1sIjoiPHA+RXZlcnkgbWFqb3IgZHJ1ZyBjb21wYW55IGNvbmR1Y3RzIGV4dGVuc2l2ZSByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgdG8gY3JlYXRlIGJyYW5kIG5hbWUgcHJlc2NyaXB0aW9uIG1lZGljaW5lcy4gSW4gcmV0dXJuLCBhIGdvdmVybm1lbnQgZ3JhbnRzIHRoZSBwaGFybWFjZXV0aWNhbCBjb21wYW55IGEgcGF0ZW50IG9uIGEgbmV3IGRydWcsIHRoYXQgaXMsIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gbWFrZSBhbmQgc2VsbCBpdC4gQSBwYXRlbnQgaXMgdGVtcG9yYXJ5LCB0aG91Z2guIEFmdGVyIGl0IGV4cGlyZXMsIG90aGVyIGNvbXBhbmllcyBjYW4gY29weSB0aGUgYnJhbmQgbmFtZSBkcnVnLCBwcm9kdWNpbmcgYW4gaW5leHBlbnNpdmUgZ2VuZXJpYyB2ZXJzaW9uIGhhdmluZyBzaW1pbGFyIGluZ3JlZGllbnRzIGFuZCBiZW5lZml0cy48L3A+PHA+SmFtZXMgQ29ubmF1Z2h0IHJlcHJlc2VudHMgdGhlIFBoYXJtYWNldXRpY2FsIE1hbnVmYWN0dXJlcnMgQWxsaWFuY2UuICZsZHF1bztXZSBhY3RpdmVseSBsb2JieSB0aGUgZ292ZXJubWVudCB0byBlbmRvcnNlIGFncmVlbWVudHMgdGhhdCwgb25jZSBtYWRlIGxhdywgd291bGQgYWxsb3cgcGhhcm1hY2V1dGljYWwgY29tcGFuaWVzIHRvIGV4dGVuZCB0aGUgZHVyYXRpb24gb2YgZHJ1ZyBwYXRlbnQgcHJvdGVjdGlvbnMgb3IgZXZlbiBtYWtlIHRoZW0gcGVybWFuZW50LCZyZHF1bzsgc2F5cyBDb25uYXVnaHQuICZsZHF1bztJbiBkZXZlbG9waW5nIHRoZWlyIHByb2R1Y3RzLCBwaGFybWFjZXV0aWNhbCBjb21wYW5pZXMgaW52ZXN0IGJpbGxpb25zIG9mIGRvbGxhcnMgaW4gZXhoYXVzdGl2ZSByZXNlYXJjaCBhbmQgdGVzdGluZy4gRXZlbiBwcm9kdWN0cyB2ZXJpZmllZCBhcyBzYWZlIHNvbWV0aW1lcyBpbmN1ciBsYXdzdWl0cy4gVG8gYWJzb3JiIGFsbCB0aGVzZSBjb3N0cywgZHJ1ZyBjb21wYW5pZXMgbXVzdCBzdGF5IHByb2ZpdGFibGUmbWRhc2g7c28gdGhlIGdvdmVybm1lbnQgbXVzdCBzdHJlbmd0aGVuIHBhdGVudCBsYXdzLiZyZHF1bzs8L3A+PHA+Q29ubmF1Z2h0IGNvbnNpZGVycyBnZW5lcmljIGRydWcgbWFrZXJzIGFraW4gdG8gcGFyYXNpdGVzLiAmbGRxdW87VGhleSBkb24mcnNxdW87dCBkbyByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQ7IHRoZXkgZG9uJnJzcXVvO3QgdGFrZSB0aGUgZmluYW5jaWFsIHJpc2tzIGludm9sdmVkIGluIGxhdW5jaGluZyBuZXcgZHJ1Z3M7IHRoZXkgZG9uJnJzcXVvO3QgaW5ub3ZhdGUuIFRoZXkganVzdCBza2ltIG9mZiBwcm9maXRzIGZyb20gb3RoZXIgY29tcGFuaWVzLCB3aXRob3V0IGNvbnRyaWJ1dGluZyBhbnl0aGluZyBvZiB0aGVpciBvd24uJnJkcXVvOzwvcD48cD5IZWF0aGVyIFdlaWxsZXIgb2YgdGhlIEFmZm9yZGFibGUgSGVhbHRoIEFsbGlhbmNlIChBSEEpLCBhIGNvbnN1bWVyIGFkdm9jYWN5IGdyb3VwLCBoYXMgYSBkaWZmZXJlbnQgcGVyc3BlY3RpdmUuICZsZHF1bztCaWcgUGhhcm1hIGlzIGEgYmlnIHJpcC1vZmYuIE1lZGljYXRpb25zIGFyZSBhIG5lY2Vzc2l0eSwgbm90IGEgbHV4dXJ5LCBzbyB0aGUgZ292ZXJubWVudCBzaG91bGQgZW5zdXJlIHRoZXkmcnNxdW87cmUgYWZmb3JkYWJsZSZtZGFzaDt0aGF0IGlzLCBmcmllbmRseSB0byBnZW5lcmljcy4gRXZlbiB3aXRoIGdlbmVyaWNzIG5pYmJsaW5nIGF0IHRoZWlyIHByb2ZpdCBtYXJnaW5zLCBCaWcgUGhhcm1hIHByb2ZpdHMgYXJlIHN0aWxsIGFzdHJvbm9taWNhbC4gUHJpdmF0ZSBoZWFsdGggaW5zdXJhbmNlIGNvbXBhbmllcyBrbm93IHRoYXQsIGFuZCB3b24mcnNxdW87dCByZWltYnVyc2UgY29uc3VtZXJzIGZvciBicmFuZCBuYW1lcyBpZiB0aGVyZSZyc3F1bztzIGEgY2hlYXBlciBnZW5lcmljIGF2YWlsYWJsZS4gSW4gdGhhdCByZXNwZWN0LCBnZW5lcmljcyBhcmUgZXNzZW50aWFsLiBHb3Zlcm5tZW50cyBzaG91bGRuJnJzcXVvO3QgY29sbHVkZSB3aXRoIHBoYXJtYWNldXRpY2FsIGNvbXBhbmllcyB0byBzdGFsbCBnZW5lcmljcyBvciBrZWVwIHRoZW0gb2ZmIHRoZSBtYXJrZXQuIElmIGFueXRoaW5nLCBkcnVnIHBhdGVudCBwcm90ZWN0aW9ucyBzaG91bGQgYmUgd2Vha2VuZWQuJnJkcXVvOzwvcD48cD5JbiBmYWN0LCBXZWlsbGVyIGNyZWRpdHMgZ2VuZXJpYyBkcnVnIG1ha2VycyBmb3Igc2F2aW5nIHRoZSBsaXZlcyBvZiBtaWxsaW9ucyBhcm91bmQgdGhlIGdsb2JlLiAmbGRxdW87SWYgbm90IGZvciBnZW5lcmljIGRydWdzLCB0aGUgZ292ZXJubWVudHMgb2Ygc29tZSBkZXZlbG9waW5nIGNvdW50cmllcyBjb3VsZG4mcnNxdW87dCBhZmZvcmQgYmFzaWMgbWVkaWNhdGlvbnMgZm9yIHRoZWlyIGNpdGl6ZW5zIGF0IGFsbC4gSW4gZWZmZWN0LCBsYXdzIHRoYXQgaGFzdGVuIG9yIGF0IGxlYXN0IHByZXNlcnZlIGRydWcgcGF0ZW50IGV4cGlyaWVzIGFzc2lzdCB0aGUgZGV2ZWxvcGluZyB3b3JsZC4mcmRxdW87PC9wPiJ9LCJibG9ja3MiOlt7InR5cGUiOiJzdGVtbGlzdCIsImluc3RyIjoiVXNpbmcgdGhlIGRyb3AtZG93biBtZW51ICggJiM5NjYyOyApLCBjaG9vc2UgdGhlIGJlc3Qgb3B0aW9uIGFjY29yZGluZyB0byB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gb24gdGhlIHdlYnNpdGUuIiwiaXRlbXMiOlt7Im4iOjEsInByZSI6IlRoZSB0aXRsZSB0aGF0IGJlc3QgY29udmV5cyB0aGUgYXJ0aWNsZVx1MjAxOXMgbWFpbiBwb2ludCBpcyBcdTIwMWNCaWcgUGhhcm1hIEJyYW5kczogSG93IG11Y2giLCJvcHRpb25zIjpbImdsb2JhbGl6YXRpb24gY2FuIHRoZXkgc3Vydml2ZT9cdTIwMWQiLCJjYXBpdGFsIGNhbiB0aGV5IHRydWx5IGludmVzdD9cdTIwMWQiLCJwcm90ZWN0aW9uIGRvIHRoZXkgZGVzZXJ2ZT9cdTIwMWQiLCJyZXNlYXJjaCBkbyB0aGV5IHVuZGVydGFrZT9cdTIwMWQiXSwia2V5IjozfSx7Im4iOjIsInByZSI6IlN0cm9uZ2x5IGNvbnRyYXN0ZWQgb3BpbmlvbnMgb24gZ2VuZXJpY3MgYXJlIHByZXNlbnRlZCBpbiBwYXJhZ3JhcGhzIiwib3B0aW9ucyI6WyJvbmUgYW5kIHRocmVlLiIsInR3byBhbmQgdGhyZWUuIiwidGhyZWUgYW5kIGZpdmUuIiwiZm91ciBhbmQgZml2ZS4iXSwia2V5IjozfSx7Im4iOjMsInByZSI6IkNvbm5hdWdodFx1MjAxOXMgcmVtYXJrcyBpbiBwYXJhZ3JhcGggdHdvIGNhbiBiZSBiZXN0IHN1bW1lZCB1cCBhcyIsIm9wdGlvbnMiOlsiXHUyMDFjQSBmb29sIGFuZCBoaXMgbW9uZXkgYXJlIHNvb24gcGFydGVkLlx1MjAxZCIsIlx1MjAxY0hlYWx0aCBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHdlYWx0aC5cdTIwMWQiLCJcdTIwMWNEb25cdTIwMTl0IHB1dCBhbGwgeW91ciBlZ2dzIGluIG9uZSBiYXNrZXQuXHUyMDFkIiwiXHUyMDFjSGUgd2hvIHBheXMgdGhlIHBpcGVyIGNhbGxzIHRoZSB0dW5lLlx1MjAxZCJdLCJrZXkiOjR9LHsibiI6NCwicHJlIjoiQ29ubmF1Z2h0XHUyMDE5cyBhdHRpdHVkZSB0b3dhcmQgZ2VuZXJpY3MgaXMiLCJvcHRpb25zIjpbImxhcmdlbHkgaG9zdGlsZS4iLCJtb2RlcmF0ZWx5IGNyaXRpY2FsLiIsImd1YXJkZWRseSBzdXBwb3J0aXZlLiIsIm1pbGRseSBvcHRpbWlzdGljLiJdLCJrZXkiOjF9LHsibiI6NSwicHJlIjoiSWYgc3VjY2Vzc2Z1bCwgdGhlIEFIQVx1MjAxOXMgZWZmb3J0cyB3aWxsIHJlZHVjZSIsIm9wdGlvbnMiOlsiZ292ZXJubWVudCBpbnZvbHZlbWVudCBpbiBwYXRlbnQgcmVndWxhdGlvbnMuIiwibGlmZSBleHBlY3RhbmN5IGluIGVjb25vbWljYWxseSBzdHJ1Z2dsaW5nIG5hdGlvbnMuIiwibW9ub3BvbGlzdGljIHRlbmRlbmNpZXMgYW1vbmcgbGFyZ2UgZHJ1ZyBmaXJtcy4iLCJzYXRpc2ZhY3Rpb24gYW1vbmcgbWVkaWNhbCBpbnN1cmFuY2UgY29tcGFuaWVzLiJdLCJrZXkiOjN9XX0seyJ0eXBlIjoiY2xvemUiLCJpbnN0ciI6IlRoZSBmb2xsb3dpbmcgaXMgYSBjb21tZW50IGJ5IGEgdmlzaXRvciB0byB0aGUgd2Vic2l0ZSBwYWdlLiBDb21wbGV0ZSB0aGUgY29tbWVudCBieSBjaG9vc2luZyB0aGUgYmVzdCBvcHRpb24gdG8gZmlsbCBpbiBlYWNoIGJsYW5rLiIsImJvZHkiOlsiSSB1bmRlcnN0YW5kIHdoYXQgdGhlIGF1dGhvciBpcyBzYXlpbmdcdTIwMTR0aGF0IGRydWcgcGF0ZW50cyBhcmUgZ3JhbnRlZCBhcyBhIG1hdHRlciBvZiAiLHsiYiI6Niwib3B0aW9ucyI6WyJmYWlybmVzcyIsInRyYWRpdGlvbiIsImVmZmljaWVuY3kiLCJwcmVjYXV0aW9uIl0sImtleSI6MX0sIi4gQnV0IHRoYXQgZG9lc25cdTIwMTl0IG5lY2Vzc2FyaWx5IG1lYW4gdGhleVx1MjAxOXJlIGEgZ29vZCBpZGVhLiBOb3IgYW0gSSBzdXJlLCBhcyB0aGUgYXV0aG9yIHNlZW1zIHRvIHRoaW5rLCB0aGF0IGdlbmVyaWNzIGFyZSBhcyBiZW5lZmljaWFsIGFzIGJyYW5kIG5hbWUgZHJ1Z3MuXG5cbldlaWxsZXIgaXMgcmlnaHQgdG8gcG9pbnQgb3V0IHRoYXQgdGhlIGVmZmVjdCBvZiBnZW5lcmljcyBvbiBCaWcgUGhhcm1hIHByb2ZpdHMgaXMgIix7ImIiOjcsIm9wdGlvbnMiOlsiZGlzdHVyYmluZyIsInN1YnN0YW50aWFsIiwibmVnbGlnaWJsZSIsInN1cnByaXNpbmciXSwia2V5IjozfSwiLiBCdXQgSVx1MjAxOW0gbm90IHNvIHN1cmUgc2hlXHUyMDE5cyByaWdodCB3aGVuIHNoZSBpbXBsaWVzIHRoYXQgdGhlIGRlY2lzaW9ucyBvZiBwcml2YXRlIGhlYWx0aCBpbnN1cmFuY2UgY29tcGFuaWVzIGFyZSBtb3RpdmF0ZWQgYnkgIix7ImIiOjgsIm9wdGlvbnMiOlsidGhlIHdlbGwtYmVpbmcgb2YgdGhlaXIgcG9saWN5IGhvbGRlcnMiLCJob3cgbXVjaCBwcm9maXQgQmlnIFBoYXJtYSBtYWtlcyIsInRoZSBlZmZvcnRzIG9mIGNvbnN1bWVyIGFkdm9jYWN5IGdyb3VwcyIsIndoZXRoZXIgZ2VuZXJpY3MgYXJlIHNvbGQgaW4gb3RoZXIgY291bnRyaWVzIl0sImtleSI6Mn0sIi5cblxuTGlrZSB0aGUgQUhBLCBJXHUyMDE5ZCB3ZWxjb21lIGxhd3MgdGhhdCB3b3VsZCBtYWtlICIseyJiIjo5LCJvcHRpb25zIjpbImJyYW5kZWQgcGhhcm1hY2V1dGljYWxzIGEgdGhpbmcgb2YgdGhlIHBhc3QiLCJlbGVjdGVkIG9mZmljaWFscyBzdG9wIGxpc3RlbmluZyB0byBwaGFybWEgZmlybXMiLCJnZW5lcmljcyBhcnJpdmUgc29vbmVyIG9uIHBoYXJtYWN5IHNoZWx2ZXMiLCJpbnN1cmFuY2UgY29tcGFuaWVzIHBheSBmb3IgYnJhbmQgbmFtZSBkcnVncyJdLCJrZXkiOjN9LCIuIEZ1cnRoZXJtb3JlLCBJXHUyMDE5bSBhbGwgZm9yIHN1cHBvcnRpbmcgcG9vcmVyIG5hdGlvbnMgYW5kIGZhbWlsaWVzLCBvbmUgIix7ImIiOjEwLCJvcHRpb25zIjpbImJyYW5kIG5hbWUiLCJnZW5lcmljIHJlY2FsbCIsImluc3VyYW5jZSBwb2xpY3kiLCJwYXRlbnQgZXhwaXJhdGlvbiJdLCJrZXkiOjR9LCIgYXQgYSB0aW1lLiJdfV19XX07CgpmdW5jdGlvbiBjbGJFc3RpbWF0ZVIocmF3KXsKICBpZiAocmF3ID49IDM1KSByZXR1cm4geyBsZXZlbDonQ0VMUElQIDEwXHUyMDEzMTInLCBub3RlOidBZHZhbmNlZCBwcm9maWNpZW5jeScgfTsKICBpZiAocmF3ID49IDMwKSByZXR1cm4geyBsZXZlbDonQ0VMUElQIDknLCAgbm90ZTonRWZmZWN0aXZlIHByb2ZpY2llbmN5JyB9OwogIGlmIChyYXcgPj0gMjcpIHJldHVybiB7IGxldmVsOidDRUxQSVAgOCcsICBub3RlOidHb29kIHByb2ZpY2llbmN5JyB9OwogIGlmIChyYXcgPj0gMjIpIHJldHVybiB7IGxldmVsOidDRUxQSVAgNycsICBub3RlOidBZGVxdWF0ZSBwcm9maWNpZW5jeScgfTsKICBpZiAocmF3ID49IDE3KSByZXR1cm4geyBsZXZlbDonQ0VMUElQIDYnLCAgbm90ZTonRGV2ZWxvcGluZyBwcm9maWNpZW5jeScgfTsKICBpZiAocmF3ID49IDExKSByZXR1cm4geyBsZXZlbDonQ0VMUElQIDUnLCAgbm90ZTonQWNxdWlyaW5nIHByb2ZpY2llbmN5JyB9OwogIHJldHVybiB7IGxldmVsOidDRUxQSVAgNCBvciBiZWxvdycsIG5vdGU6J0tlZXAgcHJhY3RpY2luZyEnIH07Cn0KCihmdW5jdGlvbigpewogIC8qIC0tLS0gaW5qZWN0IHNjb3BlZCBDU1MgKFdvcmRQcmVzcy1zYWZlOiA8c3R5bGU+IGluIGNvbnRlbnQgY2FuIGJlIHN0cmlwcGVkKSAtLS0tICovCiAgdmFyIENTUyA9IGAKLmNscHItd3JhcHstLW5hdnk6IzA1MEUyMDstLWI5MDA6IzBEMjM1MjstLWI3MDA6IzEyNDVBODstLWI1MDA6IzI1NjNFQjstLWI0MDA6IzNCODJGNjstLWIyMDA6IzkzQzVGRDstLWIxMDA6I0RCRUFGRTstLWI1MDojRUZGNkZGOy0tdGVhbDojMEQ5NDg4Oy0tY3lhbjojMDZCNkQ0Oy0tZ3JlZW46IzEwQjk4MTstLWdyZWVuNTA6I0VDRkRGNTstLXJvc2U6I0Y0M0Y1RTstLXRleHQ6IzBGMTcyQTstLW11dGVkOiM0NzU1Njk7LS1zdWJ0bGU6Izk0QTNCODstLWJvcmRlcjojRTJFOEYwOy0tYmFyLWJnOiNFOEVCRUY7LS1iYXItYm9yZGVyOiNEM0Q5RTA7LS1iYXItdGV4dDojMUYyOTM3Oy0tcGFuZWwtcC1iZzojRjRGNUY3Oy0tcGFuZWwtcC1ib3JkZXI6I0UzRTZFQTstLXBhbmVsLXEtYmc6I0U5RjRGNzstLXBhbmVsLXEtYm9yZGVyOiNENkU4RUQ7LS1kZC1vcGVuLWJnOiNDQkVCRjQ7Zm9udC1mYW1pbHk6J1BsdXMgSmFrYXJ0YSBTYW5zJyxzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxTZWdvZSBVSSxSb2JvdG8sc2Fucy1zZXJpZjtjb2xvcjp2YXIoLS10ZXh0KTttYXgtd2lkdGg6MTE4MHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoxNnB4IDE2cHggNTZweDtsaW5lLWhlaWdodDoxLjU7Zm9udC1zaXplOjE2cHg7fQouY2xwci13cmFwICosLmNscHItd3JhcCAqOjpiZWZvcmUsLmNscHItd3JhcCAqOjphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7fQouY2xwci13cmFwIGJ1dHRvbntmb250LWZhbWlseTppbmhlcml0O2N1cnNvcjpwb2ludGVyO30KLmNscHItd3JhcCBoMSwuY2xwci13cmFwIGgyLC5jbHByLXdyYXAgaDMsLmNscHItd3JhcCBwe21hcmdpbjowO30KLmNscHItaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoyMnB4O2JhY2tncm91bmQ6dmFyKC0tbmF2eSk7Y29sb3I6I2ZmZjtwYWRkaW5nOjM0cHggMzhweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxM3B4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym94LXNoYWRvdzowIDIwcHggNDBweCAtMjBweCByZ2JhKDUsMTQsMzIsLjQ1KTt9Ci5jbHByLWF1cm9yYXtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7fQouY2xwci1hdXJvcmEgc3Bhbntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JvcmRlci1yYWRpdXM6NTAlO2ZpbHRlcjpibHVyKDQ2cHgpO29wYWNpdHk6LjU1O30KLmNscHItYXVyb3JhIHNwYW46bnRoLWNoaWxkKDEpe3dpZHRoOjQyMHB4O2hlaWdodDo0MjBweDtsZWZ0Oi0xMjBweDt0b3A6LTIwMHB4O2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjMTI0NUE4IDAlLHRyYW5zcGFyZW50IDcwJSk7fQouY2xwci1hdXJvcmEgc3BhbjpudGgtY2hpbGQoMil7d2lkdGg6MzgwcHg7aGVpZ2h0OjM4MHB4O3JpZ2h0Oi04MHB4O3RvcDotMTYwcHg7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCMwRDk0ODggMCUsdHJhbnNwYXJlbnQgNzAlKTt9Ci5jbHByLWF1cm9yYSBzcGFuOm50aC1jaGlsZCgzKXt3aWR0aDozNDBweDtoZWlnaHQ6MzQwcHg7cmlnaHQ6MjIlO2JvdHRvbTotMjQwcHg7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCMyNTYzRUIgMCUsdHJhbnNwYXJlbnQgNzAlKTt9Ci5jbHByLWhlcm8tYmFkZ2Vze2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7cG9zaXRpb246cmVsYXRpdmU7fQouY2xwci1iYWRnZS1icmFuZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tYjkwMCk7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6NHB4IDExcHg7Ym9yZGVyLXJhZGl1czo5OTlweDtsZXR0ZXItc3BhY2luZzouMDFlbTt9Ci5jbHByLWJhZGdlLXNldHtjb2xvcjp2YXIoLS1iMjAwKTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7fQouY2xwci1oZXJvIGgxe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTpjbGFtcCgyNnB4LDR2dyw0MHB4KTtmb250LXdlaWdodDo4MDA7bGV0dGVyLXNwYWNpbmc6LS4wMmVtO2xpbmUtaGVpZ2h0OjEuMTI7fQouY2xwci1oZXJvLXN1Yntwb3NpdGlvbjpyZWxhdGl2ZTtjb2xvcjojQzdEMkUzO2ZvbnQtc2l6ZToxNC41cHg7bWF4LXdpZHRoOjc2MHB4O30KLmNscHItaGVyby1jaGlwc3tkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDtwb3NpdGlvbjpyZWxhdGl2ZTt9Ci5jbHByLWNoaXB7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDA7Y29sb3I6I0U1RUVGQjtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA4KTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjE2KTtwYWRkaW5nOjVweCAxMXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7fQouY2xwci1jdGF7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDo2cHg7YmFja2dyb3VuZDp2YXIoLS1iNTAwKTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTVweDtwYWRkaW5nOjEycHggMjJweDtib3JkZXItcmFkaXVzOjEycHg7Ym94LXNoYWRvdzowIDEycHggMjRweCAtMTBweCByZ2JhKDM3LDk5LDIzNSwuOCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE1cyxiYWNrZ3JvdW5kIC4xNXM7fQouY2xwci1jdGE6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7YmFja2dyb3VuZDp2YXIoLS1iNDAwKTt9Ci5jbHByLXRvb2xiYXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tdG9wOjE4cHg7cGFkZGluZzoxMHB4IDE0cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtib3JkZXItcmFkaXVzOjE0cHg7Ym94LXNoYWRvdzowIDZweCAxOHB4IC0xMnB4IHJnYmEoMTUsMjMsNDIsLjI1KTtwb3NpdGlvbjpzdGlja3k7dG9wOjhweDt6LWluZGV4OjMwO30KLmNscHItdG9vbGJhcltoaWRkZW5de2Rpc3BsYXk6bm9uZTt9Ci5jbHByLXRvb2xiYXItc3BhY2Vye2ZsZXg6MTt9Ci5jbHByLXNjb3JlLWNoaXB7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWI5MDApO2JhY2tncm91bmQ6dmFyKC0tYjUwKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWIxMDApO3BhZGRpbmc6NnB4IDEycHg7Ym9yZGVyLXJhZGl1czo5OTlweDt9Ci5jbHByLXRidG57YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtjb2xvcjp2YXIoLS10ZXh0KTtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo4cHggMTVweDtib3JkZXItcmFkaXVzOjEwcHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjEycyxib3gtc2hhZG93IC4xMnM7fQouY2xwci10YnRuOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpO2JveC1zaGFkb3c6MCA2cHggMTRweCAtOHB4IHJnYmEoMTUsMjMsNDIsLjMpO30KLmNscHItdGJ0bi1jaGVja3tiYWNrZ3JvdW5kOnZhcigtLWdyZWVuKTtib3JkZXItY29sb3I6dmFyKC0tZ3JlZW4pO2NvbG9yOiNmZmY7fQouY2xwci10YnRuLWNoZWNrOmhvdmVye2JhY2tncm91bmQ6IzBjYTY3ODt9Ci5jbHByLXRidG5bZGlzYWJsZWRde29wYWNpdHk6LjU7Y3Vyc29yOm5vdC1hbGxvd2VkO3RyYW5zZm9ybTpub25lO2JveC1zaGFkb3c6bm9uZTt9Ci5jbHByLXNpbXttYXJnaW4tdG9wOjE2cHg7fQouY2xwci1zaW1baGlkZGVuXXtkaXNwbGF5Om5vbmU7fQouY2xwci1kb3Rze2Rpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbjowIDAgMTJweCAycHg7ZmxleC13cmFwOndyYXA7fQouY2xwci1kb3R7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjdweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1tdXRlZCk7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtwYWRkaW5nOjZweCAxMnB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1czt9Ci5jbHByLWRvdCBie2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6MTlweDtoZWlnaHQ6MTlweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnZhcigtLWIxMDApO2NvbG9yOnZhcigtLWI5MDApO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToxMXB4O30KLmNscHItZG90LmNscHItY3Vye2JhY2tncm91bmQ6dmFyKC0tYjUwMCk7Ym9yZGVyLWNvbG9yOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7fQouY2xwci1kb3QuY2xwci1jdXIgYntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjI1KTtjb2xvcjojZmZmO30KLmNscHItZG90LmNscHItZG9uZSBie2JhY2tncm91bmQ6dmFyKC0tZ3JlZW4pO2NvbG9yOiNmZmY7fQouY2xwci1jYXR7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYmFyLWJvcmRlcik7Ym9yZGVyLXJhZGl1czoxMnB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMTBweCAzMHB4IC0xOHB4IHJnYmEoMTUsMjMsNDIsLjQpO30KLmNscHItYmFye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7cGFkZGluZzoxMXB4IDE2cHg7YmFja2dyb3VuZDp2YXIoLS1iYXItYmcpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJhci1ib3JkZXIpO30KLmNscHItYmFyLXRpdGxle2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1iYXItdGV4dCk7ZmxleDoxO21pbi13aWR0aDowO30KLmNscHItYmFyLXRpbWVye2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWJhci10ZXh0KTt3aGl0ZS1zcGFjZTpub3dyYXA7fQouY2xwci1iYXItdGltZXIgYntmb250LXdlaWdodDo4MDA7fQouY2xwci1jb2xze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MDt9Ci5jbHByLXBhc3NhZ2V7cGFkZGluZzoyMHB4IDIycHg7YmFja2dyb3VuZDp2YXIoLS1wYW5lbC1wLWJnKTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHZhcigtLXBhbmVsLXAtYm9yZGVyKTttYXgtaGVpZ2h0OjEyMDBweDtvdmVyZmxvdzphdXRvO30KLmNscHItcWNvbHtwYWRkaW5nOjE4cHggMjJweDtiYWNrZ3JvdW5kOnZhcigtLXBhbmVsLXEtYmcpO21heC1oZWlnaHQ6MTIwMHB4O292ZXJmbG93OmF1dG87fQouY2xwci1wbGFiZWwsLmNscHItaW5zdHJ7ZGlzcGxheTpmbGV4O2dhcDo5cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tYjkwMCk7bWFyZ2luLWJvdHRvbToxMnB4O30KLmNscHItcGxhYmVsOjpiZWZvcmUsLmNscHItaW5zdHI6OmJlZm9yZXtjb250ZW50OiJpIjtmbGV4Om5vbmU7d2lkdGg6MTdweDtoZWlnaHQ6MTdweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc3R5bGU6aXRhbGljO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjFweDt9Ci5jbHByLXBhc3NhZ2UgcHtmb250LXNpemU6MTQuNXB4O2NvbG9yOiMxZTJhM2E7bWFyZ2luLWJvdHRvbToxMXB4O2xpbmUtaGVpZ2h0OjEuNzI7fQouY2xwci1waW1ne3dpZHRoOjEwMCU7aGVpZ2h0OmF1dG87Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1wYW5lbC1wLWJvcmRlcik7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDojZmZmO2Rpc3BsYXk6YmxvY2s7fQouY2xwci1ibG9ja3tiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1wYW5lbC1xLWJvcmRlcik7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDt9Ci5jbHByLXN0ZW17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO2ZvbnQtc2l6ZToxNXB4O2NvbG9yOnZhcigtLXRleHQpO3BhZGRpbmc6OXB4IDA7bGluZS1oZWlnaHQ6MS43O30KLmNscHItc3RlbSArIC5jbHByLXN0ZW17Ym9yZGVyLXRvcDoxcHggZGFzaGVkICNFNkVERjE7fQouY2xwci1zbnVte2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjp2YXIoLS1iNzAwKTt9Ci5jbHByLWNsb3ple2ZvbnQtc2l6ZToxNXB4O2NvbG9yOnZhcigtLXRleHQpO2xpbmUtaGVpZ2h0OjIuMTU7fQouY2xwci1jbG96ZSAuY2xwci1wYXJhe21hcmdpbi1ib3R0b206MTJweDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt9Ci5jbHByLW1hdGNoLXJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTJweDtwYWRkaW5nOjExcHggMDtmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNjt9Ci5jbHByLW1hdGNoLXJvdyArIC5jbHByLW1hdGNoLXJvd3tib3JkZXItdG9wOjFweCBkYXNoZWQgI0U2RURGMTt9Ci5jbHByLW1hdGNoLXJvdyAuY2xwci1zbnVte21hcmdpbi10b3A6NXB4O30KLyogZHJvcGRvd24gd2lkZ2V0ICovCi5jbHByLWRke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjoycHggMnB4O30KLmNscHItZGQtYnRue2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7bWluLXdpZHRoOjY0cHg7bWF4LXdpZHRoOjM0MHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNCN0MyQ0U7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo1cHggOXB4O2ZvbnQtc2l6ZToxMy41cHg7Y29sb3I6dmFyKC0tdGV4dCk7bGluZS1oZWlnaHQ6MS4zNTt0ZXh0LWFsaWduOmxlZnQ7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnM7fQouY2xwci1kZC1idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iNTApO2JvcmRlci1jb2xvcjp2YXIoLS1iNDAwKTt9Ci5jbHByLWRkLmNscHItb3BlbiAuY2xwci1kZC1idG57YmFja2dyb3VuZDp2YXIoLS1kZC1vcGVuLWJnKTtib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7fQouY2xwci1kZC10eHR7ZmxleDoxO21pbi13aWR0aDowO30KLmNscHItZGQtdHh0LmNscHItZW1wdHl7Y29sb3I6dmFyKC0tc3VidGxlKTtsZXR0ZXItc3BhY2luZzozcHg7fQouY2xwci1kZC1jYXJldHtmb250LXNpemU6OXB4O2NvbG9yOnZhcigtLWI3MDApO2ZsZXg6bm9uZTt9Ci5jbHByLWRkLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo2MDt0b3A6Y2FsYygxMDAlICsgNHB4KTtsZWZ0OjA7bWluLXdpZHRoOjI0MHB4O21heC13aWR0aDozNjBweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjQzZEMERBO2JvcmRlci1yYWRpdXM6OHB4O2JveC1zaGFkb3c6MCAxNnB4IDM0cHggLTEycHggcmdiYSgxNSwyMyw0MiwuNCk7cGFkZGluZzo1cHg7ZGlzcGxheTpub25lO30KLmNscHItZGQuY2xwci1vcGVuIC5jbHByLWRkLW1lbnV7ZGlzcGxheTpibG9jazt9Ci5jbHByLWRkLW9wdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6OXB4O3BhZGRpbmc6OHB4IDlweDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTMuNXB4O2NvbG9yOnZhcigtLXRleHQpO2N1cnNvcjpwb2ludGVyO2xpbmUtaGVpZ2h0OjEuNDt9Ci5jbHByLWRkLW9wdDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWI1MCk7fQouY2xwci1kZC1vcHQgLmNscHItcmFkaW97ZmxleDpub25lO3dpZHRoOjE1cHg7aGVpZ2h0OjE1cHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjEuNXB4IHNvbGlkICM5QUE3QjQ7bWFyZ2luLXRvcDoxcHg7fQouY2xwci1kZC1vcHQuY2xwci1zZWwgLmNscHItcmFkaW97Ym9yZGVyLWNvbG9yOnZhcigtLWI1MDApO2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjMjU2M0VCIDQyJSwjZmZmIDQ3JSk7fQouY2xwci1kZC5jbHByLXJpZ2h0IC5jbHByLWRkLWJ0bntiYWNrZ3JvdW5kOnZhcigtLWdyZWVuNTApO2JvcmRlcjoycHggc29saWQgdmFyKC0tZ3JlZW4pO2NvbG9yOiMwNDc4NTc7fQouY2xwci1kZC5jbHByLXdyb25nIC5jbHByLWRkLWJ0bntiYWNrZ3JvdW5kOiNGRkYxRjI7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1yb3NlKTtjb2xvcjojQkUxMjNDO30KLmNscHItc29sdmVke2Rpc3BsYXk6bm9uZTttYXJnaW4tbGVmdDo3cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzA0Nzg1Nzt9Ci5jbHByLWRkLmNscHItd3JvbmcgLmNscHItc29sdmVke2Rpc3BsYXk6aW5saW5lO30KLmNscHItbmF2e2Rpc3BsYXk6ZmxleDtnYXA6MTBweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjE0cHggMThweDtiYWNrZ3JvdW5kOnZhcigtLWJhci1iZyk7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tYmFyLWJvcmRlcik7fQouY2xwci1uYXZidG57YmFja2dyb3VuZDp2YXIoLS1iOTAwKTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTMuNXB4O3BhZGRpbmc6OXB4IDIwcHg7Ym9yZGVyLXJhZGl1czo5cHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjEycyxiYWNrZ3JvdW5kIC4xMnM7fQouY2xwci1uYXZidG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iNzAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMXB4KTt9Ci5jbHByLW5hdmJ0bi5jbHByLWdob3N0e2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1tdXRlZCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1iYXItYm9yZGVyKTt9Ci5jbHByLW5hdmJ0bltkaXNhYmxlZF17b3BhY2l0eTouNDtjdXJzb3I6bm90LWFsbG93ZWQ7dHJhbnNmb3JtOm5vbmU7fQouY2xwci1yZXN1bHRze21hcmdpbi10b3A6MThweDt9Ci5jbHByLXJlc3VsdHNbaGlkZGVuXXtkaXNwbGF5Om5vbmU7fQouY2xwci1yZXMtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MThweDtwYWRkaW5nOjI0cHggMjZweDtib3gtc2hhZG93OjAgMTZweCA0MHB4IC0yMnB4IHJnYmEoMTUsMjMsNDIsLjQpO30KLmNscHItcmVzLXRvcHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoyMHB4O2ZsZXgtd3JhcDp3cmFwO30KLmNscHItcmVzLXNjb3Jle2ZvbnQtc2l6ZTo0NHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjp2YXIoLS1iNzAwKTtsaW5lLWhlaWdodDoxO30KLmNscHItcmVzLXNjb3JlIHNwYW57Zm9udC1zaXplOjIwcHg7Y29sb3I6dmFyKC0tc3VidGxlKTt9Ci5jbHByLXJlcy1jbGJ7YmFja2dyb3VuZDp2YXIoLS1iNTApO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYjEwMCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweCAxNnB4O30KLmNscHItcmVzLWNsYiBie2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjE4cHg7Y29sb3I6dmFyKC0tYjkwMCk7fQouY2xwci1yZXMtY2xiIHNtYWxse2NvbG9yOnZhcigtLW11dGVkKTt9Ci5jbHByLXJlcy1icmVha3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDoxNnB4O30KLmNscHItcmVzLXBpbGx7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLW11dGVkKTtiYWNrZ3JvdW5kOiNGMUY1Rjk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjZweCAxM3B4O30KLmNscHItcmVzLWFjdGlvbnN7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O21hcmdpbi10b3A6MThweDtmbGV4LXdyYXA6d3JhcDt9CkBtZWRpYShtYXgtd2lkdGg6ODIwcHgpey5jbHByLWNvbHN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjt9LmNscHItcGFzc2FnZXtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1wYW5lbC1wLWJvcmRlcik7bWF4LWhlaWdodDpub25lO30uY2xwci1xY29se21heC1oZWlnaHQ6bm9uZTt9fQpgOwogIHZhciBzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7IHN0LnRleHRDb250ZW50ID0gQ1NTOyBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0KTsKICB2YXIgd3JhcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHByV3JhcCcpOwogIHZhciBzdGFydEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHByU3RhcnQnKTsKICB2YXIgdG9vbGJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHByVG9vbGJhcicpOwogIHZhciBzaW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwclNpbScpOwogIHZhciBkb3RzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwckRvdHMnKTsKICB2YXIgY2F0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwckNhdCcpOwogIHZhciByZXN1bHRzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwclJlc3VsdHMnKTsKICB2YXIgc2NvcmVDaGlwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscHJTY29yZUNoaXAnKTsKICB2YXIgY2hlY2tCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwckNoZWNrJyk7CiAgdmFyIHJlc2V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscHJSZXNldCcpOwoKICB2YXIgUSA9IFtdOwogIHZhciBjdXJQYXJ0ID0gMDsKICB2YXIgY2hlY2tlZCA9IGZhbHNlOwoKICBmdW5jdGlvbiBlbCh0YWcsIGNscywgaHRtbCl7IHZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsgaWYoY2xzKWUuY2xhc3NOYW1lPWNsczsgaWYoaHRtbCE9bnVsbCllLmlubmVySFRNTD1odG1sOyByZXR1cm4gZTsgfQoKICAvKiBCdWlsZCB0aGUgcGVyc2lzdGVudCBxdWVzdGlvbiBsaXN0IE9OQ0U7IGF0dGFjaCAuX3EgdG8gZWFjaCBpdGVtL2JsYW5rIHNvCiAgICAgcmUtcmVuZGVyaW5nIGEgcGFydCByZXVzZXMgdGhlIHNhbWUgc3RhdGUgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdC4gKi8KICBmdW5jdGlvbiBpbml0UXVlc3Rpb25zKCl7CiAgICBRID0gW107CiAgICBSREFUQS5wYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKHBhcnQpewogICAgICBwYXJ0LmJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uKGJsayl7CiAgICAgICAgaWYoYmxrLnR5cGU9PT0nY2xvemUnKXsKICAgICAgICAgIGJsay5ib2R5LmZvckVhY2goZnVuY3Rpb24odG9rKXsgaWYodHlwZW9mIHRvaz09PSdvYmplY3QnKXsgdG9rLl9xPXtzZWw6bnVsbCxrZXk6dG9rLmtleSxuOnRvay5iLHBhcnQ6cGFydC5pZH07IFEucHVzaCh0b2suX3EpOyB9IH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBibGsuaXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdCl7IGl0Ll9xPXtzZWw6bnVsbCxrZXk6aXQua2V5LG46aXQubixwYXJ0OnBhcnQuaWR9OyBRLnB1c2goaXQuX3EpOyB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBtYWtlRHJvcGRvd24ob3B0aW9ucywgcXJlZil7CiAgICB2YXIgZGQgPSBlbCgnc3BhbicsJ2NscHItZGQnKTsKICAgIHZhciBidG4gPSBlbCgnYnV0dG9uJywnY2xwci1kZC1idG4nKTsKICAgIHZhciB0eHQgPSBlbCgnc3BhbicsJ2NscHItZGQtdHh0IGNscHItZW1wdHknLCcgICAnKTsKICAgIHZhciBjYXJldCA9IGVsKCdzcGFuJywnY2xwci1kZC1jYXJldCcsJ1x1MjViZScpOwogICAgYnRuLmFwcGVuZENoaWxkKHR4dCk7IGJ0bi5hcHBlbmRDaGlsZChjYXJldCk7CiAgICB2YXIgc29sdmVkID0gZWwoJ3NwYW4nLCdjbHByLXNvbHZlZCcsJycpOwogICAgdmFyIG1lbnUgPSBlbCgnc3BhbicsJ2NscHItZGQtbWVudScpOwogICAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG9wdCwgaSl7CiAgICAgIHZhciBvID0gZWwoJ3NwYW4nLCdjbHByLWRkLW9wdCcpOwogICAgICBvLmFwcGVuZENoaWxkKGVsKCdzcGFuJywnY2xwci1yYWRpbycpKTsKICAgICAgby5hcHBlbmRDaGlsZChlbCgnc3BhbicsbnVsbCxvcHQpKTsKICAgICAgby5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2KXsKICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBpZihjaGVja2VkKSByZXR1cm47CiAgICAgICAgcXJlZi5zZWwgPSBpKzE7CiAgICAgICAgdHh0LnRleHRDb250ZW50ID0gb3B0OyB0eHQuY2xhc3NOYW1lPSdjbHByLWRkLXR4dCc7CiAgICAgICAgbWVudS5xdWVyeVNlbGVjdG9yQWxsKCcuY2xwci1kZC1vcHQnKS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3guY2xhc3NMaXN0LnJlbW92ZSgnY2xwci1zZWwnKTt9KTsKICAgICAgICBvLmNsYXNzTGlzdC5hZGQoJ2NscHItc2VsJyk7CiAgICAgICAgY2xvc2VBbGwoKTsKICAgICAgICB1cGRhdGVTY29yZUNoaXAoKTsKICAgICAgfSk7CiAgICAgIG1lbnUuYXBwZW5kQ2hpbGQobyk7CiAgICB9KTsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2KXsKICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGlmKGNoZWNrZWQpIHJldHVybjsKICAgICAgdmFyIHdhc09wZW4gPSBkZC5jbGFzc0xpc3QuY29udGFpbnMoJ2NscHItb3BlbicpOwogICAgICBjbG9zZUFsbCgpOwogICAgICBpZighd2FzT3BlbikgZGQuY2xhc3NMaXN0LmFkZCgnY2xwci1vcGVuJyk7CiAgICB9KTsKICAgIGRkLmFwcGVuZENoaWxkKGJ0bik7IGRkLmFwcGVuZENoaWxkKHNvbHZlZCk7IGRkLmFwcGVuZENoaWxkKG1lbnUpOwogICAgcXJlZi5kZEVsID0gZGQ7IHFyZWYudHh0RWwgPSB0eHQ7IHFyZWYuc29sdmVkRWwgPSBzb2x2ZWQ7IHFyZWYub3B0aW9ucyA9IG9wdGlvbnM7CiAgICBpZihxcmVmLnNlbCE9bnVsbCl7CiAgICAgIHR4dC50ZXh0Q29udGVudCA9IG9wdGlvbnNbcXJlZi5zZWwtMV07IHR4dC5jbGFzc05hbWU9J2NscHItZGQtdHh0JzsKICAgICAgdmFyIHNvID0gbWVudS5xdWVyeVNlbGVjdG9yQWxsKCcuY2xwci1kZC1vcHQnKVtxcmVmLnNlbC0xXTsgaWYoc28pIHNvLmNsYXNzTGlzdC5hZGQoJ2NscHItc2VsJyk7CiAgICB9CiAgICByZXR1cm4gZGQ7CiAgfQogIGZ1bmN0aW9uIGNsb3NlQWxsKCl7IHdyYXAucXVlcnlTZWxlY3RvckFsbCgnLmNscHItZGQuY2xwci1vcGVuJykuZm9yRWFjaChmdW5jdGlvbihkKXtkLmNsYXNzTGlzdC5yZW1vdmUoJ2NscHItb3BlbicpO30pOyB9CiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZUFsbCk7CgogIGZ1bmN0aW9uIGJ1aWxkUGFydChwaSl7CiAgICB2YXIgcGFydCA9IFJEQVRBLnBhcnRzW3BpXTsKICAgIGNhdEVsLmlubmVySFRNTD0nJzsKICAgIHZhciBiYXIgPSBlbCgnZGl2JywnY2xwci1iYXInKTsKICAgIGJhci5hcHBlbmRDaGlsZChlbCgnZGl2JywnY2xwci1iYXItdGl0bGUnLCAnUHJhY3RpY2UgVGVzdCAxIFx1MjAxMyAnK3BhcnQubmFtZSkpOwogICAgYmFyLmFwcGVuZENoaWxkKGVsKCdkaXYnLCdjbHByLWJhci10aW1lcicsJ1N1Z2dlc3RlZCB0aW1lOiA8Yj4nK3BhcnQudGltZSsnPC9iPicpKTsKICAgIGNhdEVsLmFwcGVuZENoaWxkKGJhcik7CiAgICB2YXIgY29scyA9IGVsKCdkaXYnLCdjbHByLWNvbHMnKTsKICAgIHZhciBsZWZ0ID0gZWwoJ2RpdicsJ2NscHItcGFzc2FnZScpOwogICAgbGVmdC5hcHBlbmRDaGlsZChlbCgnZGl2JywnY2xwci1wbGFiZWwnLCBwYXJ0LnBhc3NhZ2UubGFiZWwpKTsKICAgIGlmKHBhcnQucGFzc2FnZS50eXBlPT09J2ltYWdlJyl7CiAgICAgIHZhciBpbWcgPSBlbCgnaW1nJywnY2xwci1waW1nJyk7IGltZy5zcmMgPSBwYXJ0LnBhc3NhZ2Uuc3JjOyBpbWcuYWx0ID0gcGFydC5wYXNzYWdlLmFsdHx8Jyc7IGxlZnQuYXBwZW5kQ2hpbGQoaW1nKTsKICAgIH0gZWxzZSB7CiAgICAgIGxlZnQuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsbnVsbCwgcGFydC5wYXNzYWdlLmh0bWwpKTsKICAgIH0KICAgIHZhciByaWdodCA9IGVsKCdkaXYnLCdjbHByLXFjb2wnKTsKICAgIHBhcnQuYmxvY2tzLmZvckVhY2goZnVuY3Rpb24oYmxvY2speyByaWdodC5hcHBlbmRDaGlsZChidWlsZEJsb2NrKGJsb2NrLCBwYXJ0KSk7IH0pOwogICAgY29scy5hcHBlbmRDaGlsZChsZWZ0KTsgY29scy5hcHBlbmRDaGlsZChyaWdodCk7CiAgICBjYXRFbC5hcHBlbmRDaGlsZChjb2xzKTsKICAgIHZhciBuYXYgPSBlbCgnZGl2JywnY2xwci1uYXYnKTsKICAgIHZhciBwcmV2ID0gZWwoJ2J1dHRvbicsJ2NscHItbmF2YnRuIGNscHItZ2hvc3QnLCdcdTIxOTAgUHJldmlvdXMgcGFydCcpOwogICAgdmFyIG5leHQgPSBlbCgnYnV0dG9uJywnY2xwci1uYXZidG4nLCdOZXh0IHBhcnQgXHUyMTkyJyk7CiAgICBwcmV2LmRpc2FibGVkID0gKHBpPT09MCk7IG5leHQuZGlzYWJsZWQgPSAocGk9PT1SREFUQS5wYXJ0cy5sZW5ndGgtMSk7CiAgICBwcmV2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgaWYocGk+MCkgZ28ocGktMSk7IH0pOwogICAgbmV4dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGlmKHBpPFJEQVRBLnBhcnRzLmxlbmd0aC0xKSBnbyhwaSsxKTsgfSk7CiAgICBuYXYuYXBwZW5kQ2hpbGQocHJldik7IG5hdi5hcHBlbmRDaGlsZChuZXh0KTsKICAgIGNhdEVsLmFwcGVuZENoaWxkKG5hdik7CiAgICBpZihjaGVja2VkKSBhcHBseU1hcmtzKCk7CiAgfQoKICBmdW5jdGlvbiBidWlsZEJsb2NrKGJsb2NrLCBwYXJ0KXsKICAgIHZhciB3cmFwQiA9IGVsKCdkaXYnLCdjbHByLWJsb2NrJyk7CiAgICB3cmFwQi5hcHBlbmRDaGlsZChlbCgnZGl2JywnY2xwci1pbnN0cicsIGJsb2NrLmluc3RyKSk7CiAgICBpZihibG9jay50eXBlPT09J3N0ZW1saXN0Jyl7CiAgICAgIGJsb2NrLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXQpewogICAgICAgIHZhciByb3cgPSBlbCgnZGl2JywnY2xwci1zdGVtJyk7CiAgICAgICAgcm93LmFwcGVuZENoaWxkKGVsKCdzcGFuJywnY2xwci1zbnVtJywgaXQubisnLicpKTsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLG51bGwsIGl0LnByZSsnICcpKTsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQobWFrZURyb3Bkb3duKGl0Lm9wdGlvbnMsIGl0Ll9xKSk7CiAgICAgICAgd3JhcEIuYXBwZW5kQ2hpbGQocm93KTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYoYmxvY2sudHlwZT09PSdjbG96ZScpewogICAgICB2YXIgYm94ID0gZWwoJ2RpdicsJ2NscHItY2xvemUnKTsKICAgICAgYmxvY2suYm9keS5mb3JFYWNoKGZ1bmN0aW9uKHRvayl7CiAgICAgICAgaWYodHlwZW9mIHRvaz09PSdzdHJpbmcnKXsKICAgICAgICAgIHZhciBzZWdzID0gdG9rLnNwbGl0KCdcblxuJyk7CiAgICAgICAgICBzZWdzLmZvckVhY2goZnVuY3Rpb24oc2VnLCBpZHgpewogICAgICAgICAgICBpZihpZHg+MCl7IGJveC5hcHBlbmRDaGlsZChlbCgnc3BhbicsbnVsbCwnPGJyPjxicj4nKSk7IH0KICAgICAgICAgICAgYm94LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHNlZykpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJveC5hcHBlbmRDaGlsZChtYWtlRHJvcGRvd24odG9rLm9wdGlvbnMsIHRvay5fcSkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHdyYXBCLmFwcGVuZENoaWxkKGJveCk7CiAgICB9IGVsc2UgaWYoYmxvY2sudHlwZT09PSdtYXRjaCcpewogICAgICBibG9jay5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0KXsKICAgICAgICB2YXIgcm93ID0gZWwoJ2RpdicsJ2NscHItbWF0Y2gtcm93Jyk7CiAgICAgICAgcm93LmFwcGVuZENoaWxkKG1ha2VEcm9wZG93bihibG9jay5sZXR0ZXJzLCBpdC5fcSkpOwogICAgICAgIHJvdy5hcHBlbmRDaGlsZChlbCgnc3BhbicsJ2NscHItc251bScsIGl0Lm4rJy4nKSk7CiAgICAgICAgcm93LmFwcGVuZENoaWxkKGVsKCdzcGFuJyxudWxsLCBpdC50ZXh0KSk7CiAgICAgICAgd3JhcEIuYXBwZW5kQ2hpbGQocm93KTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gd3JhcEI7CiAgfQoKICBmdW5jdGlvbiBidWlsZERvdHMoKXsKICAgIGRvdHNFbC5pbm5lckhUTUw9Jyc7CiAgICBSREFUQS5wYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKHAsIGkpewogICAgICB2YXIgZCA9IGVsKCdidXR0b24nLCdjbHByLWRvdCcrKGk9PT1jdXJQYXJ0PycgY2xwci1jdXInOicnKSk7CiAgICAgIGQuYXBwZW5kQ2hpbGQoZWwoJ2InLG51bGwsKGkrMSkpKTsKICAgICAgZC5hcHBlbmRDaGlsZChlbCgnc3BhbicsbnVsbCxbJ0NvcnJlc3BvbmRlbmNlJywnQXBwbHkgYSBEaWFncmFtJywnSW5mb3JtYXRpb24nLCdWaWV3cG9pbnRzJ11baV0pKTsKICAgICAgZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGdvKGkpOyB9KTsKICAgICAgZG90c0VsLmFwcGVuZENoaWxkKGQpOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGdvKHBpKXsgY3VyUGFydD1waTsgYnVpbGREb3RzKCk7IGJ1aWxkUGFydChwaSk7IGNhdEVsLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJyxibG9jazonc3RhcnQnfSk7IH0KCiAgZnVuY3Rpb24gdXBkYXRlU2NvcmVDaGlwKCl7CiAgICB2YXIgYW5zID0gUS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuc2VsIT1udWxsO30pLmxlbmd0aDsKICAgIHNjb3JlQ2hpcC50ZXh0Q29udGVudCA9IGNoZWNrZWQgPyAoUS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuc2VsPT09cS5rZXk7fSkubGVuZ3RoKycgLyAnK1EubGVuZ3RoKycgY29ycmVjdCcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGFucysnIC8gJytRLmxlbmd0aCsnIGFuc3dlcmVkJyk7CiAgfQoKICBmdW5jdGlvbiBhcHBseU1hcmtzKCl7CiAgICBRLmZvckVhY2goZnVuY3Rpb24ocSl7CiAgICAgIGlmKCFxLmRkRWwpIHJldHVybjsKICAgICAgcS5kZEVsLmNsYXNzTGlzdC5yZW1vdmUoJ2NscHItcmlnaHQnLCdjbHByLXdyb25nJyk7CiAgICAgIGlmKHEuc2VsPT09cS5rZXkpeyBxLmRkRWwuY2xhc3NMaXN0LmFkZCgnY2xwci1yaWdodCcpOyB9CiAgICAgIGVsc2UgewogICAgICAgIHEuZGRFbC5jbGFzc0xpc3QuYWRkKCdjbHByLXdyb25nJyk7CiAgICAgICAgaWYocS5zb2x2ZWRFbCkgcS5zb2x2ZWRFbC50ZXh0Q29udGVudCA9ICdcdTI3MTMgJytxLm9wdGlvbnNbcS5rZXktMV07CiAgICAgICAgaWYocS5zZWw9PW51bGwgJiYgcS50eHRFbCl7IHEudHh0RWwudGV4dENvbnRlbnQ9JyhubyBhbnN3ZXIpJzsgcS50eHRFbC5jbGFzc05hbWU9J2NscHItZGQtdHh0JzsgfQogICAgICB9CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGRvQ2hlY2soKXsKICAgIGNoZWNrZWQgPSB0cnVlOwogICAgYXBwbHlNYXJrcygpOwogICAgdmFyIGNvcnJlY3QgPSBRLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4gcS5zZWw9PT1xLmtleTt9KS5sZW5ndGg7CiAgICB1cGRhdGVTY29yZUNoaXAoKTsKICAgIGNoZWNrQnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgIHZhciBieVBhcnQgPSB7fTsKICAgIFEuZm9yRWFjaChmdW5jdGlvbihxKXsgYnlQYXJ0W3EucGFydF09YnlQYXJ0W3EucGFydF18fHtjOjAsdDowfTsgYnlQYXJ0W3EucGFydF0udCsrOyBpZihxLnNlbD09PXEua2V5KWJ5UGFydFtxLnBhcnRdLmMrKzsgfSk7CiAgICB2YXIgZXN0ID0gY2xiRXN0aW1hdGVSKGNvcnJlY3QpOwogICAgdmFyIHBpbGxzID0gUkRBVEEucGFydHMubWFwKGZ1bmN0aW9uKHApeyB2YXIgYj1ieVBhcnRbcC5pZF18fHtjOjAsdDowfTsgcmV0dXJuICc8c3BhbiBjbGFzcz0iY2xwci1yZXMtcGlsbCI+UGFydCAnK3AuaWQrJzogJytiLmMrJy8nK2IudCsnPC9zcGFuPic7IH0pLmpvaW4oJycpOwogICAgcmVzdWx0c0VsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJjbHByLXJlcy1jYXJkIj4nCiAgICAgICsgJzxkaXYgY2xhc3M9ImNscHItcmVzLXRvcCI+JwogICAgICArICc8ZGl2IGNsYXNzPSJjbHByLXJlcy1zY29yZSI+Jytjb3JyZWN0Kyc8c3Bhbj4vJytRLmxlbmd0aCsnPC9zcGFuPjwvZGl2PicKICAgICAgKyAnPGRpdiBjbGFzcz0iY2xwci1yZXMtY2xiIj48Yj4nK2VzdC5sZXZlbCsnPC9iPjxzbWFsbD4nK2VzdC5ub3RlKycgJm1pZGRvdDsgZXN0aW1hdGVkIFJlYWRpbmcgYmFuZDwvc21hbGw+PC9kaXY+JwogICAgICArICc8L2Rpdj4nCiAgICAgICsgJzxkaXYgY2xhc3M9ImNscHItcmVzLWJyZWFrIj4nK3BpbGxzKyc8L2Rpdj4nCiAgICAgICsgJzxkaXYgY2xhc3M9ImNscHItcmVzLWFjdGlvbnMiPjxidXR0b24gY2xhc3M9ImNscHItbmF2YnRuIGNscHItZ2hvc3QiIGlkPSJjbHByUmV2aWV3Ij5SZXZpZXcgYW5zd2VycyBpbiBlYWNoIHBhcnQ8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJjbHByLW5hdmJ0biIgaWQ9ImNscHJSZXRyeSI+VHJ5IGFnYWluPC9idXR0b24+PC9kaXY+JwogICAgICArICc8cCBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tbXV0ZWQpIj5Fc3RpbWF0ZWQgYmFuZCBpcyBhIHN0dWR5IGd1aWRlIG9ubHksIG5vdCBhbiBvZmZpY2lhbCBDRUxQSVAgc2NvcmUuIENvcnJlY3QgYW5zd2VycyBhcmUgc2hvd24gd2l0aCBhIGdyZWVuIGNoZWNrIG9uIGVhY2ggZHJvcC1kb3duIHlvdSBhbnN3ZXJlZCBpbmNvcnJlY3RseS48L3A+JwogICAgICArICc8L2Rpdj4nOwogICAgcmVzdWx0c0VsLmhpZGRlbiA9IGZhbHNlOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscHJSZXRyeScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVzZXRBbGwpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscHJSZXZpZXcnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGdvKDApOyB9KTsKICAgIHJlc3VsdHNFbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCcsYmxvY2s6J3N0YXJ0J30pOwogIH0KCiAgZnVuY3Rpb24gcmVzZXRBbGwoKXsKICAgIGNoZWNrZWQ9ZmFsc2U7IGluaXRRdWVzdGlvbnMoKTsgY3VyUGFydD0wOwogICAgY2hlY2tCdG4uZGlzYWJsZWQ9ZmFsc2U7CiAgICByZXN1bHRzRWwuaGlkZGVuPXRydWU7IHJlc3VsdHNFbC5pbm5lckhUTUw9Jyc7CiAgICBidWlsZERvdHMoKTsgYnVpbGRQYXJ0KDApOwogICAgdXBkYXRlU2NvcmVDaGlwKCk7CiAgICBzaW0uc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOidzbW9vdGgnLGJsb2NrOidzdGFydCd9KTsKICB9CgogIHN0YXJ0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgIHdyYXAucXVlcnlTZWxlY3RvcignLmNscHItaGVybycpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogICAgdG9vbGJhci5oaWRkZW49ZmFsc2U7IHNpbS5oaWRkZW49ZmFsc2U7CiAgICBpbml0UXVlc3Rpb25zKCk7IGN1clBhcnQ9MDsgY2hlY2tlZD1mYWxzZTsKICAgIGJ1aWxkRG90cygpOyBidWlsZFBhcnQoMCk7IHVwZGF0ZVNjb3JlQ2hpcCgpOwogIH0pOwogIGNoZWNrQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZG9DaGVjayk7CiAgcmVzZXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZXNldEFsbCk7Cn0pKCk7\"))<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Reading Set 7 Practice Test 1: 4 parts, 38 questions in the real exam format with instant scoring and answer key. About 55 minutes. Free, no sign-up.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-6404","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=6404"}],"version-history":[{"count":2,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6404\/revisions"}],"predecessor-version":[{"id":6558,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6404\/revisions\/6558"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}