{"id":6319,"date":"2026-07-10T13:12:11","date_gmt":"2026-07-10T13:12:11","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-4-test-2-writing\/"},"modified":"2026-07-12T03:24:49","modified_gmt":"2026-07-12T03:24:49","slug":"celpip-set-4-test-2-writing","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-4-test-2-writing\/","title":{"rendered":"CELPIP Writing \u2014 Set 4 \u00b7 Practice Test 2"},"content":{"rendered":"<div class=\"clpw-wrap\" id=\"clpwApp\"><\/div>\n<p><script>eval(atob(\"dmFyIFdEQVRBPXsibWV0YSI6eyJicmFuZCI6IkNFTFBJUCIsInNldCI6IlNldCA0IFx1MDBiNyBQcmFjdGljZSBUZXN0IDIiLCJ0aXRsZSI6IkNFTFBJUCBXcml0aW5nIFByYWN0aWNlIFRlc3QiLCJ0b3RhbE1pbiI6NTN9LCJ0YXNrcyI6W3siaWQiOjEsImJhclRpdGxlIjoiUHJhY3RpY2UgVGVzdCAyIFx1MjAxMyBXcml0aW5nIFRhc2sgMTogV3JpdGluZyBhbiBFbWFpbCIsIm5hbWUiOiJXcml0aW5nIGFuIEVtYWlsIiwibWludXRlcyI6MjcsIndvcmRBaW0iOiIxNTBcdTIwMTMyMDAgd29yZHMiLCJyZWFkSGVhZCI6IlJlYWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4iLCJzY2VuYXJpbyI6IllvdSBhbmQgeW91ciBjby13b3JrZXIgb2Z0ZW4gaGF2ZSBsdW5jaCBpbiBhIG5lYXJieSBwYXJrLiBIb3dldmVyLCB0aGVyZSBoYXZlIGJlZW4gdG9vIG1hbnkgYmlyZHMgaW4gdGhlIHBhcmsgbGF0ZWx5LCBlc3BlY2lhbGx5IHRoZSBwaWdlb25zIHdobyB3YW50IHlvdXIgZm9vZC4gVGhlIHNpdHVhdGlvbiBpcyBzcG9pbGluZyB5b3VyIGx1bmNoIGJyZWFrLiIsInByb21wdEhlYWQiOiJXcml0ZSBhbiBlbWFpbCB0byB0aGUgbG9jYWwgbmV3c3BhcGVyIGluIGFib3V0IDE1MFx1MjAxMzIwMCB3b3Jkcy4gWW91ciBlbWFpbCBzaG91bGQgZG8gdGhlIGZvbGxvd2luZyB0aGluZ3M6IiwiYnVsbGV0cyI6WyJEZXNjcmliZSB0aGUgaW1wb3J0YW5jZSBvZiB0aGUgcGFyayB0byB5b3UgYW5kIHlvdXIgY29sbGVhZ3Vlcy4iLCJFeHBsYWluIGhvdyB0aGUgYmlyZHMgaGF2ZSBhZmZlY3RlZCB5b3UuIiwiU3VnZ2VzdCB3aGF0IHRoZSBuZXdzcGFwZXJcdTIwMTlzIHJlYWRlcnMsIG9yIGNpdHkgb2ZmaWNpYWxzIGFuZCBwYXJrIG1hbmFnZXJzLCBjYW4gZG8gdG8gaW1wcm92ZSB0aGUgc2l0dWF0aW9uLiJdLCJvcHRpb25zIjpudWxsLCJzYW1Ob3RlIjoiVGhlc2UgYXJlIEFsbEVuZ2xpc2g0VSBtb2RlbCBhbnN3ZXJzIHdyaXR0ZW4gZm9yIHRoaXMgZXhhY3QgVGFzayAxIGVtYWlsIHByb21wdCAod3JpdGluZyB0byBhIGxvY2FsIG5ld3NwYXBlciBhYm91dCB0b28gbWFueSBiaXJkcyBpbiB0aGUgcGFyayksIHNob3duIGF0IHRocmVlIHNjb3JlIGxldmVscyAoQ0VMUElQIDRcdTIwMTM1LCA3XHUyMDEzOCBhbmQgMTBcdTIwMTMxMikgc28geW91IGNhbiBzZWUgaG93IHRoZSBzYW1lIHRhc2sgcmVhZHMgYXMgaXQgaW1wcm92ZXMuIFRoZXkgYXJlIEFFNFUgc3R1ZHkgbW9kZWxzLCBub3Qgb2ZmaWNpYWwgQ0VMUElQIHNhbXBsZXM7IHRoZSA0XHUyMDEzNSBtb2RlbCBkZWxpYmVyYXRlbHkga2VlcHMgc29tZSBlcnJvcnMuIiwic2FtcGxlcyI6W3sibGV2ZWwiOiJDRUxQSVAgNFx1MjAxMzUgUmVzcG9uc2UiLCJub3RlIjoiQWRkcmVzc2VzIHRoZSB0aHJlZSBwb2ludHMgd2l0aCBzaW1wbGUgc2VudGVuY2VzIGFuZCBldmVyeWRheSB3b3Jkczsgc2V2ZXJhbCBncmFtbWFyIGFuZCBzcGVsbGluZyBzbGlwcy4iLCJ0ZXh0IjoiRGVhciBFZGl0b3IsXG5cbkkgYW0gd3JpdGluZyBhYm91dCBhIHByb2JsZW0gaW4gUml2ZXJzaWRlIFBhcmsgaW4gb3VyIGNpdHkuIE1lIGFuZCBteSBjb2xsZWFndWVzIGdvIHRvIHRoaXMgcGFyayBhbG1vc3QgZXZlcnkgZGF5IGZvciBvdXIgbHVuY2ggYnJlYWsuXG5cblRoZSBwYXJrIGlzIHZlcnkgaW1wb3J0YW50IGZvciB1cy4gV2Ugd29yayBpbiB0aGUgb2ZmaWNlIGFsbCBtb3JuaW5nIGFuZCB0aGUgcGFyayBnaXZlIHVzIGZyZXNoIGFpciBhbmQgYSBncmVlbiBwbGFjZSB0byByZXN0IGFuZCBlYXQuIEl0IG1ha2UgdXMgZmVlbCByZWxheCBiZWZvcmUgd2UgZ28gYmFjayB0byB3b3JrLlxuXG5CdXQgbm93IHRoZXJlIGlzIHRvbyBtYW55IGJpcmRzLCBzcGVjaWFsbHkgcGlnZW9ucy4gV2hlbiB3ZSBvcGVuIG91ciBmb29kLCBtYW55IHBpZ2VvbnMgY29tZSB2ZXJ5IGNsb3NlIGFuZCB0cnkgdG8gdGFrZSBpdC4gVGhleSBmbHkgYXJvdW5kIG91ciBoZWFkIGFuZCBpdCBpcyBkaXJ0eSBhbmQgYSBsaXR0bGUgc2NhcnkuIE5vdyB3ZSBjYW5ub3QgZW5qb3kgb3VyIGx1bmNoIGFueW1vcmUuXG5cbkkgd2FudCB0byBhc2sgdGhlIHJlYWRlcnMgYW5kIHRoZSBjaXR5IHRvIGhlbHAuIE1heWJlIHBlb3BsZSBzaG91bGQgbm90IGdpdmUgZm9vZCB0byB0aGUgYmlyZHMsIGFuZCB0aGUgcGFyayBtYW5hZ2VyIGNhbiBwdXQgbW9yZSBiaW5zIHdpdGggYSBjb3ZlciBzbyB0aGUgYmlyZHMgZG9uJ3QgZmluZCBmb29kLiBJIGhvcGUgd2UgY2FuIGZpeCB0aGlzIHNvb24uXG5cblRoYW5rIHlvdSxcbk1hcmsgTGUifSx7ImxldmVsIjoiQ0VMUElQIDdcdTIwMTM4IFJlc3BvbnNlIiwibm90ZSI6IkNsZWFyIGFuZCB3ZWxsLW9yZGVyZWQ6IHRoZSBwYXJrJ3MgdmFsdWUsIHRoZSBiaXJkcycgaW1wYWN0IGFuZCBjb25jcmV0ZSBzdWdnZXN0aW9ucywgd2l0aCBnb29kIHZvY2FidWxhcnkgYW5kIGZldyBlcnJvcnMuIiwidGV4dCI6IkRlYXIgRWRpdG9yLFxuXG5JIGFtIHdyaXRpbmcgdG8gcmFpc2UgYW4gaXNzdWUgdGhhdCBpcyBhZmZlY3RpbmcgbWFueSBvZmZpY2Ugd29ya2VycyB3aG8gdXNlIFJpdmVyc2lkZSBQYXJrLCBhbmQgSSBob3BlIHlvdXIgcmVhZGVycyBhbmQgdGhlIGNpdHkgY2FuIGhlbHAuXG5cbkZvciBteSBjb2xsZWFndWVzIGFuZCBtZSwgdGhpcyBwYXJrIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSB3b3JraW5nIGRheS4gV2Ugc3BlbmQgYWxtb3N0IGV2ZXJ5IGx1bmNoIGJyZWFrIHRoZXJlLCBlc2NhcGluZyBvdXIgZGVza3MgdG8gZWF0IG91dGRvb3JzLCBlbmpveSB0aGUgZ3JlZW5lcnkgYW5kIHJlY2hhcmdlIGJlZm9yZSB0aGUgYWZ0ZXJub29uLiBJdCBpcyBvbmUgb2YgdGhlIGZldyBxdWlldCwgbmF0dXJhbCBzcGFjZXMgbmVhciBvdXIgb2ZmaWNlcy5cblxuTGF0ZWx5LCBob3dldmVyLCB0aGUgbnVtYmVyIG9mIGJpcmRzIFx1MjAxNCBlc3BlY2lhbGx5IHBpZ2VvbnMgXHUyMDE0IGhhcyBncm93biBvdXQgb2YgY29udHJvbC4gVGhlIG1vbWVudCBhbnlvbmUgb3BlbnMgYSBsdW5jaCwgZmxvY2tzIG9mIHRoZW0gY3Jvd2QgYXJvdW5kLCBzbmF0Y2hpbmcgZm9vZCwgZmxhcHBpbmcgaW4gb3VyIGZhY2VzIGFuZCBsZWF2aW5nIGRyb3BwaW5ncyBvbiB0aGUgYmVuY2hlcy4gV2hhdCB1c2VkIHRvIGJlIGEgcmVsYXhpbmcgYnJlYWsgaGFzIGJlY29tZSBzdHJlc3NmdWwgYW5kIHVuaHlnaWVuaWMsIGFuZCBzZXZlcmFsIG9mIHVzIGhhdmUgc2ltcGx5IHN0b3BwZWQgZ29pbmcuXG5cbkkgd291bGQgYXNrIHJlYWRlcnMgdG8gc3RvcCBmZWVkaW5nIHRoZSBiaXJkcywgYW5kIEkgd291bGQgdXJnZSBwYXJrIG1hbmFnZXJzIGFuZCBjaXR5IG9mZmljaWFscyB0byBpbnN0YWxsIGNvdmVyZWQgcnViYmlzaCBiaW5zIGFuZCBwdXQgdXAgcG9saXRlIHNpZ25zLiBXaXRoIGEgbGl0dGxlIGNvb3BlcmF0aW9uLCB3ZSBjb3VsZCBhbGwgZW5qb3kgdGhlIHBhcmsgYWdhaW4uXG5cbllvdXJzIHNpbmNlcmVseSxcbk1hcmsgTGUifSx7ImxldmVsIjoiQ0VMUElQIDEwXHUyMDEzMTIgUmVzcG9uc2UiLCJub3RlIjoiRmx1ZW50IGFuZCBwZXJzdWFzaXZlLCB3aXRoIHZpdmlkIGRldGFpbCwgc21vb3RoIHN0cnVjdHVyZSBhbmQgYSBjb3VydGVvdXMsIGNvbW11bml0eS1taW5kZWQgY2FsbCB0byBhY3Rpb24uIiwidGV4dCI6IkRlYXIgRWRpdG9yLFxuXG5JIGFtIHdyaXRpbmcgdG8gZHJhdyBhdHRlbnRpb24gdG8gYSBncm93aW5nIHByb2JsZW0gaW4gUml2ZXJzaWRlIFBhcmssIGluIHRoZSBob3BlIHRoYXQgeW91ciByZWFkZXJzIGFuZCB0aGUgcmVsZXZhbnQgYXV0aG9yaXRpZXMgbWlnaHQgaGVscCBhZGRyZXNzIGl0LlxuXG5Gb3IgdGhlIG1hbnkgb2YgdXMgd2hvIHdvcmsgaW4gdGhlIHN1cnJvdW5kaW5nIG9mZmljZXMsIHRoaXMgcGFyayBpcyBmYXIgbW9yZSB0aGFuIGEgcGF0Y2ggb2YgZ3Jhc3MuIEl0IGlzIHdoZXJlIG15IGNvbGxlYWd1ZXMgYW5kIEkgc3BlbmQgYWxtb3N0IGV2ZXJ5IGx1bmNoIGJyZWFrIFx1MjAxNCBzdGVwcGluZyBhd2F5IGZyb20gb3VyIHNjcmVlbnMgdG8gZWF0IG91dGRvb3JzLCBicmVhdGhlIGZyZXNoIGFpciBhbmQgcmV0dXJuIHRvIHdvcmsgcmVmcmVzaGVkLiBJbiBhIGJ1c3kgY29tbWVyY2lhbCBkaXN0cmljdCwgdGhhdCBkYWlseSBlc2NhcGUgaXMgZ2VudWluZWx5IHZhbHVhYmxlLlxuXG5VbmZvcnR1bmF0ZWx5LCB0aGUgcGFya1x1MjAxOXMgcGlnZW9uIHBvcHVsYXRpb24gaGFzIHN3ZWxsZWQgdG8gdGhlIHBvaW50IG9mIGJlY29taW5nIGEgbnVpc2FuY2UuIEFzIHNvb24gYXMgZm9vZCBhcHBlYXJzLCBhZ2dyZXNzaXZlIGZsb2NrcyBkZXNjZW5kLCBzbmF0Y2hpbmcgYXQgb3VyIG1lYWxzLCBzdGFydGxpbmcgdXMgYW5kIGZvdWxpbmcgdGhlIGJlbmNoZXMgYW5kIHBhdGhzLiBXaGF0IHdhcyBvbmNlIGEgcGxlYXNhbnQgcml0dWFsIGhhcyBiZWNvbWUgc28gdW5wbGVhc2FudCB0aGF0IHNldmVyYWwgY29sbGVhZ3VlcyBub3cgZWF0IGF0IHRoZWlyIGRlc2tzIGluc3RlYWQuXG5cbkkgd291bGQgcmVzcGVjdGZ1bGx5IHVyZ2UgdHdvIHRoaW5nczogdGhhdCByZWFkZXJzIHJlZnJhaW4gZnJvbSBmZWVkaW5nIHRoZSBiaXJkcywgd2hpY2ggb25seSBlbmNvdXJhZ2VzIHRoZW0sIGFuZCB0aGF0IHBhcmsgbWFuYWdlcnMgYW5kIGNpdHkgb2ZmaWNpYWxzIGluc3RhbGwgY292ZXJlZCBiaW5zIGFuZCBjbGVhciBzaWduYWdlLiBXaXRoIG1vZGVzdCwgc2hhcmVkIGVmZm9ydCwgd2UgY291bGQgcmVzdG9yZSB0aGlzIHdlbGwtbG92ZWQgc3BhY2UgZm9yIGV2ZXJ5b25lLlxuXG5Zb3VycyBmYWl0aGZ1bGx5LFxuTWFyayBMZSJ9XX0seyJpZCI6MiwiYmFyVGl0bGUiOiJQcmFjdGljZSBUZXN0IDIgXHUyMDEzIFdyaXRpbmcgVGFzayAyOiBSZXNwb25kaW5nIHRvIFN1cnZleSBRdWVzdGlvbnMiLCJuYW1lIjoiUmVzcG9uZGluZyB0byBTdXJ2ZXkgUXVlc3Rpb25zIiwibWludXRlcyI6MjYsIndvcmRBaW0iOiIxNTBcdTIwMTMyMDAgd29yZHMiLCJyZWFkSGVhZCI6IlJlYWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4iLCJzY2VuYXJpb0hlYWQiOiJBcGFydG1lbnQgU2VjdXJpdHkgU3VydmV5Iiwic2NlbmFyaW8iOiJZb3UgbGl2ZSBpbiBhbiBhcGFydG1lbnQgYnVpbGRpbmcuIFRoZSBhcGFydG1lbnQgbWFuYWdlbWVudCB3YW50cyB0byBpbXByb3ZlIHRoZSBzZWN1cml0eSBvZiB0aGUgYnVpbGRpbmcuIE9uZSBvcHRpb24gaXMgdG8gaW5zdGFsbCBhIG5ldyBsb2NrIGluIGVhY2ggYXBhcnRtZW50LCB0aGUgb3RoZXIgb3B0aW9uIGlzIHRvIGluc3RhbGwgbW9yZSBzZWN1cml0eSBjYW1lcmFzIGluIHRoZSBidWlsZGluZy4gVGhlIG1hbmFnZW1lbnQgaXMgc3VydmV5aW5nIHlvdXIgb3BpbmlvbiBvbiB0aGVzZSBzZWN1cml0eSBpbXByb3ZlbWVudCBwbGFucy4iLCJwcm9tcHRIZWFkIjoiQ2hvb3NlIHRoZSBvcHRpb24gdGhhdCB5b3UgcHJlZmVyLiBXaHkgZG8geW91IHByZWZlciB5b3VyIGNob2ljZT8gRXhwbGFpbiB0aGUgcmVhc29ucyBmb3IgeW91ciBjaG9pY2UuIFdyaXRlIGFib3V0IDE1MFx1MjAxMzIwMCB3b3Jkcy4iLCJidWxsZXRzIjpbXSwib3B0aW9ucyI6W3sia2V5IjoiQSIsImxhYmVsIjoiT3B0aW9uIEE6IEkgY2hvb3NlIHRvIGhhdmUgYSBuZXcgbG9jayBmb3IgbXkgYXBhcnRtZW50LiJ9LHsia2V5IjoiQiIsImxhYmVsIjoiT3B0aW9uIEI6IEkgY2hvb3NlIHRvIGhhdmUgbW9yZSBjYW1lcmFzIGluIHRoZSBidWlsZGluZy4ifV0sInNhbU5vdGUiOiJUaGVzZSBhcmUgQWxsRW5nbGlzaDRVIG1vZGVsIGFuc3dlcnMgd3JpdHRlbiBmb3IgdGhpcyBleGFjdCBUYXNrIDIgb3Bpbmlvbi1zdXJ2ZXkgcHJvbXB0IChuZXcgYXBhcnRtZW50IGxvY2tzIHZzIG1vcmUgc2VjdXJpdHkgY2FtZXJhcyksIHNob3duIGF0IHRocmVlIHNjb3JlIGxldmVscyAoQ0VMUElQIDRcdTIwMTM1LCA3XHUyMDEzOCBhbmQgMTBcdTIwMTMxMikgc28geW91IGNhbiBzZWUgaG93IHRoZSBzYW1lIHRhc2sgcmVhZHMgYXMgaXQgaW1wcm92ZXMuIFRoZXkgYXJlIEFFNFUgc3R1ZHkgbW9kZWxzLCBub3Qgb2ZmaWNpYWwgQ0VMUElQIHNhbXBsZXM7IHRoZSA0XHUyMDEzNSBtb2RlbCBkZWxpYmVyYXRlbHkga2VlcHMgc29tZSBlcnJvcnMuIiwic2FtcGxlcyI6W3sibGV2ZWwiOiJDRUxQSVAgNFx1MjAxMzUgUmVzcG9uc2UiLCJub3RlIjoiUGlja3MgYSBzaWRlIChPcHRpb24gQikgd2l0aCBiYXNpYywgcmVwZWF0ZWQgcmVhc29uczsgc2ltcGxlIHZvY2FidWxhcnkgYW5kIGdyYW1tYXIgZXJyb3JzLCBidXQgYSBjbGVhciBvcGluaW9uLiIsInRleHQiOiJJIHdvdWxkIGxpa2UgdG8gY2hvb3NlIE9wdGlvbiBCLiBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBwdXQgbW9yZSBzZWN1cml0eSBjYW1lcmFzIGluIHRoZSBidWlsZGluZy5cblxuVGhlIG1haW4gcmVhc29uIGlzIHRoYXQgY2FtZXJhcyBwcm90ZWN0IGFsbCB0aGUgYnVpbGRpbmcsIG5vdCBvbmx5IG9uZSBhcGFydG1lbnQuIEEgbmV3IGxvY2sgb25seSBoZWxwIGluc2lkZSBteSBvd24gZG9vciwgYnV0IG1hbnkgcHJvYmxlbXMgaGFwcGVuIGluIG90aGVyIHBsYWNlcywgbGlrZSB0aGUgcGFya2luZywgdGhlIGVudHJhbmNlLCB0aGUgc3RhaXJzIGFuZCB0aGUgaGFsbHdheS4gQ2FtZXJhcyBjYW4gd2F0Y2ggYWxsIHRoZXNlIGFyZWEuXG5cbkFsc28sIGNhbWVyYXMgY2FuIHN0b3AgdGhlIGJhZCBwZW9wbGUgYmVmb3JlIHRoZXkgZG8gc29tZXRoaW5nLCBiZWNhdXNlIHdoZW4gdGhleSBzZWUgdGhlIGNhbWVyYSB0aGV5IGFyZSBhZnJhaWQgYW5kIGdvIGF3YXkuIEFuZCBpZiBzb21ldGhpbmcgaGFwcGVuLCB0aGUgcG9saWNlIGNhbiBsb29rIGF0IHRoZSB2aWRlbyBhbmQgZmluZCB3aG8gZGlkIGl0LlxuXG5BIGxvY2sgaXMgZ29vZCB0b28sIGJ1dCBpdCBpcyBvbmx5IGZvciBvbmUgaG9tZS4gQ2FtZXJhcyBnaXZlIHNhZmV0eSBmb3IgZXZlcnlib2R5IGluIHRoZSBidWlsZGluZyBhbmQgYWxzbyBmb3Igb3VyIGNhcnMgYW5kIHZpc2l0b3JzLiBTbyBmb3IgbWUsIG1vcmUgY2FtZXJhcyBpcyB0aGUgYmV0dGVyIGNob2ljZS4gVGhhdCBpcyB3aHkgSSBwcmVmZXIgT3B0aW9uIEIuIFRoYW5rIHlvdS4ifSx7ImxldmVsIjoiQ0VMUElQIDdcdTIwMTM4IFJlc3BvbnNlIiwibm90ZSI6IkEgY2xlYXIgc3RhbmNlIChPcHRpb24gQikgd2l0aCB0d28gZGV2ZWxvcGVkIHJlYXNvbnMgYW5kIGEgYnJpZWYgY29uY2Vzc2lvbjsgd2VsbCBvcmdhbmlzZWQgd2l0aCBnb29kIGNvbnRyb2wuIiwidGV4dCI6IkJldHdlZW4gdGhlIHR3byBvcHRpb25zLCBJIHdvdWxkIHByZWZlciBPcHRpb24gQjogaW5zdGFsbGluZyBtb3JlIHNlY3VyaXR5IGNhbWVyYXMgdGhyb3VnaG91dCB0aGUgYnVpbGRpbmcuXG5cbk15IGZpcnN0IHJlYXNvbiBpcyBjb3ZlcmFnZS4gQSBuZXcgbG9jayBvbmx5IHByb3RlY3RzIHRoZSBpbnNpZGUgb2YgZWFjaCBpbmRpdmlkdWFsIGFwYXJ0bWVudCwgd2hlcmVhcyBtb3N0IHNlY3VyaXR5IGluY2lkZW50cyBhY3R1YWxseSBoYXBwZW4gaW4gc2hhcmVkIGFyZWFzIFx1MjAxNCB0aGUgbG9iYnksIHRoZSBwYXJraW5nIGdhcmFnZSwgdGhlIHN0YWlyd2VsbHMgYW5kIHRoZSBoYWxsd2F5cy4gQ2FtZXJhcyB3YXRjaCBvdmVyIGFsbCBvZiB0aGVzZSBzcGFjZXMgYW5kIHRoZXJlZm9yZSBwcm90ZWN0IGV2ZXJ5IHJlc2lkZW50LCBub3QganVzdCB0aG9zZSBiZWhpbmQgYSBwYXJ0aWN1bGFyIGRvb3IuXG5cblNlY29uZGx5LCBjYW1lcmFzIHdvcmsgYXMgYm90aCBwcmV2ZW50aW9uIGFuZCBldmlkZW5jZS4gVmlzaWJsZSBjYW1lcmFzIGRpc2NvdXJhZ2UgaW50cnVkZXJzIGFuZCBwYWNrYWdlIHRoaWV2ZXMgZnJvbSBldmVuIGF0dGVtcHRpbmcgYSBjcmltZSwgYW5kIGlmIHNvbWV0aGluZyBkb2VzIGhhcHBlbiwgdGhlIHJlY29yZGluZ3MgZ2l2ZSB0aGUgcG9saWNlIGEgcmVhbCBjaGFuY2Ugb2YgaWRlbnRpZnlpbmcgdGhvc2UgcmVzcG9uc2libGUuXG5cbkkgZG8gc2VlIHRoZSBhcHBlYWwgb2YgbmV3IGxvY2tzLCBhbmQgc3Ryb25nZXIgZG9vcnMgYXJlIG5ldmVyIGEgYmFkIHRoaW5nLiBIb3dldmVyLCBhIGxvY2sgaXMgYSBwcml2YXRlLCBsaW1pdGVkIHNvbHV0aW9uLCB3aGlsZSBjYW1lcmFzIGltcHJvdmUgc2FmZXR5IGZvciB0aGUgd2hvbGUgY29tbXVuaXR5LCBpbmNsdWRpbmcgb3VyIHZlaGljbGVzIGFuZCB2aXNpdG9ycy5cblxuRm9yIHRoZXNlIHJlYXNvbnMsIEkgYmVsaWV2ZSBpbnZlc3RpbmcgaW4gbW9yZSBzZWN1cml0eSBjYW1lcmFzIGlzIHRoZSB3aXNlciBjaG9pY2UgZm9yIHRoZSBidWlsZGluZy4ifSx7ImxldmVsIjoiQ0VMUElQIDEwXHUyMDEzMTIgUmVzcG9uc2UiLCJub3RlIjoiQSBzb3BoaXN0aWNhdGVkIGFyZ3VtZW50IChPcHRpb24gQSkgdGhhdCB3ZWlnaHMgcHJldmVudGlvbiBhbmQgcHJpdmFjeSwgY29uY2VkZXMgZmFpcmx5IGFuZCBjb25jbHVkZXMgZGVjaXNpdmVseS4iLCJ0ZXh0IjoiSGF2aW5nIGNvbnNpZGVyZWQgYm90aCBwcm9wb3NhbHMsIEkgd291bGQgY2hvb3NlIE9wdGlvbiBBIGFuZCBhc2sgdGhlIG1hbmFnZW1lbnQgdG8gaW5zdGFsbCBhIG5ldyBsb2NrIGluIGVhY2ggYXBhcnRtZW50LlxuXG5XaGlsZSBJIGFwcHJlY2lhdGUgdGhlIGRldGVycmVudCB2YWx1ZSBvZiBjYW1lcmFzLCBteSBwcmlvcml0eSBpcyB0aGUgc2VjdXJpdHkgb2YgdGhlIHBsYWNlIHdoZXJlIHJlc2lkZW50cyBhcmUgbW9zdCB2dWxuZXJhYmxlOiB0aGVpciBvd24gaG9tZXMuIEEgbW9kZXJuLCBoaWdoLXF1YWxpdHkgbG9jayBwaHlzaWNhbGx5IHByZXZlbnRzIGFuIGludHJ1ZGVyIGZyb20gZW50ZXJpbmcgYW4gYXBhcnRtZW50LCB3aGVyZWFzIGEgY2FtZXJhIG9ubHkgcmVjb3JkcyBhIGJyZWFrLWluIGFmdGVyIGl0IGhhcyBiZWd1bi4gSW4gb3RoZXIgd29yZHMsIGxvY2tzIHN0b3AgY3JpbWUsIHdoaWxlIGNhbWVyYXMgbWVyZWx5IGRvY3VtZW50IGl0LlxuXG5UaGVyZSBpcyBhbHNvIHRoZSBtYXR0ZXIgb2YgcHJpdmFjeS4gTWFueSByZXNpZGVudHMsIG15c2VsZiBpbmNsdWRlZCwgYXJlIHVuY29tZm9ydGFibGUgYmVpbmcgZmlsbWVkIGV2ZXJ5IHRpbWUgd2UgY29tZSBhbmQgZ28sIGFuZCBoZWF2eSBzdXJ2ZWlsbGFuY2UgY2FuIG1ha2UgYSBidWlsZGluZyBmZWVsIG1vcmUgbGlrZSBhIGZhY2lsaXR5IHRoYW4gYSBob21lLiBOZXcgbG9ja3Mgc3RyZW5ndGhlbiBzYWZldHkgd2l0aG91dCB3YXRjaGluZyBhbnlvbmUuXG5cbkkgZG8gcmVjb2duaXNlIHRoYXQgY2FtZXJhcyBoYXZlIHRoZWlyIHBsYWNlIGluIHNoYXJlZCBhcmVhcywgYW5kIEkgd291bGQgbm90IG9wcG9zZSBhIGZldyBhdCB0aGUgbWFpbiBlbnRyYW5jZS4gT24gYmFsYW5jZSwgaG93ZXZlciwgdGhlIHNpbmdsZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8ga2VlcCByZXNpZGVudHMgZ2VudWluZWx5IHNhZmUgaXMgdG8gcmVpbmZvcmNlIHRoZSBiYXJyaWVyIGF0IGVhY2ggZnJvbnQgZG9vci4gRm9yIHRoYXQgcmVhc29uLCBJIHN1cHBvcnQgT3B0aW9uIEEuIn1dfV0sInJ1YnJpYyI6W3siayI6IkNvbnRlbnQgLyBDb2hlcmVuY2UiLCJkIjoiQWxsIHJlcXVpcmVkIHBvaW50cyBhcmUgY292ZXJlZCBhbmQgZGV2ZWxvcGVkIHdpdGggY2xlYXIsIGxvZ2ljYWxseSBjb25uZWN0ZWQgaWRlYXMgYW5kIHBhcmFncmFwaHMuIn0seyJrIjoiVm9jYWJ1bGFyeSIsImQiOiJXb3JkIGNob2ljZSBpcyB2YXJpZWQsIHByZWNpc2UgYW5kIHN1aXRzIHRoZSB0b25lIChhIHNlbWktZm9ybWFsIGVtYWlsIC8gYSByZWFzb25lZCBvcGluaW9uKS4ifSx7ImsiOiJSZWFkYWJpbGl0eSIsImQiOiJHcmFtbWFyLCBzcGVsbGluZyBhbmQgcHVuY3R1YXRpb24gYXJlIGFjY3VyYXRlIGVub3VnaCB0aGF0IHRoZSByZWFkZXIgaXMgbmV2ZXIgc2xvd2VkIGRvd24uIn0seyJrIjoiVGFzayBGdWxmaWxsbWVudCIsImQiOiJUaGUgcmVzcG9uc2UgZml0cyB0aGUgcHVycG9zZSBhbmQgYXVkaWVuY2UsIGtlZXBzIHRoZSAxNTBcdTIwMTMyMDAgd29yZCBsZW5ndGgsIGFuZCByZWFkcyBsaWtlIGEgcmVhbCBlbWFpbCAvIHN1cnZleSBhbnN3ZXIuIn1dLCJzY29yaW5nTm90ZSI6IkNFTFBJUCBXcml0aW5nIGlzIHJhdGVkIGJ5IGh1bWFuIHJhdGVycyBvbiBhIHNjYWxlIGZyb20gTSB0byAxMiB0aGF0IG1hcHMgMToxIHRvIHRoZSBDYW5hZGlhbiBMYW5ndWFnZSBCZW5jaG1hcmtzIChDTEIpLiBFYWNoIHRhc2sgaXMganVkZ2VkIGhvbGlzdGljYWxseSBvbiBmb3VyIGRpbWVuc2lvbnMgXHUyMDE0IENvbnRlbnQvQ29oZXJlbmNlLCBWb2NhYnVsYXJ5LCBSZWFkYWJpbGl0eSBhbmQgVGFzayBGdWxmaWxsbWVudC4gVGhlcmUgaXMgbm8gc2luZ2xlIFx1MjAxOGNvcnJlY3RcdTIwMTkgYW5zd2VyLCBzbyB1c2UgdGhlIHNhbXBsZSByZXNwb25zZXMgYW5kIHRoZSBzZWxmLWNoZWNrIGJlbG93IHRvIHNlZSB3aGVyZSB5b3VyIHdyaXRpbmcgc2l0cyBhbmQgd2hhdCB0byBpbXByb3ZlLiJ9OwooZnVuY3Rpb24oKXsKICAidXNlIHN0cmljdCI7CiAgaWYod2luZG93Ll9fY2xwd0luaXQpIHJldHVybjsgd2luZG93Ll9fY2xwd0luaXQgPSB0cnVlOwoKICB2YXIgTFMgPSAiYWU0dV9jbHB3X3MxdDFfdjEiOwogIHZhciBzdGF0ZSA9IHsgYWN0aXZlOjEsIHNhbXBsZXM6ezE6ZmFsc2UsMjpmYWxzZX0sIHRhYjp7MTowLDI6MH0sIG9wdDpudWxsLAogICAgICAgICAgICAgICAgdGV4dDp7MToiIiwyOiIifSwgcnVicmljOnsxOnt9LDI6e319LAogICAgICAgICAgICAgICAgdGltZXI6ezE6e3JlbTpXREFUQS50YXNrc1swXS5taW51dGVzKjYwLHJ1bjpmYWxzZSxpdjpudWxsfSwKICAgICAgICAgICAgICAgICAgICAgICAgMjp7cmVtOldEQVRBLnRhc2tzWzFdLm1pbnV0ZXMqNjAscnVuOmZhbHNlLGl2Om51bGx9fSB9OwoKICAvLyAtLS0tLS0tLS0tIGhlbHBlcnMgLS0tLS0tLS0tLQogIGZ1bmN0aW9uIGVzYyhzKXsgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iik7IH0KICBmdW5jdGlvbiB3YyhzKXsgdmFyIG09KHN8fCIiKS50cmltKCkubWF0Y2goL1xTKy9nKTsgcmV0dXJuIG0\/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+PHNwYW4gY2xhc3M9ImNscHctY2xidGFnIj5DTEIgOSZuZGFzaDsxMiAmcmFycjsgc3Ryb25nPC9zcGFuPjwvZGl2PjwvZGl2Pic7CiAgICBoKz0nPC9zZWN0aW9uPic7CiAgICBoKz0nPGRpdiBjbGFzcz0iY2xwdy1mb290Ij5BbGxFbmdsaXNoNFUgJm1pZGRvdDsgQ0VMUElQIFdyaXRpbmcgUHJhY3RpY2UgJm1pZGRvdDsgJytlc2MoV0RBVEEubWV0YS5zZXQpKyc8L2Rpdj4nOwogICAgcm9vdC5pbm5lckhUTUw9aDsKICAgIGJ1aWxkUnVicmljKCk7CiAgICBXREFUQS50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uKGQpeyByZW5kZXJTYW1wbGUoZC5pZCk7IHVwZGF0ZVdDKGQuaWQpOyB9KTsKICAgIHdpcmVFdmVudHMoKTsKICAgIHJlZnJlc2hEb3RzKCk7CiAgICB1cGRhdGVUb3RhbHMoKTsKICB9CgogIGZ1bmN0aW9uIGJ1aWxkUnVicmljKCl7CiAgICB2YXIgZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1J1YkdyaWQiKTsgaWYoIWcpIHJldHVybjsgdmFyIGg9IiI7CiAgICBXREFUQS5ydWJyaWMuZm9yRWFjaChmdW5jdGlvbihyLGkpewogICAgICB2YXIgb24gPSBzdGF0ZS5ydWJyaWNbc3RhdGUuYWN0aXZlXSAmJiBzdGF0ZS5ydWJyaWNbc3RhdGUuYWN0aXZlXVtpXTsKICAgICAgaCs9JzxsYWJlbCBjbGFzcz0iY2xwdy1ydWInKyhvbj8nIGRvbmUnOicnKSsnIiBkYXRhLXJ1YndyYXA9IicraSsnIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRhdGEtcnViPSInK2krJyInKyhvbj8nIGNoZWNrZWQnOicnKSsnPjxzcGFuPjxzcGFuIGNsYXNzPSJjbHB3LXJ1Yi1rIj4nK2VzYyhyLmspKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctcnViLWQiPicrZXNjKHIuZCkrJzwvc3Bhbj48L3NwYW4+PC9sYWJlbD4nOwogICAgfSk7CiAgICBnLmlubmVySFRNTD1oOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyU2FtcGxlKHQpewogICAgdmFyIGQ9V0RBVEEudGFza3NbdC0xXSwgaT1zdGF0ZS50YWJbdF0sIHM9ZC5zYW1wbGVzW2ldOwogICAgdmFyIGJvZHk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTYW1Cb2R5Iit0KTsgaWYoIWJvZHkpIHJldHVybjsKICAgIGJvZHkuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJjbHB3LXNhbWx2bCI+Jytlc2Mocy5sZXZlbCkrJzwvZGl2PjxkaXYgY2xhc3M9ImNscHctc2FtdGV4dCI+Jytlc2Mocy50ZXh0KSsnPC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9ImNscHctc2FtaGludCI+PGI+V2hhdCBzZXRzIHRoaXMgbGV2ZWwgYXBhcnQ6PC9iPiAnK2VzYyhzLm5vdGUpKyc8L2Rpdj4nOwogICAgdmFyIHRhYnM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdUYWJzIit0KTsgaWYodGFicyl7IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodGFicy5jaGlsZHJlbixmdW5jdGlvbihiLGJpKXsgYi5jbGFzc0xpc3QudG9nZ2xlKCJvbiIsYmk9PT1pKTsgfSk7IH0KICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVdDKHQpewogICAgdmFyIG49d2Moc3RhdGUudGV4dFt0XSk7IHZhciBwaWxsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3V3BpbGwiK3QpOyBpZighcGlsbCkgcmV0dXJuOwogICAgcGlsbC50ZXh0Q29udGVudD1uKyhuPT09MT8iIHdvcmQiOiIgd29yZHMiKTsKICAgIHBpbGwuY2xhc3NOYW1lPSJjbHB3LXdwaWxsICIrKG48MTUwPyJsb3ciOihuPD0yMDA\/Imdvb2QiOihuPD0yNTA\/Im92ZXIiOiJtYXgiKSkpOwogICAgdXBkYXRlVG90YWxzKCk7CiAgfQogIGZ1bmN0aW9uIHVwZGF0ZVRvdGFscygpewogICAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3VG90V29yZHMiKTsgaWYoZWwpIGVsLmlubmVySFRNTD0iV29yZHMgJm1kYXNoOyBUYXNrIDE6ICIrd2Moc3RhdGUudGV4dFsxXSkrIiAmbWlkZG90OyBUYXNrIDI6ICIrd2Moc3RhdGUudGV4dFsyXSk7CiAgfQoKICBmdW5jdGlvbiByZWZyZXNoRG90cygpewogICAgdmFyIGRvdHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdEb3RzIik7IGlmKCFkb3RzKSByZXR1cm47CiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRvdHMuY2hpbGRyZW4sZnVuY3Rpb24oYil7IHZhciBpZD0rYi5nZXRBdHRyaWJ1dGUoImRhdGEtZG90Iik7CiAgICAgIGIuY2xhc3NMaXN0LnRvZ2dsZSgib24iLGlkPT09c3RhdGUuYWN0aXZlKTsKICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCJmaWxsZWQiLCBpZCE9PXN0YXRlLmFjdGl2ZSAmJiB3YyhzdGF0ZS50ZXh0W2lkXSk+MCk7IH0pOwogICAgV0RBVEEudGFza3MuZm9yRWFjaChmdW5jdGlvbihkKXsgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3VGFzayIrZC5pZCk7IGlmKGVsKSBlbC5jbGFzc0xpc3QudG9nZ2xlKCJvbiIsZC5pZD09PXN0YXRlLmFjdGl2ZSk7IH0pOwogIH0KCiAgZnVuY3Rpb24gc3dpdGNoVGFzayh0KXsgc3RhdGUuYWN0aXZlPXQ7IHJlZnJlc2hEb3RzKCk7IGJ1aWxkUnVicmljKCk7CiAgICB2YXIgY2F0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3Q2F0Iik7IGlmKGNhdCYmY2F0LnNjcm9sbEludG9WaWV3KSBjYXQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2NrOiJzdGFydCJ9KTsgfQoKICAvLyB0aW1lcnMKICBmdW5jdGlvbiB0aWNrKHQpeyB2YXIgVD1zdGF0ZS50aW1lclt0XTsgaWYoVC5yZW08PTApeyBzdG9wVGltZXIodCk7IHJldHVybjsgfSBULnJlbS0tOyBwYWludFRpbWUodCk7IGlmKFQucmVtPD0wKSBzdG9wVGltZXIodCk7IH0KICBmdW5jdGlvbiBwYWludFRpbWUodCl7IHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd0JhclRpbWUiK3QpOyB2YXIgVD1zdGF0ZS50aW1lclt0XTsKICAgIGlmKGVsKXsgZWwuaW5uZXJIVE1MPSJUaW1lIHJlbWFpbmluZzogPGI+IitmbXQoVC5yZW0pKyI8L2I+IjsgZWwuY2xhc3NMaXN0LnRvZ2dsZSgibG93IixULnJlbTw9MTIwKTsgfQogICAgdmFyIGJ0bj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10c3RhcnQ9IicrdCsnIl0nKTsgaWYoYnRuKXsgYnRuLnRleHRDb250ZW50PVQucnVuPyJQYXVzZSB0aW1lciI6KFQucmVtPD0wPyJUaW1lIHVwIjoiU3RhcnQgdGltZXIiKTsgYnRuLmNsYXNzTGlzdC50b2dnbGUoInJ1biIsVC5ydW4pOyB9IH0KICBmdW5jdGlvbiBzdGFydFRpbWVyKHQpeyB2YXIgVD1zdGF0ZS50aW1lclt0XTsgaWYoVC5yZW08PTApIHJldHVybjsgVC5ydW49dHJ1ZTsgaWYoVC5pdikgY2xlYXJJbnRlcnZhbChULml2KTsgVC5pdj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RpY2sodCk7fSwxMDAwKTsgcGFpbnRUaW1lKHQpOyB9CiAgZnVuY3Rpb24gc3RvcFRpbWVyKHQpeyB2YXIgVD1zdGF0ZS50aW1lclt0XTsgVC5ydW49ZmFsc2U7IGlmKFQuaXYpeyBjbGVhckludGVydmFsKFQuaXYpOyBULml2PW51bGw7IH0gcGFpbnRUaW1lKHQpOyB9CiAgZnVuY3Rpb24gdG9nZ2xlVGltZXIodCl7IHN0YXRlLnRpbWVyW3RdLnJ1bj9zdG9wVGltZXIodCk6c3RhcnRUaW1lcih0KTsgfQogIGZ1bmN0aW9uIHJlc2V0VGltZXIodCl7IHN0b3BUaW1lcih0KTsgc3RhdGUudGltZXJbdF0ucmVtPVdEQVRBLnRhc2tzW3QtMV0ubWludXRlcyo2MDsgcGFpbnRUaW1lKHQpOyB9CgogIC8vIC0tLS0tLS0tLS0gZXZlbnRzIC0tLS0tLS0tLS0KICBmdW5jdGlvbiB3aXJlRXZlbnRzKCl7CiAgICB2YXIgcm9vdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd0FwcCIpOwogICAgdmFyIHN0YXJ0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3U3RhcnQiKTsKICAgIGlmKHN0YXJ0KSBzdGFydC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXsgc3dpdGNoVGFzaygxKTsgc3RhcnRUaW1lcigxKTsgfSk7CiAgICB2YXIgcmVzZXRBbGw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdSZXNldEFsbCIpOwogICAgaWYocmVzZXRBbGwpIHJlc2V0QWxsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpewogICAgICBpZighY29uZmlybSgiQ2xlYXIgYm90aCBkcmFmdHMsIHNlbGVjdGVkIG9wdGlvbiBhbmQgdGltZXJzIG9uIHRoaXMgZGV2aWNlPyIpKSByZXR1cm47CiAgICAgIHN0YXRlLnRleHRbMV09IiI7c3RhdGUudGV4dFsyXT0iIjtzdGF0ZS5vcHQ9bnVsbDtzdGF0ZS5ydWJyaWM9ezE6e30sMjp7fX07CiAgICAgIHJlc2V0VGltZXIoMSk7cmVzZXRUaW1lcigyKTsgc2F2ZSgpOyByZW5kZXIoKTsgfSk7CgogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oZSl7CiAgICAgIHZhciBlbD1lLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1kb3RdLFtkYXRhLXNhbXRvZ2dsZV0sW2RhdGEtdGFiXSxbZGF0YS10c3RhcnRdLFtkYXRhLXRyZXNldF0sW2RhdGEtdG5leHRdIik7IGlmKCFlbCkgcmV0dXJuOwogICAgICBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtZG90IikpeyBzd2l0Y2hUYXNrKCtlbC5nZXRBdHRyaWJ1dGUoImRhdGEtZG90IikpOyB9CiAgICAgIGVsc2UgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLXNhbXRvZ2dsZSIpKXsgdmFyIHQ9K2VsLmdldEF0dHJpYnV0ZSgiZGF0YS1zYW10b2dnbGUiKTsgdmFyIHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTYW0iK3QpOwogICAgICAgIGlmKHApeyBwLmhpZGRlbj0hcC5oaWRkZW47IGVsLnRleHRDb250ZW50PXAuaGlkZGVuPyJDbGljayBoZXJlIHRvIHZpZXcgc2FtcGxlIHJlc3BvbnNlcyI6IkhpZGUgc2FtcGxlIHJlc3BvbnNlcyI7IGlmKCFwLmhpZGRlbikgcmVuZGVyU2FtcGxlKHQpOyB9IH0KICAgICAgZWxzZSBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtdGFiIikpeyB2YXIgdHQ9K2VsLmdldEF0dHJpYnV0ZSgiZGF0YS10YWIiKTsgc3RhdGUudGFiW3R0XT0rZWwuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKTsgcmVuZGVyU2FtcGxlKHR0KTsgfQogICAgICBlbHNlIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS10c3RhcnQiKSl7IHRvZ2dsZVRpbWVyKCtlbC5nZXRBdHRyaWJ1dGUoImRhdGEtdHN0YXJ0IikpOyB9CiAgICAgIGVsc2UgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLXRyZXNldCIpKXsgcmVzZXRUaW1lcigrZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXRyZXNldCIpKTsgfQogICAgICBlbHNlIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS10bmV4dCIpKXsgdmFyIGN1cj0rZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXRuZXh0Iik7IGlmKGN1cjxXREFUQS50YXNrcy5sZW5ndGgpeyBzd2l0Y2hUYXNrKGN1cisxKTsgfSB9CiAgICB9KTsKCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixmdW5jdGlvbihlKXsgdmFyIHRhPWUudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXRhXSIpOyBpZighdGEpIHJldHVybjsKICAgICAgdmFyIHQ9K3RhLmdldEF0dHJpYnV0ZSgiZGF0YS10YSIpOyBzdGF0ZS50ZXh0W3RdPXRhLnZhbHVlOyB1cGRhdGVXQyh0KTsgcmVmcmVzaERvdHMoKTsgc2F2ZSgpOyB9KTsKCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZnVuY3Rpb24oZSl7CiAgICAgIHZhciBvcHQ9ZS50YXJnZXQuY2xvc2VzdCgnaW5wdXRbbmFtZT0iY2xwd09wdCJdJyk7CiAgICAgIGlmKG9wdCl7IHN0YXRlLm9wdD1vcHQudmFsdWU7IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtb3B0d3JhcF0iKSxmdW5jdGlvbihsKXsgbC5jbGFzc0xpc3QudG9nZ2xlKCJzZWwiLGwuZ2V0QXR0cmlidXRlKCJkYXRhLW9wdHdyYXAiKT09PXN0YXRlLm9wdCk7IH0pOyBzYXZlKCk7IHJldHVybjsgfQogICAgICB2YXIgcnViPWUudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXJ1Yl0iKTsKICAgICAgaWYocnViKXsgdmFyIGk9K3J1Yi5nZXRBdHRyaWJ1dGUoImRhdGEtcnViIik7IGlmKCFzdGF0ZS5ydWJyaWNbc3RhdGUuYWN0aXZlXSkgc3RhdGUucnVicmljW3N0YXRlLmFjdGl2ZV09e307IHN0YXRlLnJ1YnJpY1tzdGF0ZS5hY3RpdmVdW2ldPXJ1Yi5jaGVja2VkOwogICAgICAgIHZhciB3cmFwPXJ1Yi5jbG9zZXN0KCJbZGF0YS1ydWJ3cmFwXSIpOyBpZih3cmFwKSB3cmFwLmNsYXNzTGlzdC50b2dnbGUoImRvbmUiLHJ1Yi5jaGVja2VkKTsgc2F2ZSgpOyB9CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGJvb3QoKXsgbG9hZCgpOyBpbmplY3RDU1MoKTsgcmVuZGVyKCk7IH0KICBpZihkb2N1bWVudC5yZWFkeVN0YXRlPT09ImxvYWRpbmciKSBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixib290KTsgZWxzZSBib290KCk7Cn0pKCk7Cgo=\"));<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Writing Set 4 Practice Test 2: 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-6319","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6319","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=6319"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6319\/revisions"}],"predecessor-version":[{"id":6575,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6319\/revisions\/6575"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}