{"id":6258,"date":"2026-07-10T01:41:47","date_gmt":"2026-07-10T01:41:47","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-2-test-1-writing\/"},"modified":"2026-07-12T03:24:57","modified_gmt":"2026-07-12T03:24:57","slug":"celpip-set-2-test-1-writing","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-2-test-1-writing\/","title":{"rendered":"CELPIP Set 2 Test 1 \u2013 Writing Practice Test"},"content":{"rendered":"<div class=\"clpw-wrap\" id=\"clpwApp\"><\/div>\n<p><script>eval(atob(\"dmFyIFdEQVRBID0geyJtZXRhIjogeyJicmFuZCI6ICJDRUxQSVAiLCAic2V0IjogIlNldCAyIFx1MDBiNyBQcmFjdGljZSBUZXN0IDEiLCAidGl0bGUiOiAiQ0VMUElQIFdyaXRpbmcgUHJhY3RpY2UgVGVzdCIsICJ0b3RhbE1pbiI6IDUzfSwgInRhc2tzIjogW3siaWQiOiAxLCAiYmFyVGl0bGUiOiAiUHJhY3RpY2UgVGVzdCAxIFx1MjAxMyBXcml0aW5nIFRhc2sgMTogV3JpdGluZyBhbiBFbWFpbCIsICJuYW1lIjogIldyaXRpbmcgYW4gRW1haWwiLCAibWludXRlcyI6IDI3LCAid29yZEFpbSI6ICIxNTBcdTIwMTMyMDAgd29yZHMiLCAicmVhZEhlYWQiOiAiUmVhZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiIsICJzY2VuYXJpbyI6ICJZb3UgbGl2ZSBpbiBhIGhvdXNlIG5lYXIgYSBwYXJrLiBSZWNlbnRseSwgYSBsb3Qgb2YgdGVlbmFnZXJzIGhhdmUgYmVlbiBtZWV0aW5nIGluIHRoZSBwYXJrIGF0IG5pZ2h0LiBUaGV5IGFyZSB2ZXJ5IG5vaXN5LiIsICJwcm9tcHRIZWFkIjogIldyaXRlIGFuIGVtYWlsIHRvIHRoZSBsb2NhbCBnb3Zlcm5tZW50IGluIGFib3V0IDE1MFx1MjAxMzIwMCB3b3Jkcy4gWW91ciBlbWFpbCBzaG91bGQgZG8gdGhlIGZvbGxvd2luZyB0aGluZ3M6IiwgImJ1bGxldHMiOiBbIlByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgeW91IGxpdmUuIiwgIkV4cGxhaW4gdGhlIHByb2JsZW0gYW5kIGhvdyBpdCBhZmZlY3RzIHlvdXIgbGlmZS4iLCAiU3VnZ2VzdCBhIHdheSB0byBzb2x2ZSB0aGUgcHJvYmxlbS4iXSwgIm9wdGlvbnMiOiBudWxsLCAic2FtTm90ZSI6ICIiLCAic2FtcGxlcyI6IFt7ImxldmVsIjogIkNFTFBJUCA0XHUyMDEzNSBSZXNwb25zZSIsICJub3RlIjogIkdldHMgdGhlIG1lc3NhZ2UgYWNyb3NzIGJ1dCB3aXRoIGZyZXF1ZW50IGdyYW1tYXIgYW5kIHNwZWxsaW5nIGVycm9ycywgYSB2ZXJ5IGluZm9ybWFsIHRvbmUsIGFuZCBsb29zZWx5IGNvbm5lY3RlZCBpZGVhcyB0aGF0IHNsb3cgdGhlIHJlYWRlci4iLCAidGV4dCI6ICJEZWFyIFNpci9tYWRhbSxcblxuSSBhbSBTaW1vbiBGaWVsZGluZywgbGl2aW5nIGF0IDE3QSBOb3J0aCBSYWlscm9hZCBTdC4gUmVkIFJpdmVyLCBBYiwgWjFTIDFHOS4gQW5kIGl0cyBuZWFyIHRvIHRoZSBwYXJrLkhhdmUgYSBwbGVhc2FudCBkYXkuIExhc3QgbmlnaHQgYXJvdW5kIDExcG0gaW4gYSBwYXJrIG5lYXIgdG8gb3VyIGhvdXNlLCB0aGVyZXMgYSBsb3Qgb2YgdGVlbmFnZXJzIGhhdmluZyB0aGVpciBtZWV0aW5nLiBUaGVpciB0YWxraW5nIHRvIGxvdWQgYW5kIGxvdWdoaW5nIGFuZCBzb21lIG9mIHRoZW0gdGhyb3dpbmcgdGhlaXIgdGhpbmdzIHRvIHRoZWlyIGZyaWVuZHMuXG5cblRoZXkgZ2l2ZSB1cyBwcm9ibGVtIGF0IG5pZ2h0IGVzcGVjaWFsbHkgcmlnaHQgbm93IHdlIGhhdmUgYSBuZXcgYm9ybiBiYWJ5IGFuZCBteSB3aWZlIHN0aWxsIGluIHdheXMgb2Ygc29yZS4gT3VyIGJhYnkgaXMganVzdCBvbmx5IDIgd2Vla3Mgb2xkIGFuZCBzaGUnIHdva2UgdXAgd2hlbiBzaGUgaGVhcnMgc29tZSBub2lzZXMgYW5kIHdoZW4gb3VyIGJhYnkgY3J5aW5nIGJlY2F1c2Ugb2YgdGhlbSBvdXIgbmVpZ2hib3Igd2FrZSB0b28uIFNvIHdlIGRvbnQgd2FudCB0byBoYXBwZW4gdGhhdCBzaXR1YXRpb24uIEFuZCBvZiBJIGhhdmUgd29yayBlYXJseSBtb3JuaW5nLi5cblxuSSB3b3VsZCByYXRoZXIgc3VnZ2VzdCB0aGF0IGNvbWUgaW4gb3VyIHBsYWNlIGF0IHRoZSBuaWdodCB0aW1lIGFyb3VuZCAxMXBtLiBUaGUgdGltZSB0aGV5IGFsbGwgdGhlcmUgd2hpbGUgaGF2aW5nIG5vaXN5IHRoZW4gdGhleSBkb250IGhhdmUgZXhjdXNlIHRoYXQgdGhleSBkaWRudCBkbyB0aGF0LiBBbmQgcGxlYXNlIHRhbGsgdG8gdGhlbSB0aGF0IHRoZXkgZ2F2ZSB1cyBzb21lIHByb2JsZW1zLi5UaGFuayBZb3UgYW5kIEdvZGJsZXNzLlxuXG5TaW5jZXJlbHkgWW91cnMsXG5cblNpbW9uIEZpZWxkaW5nIn0sIHsibGV2ZWwiOiAiQ0VMUElQIDdcdTIwMTM4IFJlc3BvbnNlIiwgIm5vdGUiOiAiQ2xlYXIgc3RydWN0dXJlIGFuZCBhIHNwZWNpZmljLCB3ZWxsLWRldmVsb3BlZCBjb21wbGFpbnQ7IHZvY2FidWxhcnkgaXMgc29saWQgYW5kIHRoZSBmZXcgZXJyb3JzIHJhcmVseSBibG9jayBtZWFuaW5nLiIsICJ0ZXh0IjogIlRvIHdob20gaXQgbWF5IGNvbmNlcm4gYXQgdGhlIGdvdmVybm1lbnQgZGVwYXJ0bWVudCxcblxuVGhpcyBsZXR0ZXIgaXMgcmVnYXJkaW5nIHRvIHRoZSBub2lzZSBpc3N1ZSB0aGF0IEkgaGF2ZSBiZWVuIGV4cGVyaWVuY2luZyBsYXRlbHkuXG5cbkkgYW0gbGl2aW5nIGF0IGFuIGFwYXJ0bWVudCBidWlsZGluZyBuZXh0IHRvIE1hY0RvbmFsZCBQYXJrIGluIEtpbmdzdG9uIE9udGFyaW8uIFNpbmNlIEFwcmlsLCBhIGxvdCBvZiB0ZWVuYWdlcnMgaGF2ZSBiZWVuIG1lZXRpbmcgaW4gTWFjRG9uYWxkIFBhcmsgZXZlcnkgbmlnaHQgdG8gc2thdGVib2FyZC4gVGhleSB1c3VhbGx5IHR1cm4gdXAgdGhlIG11c2ljIGFuZCBJIGNhbiBoZWFyIGl0IGF0IG15IGFwYXJ0bWVudCBhdCBsZXZlbCB0d2VsdmUuIE9jY2FzaW9uYWxseSwgSSBoZWFyIGZpcmV3b3JrcyB0b28uIFRoZSBub2lzZSB0aGV5IHByb2R1Y2VkIGhhcyBiZWVuIHNlcmlvdXNseSBhZmZlY3RpbmcgdGhlIHF1YWxpdHkgb2YgbXkgc2xlZXAuIEkgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIGdldCBhIGdvb2Qgc2xlZXAgZm9yIGEgbW9udGggYW5kIEkgaGFkIHRvIHRha2Ugc2xlZXBpbmcgcGlsbHMuIFRoZSBsYWNrIG9mIHNsZWVwIG5vdCBvbmx5IG5lZ2F0aXZlbHkgYWZmZWN0cyBteSB3b3JrIHBlcmZvcm1hbmNlIGR1cmluZyB0aGUgZGF5LCBidXQgYWxzbyBteSBoZWFsdGggYW5kIHN0cmVzcyBsZXZlbC5cblxuSSBzdHJvbmdseSByZWNvbW1lbmQgdGhlIGxvY2FsIGdvdmVybm1lbnQgdG8gY29uc2lkZXIgcmVzdHJpY3RpbmcgdGhlIG9wZW5pbmcgaG91cnMgb2YgTWFjRG9uYWxkIFBhcmsuIFRoZSBwYXJrIHNob3VsZCBiZSBjbG9zZWQgYnkgbmluZSBhdCBuaWdodC4gVGhpcyB3aWxsIHByb3ZpZGUgdGhlIG5laWdoYm91cmhvb2QgYmV0dGVyIGxpdmluZyBlbnZpcm9ubWVudCBhbmQgYXZvaWQgdW5uZWNlc3Nhcnkgbm9pc2UgY29tcGxhaW50cy5cblxuVGhhbmsgeW91LlxuXG5CZXN0IHJlZ2FyZHMsXG5CZW4gSi4gRm9udGFpbmUifSwgeyJsZXZlbCI6ICJDRUxQSVAgMTBcdTIwMTMxMiBSZXNwb25zZSIsICJub3RlIjogIkZsdWVudCwgbmF0dXJhbCBhbmQgYWxtb3N0IGVycm9yLWZyZWU7IGNvbmNyZXRlIGRldGFpbHMsIHRvbmUgYW5kIGEgY2xlYXIgc3VnZ2VzdGVkIHNvbHV0aW9uIGFyZSB3b3ZlbiB0b2dldGhlciBzbW9vdGhseS4iLCAidGV4dCI6ICJUbyB3aG9tIGl0IG1heSBjb25jZXJuLFxuXG5JIHdvdWxkIGxpa2UgdG8gcmVnaXN0ZXIgYSBjb21wbGFpbnQuIEkgY3VycmVudGx5IGxpdmUgaW4gV2hpc3RsZXIsIGEgc21hbGwgMyBiZWRyb29tIGhvdXNlIG92ZXJsb29raW5nIHRoZSB2aWxsYWdlIGdyZWVuLiBXZSBtb3ZlZCBoZXJlIGluIHRoZSBmYWxsIG9mIDIwMTMgaG93ZXZlciBzaW5jZSB0aGVuIHNvbWUgb2YgdGhlIGxvY2FsIGtpZHMgaGF2ZSBzdGFydGVkIG1lZXRpbmcgdXAgaW4gdGhlIHBhcmsgYXQgbmlnaHQgYW5kIGNhdXNpbmcgYSBsb3Qgb2Ygbm9pc2UuXG5cbldoaWxlIEkgZmVlbCB0aGlzIHdvdWxkIGJlIGZpbmUgaW4gdGhlIGVhcmx5IGV2ZW5pbmcsIGl0IGJlY29tZXMgYSBwcm9ibGVtIHdoZW4gaXQgY2FycmllcyBvbiB1bnRpbCBtaWRuaWdodC4gU29tZXRpbWVzIGV2ZW4gbGF0ZXIgdGhhbiB0aGF0IVxuXG5NeSBqb2IgcmVxdWlyZXMgbWUgdG8gd29yayBlYXJseSBtb3JuaW5ncywgSSBuZWVkIHRvIGJlIGFsZXJ0IGFuZCBmcmllbmRseSB0aHJvdWdob3V0IHRoZSBkYXkuIEJlaW5nIHdva2VuIHVwIHNldmVyYWwgdGltZXMgdGhyb3VnaG91dCB0aGUgbmlnaHQgaXMgZGVmaW5pdGVseSBoYXZpbmcgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbXkgd29yayBwZXJmb3JtYW5jZS5cblxuV2hpbGUgSSBoYXZlIHRyaWVkIHRvIGFzayB0aGVtIHRvIGtlZXAgdGhlIG5vaXNlIGRvd24gb24gbnVtZXJvdXMgb2NjYXNpb25zIGl0IGhhcyBiZWVuIHRvIG5vIGF2YWlsLiBJIGZlZWwgSSBoYXZlIG5vIHJlY291cnNlIGJ1dCB0byBjb250YWN0IHlvdSBub3cgaW4gdGhlIGhvcGVzIHRoYXQgeW91IGNvdWxkIGVuZm9yY2Ugc29tZSBmb3JtIG9mIGN1cmZldyBvbiB0aGUgcGFyay4gSSB3b3VsZCBzdWdnZXN0IG5vIGxvdWQgbm9pc2VzIGFmdGVyIG1heWJlIDlwbSBvciAxMHBtLiBUaGUgbG9jYWwgcmVzaWRlbnRzIGFuZCBteXNlbGYgd291bGQgbXVjaCBhcHByZWNpYXRlIHlvdXIgY29uc2lkZXJhdGlvbiBvbiB0aGlzIG1hdHRlci5cblxuUmVnYXJkc1xuR3dlbiBULiBBbGRlcmlkZ2UifV19LCB7ImlkIjogMiwgImJhclRpdGxlIjogIlByYWN0aWNlIFRlc3QgMSBcdTIwMTMgV3JpdGluZyBUYXNrIDI6IFJlc3BvbmRpbmcgdG8gU3VydmV5IFF1ZXN0aW9ucyIsICJuYW1lIjogIlJlc3BvbmRpbmcgdG8gU3VydmV5IFF1ZXN0aW9ucyIsICJtaW51dGVzIjogMjYsICJ3b3JkQWltIjogIjE1MFx1MjAxMzIwMCB3b3JkcyIsICJyZWFkSGVhZCI6ICJSZWFkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIiwgInNjZW5hcmlvSGVhZCI6ICJGaWVsZCBUcmlwIFRyYW5zcG9ydGF0aW9uIiwgInNjZW5hcmlvIjogIllvdXIgY2hpbGRyZW5cdTIwMTlzIGdyYWRlIDUgY2xhc3MgdGVhY2hlciBsaWtlcyB0byB0YWtlIHRoZSBjaGlsZHJlbiBvbiBmaWVsZCB0cmlwcyB0byBtdXNldW1zIG9yIHBhcmtzLiBTb21ldGltZXMgdGhlIHRlYWNoZXIgdGFrZXMgdGhlIGNoaWxkcmVuIG9uIHB1YmxpYyBidXNlcy4gU29tZSBwYXJlbnRzIGFyZSB1bmhhcHB5LiBUaGV5IHNheSB0aGUgc2Nob29sIHNob3VsZCBhbHdheXMgdXNlIHNjaG9vbCBidXNlcyBldmVuIHRob3VnaCBpdCBpcyBtb3JlIGV4cGVuc2l2ZS4gWW91IGhhdmUgYmVlbiBhc2tlZCB0byByZXNwb25kIHRvIGFuIG9waW5pb24gc3VydmV5LiIsICJwcm9tcHRIZWFkIjogIkNob29zZSB0aGUgb3B0aW9uIHRoYXQgeW91IHByZWZlci4gV2h5IGRvIHlvdSBwcmVmZXIgeW91ciBjaG9pY2U\/IEV4cGxhaW4gdGhlIHJlYXNvbnMgZm9yIHlvdXIgY2hvaWNlLiBXcml0ZSBhYm91dCAxNTBcdTIwMTMyMDAgd29yZHMuIiwgImJ1bGxldHMiOiBbXSwgIm9wdGlvbnMiOiBbeyJrZXkiOiAiQSIsICJsYWJlbCI6ICJPcHRpb24gQTogUHVibGljIFRyYW5zaXQgXHUyMDE0IEkgdGhpbmsgaXRcdTIwMTlzIG9rYXkgZm9yIGNoaWxkcmVuIHRvIHRyYXZlbCBvbiBwdWJsaWMgdHJhbnNpdC4ifSwgeyJrZXkiOiAiQiIsICJsYWJlbCI6ICJPcHRpb24gQjogU2Nob29sIEJ1c2VzIFx1MjAxNCBJIHdvdWxkIHByZWZlciBjaGlsZHJlbiBvbmx5IHRyYXZlbCBvbiBzY2hvb2wgYnVzZXMuIn1dLCAic2FtTm90ZSI6ICIiLCAic2FtcGxlcyI6IFt7ImxldmVsIjogIkNFTFBJUCA0XHUyMDEzNSBSZXNwb25zZSIsICJub3RlIjogIlN0YXRlcyBhIHBvc2l0aW9uIGJ1dCBkcmlmdHMgYmV0d2VlbiBpZGVhczsgZnJlcXVlbnQgZ3JhbW1hciBlcnJvcnMgYW5kIGF3a3dhcmQgcGhyYXNpbmcgcmVkdWNlIGNsYXJpdHkuIiwgInRleHQiOiAiTXkgb3BpbmlvbiBpcyB0aGUgY2hpbGRyZW4gc2hvdWxkIG5vdCBiZSB1c2UgdGhlIHB1YmxpYyB0cmFuc3BvcnRhdGlvbi5cblxuSSBhZ3JlZSB3aXRoIHRoZSBmaWVsZCB0cmlwIGFuZCB0aGUgbXVzZXVtcywgcGFya3MgcGxhbnMgYmVjYXVzZSB0aGUgY2hpbGRyZW4gbmVlZCB0byBsZWFybiBzb21ldGhpbmcgbmV3IHRoaW5ncyBvdXQgb2YgdGhlIHNjaG9vbC5cblxuSSBob3BlIHRoZSBwYXJlbnRzIHdpbGwgYmUgY2hvb3NlIHRoZSBzY2hvb2wgYnVzZXMgb3B0aW9uLCBiZWNhdXNlIG91ciBraWRzIGhhdmUgdG8gYmUgc2FmZXR5LlxuXG5UaGUgcHVibGljIHRyYW5zcG9ydGF0aW9uIG5vdCByZWFsbHkgc2FmZXR5IGZvciB0aGUgY2xhc3NlcyBvciBncm91cHMuXG5cbkV2ZXJ5IGtpZCBpcyBkaWZmZXJlbnQsIGZvciBleGFtcGxlIG15IHNvbiBtYW55IHRpbWUgbG9vc2UgaGltIHN0YWZmLCBzbyBpZiB0aGV5IHVzZSB0aGUgcHVibGljIGJ1c2VzIHdlIGNhbm5vdCBmb3VuZC4gSWYgd2Ugd2lsbCB1c2UgdGhlIHNjaG9vbCBidXMgYWxsIHRoZSBraWRzIHN0YWZmIGNhbiBsZWF2ZSBpdCBvbiB0aGUgYnVzLCBhbmQgYWZ0ZXIgdGhlIHRyaXAgZXZlcnkgcGFyZW50cyBjYW4gaGVscGluZyBvdXQgcGFja2luZyB0aGUga2lkcyBzdGFmZiwgYW5kIG5vdGhpbmcgbG9vc2UuIFNlY29uZGx5IHRoZSBjaGlsZHJlbiBhcmUgaW50ZXJlc3RlZCBmb3IgZXZlcnl0aGluZywgYW5kIEkgd29ycnkgYWJvdXQuIE15IGtpZCBzdGFydCB0YWxraW5nIHdpdGggb3RoZXIgcGVvcGxlIGZyb20gdGhlIHB1YmxpYyBidXMuLi5JIHRoaW5rLCBteSBzb24gbm90IHJlYWxseSBrbm93IHdobyBpcyB0aGUgYmFkIG9yIGdvb2QgcGVyc29uLlxuXG5Ib3BlZnVsbHkgdGhlIHBhcmVudHMgdW5kZXJzdGFuZCB0aGlzIGFuZCB3ZSB3aWxsIGNob29zZSB0aGUgc2Nob29sIGJ1c2VzIG9wdGlvbnMifSwgeyJsZXZlbCI6ICJDRUxQSVAgN1x1MjAxMzggUmVzcG9uc2UiLCAibm90ZSI6ICJUYWtlcyBhIGNsZWFyIHN0YW5jZSAoc2Nob29sIGJ1c2VzKSB3aXRoIG9yZ2FuaXplZCwgZGV2ZWxvcGVkIHJlYXNvbmluZzsgZ29vZCB2b2NhYnVsYXJ5IHdpdGggc29tZSBzbGlwcyB0aGF0IGRvbid0IGJsb2NrIG1lYW5pbmcuIiwgInRleHQiOiAiSXQgaGFzIGNvbWUgdG8gbXkgbm90aWNlIHRoYXQgc29tZSBwYXJlbnRzIHdob20gdGhlaXIga2lkcyBhdHRlbmQgc2Nob29scyB3aGVyZSBwdWJsaWMgdHJhbnNwb3J0YXRpb24gaGFzIGJlZW4gdXNlZCBpbiBjb252ZXlpbmcgdGhlaXIga2lkcyBmb3IgZmllbGQgdHJpcHMgdG8gZGlmZmVyZW50IHBhcmtzIGFuZCBtdXNldW1zIGFjcm9zcyB0aGUgY2l0eSBoYXZlIGVjaG9lZCB0aGVpciBkaXNwbGVhc3VyZSBvbiBzdWNoIHByYWN0aWNlcy5cblxuSW4gbXkgb3duIG9waW5pb24sIGkgc3Ryb25nbHkgc3VwcG9ydCB0aGUgdXNlIG9mIHNjaG9vbCBidXNlcyBmb3Igc3VjaCB0cmlwcyBhcyBpdCBwdXRzIHRoZSBzYWZldHkgb2YgdGhvc2Uga2lkcyBpbiB0aGUgaGFuZHMgb2YgdGhlIHNjaG9vbCBhdXRob3JpdGllcy4gTG9va2luZyBhdCB0aGUgaXNzdWUgZnJvbSBteSBvd24gcG9pbnQgb2YgdmlldywgYXNzdW1pbmcgYW4gYWNjaWRlbnQgb2NjdXJzIGR1cmluZyBvbmUgb2Ygc3VjaCByb2FkIHRyaXBzLCB0aGUgc2Nob29sIG1hbmFnZW1lbnQgd2lsbCBibGFtZSB0aGUgZHJpdmVyIG9mIHRoZSBwdWJsaWMgdHJhbnNpdCBvciB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVkIHRoZSBidXMgZm9yIG5lZ2xlY3QsIHdpdGhvdXQgdGFraW5nIGFueSBvZiB0aGUgYmxhbWUuXG5cbkJ5IHVzaW5nIHRoZSBzY2hvb2wgYnVzIGluIGxpZnRpbmcgdGhvc2Uga2lkcywgdGhlIHNhZmV0eSBhbmQgdGhlIGRyaXZlcnMgc2tpbGwgd2lsbCBuZXZlciBiZSBxdWVzdGlvbmVkLiBJdCB3aWxsIGJlIHRoZSBkdXR5IGZvciB0aGUgc2Nob29scyBtYW5hZ2VtZW50IGluIGVuc3VyaW5nIHRoYXQgdGhlaXIgZHJpdmVycyBhcmUgd2VsbCB0cmFpbmVkIHRvIGhhbmRsZSBhbnkgc2l0dWF0aW9uIHRoYXQgbWlnaHQgY2F1c2Ugcm9hZCBhY2NpZGVudCBkdXJpbmcgYW55IHJvYWQgdHJpcC4gVGhpcyB3aWxsIGFsc28gc2F2ZSBtb25leSBmb3IgdGhlIHNjaG9vbCBieSB1c2luZyB0aGVpciBvd24gdHJhbnNwb3J0YXRpb24uIEF0IHRoZSBsb25nIHJ1biwgdGhlIHNjaG9vbCB3aWxsIGJlbmVmaXQgZnJvbSBzdWNoIHBvbGljeS4ifSwgeyJsZXZlbCI6ICJDRUxQSVAgMTBcdTIwMTMxMiBSZXNwb25zZSIsICJub3RlIjogIkNvbmZpZGVudCwgbnVhbmNlZCBhcmd1bWVudCAocHVibGljIHRyYW5zaXQpIGluIGZsdWVudCwgYWNjdXJhdGUgRW5nbGlzaCwgd2l0aCBhIGJhbGFuY2VkIG5vZCB0byB0aGUgZG93bnNpZGUuIiwgInRleHQiOiAiSSBwZXJzb25hbGx5IHRoaW5rIHRoYXQgaXQgaXMgYWxyaWdodCBmb3IgY2hpbGRyZW4gdG8gdHJhdmVsIG9uIHRoZSBwdWJsaWMgdHJhbnNpdCwgc2luY2UgdGhlcmUgYXJlIGFsd2F5cyB0ZWFjaGVycyB3aG8gYWNjb21wYW55IHRoZW0gZm9yIGZpZWxkIHRyaXBzLiBUaGV5IHdpbGwgaGVuY2UgYmUgbW9uaXRvcmVkIGF0IGFsbCB0aW1lcy4gSSB0aGluayB0aGF0IGFuIGVkdWNhdGlvbiBzeXN0ZW0gaXMgbm90IHRoZXJlIG9ubHkgZm9yIHRoZSBhY2FkZW1pYyBkZXZlbG9wbWVudCBvZiBhIGNoaWxkLiBBbiBlZHVjYXRpb24gc3lzdGVtIGlzIG1lYW50IHRvIGJlIGEgY29tcGxldGUgZWR1Y2F0aW9uIHBhY2thZ2UgdGhhdCBoZWxwcyBpbiBnZXR0aW5nIGEgY2hpbGQgcmVhZHkgdG8gc3RlcCBpbiB0aGUgd29ybGQgYWZ0ZXIgdGhlIHNjaG9vbCB5ZWFycyBhcmUgZG9uZS4gSSBiZWxpZXZlIHRoYXQgd2hlbiB0YWtpbmcgdGhlIGNoaWxkcmVuIG91dCBmb3IgYSBmaWVsZCB0cmlwIGJ5IHRha2luZyB0aGUgcHVibGljIHRyYW5zaXQsIHRoZSB0ZWFjaGVycyBhbHNvIGdldCBhIGNoYW5jZSB0byB0ZWFjaCB0aGVtIHdoYXQgdG8gYmUgY2FyZWZ1bCBhYm91dCwgZm9yIGV4YW1wbGUsIHRoZXkgd2lsbCBiZSB0YXVnaHQgbm90IHRvIGFjY2VwdCBnaWZ0cyBmcm9tIHN0cmFuZ2Vycywgb3Igbm90IHRvIGZvbGxvdyBhIHN0cmFuZ2VyLiBUaGVzZSBhcmUgaW1wb3J0YW50IGxpZmUgbGVzc29ucyB0aGF0IGEgY2hpbGQgc2hvdWxkIGJlIHRhdWdodC5cblxuVW5mb3J0dW5hdGVseSwgSSB0aGluayB0aGF0IGlmIHRoZSBjaGlsZHJlbiBhbHdheXMgdHJhdmVsIG9uIHNjaG9vbCBidXNlcywgdGhleSB3aWxsIGJlIG92ZXItcHJvdGVjdGVkLiBJbiB0aGUgbG9uZyBydW4sIGl0IG9ubHkgbWFrZXMgbGlmZSBoYXJkZXIgZm9yIHRoZW1zZWx2ZXMgd2hlbiBpdCdzIHRpbWUgZm9yIHRoZW0gdG8gc3RlcCBpbiB0aGUgcmVhbCB3b3JsZCwgYWZ0ZXIgc2Nob29sIGRheXMuIn1dfV0sICJydWJyaWMiOiBbeyJrIjogIkNvbnRlbnQgLyBDb2hlcmVuY2UiLCAiZCI6ICJBbGwgcmVxdWlyZWQgcG9pbnRzIGFyZSBjb3ZlcmVkIGFuZCBkZXZlbG9wZWQgd2l0aCBjbGVhciwgbG9naWNhbGx5IGNvbm5lY3RlZCBpZGVhcyBhbmQgcGFyYWdyYXBocy4ifSwgeyJrIjogIlZvY2FidWxhcnkiLCAiZCI6ICJXb3JkIGNob2ljZSBpcyB2YXJpZWQsIHByZWNpc2UgYW5kIHN1aXRzIHRoZSB0b25lIChhIHNlbWktZm9ybWFsIGVtYWlsIC8gYSByZWFzb25lZCBvcGluaW9uKS4ifSwgeyJrIjogIlJlYWRhYmlsaXR5IiwgImQiOiAiR3JhbW1hciwgc3BlbGxpbmcgYW5kIHB1bmN0dWF0aW9uIGFyZSBhY2N1cmF0ZSBlbm91Z2ggdGhhdCB0aGUgcmVhZGVyIGlzIG5ldmVyIHNsb3dlZCBkb3duLiJ9LCB7ImsiOiAiVGFzayBGdWxmaWxsbWVudCIsICJkIjogIlRoZSByZXNwb25zZSBmaXRzIHRoZSBwdXJwb3NlIGFuZCBhdWRpZW5jZSwga2VlcHMgdGhlIDE1MFx1MjAxMzIwMCB3b3JkIGxlbmd0aCwgYW5kIHJlYWRzIGxpa2UgYSByZWFsIGVtYWlsIC8gc3VydmV5IGFuc3dlci4ifV0sICJzY29yaW5nTm90ZSI6ICJDRUxQSVAgV3JpdGluZyBpcyByYXRlZCBieSBodW1hbiByYXRlcnMgb24gYSBzY2FsZSBmcm9tIE0gdG8gMTIgdGhhdCBtYXBzIDE6MSB0byB0aGUgQ2FuYWRpYW4gTGFuZ3VhZ2UgQmVuY2htYXJrcyAoQ0xCKS4gRWFjaCB0YXNrIGlzIGp1ZGdlZCBob2xpc3RpY2FsbHkgb24gZm91ciBkaW1lbnNpb25zIFx1MjAxNCBDb250ZW50L0NvaGVyZW5jZSwgVm9jYWJ1bGFyeSwgUmVhZGFiaWxpdHkgYW5kIFRhc2sgRnVsZmlsbG1lbnQuIFRoZXJlIGlzIG5vIHNpbmdsZSAnY29ycmVjdCcgYW5zd2VyLCBzbyB1c2UgdGhlIHNhbXBsZSByZXNwb25zZXMgYW5kIHRoZSBzZWxmLWNoZWNrIGJlbG93IHRvIHNlZSB3aGVyZSB5b3VyIHdyaXRpbmcgc2l0cyBhbmQgd2hhdCB0byBpbXByb3ZlLiJ9OwooZnVuY3Rpb24oKXsKICAidXNlIHN0cmljdCI7CiAgaWYod2luZG93Ll9fY2xwd0luaXQpIHJldHVybjsgd2luZG93Ll9fY2xwd0luaXQgPSB0cnVlOwoKICB2YXIgTFMgPSAiYWU0dV9jbHB3X3MxdDFfdjEiOwogIHZhciBzdGF0ZSA9IHsgYWN0aXZlOjEsIHNhbXBsZXM6ezE6ZmFsc2UsMjpmYWxzZX0sIHRhYjp7MTowLDI6MH0sIG9wdDpudWxsLAogICAgICAgICAgICAgICAgdGV4dDp7MToiIiwyOiIifSwgcnVicmljOnsxOnt9LDI6e319LAogICAgICAgICAgICAgICAgdGltZXI6ezE6e3JlbTpXREFUQS50YXNrc1swXS5taW51dGVzKjYwLHJ1bjpmYWxzZSxpdjpudWxsfSwKICAgICAgICAgICAgICAgICAgICAgICAgMjp7cmVtOldEQVRBLnRhc2tzWzFdLm1pbnV0ZXMqNjAscnVuOmZhbHNlLGl2Om51bGx9fSB9OwoKICAvLyAtLS0tLS0tLS0tIGhlbHBlcnMgLS0tLS0tLS0tLQogIGZ1bmN0aW9uIGVzYyhzKXsgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iik7IH0KICBmdW5jdGlvbiB3YyhzKXsgdmFyIG09KHN8fCIiKS50cmltKCkubWF0Y2goL1xTKy9nKTsgcmV0dXJuIG0\/bS5sZW5ndGg6MDsgfQogIGZ1bmN0aW9uIGZtdChzZWMpeyBzZWM9TWF0aC5tYXgoMCxzZWN8MCk7IHZhciBtPU1hdGguZmxvb3Ioc2VjLzYwKSwgcz1zZWMlNjA7IHJldHVybiAobTwxMD8iMCI6IiIpK20rIjoiKyhzPDEwPyIwIjoiIikrczsgfQogIGZ1bmN0aW9uIGxvYWQoKXsgdHJ5eyB2YXIgbz1KU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExTKSk7IGlmKG8mJnR5cGVvZiBvPT09Im9iamVjdCIpewogICAgICAgIHN0YXRlLnRleHRbMV09by50MXx8IiI7IHN0YXRlLnRleHRbMl09by50Mnx8IiI7IHN0YXRlLm9wdD1vLm9wdHx8bnVsbDsKICAgICAgICBzdGF0ZS5ydWJyaWNbMV09by5yMXx8e307IHN0YXRlLnJ1YnJpY1syXT1vLnIyfHx7fTsgfSB9Y2F0Y2goZSl7fSB9CiAgZnVuY3Rpb24gc2F2ZSgpeyB0cnl7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKExTLCBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgdDE6c3RhdGUudGV4dFsxXSwgdDI6c3RhdGUudGV4dFsyXSwgb3B0OnN0YXRlLm9wdCwgcjE6c3RhdGUucnVicmljWzFdLCByMjpzdGF0ZS5ydWJyaWNbMl0gfSkpOyB9Y2F0Y2goZSl7fQogICAgICAgIGZsYXNoU2F2ZWQoKTsgfQogIHZhciBzYXZlZFRPPW51bGw7CiAgZnVuY3Rpb24gZmxhc2hTYXZlZCgpeyB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTYXZlZCIpOyBpZighZWwpIHJldHVybjsKICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCJjbHB3LXNhdmVkLW9uIik7IGlmKHNhdmVkVE8pIGNsZWFyVGltZW91dChzYXZlZFRPKTsKICAgICAgICBzYXZlZFRPPXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZWwuY2xhc3NMaXN0LnJlbW92ZSgiY2xwdy1zYXZlZC1vbiIpOyB9LDEyMDApOyB9CgogIC8vIC0tLS0tLS0tLS0gQ1NTIC0tLS0tLS0tLS0KICB2YXIgQ1NTID0gIiIKICArIi5jbHB3LXdyYXB7LS1uYXZ5OiMwNTBFMjA7LS1iOTAwOiMwRDIzNTI7LS1iNzAwOiMxMjQ1QTg7LS1iNTAwOiMyNTYzRUI7LS1iNDAwOiMzQjgyRjY7LS1iMjAwOiM5M0M1RkQ7LS1iMTAwOiNEQkVBRkU7LS1iNTA6I0VGRjZGRjstLXRlYWw6IzBEOTQ4ODstLWdyZWVuOiMxMEI5ODE7LS1ncmVlbjUwOiNFQ0ZERjU7LS1yb3NlOiNGNDNGNUU7LS1yb3NlNTA6I0ZGRjFGMzstLW9yYW5nZTojRjk3MzE2Oy0tYW1iZXI1MDojRkZGQkVCOy0tdGV4dDojMEYxNzJBOy0tbXV0ZWQ6IzQ3NTU2OTstLXN1YnRsZTojOTRBM0I4Oy0tYm9yZGVyOiNFMkU4RjA7LS1jcmltc29uOiNCNDJCM0M7LS1wYWdlOiNGOEZBRkY7Zm9udC1mYW1pbHk6J1BsdXMgSmFrYXJ0YSBTYW5zJyxzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxTZWdvZSBVSSxSb2JvdG8sc2Fucy1zZXJpZjtjb2xvcjp2YXIoLS10ZXh0KTttYXgtd2lkdGg6MTE0MHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoxNnB4IDE2cHggNTZweDtsaW5lLWhlaWdodDoxLjU1O2ZvbnQtc2l6ZToxNnB4O30iCiAgKyIuY2xwdy13cmFwICosLmNscHctd3JhcCAqOjpiZWZvcmUsLmNscHctd3JhcCAqOjphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7fSIKICArIi5jbHB3LXdyYXAgYnV0dG9ue2ZvbnQtZmFtaWx5OmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7fSIKICArIi5jbHB3LXdyYXAgaDEsLmNscHctd3JhcCBoMiwuY2xwdy13cmFwIGgzLC5jbHB3LXdyYXAgcHttYXJnaW46MDt9IgogIC8vIGhlcm8KICArIi5jbHB3LWhlcm97cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6MjJweDtiYWNrZ3JvdW5kOnZhcigtLW5hdnkpO2NvbG9yOiNmZmY7cGFkZGluZzozNHB4IDM4cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTNweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JveC1zaGFkb3c6MCAyMHB4IDQwcHggLTIwcHggcmdiYSg1LDE0LDMyLC40NSksMCA0cHggMTJweCAtNnB4IHJnYmEoNSwxNCwzMiwuMyk7fSIKICArIi5jbHB3LWF1cm9yYXtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7fSIKICArIi5jbHB3LWF1cm9yYSBzcGFue3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO2ZpbHRlcjpibHVyKDYwcHgpO29wYWNpdHk6LjU7YW5pbWF0aW9uOmNscHdGbG9hdCAxNHMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO30iCiAgKyIuY2xwdy1hdXJvcmEgc3BhbjpudGgtY2hpbGQoMSl7d2lkdGg6NDIwcHg7aGVpZ2h0OjQyMHB4O2xlZnQ6LTEyMHB4O3RvcDotMjAwcHg7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCMxMjQ1QTggMCUsdHJhbnNwYXJlbnQgNzAlKTt9IgogICsiLmNscHctYXVyb3JhIHNwYW46bnRoLWNoaWxkKDIpe3dpZHRoOjM4MHB4O2hlaWdodDozODBweDtyaWdodDotODBweDt0b3A6LTE2MHB4O2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjMEQ5NDg4IDAlLHRyYW5zcGFyZW50IDcwJSk7YW5pbWF0aW9uLWRlbGF5Oi00czt9IgogICsiLmNscHctYXVyb3JhIHNwYW46bnRoLWNoaWxkKDMpe3dpZHRoOjM0MHB4O2hlaWdodDozNDBweDtyaWdodDoyMiU7Ym90dG9tOi0yNDBweDtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsIzI1NjNFQiAwJSx0cmFuc3BhcmVudCA3MCUpO2FuaW1hdGlvbi1kZWxheTotOHM7fSIKICArIkBrZXlmcmFtZXMgY2xwd0Zsb2F0e2Zyb217dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgxKTt9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDQwcHgsMjZweCwwKSBzY2FsZSgxLjEyKTt9fSIKICArIi5jbHB3LWhiYWRnZXN7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtwb3NpdGlvbjpyZWxhdGl2ZTt9IgogICsiLmNscHctYmJyYW5ke2JhY2tncm91bmQ6dmFyKC0tY3JpbXNvbik7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjEycHg7bGV0dGVyLXNwYWNpbmc6LjEyZW07cGFkZGluZzo1cHggMTJweDtib3JkZXItcmFkaXVzOjZweDt9IgogICsiLmNscHctYnNldHtjb2xvcjp2YXIoLS1iMjAwKTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7fSIKICArIi5jbHB3LWhlcm8gaDF7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOmNsYW1wKDI2cHgsNHZ3LDQwcHgpO2ZvbnQtd2VpZ2h0OjgwMDtsZXR0ZXItc3BhY2luZzotLjAyZW07bGluZS1oZWlnaHQ6MS4xMjt9IgogICsiLmNscHctaGVyby1zdWJ7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6I0M3RDJFODtmb250LXNpemU6MTVweDttYXgtd2lkdGg6NjBjaDt9IgogICsiLmNscHctaGNoaXBze2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO3Bvc2l0aW9uOnJlbGF0aXZlO30iCiAgKyIuY2xwdy1jaGlwe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDkpO2JvcmRlcjoxcHggc29saWQgcmdiYSgxNDcsMTk3LDI1MywuMjUpO2NvbG9yOiNEQkVBRkU7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO3BhZGRpbmc6NnB4IDE0cHg7Ym9yZGVyLXJhZGl1czozMnB4O2JhY2tkcm9wLWZpbHRlcjpibHVyKDRweCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyBlYXNlLGJhY2tncm91bmQgLjI1cyBlYXNlO30iCiAgKyIuY2xwdy1jaGlwOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTUpO30iCiAgKyIuY2xwdy1jdGF7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZDp2YXIoLS1iNTAwKTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzoxM3B4IDM0cHg7bWFyZ2luLXRvcDoycHg7Ym94LXNoYWRvdzowIDEwcHggMjJweCAtOHB4IHJnYmEoMzcsOTksMjM1LC42NSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjIycyBlYXNlLGJveC1zaGFkb3cgLjIycyBlYXNlLGJhY2tncm91bmQgLjIycyBlYXNlO30iCiAgKyIuY2xwdy1jdGE6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7YmFja2dyb3VuZDp2YXIoLS1iNDAwKTtib3gtc2hhZG93OjAgMTRweCAyNnB4IC04cHggcmdiYSgzNyw5OSwyMzUsLjc1KTt9IgogIC8vIHRvb2xiYXIKICArIi5jbHB3LXRvb2xze3Bvc2l0aW9uOnN0aWNreTt0b3A6OHB4O3otaW5kZXg6NjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtmbGV4LXdyYXA6d3JhcDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjkzKTtiYWNrZHJvcC1maWx0ZXI6Ymx1cig4cHgpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzo4cHggMTJweDttYXJnaW46MThweCAwIDA7Ym94LXNoYWRvdzowIDhweCAyNHB4IC0xNHB4IHJnYmEoMTUsMjMsNDIsLjI1KSwwIDJweCA2cHggLTRweCByZ2JhKDE1LDIzLDQyLC4xMik7bWluLWhlaWdodDo1MnB4O30iCiAgKyIuY2xwdy13Y291bnR7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWI5MDApO2JhY2tncm91bmQ6dmFyKC0tYjUwKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWIxMDApO2JvcmRlci1yYWRpdXM6MzJweDtwYWRkaW5nOjdweCAxNHB4O30iCiAgKyIuY2xwdy1zcGFjZXJ7ZmxleDoxO30iCiAgKyIuY2xwdy1zYXZlZHtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZ3JlZW4pO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2U7fSIKICArIi5jbHB3LXNhdmVkLW9ue29wYWNpdHk6MTt9IgogICsiLmNscHctdGJ0bntib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1tdXRlZCk7bWluLWhlaWdodDo0MHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLGJveC1zaGFkb3cgLjJzIGVhc2UsYmFja2dyb3VuZCAuMnMgZWFzZTt9IgogICsiLmNscHctdGJ0bjpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMXB4KTtib3gtc2hhZG93OjAgNnB4IDE0cHggLThweCByZ2JhKDE1LDIzLDQyLC4zKTt9IgogIC8vIGRvdHMKICArIi5jbHB3LXNpbXttYXJnaW4tdG9wOjE4cHg7fSIKICArIi5jbHB3LWRvdHN7ZGlzcGxheTpmbGV4O2dhcDo2cHg7bWFyZ2luOjAgMCAxMHB4IDJweDt9IgogICsiLmNscHctZG90e2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tc3VidGxlKTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Ym9yZGVyLXJhZGl1czozMnB4O3BhZGRpbmc6NXB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4yNXMgZWFzZSxjb2xvciAuMjVzIGVhc2U7fSIKICArIi5jbHB3LWRvdC5vbntiYWNrZ3JvdW5kOnZhcigtLWI1MDApO2JvcmRlci1jb2xvcjp2YXIoLS1iNTAwKTtjb2xvcjojZmZmO30iCiAgKyIuY2xwdy1kb3QuZmlsbGVke2JhY2tncm91bmQ6dmFyKC0tYjEwMCk7Ym9yZGVyLWNvbG9yOnZhcigtLWIyMDApO2NvbG9yOnZhcigtLWI5MDApO30iCiAgLy8gY2F0IGNhcmQKICArIi5jbHB3LWNhdHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MXB4IHNvbGlkICNEM0Q5RTA7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgMTBweCAzMHB4IC0xOHB4IHJnYmEoMTUsMjMsNDIsLjIyKSwwIDJweCA4cHggLTVweCByZ2JhKDE1LDIzLDQyLC4xKTt9IgogICsiLmNscHctdGFza3tkaXNwbGF5Om5vbmU7fSIKICArIi5jbHB3LXRhc2sub257ZGlzcGxheTpibG9jazt9IgogICsiLmNscHctYmFye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7YmFja2dyb3VuZDojRThFQkVGO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNEM0Q5RTA7Ym9yZGVyLXJhZGl1czoxMHB4IDEwcHggMCAwO3BhZGRpbmc6OXB4IDE0cHg7bWluLWhlaWdodDo0NHB4O30iCiAgKyIuY2xwdy1iYXItdHtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFGMjkzNztmbGV4OjE7bWluLXdpZHRoOjA7fSIKICArIi5jbHB3LWJhci10aW1le2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMxRjI5Mzc7d2hpdGUtc3BhY2U6bm93cmFwO30iCiAgKyIuY2xwdy1iYXItdGltZSBie2ZvbnQtd2VpZ2h0OjgwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7fSIKICArIi5jbHB3LWJhci10aW1lLmxvdyBie2NvbG9yOnZhcigtLXJvc2UpO30iCiAgLy8gc3BsaXQKICArIi5jbHB3LXNwbGl0e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDIyMHB4LDI5MHB4KSAxZnI7fSIKICArIi5jbHB3LXJlYWR7YmFja2dyb3VuZDojRjRGNkY4O2JvcmRlci1yaWdodDoxcHggc29saWQgI0UzRTZFQTtwYWRkaW5nOjE2cHggMTZweCAxOHB4O30iCiAgKyIuY2xwdy13cml0ZXtiYWNrZ3JvdW5kOiNFQUY0Rjc7cGFkZGluZzoxNnB4IDE4cHggMThweDt9IgogICsiLmNscHctcmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDttYXJnaW4tYm90dG9tOjhweDt9IgogICsiLmNscHctaW5mb3tmbGV4Om5vbmU7d2lkdGg6MThweDtoZWlnaHQ6MThweDttYXJnaW4tdG9wOjFweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtc3R5bGU6aXRhbGljO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1mYW1pbHk6R2VvcmdpYSxzZXJpZjt9IgogICsiLmNscHctcmhlYWQgcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tYjkwMCk7fSIKICArIi5jbHB3LXNjZW5hcmlvLWh7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMzMzQxNTU7bWFyZ2luLWJvdHRvbTo0cHg7fSIKICArIi5jbHB3LXNjZW5hcmlve2ZvbnQtc2l6ZToxMy41cHg7Y29sb3I6IzMzNDE1NTtsaW5lLWhlaWdodDoxLjY7fSIKICArIi5jbHB3LXNhbXRvZ2dsZXttYXJnaW4tdG9wOjE0cHg7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWNyaW1zb24pO2NvbG9yOnZhcigtLWNyaW1zb24pO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTMuNXB4O2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTFweCAxMnB4O3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMgZWFzZSxjb2xvciAuMnMgZWFzZTt9IgogICsiLmNscHctc2FtdG9nZ2xlOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tY3JpbXNvbik7Y29sb3I6I2ZmZjt9IgogICsiLmNscHctcHJvbXB0cm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDo4cHg7bWFyZ2luLWJvdHRvbTo4cHg7fSIKICArIi5jbHB3LXByb21wdHJvdyBwe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1iOTAwKTt9IgogICsiLmNscHctYnVsbGV0c3ttYXJnaW46MCAwIDEycHggMDtwYWRkaW5nLWxlZnQ6MjBweDtjb2xvcjojMzM0MTU1O2ZvbnQtc2l6ZToxMy41cHg7fSIKICArIi5jbHB3LWJ1bGxldHMgbGl7bWFyZ2luOjNweCAwO30iCiAgKyIuY2xwdy1vcHRze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDttYXJnaW46MCAwIDEycHg7fSIKICArIi5jbHB3LW9wdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6OXB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNENkU4RUQ7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMHB4IDEycHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzLjVweDtjb2xvcjojMzM0MTU1O3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBlYXNlLGJhY2tncm91bmQgLjJzIGVhc2U7fSIKICArIi5jbHB3LW9wdDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7fSIKICArIi5jbHB3LW9wdC5zZWx7Ym9yZGVyLWNvbG9yOnZhcigtLWI1MDApO2JhY2tncm91bmQ6dmFyKC0tYjUwKTt9IgogICsiLmNscHctb3B0IGlucHV0e21hcmdpbi10b3A6M3B4O2FjY2VudC1jb2xvcjp2YXIoLS1iNTAwKTtmbGV4Om5vbmU7fSIKICArIi5jbHB3LXRhe3dpZHRoOjEwMCU7bWluLWhlaWdodDoyNjBweDtyZXNpemU6dmVydGljYWw7Ym9yZGVyOjFweCBzb2xpZCAjQzlENkRjO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTNweCAxNHB4O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6IzBGMTcyQTtiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggcmdiYSgxNSwyMyw0MiwuMDUpO30iCiAgKyIuY2xwdy10YTpmb2N1c3tvdXRsaW5lOm5vbmU7Ym9yZGVyLWNvbG9yOnZhcigtLWI0MDApO2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoNTksMTMwLDI0NiwuMTUpO30iCiAgKyIuY2xwdy13bWV0ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjlweDt9IgogICsiLmNscHctd3BpbGx7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxM3B4O2JvcmRlci1yYWRpdXM6MzJweDtwYWRkaW5nOjZweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tbXV0ZWQpO30iCiAgKyIuY2xwdy13cGlsbC5sb3d7Y29sb3I6dmFyKC0tbXV0ZWQpO30iCiAgKyIuY2xwdy13cGlsbC5nb29ke2NvbG9yOiMwNDc4NTc7YmFja2dyb3VuZDp2YXIoLS1ncmVlbjUwKTtib3JkZXItY29sb3I6I0E3RjNEMDt9IgogICsiLmNscHctd3BpbGwub3Zlcntjb2xvcjojQjQ1MzA5O2JhY2tncm91bmQ6dmFyKC0tYW1iZXI1MCk7Ym9yZGVyLWNvbG9yOiNGREU2OEE7fSIKICArIi5jbHB3LXdwaWxsLm1heHtjb2xvcjojQkUxMjNDO2JhY2tncm91bmQ6dmFyKC0tcm9zZTUwKTtib3JkZXItY29sb3I6I0ZFQ0REMzt9IgogICsiLmNscHctdG1ye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDttYXJnaW4tbGVmdDphdXRvO30iCiAgKyIuY2xwdy10bXItYnRue2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTIuNXB4O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6N3B4IDEycHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyBlYXNlLGNvbG9yIC4ycyBlYXNlLGJvcmRlci1jb2xvciAuMnMgZWFzZTt9IgogICsiLmNscHctdG1yLWJ0bjpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7Y29sb3I6dmFyKC0tYjcwMCk7fSIKICArIi5jbHB3LXRtci1idG4ucnVue2JhY2tncm91bmQ6dmFyKC0tYjUwMCk7Ym9yZGVyLWNvbG9yOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7fSIKICAvLyBzYW1wbGUgcGFuZWwKICArIi5jbHB3LXNhbXBsZXN7bWFyZ2luLXRvcDoxNHB4O2JvcmRlci10b3A6MXB4IGRhc2hlZCAjRDNEOUUwO3BhZGRpbmc6MTZweCAxOHB4IDIwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MCAwIDEwcHggMTBweDt9IgogICsiLmNscHctc2FtcGxlc1toaWRkZW5de2Rpc3BsYXk6bm9uZTt9IgogICsiLmNscHctc2Ftbm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLW11dGVkKTttYXJnaW4tYm90dG9tOjEycHg7fSIKICArIi5jbHB3LXRhYnN7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLWJvdHRvbToxMnB4O30iCiAgKyIuY2xwdy10YWJ7Ym9yZGVyOjFweCBzb2xpZCAjRDlERUU1O2JhY2tncm91bmQ6I0YxRjNGNjtjb2xvcjojNDc1NTY5O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTNweDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCAxNnB4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMgZWFzZSxjb2xvciAuMnMgZWFzZTt9IgogICsiLmNscHctdGFiLm9ue2JhY2tncm91bmQ6dmFyKC0tY3JpbXNvbik7Ym9yZGVyLWNvbG9yOnZhcigtLWNyaW1zb24pO2NvbG9yOiNmZmY7fSIKICArIi5jbHB3LXNhbWJvZHl7YmFja2dyb3VuZDojRjdGOEZBO2JvcmRlcjoxcHggc29saWQgI0U3RUFFRTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4IDE4cHg7fSIKICArIi5jbHB3LXNhbWx2bHtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo4MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWNyaW1zb24pO21hcmdpbi1ib3R0b206OHB4O30iCiAgKyIuY2xwdy1zYW10ZXh0e2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMxRjI5Mzc7bGluZS1oZWlnaHQ6MS43O3doaXRlLXNwYWNlOnByZS13cmFwO30iCiAgKyIuY2xwdy1zYW1oaW50e21hcmdpbi10b3A6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOiM0NzU1Njk7YmFja2dyb3VuZDojRUVGMkZGO2JvcmRlcjoxcHggc29saWQgI0RCRTNGRjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCAxMnB4O30iCiAgKyIuY2xwdy1zYW1oaW50IGJ7Y29sb3I6dmFyKC0tYjkwMCk7fSIKICAvLyBydWJyaWMgLyBzY29yaW5nCiAgKyIuY2xwdy1wYW5lbHttYXJnaW4tdG9wOjE4cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoyMHB4IDIycHg7Ym94LXNoYWRvdzowIDEwcHggMzBweCAtMjBweCByZ2JhKDE1LDIzLDQyLC4yKTt9IgogICsiLmNscHctcGFuZWwgaDJ7Zm9udC1zaXplOjE5cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnZhcigtLWI5MDApO21hcmdpbi1ib3R0b206NHB4O30iCiAgKyIuY2xwdy1wYW5lbCAuY2xwdy1sZWFke2ZvbnQtc2l6ZToxMy41cHg7Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbi1ib3R0b206MTRweDt9IgogICsiLmNscHctcnViZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEwcHg7fSIKICArIi5jbHB3LXJ1YntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTJweCAxNHB4O2JhY2tncm91bmQ6I0ZDRkRGRjtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgZWFzZSxiYWNrZ3JvdW5kIC4ycyBlYXNlO30iCiAgKyIuY2xwdy1ydWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWI0MDApO30iCiAgKyIuY2xwdy1ydWIuZG9uZXtib3JkZXItY29sb3I6I0E3RjNEMDtiYWNrZ3JvdW5kOnZhcigtLWdyZWVuNTApO30iCiAgKyIuY2xwdy1ydWIgaW5wdXR7bWFyZ2luLXRvcDozcHg7YWNjZW50LWNvbG9yOnZhcigtLWdyZWVuKTtmbGV4Om5vbmU7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDt9IgogICsiLmNscHctcnViLWt7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxMy41cHg7Y29sb3I6dmFyKC0tYjkwMCk7fSIKICArIi5jbHB3LXJ1Yi1ke2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tbXV0ZWQpO2xpbmUtaGVpZ2h0OjEuNTttYXJnaW4tdG9wOjJweDt9IgogICsiLmNscHctc2NvcmVib3h7bWFyZ2luLXRvcDoxNHB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiMzMzQxNTU7bGluZS1oZWlnaHQ6MS42O2JhY2tncm91bmQ6dmFyKC0tYjUwKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWIxMDApO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE0cHggMTZweDt9IgogICsiLmNscHctc2NvcmVib3ggYntjb2xvcjp2YXIoLS1iOTAwKTt9IgogICsiLmNscHctY2xicm93e2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi10b3A6MTJweDt9IgogICsiLmNscHctY2xidGFne2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1iNzAwKTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1iMTAwKTtib3JkZXItcmFkaXVzOjMycHg7cGFkZGluZzo2cHggMTNweDt9IgogICsiLmNscHctZm9vdHttYXJnaW4tdG9wOjE2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tc3VidGxlKTt0ZXh0LWFsaWduOmNlbnRlcjt9IgogICsiQG1lZGlhKG1heC13aWR0aDo4MjBweCl7LmNscHctc3BsaXR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjt9LmNscHctcmVhZHtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRTNFNkVBO30uY2xwdy1ydWJncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7fS5jbHB3LWhlcm97cGFkZGluZzoyNnB4IDIycHg7fX0iCiAgOwoKICBmdW5jdGlvbiBpbmplY3RDU1MoKXsgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTdHlsZSIpKSByZXR1cm47CiAgICB2YXIgc3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsgc3QuaWQ9ImNscHdTdHlsZSI7IHN0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKENTUykpOwogICAgKGRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoc3QpOyB9CgogIC8vIC0tLS0tLS0tLS0gYnVpbGQgLS0tLS0tLS0tLQogIGZ1bmN0aW9uIHRhc2tIVE1MKHQpewogICAgdmFyIGQ9V0RBVEEudGFza3NbdC0xXTsgdmFyIGg9IiI7CiAgICBoKz0nPGRpdiBjbGFzcz0iY2xwdy10YXNrJysodD09PXN0YXRlLmFjdGl2ZT8nIG9uJzonJykrJyIgZGF0YS10YXNrPSInK3QrJyIgaWQ9ImNscHdUYXNrJyt0KyciPic7CiAgICBoKz0gJzxkaXYgY2xhc3M9ImNscHctYmFyIj48c3BhbiBjbGFzcz0iY2xwdy1iYXItdCI+Jytlc2MoZC5iYXJUaXRsZSkrJzwvc3Bhbj4nCiAgICAgICArJzxzcGFuIGNsYXNzPSJjbHB3LWJhci10aW1lIiBpZD0iY2xwd0JhclRpbWUnK3QrJyI+VGltZSByZW1haW5pbmc6IDxiPicrZm10KHN0YXRlLnRpbWVyW3RdLnJlbSkrJzwvYj48L3NwYW4+JwogICAgICAgKyc8YnV0dG9uIGNsYXNzPSJjbHB3LXRtci1idG4iIGRhdGEtdG5leHQ9IicrdCsnIj4nKyh0PFdEQVRBLnRhc2tzLmxlbmd0aD8nTkVYVCc6J0RPTkUnKSsnPC9idXR0b24+PC9kaXY+JzsKICAgIGgrPSAnPGRpdiBjbGFzcz0iY2xwdy1zcGxpdCI+JzsKICAgIC8vIGxlZnQKICAgIGgrPSAgJzxkaXYgY2xhc3M9ImNscHctcmVhZCI+JzsKICAgIGgrPSAgICc8ZGl2IGNsYXNzPSJjbHB3LXJoZWFkIj48c3BhbiBjbGFzcz0iY2xwdy1pbmZvIj5pPC9zcGFuPjxwPicrZXNjKGQucmVhZEhlYWQpKyc8L3A+PC9kaXY+JzsKICAgIGlmKGQuc2NlbmFyaW9IZWFkKXsgaCs9JzxkaXYgY2xhc3M9ImNscHctc2NlbmFyaW8taCI+Jytlc2MoZC5zY2VuYXJpb0hlYWQpKyc8L2Rpdj4nOyB9CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy1zY2VuYXJpbyI+Jytlc2MoZC5zY2VuYXJpbykrJzwvZGl2Pic7CiAgICBoKz0gICAnPGJ1dHRvbiBjbGFzcz0iY2xwdy1zYW10b2dnbGUiIGRhdGEtc2FtdG9nZ2xlPSInK3QrJyI+Q2xpY2sgaGVyZSB0byB2aWV3IHNhbXBsZSByZXNwb25zZXM8L2J1dHRvbj4nOwogICAgaCs9ICAnPC9kaXY+JzsKICAgIC8vIHJpZ2h0CiAgICBoKz0gICc8ZGl2IGNsYXNzPSJjbHB3LXdyaXRlIj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctcHJvbXB0cm93Ij48c3BhbiBjbGFzcz0iY2xwdy1pbmZvIj5pPC9zcGFuPjxwPicrZXNjKGQucHJvbXB0SGVhZCkrJzwvcD48L2Rpdj4nOwogICAgaWYoZC5idWxsZXRzICYmIGQuYnVsbGV0cy5sZW5ndGgpeyBoKz0nPHVsIGNsYXNzPSJjbHB3LWJ1bGxldHMiPic7IGQuYnVsbGV0cy5mb3JFYWNoKGZ1bmN0aW9uKGIpeyBoKz0nPGxpPicrZXNjKGIpKyc8L2xpPic7IH0pOyBoKz0nPC91bD4nOyB9CiAgICBpZihkLm9wdGlvbnMpeyBoKz0nPGRpdiBjbGFzcz0iY2xwdy1vcHRzIj4nOyBkLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvKXsKICAgICAgICBoKz0nPGxhYmVsIGNsYXNzPSJjbHB3LW9wdCcrKHN0YXRlLm9wdD09PW8ua2V5Pycgc2VsJzonJykrJyIgZGF0YS1vcHR3cmFwPSInK28ua2V5KyciPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iY2xwd09wdCIgdmFsdWU9Iicrby5rZXkrJyInKyhzdGF0ZS5vcHQ9PT1vLmtleT8nIGNoZWNrZWQnOicnKSsnPjxzcGFuPicrZXNjKG8ubGFiZWwpKyc8L3NwYW4+PC9sYWJlbD4nOyB9KTsKICAgICAgICBoKz0nPC9kaXY+JzsgfQogICAgaCs9ICAgJzx0ZXh0YXJlYSBjbGFzcz0iY2xwdy10YSIgaWQ9ImNscHdUYScrdCsnIiBkYXRhLXRhPSInK3QrJyIgcGxhY2Vob2xkZXI9IlR5cGUgeW91ciByZXNwb25zZSBoZXJlLi4uIj4nK2VzYyhzdGF0ZS50ZXh0W3RdKSsnPC90ZXh0YXJlYT4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctd21ldGVyIj4nOwogICAgaCs9ICAgICAnPHNwYW4gY2xhc3M9ImNscHctd3BpbGwiIGlkPSJjbHB3V3BpbGwnK3QrJyI+MCB3b3Jkczwvc3Bhbj4nOwogICAgaCs9ICAgICAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Y29sb3I6IzY0NzQ4QjsiPmFpbSAnK2VzYyhkLndvcmRBaW0pKyc8L3NwYW4+JzsKICAgIGgrPSAgICAgJzxzcGFuIGNsYXNzPSJjbHB3LXRtciI+JwogICAgICAgICAgICAgKyc8YnV0dG9uIGNsYXNzPSJjbHB3LXRtci1idG4iIGRhdGEtdHN0YXJ0PSInK3QrJyI+U3RhcnQgdGltZXI8L2J1dHRvbj4nCiAgICAgICAgICAgICArJzxidXR0b24gY2xhc3M9ImNscHctdG1yLWJ0biIgZGF0YS10cmVzZXQ9IicrdCsnIj5SZXNldDwvYnV0dG9uPjwvc3Bhbj4nOwogICAgaCs9ICAgJzwvZGl2Pic7CiAgICBoKz0gICc8L2Rpdj4nOwogICAgaCs9ICc8L2Rpdj4nOyAvLyBzcGxpdAogICAgLy8gc2FtcGxlcwogICAgaCs9ICc8ZGl2IGNsYXNzPSJjbHB3LXNhbXBsZXMiIGlkPSJjbHB3U2FtJyt0KyciIGhpZGRlbj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctc2Ftbm90ZSI+JysoZC5zYW1Ob3RlP2Quc2FtTm90ZTonVGhlc2UgYXJlIHRoZSBvZmZpY2lhbCBwcmFjdGljZSBzYW1wbGUgcmVzcG9uc2VzIGF0IHRocmVlIHNjb3JlIGxldmVscy4gTG93ZXItbGV2ZWwgc2FtcGxlcyBrZWVwIHRoZWlyIG9yaWdpbmFsIG1pc3Rha2VzIG9uIHB1cnBvc2UgJm1kYXNoOyBzdHVkeSB3aGF0IGNoYW5nZXMgYXMgdGhlIHNjb3JlIHJpc2VzLicpKyc8L2Rpdj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctdGFicyIgaWQ9ImNscHdUYWJzJyt0KyciPic7CiAgICBkLnNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihzLGkpeyBoKz0nPGJ1dHRvbiBjbGFzcz0iY2xwdy10YWInKyhpPT09MD8nIG9uJzonJykrJyIgZGF0YS10YWI9IicrdCsnIiBkYXRhLWk9IicraSsnIj4nK2VzYyhzLmxldmVsKSsnPC9idXR0b24+JzsgfSk7CiAgICBoKz0gICAnPC9kaXY+JzsKICAgIGgrPSAgICc8ZGl2IGNsYXNzPSJjbHB3LXNhbWJvZHkiIGlkPSJjbHB3U2FtQm9keScrdCsnIj48L2Rpdj4nOwogICAgaCs9ICc8L2Rpdj4nOwogICAgaCs9JzwvZGl2Pic7CiAgICByZXR1cm4gaDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlcigpewogICAgdmFyIHJvb3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdBcHAiKTsgaWYoIXJvb3QpIHJldHVybjsKICAgIHZhciBtPVdEQVRBLm1ldGEsIGg9IiI7CiAgICAvLyBoZXJvCiAgICBoKz0nPHNlY3Rpb24gY2xhc3M9ImNscHctaGVybyI+PGRpdiBjbGFzcz0iY2xwdy1hdXJvcmEiPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjwvZGl2Pic7CiAgICBoKz0gJzxkaXYgY2xhc3M9ImNscHctaGJhZGdlcyI+PHNwYW4gY2xhc3M9ImNscHctYmJyYW5kIj4nK2VzYyhtLmJyYW5kKSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LWJzZXQiPicrZXNjKG0uc2V0KSsnPC9zcGFuPjwvZGl2Pic7CiAgICBoKz0gJzxoMT4nK2VzYyhtLnRpdGxlKSsnPC9oMT4nOwogICAgaCs9ICc8cCBjbGFzcz0iY2xwdy1oZXJvLXN1YiI+V3JpdGUgeW91ciByZXNwb25zZSwgdGltZSB5b3Vyc2VsZiwgdGhlbiBjb21wYXJlIGl0IHdpdGggb2ZmaWNpYWwgc2FtcGxlIGFuc3dlcnMgYXQgdGhyZWUgc2NvcmUgbGV2ZWxzICZtZGFzaDsgQ0VMUElQIDQmbmRhc2g7NSwgNyZuZGFzaDs4IGFuZCAxMCZuZGFzaDsxMi48L3A+JzsKICAgIGgrPSAnPGRpdiBjbGFzcz0iY2xwdy1oY2hpcHMiPjxzcGFuIGNsYXNzPSJjbHB3LWNoaXAiPjIgdGFza3M8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2hpcCI+ficrbS50b3RhbE1pbisnIG1pbnV0ZXM8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2hpcCI+MTUwJm5kYXNoOzIwMCB3b3JkcyBlYWNoPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LWNoaXAiPlNhbXBsZSBhbnN3ZXJzIGluY2x1ZGVkPC9zcGFuPjwvZGl2Pic7CiAgICBoKz0gJzxidXR0b24gY2xhc3M9ImNscHctY3RhIiBpZD0iY2xwd1N0YXJ0Ij5TdGFydCB3cml0aW5nPC9idXR0b24+JzsKICAgIGgrPSc8L3NlY3Rpb24+JzsKICAgIC8vIHRvb2xiYXIKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LXRvb2xzIj48c3BhbiBjbGFzcz0iY2xwdy13Y291bnQiIGlkPSJjbHB3VG90V29yZHMiPldvcmRzICZtZGFzaDsgVGFzayAxOiAwICZtaWRkb3Q7IFRhc2sgMjogMDwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1zYXZlZCIgaWQ9ImNscHdTYXZlZCI+RHJhZnQgc2F2ZWQgJiMxMDAwMzs8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctc3BhY2VyIj48L3NwYW4+PGJ1dHRvbiBjbGFzcz0iY2xwdy10YnRuIiBpZD0iY2xwd1Jlc2V0QWxsIj5SZXNldCBhbGw8L2J1dHRvbj48L2Rpdj4nOwogICAgLy8gc2ltCiAgICBoKz0nPHNlY3Rpb24gY2xhc3M9ImNscHctc2ltIj48ZGl2IGNsYXNzPSJjbHB3LWRvdHMiIGlkPSJjbHB3RG90cyI+JzsKICAgIFdEQVRBLnRhc2tzLmZvckVhY2goZnVuY3Rpb24oZCl7IGgrPSc8YnV0dG9uIGNsYXNzPSJjbHB3LWRvdCIgZGF0YS1kb3Q9IicrZC5pZCsnIj5UYXNrICcrZC5pZCsnICZtaWRkb3Q7ICcrZXNjKGQubmFtZSkrJzwvYnV0dG9uPic7IH0pOwogICAgaCs9JzwvZGl2PjxkaXYgY2xhc3M9ImNscHctY2F0IiBpZD0iY2xwd0NhdCI+JzsKICAgIFdEQVRBLnRhc2tzLmZvckVhY2goZnVuY3Rpb24oZCl7IGgrPXRhc2tIVE1MKGQuaWQpOyB9KTsKICAgIGgrPSc8L2Rpdj48L3NlY3Rpb24+JzsKICAgIC8vIHJ1YnJpYyBwYW5lbAogICAgaCs9JzxzZWN0aW9uIGNsYXNzPSJjbHB3LXBhbmVsIj48aDI+U2NvcmUgeW91ciBvd24gd3JpdGluZzwvaDI+PHAgY2xhc3M9ImNscHctbGVhZCI+VGhlcmUgaXMgbm8gYW5zd2VyIGtleSBmb3IgV3JpdGluZy4gUmF0ZSBlYWNoIHJlc3BvbnNlIGFnYWluc3QgdGhlIGZvdXIgb2ZmaWNpYWwgQ0VMUElQIGRpbWVuc2lvbnMuPC9wPic7CiAgICBoKz0nPGRpdiBjbGFzcz0iY2xwdy1ydWJncmlkIiBpZD0iY2xwd1J1YkdyaWQiPjwvZGl2Pic7CiAgICBoKz0nPGRpdiBjbGFzcz0iY2xwdy1zY29yZWJveCI+Jytlc2MoV0RBVEEuc2NvcmluZ05vdGUpKyc8ZGl2IGNsYXNzPSJjbHB3LWNsYnJvdyI+PHNwYW4gY2xhc3M9ImNscHctY2xidGFnIj5NPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LWNsYnRhZyI+Q0xCIDQmbmRhc2g7NSAmcmFycjsgZGV2ZWxvcGluZzwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1jbGJ0YWciPkNMQiA3Jm5kYXNoOzggJnJhcnI7IGFkZXF1YXRlJm5kYXNoO2dvb2Q8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2xidGFnIj5DTEIgOSZuZGFzaDsxMiAmcmFycjsgc3Ryb25nPC9zcGFuPjwvZGl2PjwvZGl2Pic7CiAgICBoKz0nPC9zZWN0aW9uPic7CiAgICBoKz0nPGRpdiBjbGFzcz0iY2xwdy1mb290Ij5BbGxFbmdsaXNoNFUgJm1pZGRvdDsgQ0VMUElQIFdyaXRpbmcgUHJhY3RpY2UgJm1pZGRvdDsgU2V0IDIgJm1pZGRvdDsgVGVzdCAxPC9kaXY+JzsKICAgIHJvb3QuaW5uZXJIVE1MPWg7CiAgICBidWlsZFJ1YnJpYygpOwogICAgV0RBVEEudGFza3MuZm9yRWFjaChmdW5jdGlvbihkKXsgcmVuZGVyU2FtcGxlKGQuaWQpOyB1cGRhdGVXQyhkLmlkKTsgfSk7CiAgICB3aXJlRXZlbnRzKCk7CiAgICByZWZyZXNoRG90cygpOwogICAgdXBkYXRlVG90YWxzKCk7CiAgfQoKICBmdW5jdGlvbiBidWlsZFJ1YnJpYygpewogICAgdmFyIGc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdSdWJHcmlkIik7IGlmKCFnKSByZXR1cm47IHZhciBoPSIiOwogICAgV0RBVEEucnVicmljLmZvckVhY2goZnVuY3Rpb24ocixpKXsKICAgICAgdmFyIG9uID0gc3RhdGUucnVicmljW3N0YXRlLmFjdGl2ZV0gJiYgc3RhdGUucnVicmljW3N0YXRlLmFjdGl2ZV1baV07CiAgICAgIGgrPSc8bGFiZWwgY2xhc3M9ImNscHctcnViJysob24\/JyBkb25lJzonJykrJyIgZGF0YS1ydWJ3cmFwPSInK2krJyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBkYXRhLXJ1Yj0iJytpKyciJysob24\/JyBjaGVja2VkJzonJykrJz48c3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1ydWItayI+Jytlc2Moci5rKSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LXJ1Yi1kIj4nK2VzYyhyLmQpKyc8L3NwYW4+PC9zcGFuPjwvbGFiZWw+JzsKICAgIH0pOwogICAgZy5pbm5lckhUTUw9aDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclNhbXBsZSh0KXsKICAgIHZhciBkPVdEQVRBLnRhc2tzW3QtMV0sIGk9c3RhdGUudGFiW3RdLCBzPWQuc2FtcGxlc1tpXTsKICAgIHZhciBib2R5PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3U2FtQm9keSIrdCk7IGlmKCFib2R5KSByZXR1cm47CiAgICBib2R5LmlubmVySFRNTD0nPGRpdiBjbGFzcz0iY2xwdy1zYW1sdmwiPicrZXNjKHMubGV2ZWwpKyc8L2Rpdj48ZGl2IGNsYXNzPSJjbHB3LXNhbXRleHQiPicrZXNjKHMudGV4dCkrJzwvZGl2PicKICAgICAgKyc8ZGl2IGNsYXNzPSJjbHB3LXNhbWhpbnQiPjxiPldoYXQgc2V0cyB0aGlzIGxldmVsIGFwYXJ0OjwvYj4gJytlc2Mocy5ub3RlKSsnPC9kaXY+JzsKICAgIHZhciB0YWJzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3VGFicyIrdCk7IGlmKHRhYnMpeyBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRhYnMuY2hpbGRyZW4sZnVuY3Rpb24oYixiaSl7IGIuY2xhc3NMaXN0LnRvZ2dsZSgib24iLGJpPT09aSk7IH0pOyB9CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVXQyh0KXsKICAgIHZhciBuPXdjKHN0YXRlLnRleHRbdF0pOyB2YXIgcGlsbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1dwaWxsIit0KTsgaWYoIXBpbGwpIHJldHVybjsKICAgIHBpbGwudGV4dENvbnRlbnQ9bisobj09PTE\/IiB3b3JkIjoiIHdvcmRzIik7CiAgICBwaWxsLmNsYXNzTmFtZT0iY2xwdy13cGlsbCAiKyhuPDE1MD8ibG93Ijoobjw9MjAwPyJnb29kIjoobjw9MjUwPyJvdmVyIjoibWF4IikpKTsKICAgIHVwZGF0ZVRvdGFscygpOwogIH0KICBmdW5jdGlvbiB1cGRhdGVUb3RhbHMoKXsKICAgIHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1RvdFdvcmRzIik7IGlmKGVsKSBlbC5pbm5lckhUTUw9IldvcmRzICZtZGFzaDsgVGFzayAxOiAiK3djKHN0YXRlLnRleHRbMV0pKyIgJm1pZGRvdDsgVGFzayAyOiAiK3djKHN0YXRlLnRleHRbMl0pOwogIH0KCiAgZnVuY3Rpb24gcmVmcmVzaERvdHMoKXsKICAgIHZhciBkb3RzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3RG90cyIpOyBpZighZG90cykgcmV0dXJuOwogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkb3RzLmNoaWxkcmVuLGZ1bmN0aW9uKGIpeyB2YXIgaWQ9K2IuZ2V0QXR0cmlidXRlKCJkYXRhLWRvdCIpOwogICAgICBiLmNsYXNzTGlzdC50b2dnbGUoIm9uIixpZD09PXN0YXRlLmFjdGl2ZSk7CiAgICAgIGIuY2xhc3NMaXN0LnRvZ2dsZSgiZmlsbGVkIiwgaWQhPT1zdGF0ZS5hY3RpdmUgJiYgd2Moc3RhdGUudGV4dFtpZF0pPjApOyB9KTsKICAgIFdEQVRBLnRhc2tzLmZvckVhY2goZnVuY3Rpb24oZCl7IHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1Rhc2siK2QuaWQpOyBpZihlbCkgZWwuY2xhc3NMaXN0LnRvZ2dsZSgib24iLGQuaWQ9PT1zdGF0ZS5hY3RpdmUpOyB9KTsKICB9CgogIGZ1bmN0aW9uIHN3aXRjaFRhc2sodCl7IHN0YXRlLmFjdGl2ZT10OyByZWZyZXNoRG90cygpOyBidWlsZFJ1YnJpYygpOwogICAgdmFyIGNhdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd0NhdCIpOyBpZihjYXQmJmNhdC5zY3JvbGxJbnRvVmlldykgY2F0LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoic3RhcnQifSk7IH0KCiAgLy8gdGltZXJzCiAgZnVuY3Rpb24gdGljayh0KXsgdmFyIFQ9c3RhdGUudGltZXJbdF07IGlmKFQucmVtPD0wKXsgc3RvcFRpbWVyKHQpOyByZXR1cm47IH0gVC5yZW0tLTsgcGFpbnRUaW1lKHQpOyBpZihULnJlbTw9MCkgc3RvcFRpbWVyKHQpOyB9CiAgZnVuY3Rpb24gcGFpbnRUaW1lKHQpeyB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdCYXJUaW1lIit0KTsgdmFyIFQ9c3RhdGUudGltZXJbdF07CiAgICBpZihlbCl7IGVsLmlubmVySFRNTD0iVGltZSByZW1haW5pbmc6IDxiPiIrZm10KFQucmVtKSsiPC9iPiI7IGVsLmNsYXNzTGlzdC50b2dnbGUoImxvdyIsVC5yZW08PTEyMCk7IH0KICAgIHZhciBidG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtdHN0YXJ0PSInK3QrJyJdJyk7IGlmKGJ0bil7IGJ0bi50ZXh0Q29udGVudD1ULnJ1bj8iUGF1c2UgdGltZXIiOihULnJlbTw9MD8iVGltZSB1cCI6IlN0YXJ0IHRpbWVyIik7IGJ0bi5jbGFzc0xpc3QudG9nZ2xlKCJydW4iLFQucnVuKTsgfSB9CiAgZnVuY3Rpb24gc3RhcnRUaW1lcih0KXsgdmFyIFQ9c3RhdGUudGltZXJbdF07IGlmKFQucmVtPD0wKSByZXR1cm47IFQucnVuPXRydWU7IGlmKFQuaXYpIGNsZWFySW50ZXJ2YWwoVC5pdik7IFQuaXY9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0aWNrKHQpO30sMTAwMCk7IHBhaW50VGltZSh0KTsgfQogIGZ1bmN0aW9uIHN0b3BUaW1lcih0KXsgdmFyIFQ9c3RhdGUudGltZXJbdF07IFQucnVuPWZhbHNlOyBpZihULml2KXsgY2xlYXJJbnRlcnZhbChULml2KTsgVC5pdj1udWxsOyB9IHBhaW50VGltZSh0KTsgfQogIGZ1bmN0aW9uIHRvZ2dsZVRpbWVyKHQpeyBzdGF0ZS50aW1lclt0XS5ydW4\/c3RvcFRpbWVyKHQpOnN0YXJ0VGltZXIodCk7IH0KICBmdW5jdGlvbiByZXNldFRpbWVyKHQpeyBzdG9wVGltZXIodCk7IHN0YXRlLnRpbWVyW3RdLnJlbT1XREFUQS50YXNrc1t0LTFdLm1pbnV0ZXMqNjA7IHBhaW50VGltZSh0KTsgfQoKICAvLyAtLS0tLS0tLS0tIGV2ZW50cyAtLS0tLS0tLS0tCiAgZnVuY3Rpb24gd2lyZUV2ZW50cygpewogICAgdmFyIHJvb3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdBcHAiKTsKICAgIHZhciBzdGFydD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1N0YXJ0Iik7CiAgICBpZihzdGFydCkgc3RhcnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7IHN3aXRjaFRhc2soMSk7IHN0YXJ0VGltZXIoMSk7IH0pOwogICAgdmFyIHJlc2V0QWxsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3UmVzZXRBbGwiKTsKICAgIGlmKHJlc2V0QWxsKSByZXNldEFsbC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXsKICAgICAgaWYoIWNvbmZpcm0oIkNsZWFyIGJvdGggZHJhZnRzLCBzZWxlY3RlZCBvcHRpb24gYW5kIHRpbWVycyBvbiB0aGlzIGRldmljZT8iKSkgcmV0dXJuOwogICAgICBzdGF0ZS50ZXh0WzFdPSIiO3N0YXRlLnRleHRbMl09IiI7c3RhdGUub3B0PW51bGw7c3RhdGUucnVicmljPXsxOnt9LDI6e319OwogICAgICByZXNldFRpbWVyKDEpO3Jlc2V0VGltZXIoMik7IHNhdmUoKTsgcmVuZGVyKCk7IH0pOwoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpewogICAgICB2YXIgZWw9ZS50YXJnZXQuY2xvc2VzdCgiW2RhdGEtZG90XSxbZGF0YS1zYW10b2dnbGVdLFtkYXRhLXRhYl0sW2RhdGEtdHN0YXJ0XSxbZGF0YS10cmVzZXRdLFtkYXRhLXRuZXh0XSIpOyBpZighZWwpIHJldHVybjsKICAgICAgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLWRvdCIpKXsgc3dpdGNoVGFzaygrZWwuZ2V0QXR0cmlidXRlKCJkYXRhLWRvdCIpKTsgfQogICAgICBlbHNlIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS1zYW10b2dnbGUiKSl7IHZhciB0PStlbC5nZXRBdHRyaWJ1dGUoImRhdGEtc2FtdG9nZ2xlIik7IHZhciBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3U2FtIit0KTsKICAgICAgICBpZihwKXsgcC5oaWRkZW49IXAuaGlkZGVuOyBlbC50ZXh0Q29udGVudD1wLmhpZGRlbj8iQ2xpY2sgaGVyZSB0byB2aWV3IHNhbXBsZSByZXNwb25zZXMiOiJIaWRlIHNhbXBsZSByZXNwb25zZXMiOyBpZighcC5oaWRkZW4pIHJlbmRlclNhbXBsZSh0KTsgfSB9CiAgICAgIGVsc2UgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLXRhYiIpKXsgdmFyIHR0PStlbC5nZXRBdHRyaWJ1dGUoImRhdGEtdGFiIik7IHN0YXRlLnRhYlt0dF09K2VsLmdldEF0dHJpYnV0ZSgiZGF0YS1pIik7IHJlbmRlclNhbXBsZSh0dCk7IH0KICAgICAgZWxzZSBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtdHN0YXJ0IikpeyB0b2dnbGVUaW1lcigrZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXRzdGFydCIpKTsgfQogICAgICBlbHNlIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS10cmVzZXQiKSl7IHJlc2V0VGltZXIoK2VsLmdldEF0dHJpYnV0ZSgiZGF0YS10cmVzZXQiKSk7IH0KICAgICAgZWxzZSBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtdG5leHQiKSl7IHZhciBjdXI9K2VsLmdldEF0dHJpYnV0ZSgiZGF0YS10bmV4dCIpOyBpZihjdXI8V0RBVEEudGFza3MubGVuZ3RoKXsgc3dpdGNoVGFzayhjdXIrMSk7IH0gfQogICAgfSk7CgogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZnVuY3Rpb24oZSl7IHZhciB0YT1lLnRhcmdldC5jbG9zZXN0KCJbZGF0YS10YV0iKTsgaWYoIXRhKSByZXR1cm47CiAgICAgIHZhciB0PSt0YS5nZXRBdHRyaWJ1dGUoImRhdGEtdGEiKTsgc3RhdGUudGV4dFt0XT10YS52YWx1ZTsgdXBkYXRlV0ModCk7IHJlZnJlc2hEb3RzKCk7IHNhdmUoKTsgfSk7CgogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGZ1bmN0aW9uKGUpewogICAgICB2YXIgb3B0PWUudGFyZ2V0LmNsb3Nlc3QoJ2lucHV0W25hbWU9ImNscHdPcHQiXScpOwogICAgICBpZihvcHQpeyBzdGF0ZS5vcHQ9b3B0LnZhbHVlOyBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLW9wdHdyYXBdIiksZnVuY3Rpb24obCl7IGwuY2xhc3NMaXN0LnRvZ2dsZSgic2VsIixsLmdldEF0dHJpYnV0ZSgiZGF0YS1vcHR3cmFwIik9PT1zdGF0ZS5vcHQpOyB9KTsgc2F2ZSgpOyByZXR1cm47IH0KICAgICAgdmFyIHJ1Yj1lLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1ydWJdIik7CiAgICAgIGlmKHJ1Yil7IHZhciBpPStydWIuZ2V0QXR0cmlidXRlKCJkYXRhLXJ1YiIpOyBpZighc3RhdGUucnVicmljW3N0YXRlLmFjdGl2ZV0pIHN0YXRlLnJ1YnJpY1tzdGF0ZS5hY3RpdmVdPXt9OyBzdGF0ZS5ydWJyaWNbc3RhdGUuYWN0aXZlXVtpXT1ydWIuY2hlY2tlZDsKICAgICAgICB2YXIgd3JhcD1ydWIuY2xvc2VzdCgiW2RhdGEtcnVid3JhcF0iKTsgaWYod3JhcCkgd3JhcC5jbGFzc0xpc3QudG9nZ2xlKCJkb25lIixydWIuY2hlY2tlZCk7IHNhdmUoKTsgfQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBib290KCl7IGxvYWQoKTsgaW5qZWN0Q1NTKCk7IHJlbmRlcigpOyB9CiAgaWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJsb2FkaW5nIikgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsYm9vdCk7IGVsc2UgYm9vdCgpOwp9KSgpOwo=\"))<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Writing Set 2 Practice Test 1: Task 1 (email) and Task 2 (survey response) with timers and word counter, plus a self-assessment guide. 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-6258","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6258","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=6258"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6258\/revisions"}],"predecessor-version":[{"id":6584,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6258\/revisions\/6584"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}