{"id":6422,"date":"2026-07-11T06:02:25","date_gmt":"2026-07-11T06:02:25","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-10-test-2-speaking\/"},"modified":"2026-07-12T03:16:17","modified_gmt":"2026-07-12T03:16:17","slug":"celpip-set-10-test-2-speaking","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-10-test-2-speaking\/","title":{"rendered":"CELPIP Speaking \u2014 Set 10 \u00b7 Practice Test 2"},"content":{"rendered":"<div id=\"clp-spk-root\" style=\"min-height:300px\">\n<p style=\"text-align:center;padding:40px 0;color:#888\">Loading CELPIP Speaking\u2026<\/p>\n<\/div>\n<p><script>eval(atob(\"d2luZG93LkNMUFNQS19EQVRBPXsic2V0IjoxMCwidGVzdCI6MiwidGl0bGUiOiJDRUxQSVAgU3BlYWtpbmcgXHUyMDE0IFNldCAxMCBcdTAwYjcgUHJhY3RpY2UgVGVzdCAyIiwiaGVhZGVyIjoiUHJhY3RpY2UgVGVzdCAyIiwiaW1ncyI6eyJzY2VuZSI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9zMTB0Mi1zY2VuZS5qcGciLCJvcHRBIjoiaHR0cHM6Ly9hbGxlbmdsaXNoNHUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA3L3MxMHQyLW9wdC1hLmpwZyIsIm9wdEIiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczEwdDItb3B0LWIuanBnIiwib3B0T3RoZXIiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczEwdDItb3B0LW90aGVyLmpwZyIsInVudXN1YWwiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczEwdDItdW51c3VhbC5qcGcifSwib3RoZXJVcmwiOiIvY2VscGlwLXNldC0xMC10ZXN0LTEtc3BlYWtpbmcvIiwidGFza3MiOlt7ImsiOiJ3IiwibnVtIjowLCJ0eXBlRW4iOiJTcGVha2luZyBQcmFjdGljZSBUYXNrIiwicHJlcCI6MzAsInJlYyI6NjAsIndhcm11cCI6dHJ1ZSwicHJvbXB0IjoiVGFsayBhYm91dCBvbmUgb2YgeW91ciBiZXN0IGZyaWVuZHMuIiwiaW1nIjpudWxsLCJ0aXBzIjp7ImJ1bGxldHMiOlsiVGhlIFByYWN0aWNlIFRhc2sgKHdhcm0tdXApIGlzIE5PVCBzY29yZWQgXHUyMDE0IGl0IGlzIGhlcmUgdG8gaGVscCB5b3UgZ2V0IHVzZWQgdG8gdGhlIGNvbnRyb2xzIGFuZCB3YXJtIHVwIHlvdXIgdm9pY2UuIiwiU3BlYWsgbmF0dXJhbGx5IGFib3V0IGEgYmVzdCBmcmllbmQ6IHRoZWlyIG5hbWUsIGhvdyB5b3UgbWV0LCB0aGVpciBwZXJzb25hbGl0eSwgYSBtZW1vcnkgeW91IHNoYXJlLiIsIlVzZSBpdCB0byBhZGp1c3QgeW91ciBwb3N0dXJlLCBtaWNyb3Bob25lIGRpc3RhbmNlLCBhbmQgc3BlYWtpbmcgcGFjZS4iXSwicGhyYXNlcyI6WyJNeSBiZXN0IGZyaWVuZCdzIG5hbWUgaXNcdTIwMjYiLCJXZSBtZXQgd2hlblx1MjAyNiIsIldoYXQgSSBsaWtlIG1vc3QgYWJvdXQgaGltL2hlciBpc1x1MjAyNiJdfSwiczYiOm51bGwsInM5IjpudWxsfSx7ImsiOiJ0MSIsIm51bSI6MSwidHlwZUVuIjoiR2l2aW5nIEFkdmljZSIsInByZXAiOjMwLCJyZWMiOjkwLCJwcm9tcHQiOiJZb3VyIG5lcGhldyBpcyBtb3Zpbmcgb3V0IG9mIGhpcyBwYXJlbnRzJyBob21lIGZvciB0aGUgZmlyc3QgdGltZS4gQWR2aXNlIGhpbSBhYm91dCB3aGF0IGhlIG1pZ2h0IG5lZWQgdG8gZG8gd2hlbiBsaXZpbmcgb24gaGlzIG93bi4iLCJpbWciOm51bGwsInRpcHMiOnsiYnVsbGV0cyI6WyJPcGVuaW5nOiBncmVldCB5b3VyIGZyaWVuZCBhbmQgcmVzdGF0ZSB0aGUgc2l0dWF0aW9uIGluIG9uZSBzZW50ZW5jZS4iLCJCb2R5OiBnaXZlIDJcdTIwMTMzIHBpZWNlcyBvZiBhZHZpY2UsIGVhY2ggd2l0aCBhIHJlYXNvbiBvciBleGFtcGxlIChGaXJzdFx1MjAyNiwgYmVjYXVzZVx1MjAyNjsgQW5vdGhlciBpZGVhIGlzXHUyMDI2KS4iLCJDbG9zaW5nOiBlbmNvdXJhZ2UgdGhlbSBhbmQgd2lzaCB0aGVtIGx1Y2suIiwiQWR2aWNlIGZvciBhIG5lcGhldyBsaXZpbmcgYWxvbmUgZm9yIHRoZSBmaXJzdCB0aW1lOiBtYWtlIGEgbW9udGhseSBidWRnZXQgYW5kIHRyYWNrIHJlbnQgKyBiaWxscyBzbyBub3RoaW5nIGlzIGEgc3VycHJpc2U7IGxlYXJuIGEgZmV3IHNpbXBsZSBtZWFscyBzbyBoZSBkb2VzIG5vdCBsaXZlIG9uIHRha2VvdXQ7IHNldCB1cCBhdXRvbWF0aWMgcGF5bWVudHMgc28gYmlsbHMgYXJlIG5ldmVyIGxhdGU7IGtlZXAgYSBzbWFsbCBlbWVyZ2VuY3kgZnVuZDsgcGljayBvbmUgZGF5IGEgd2VlayBmb3IgY2xlYW5pbmcgYW5kIGxhdW5kcnk7IGFuZCByZW1lbWJlciBoZSBjYW4gYWx3YXlzIGNhbGwgaG9tZSBmb3IgaGVscC4iXSwicGhyYXNlcyI6WyJJZiBJIHdlcmUgeW91LCBJJ2RcdTIwMjYiLCJZb3Ugc2hvdWxkIGRlZmluaXRlbHlcdTIwMjYiLCJBbm90aGVyIG9wdGlvbiBpcyB0b1x1MjAyNiIsIlRydXN0IG1lLCB5b3Ugd29uJ3QgcmVncmV0IGl0LiJdfSwiczYiOiJIZXkgRGFuaWVsLCBzbyB5b3UgYXJlIGZpbmFsbHkgbW92aW5nIGludG8geW91ciBvd24gcGxhY2UsIGNvbmdyYXR1bGF0aW9ucywgdGhhdCBpcyBzbyBleGNpdGluZyEgQnV0IGxpdmluZyBhbG9uZSBpcyBub3Qgb25seSBmcmVlZG9tLCB0aGVyZSBpcyBhbHNvIHJlc3BvbnNpYmlsaXR5LCBzbyBsZXQgbWUgZ2l2ZSB5b3Ugc29tZSBhZHZpY2UsIHVuY2xlIHRvIG5lcGhldy4gRmlyc3QsIG1vbmV5LiBNYWtlIGEgc2ltcGxlIGJ1ZGdldDogd3JpdGUgZG93biB5b3VyIHJlbnQsIHlvdXIgYmlsbHMsIGZvb2QsIGFuZCB0cmFuc3BvcnQsIGFuZCBzZWUgaG93IG11Y2ggaXMgbGVmdC4gRG8gbm90IHNwZW5kIGV2ZXJ5dGhpbmcgaW4gdGhlIGZpcnN0IHdlZWssIEkgZGlkIHRoYXQgb25jZSwgYmVsaWV2ZSBtZSEgU2Vjb25kLCBsZWFybiB0byBjb29rIGEgZmV3IGVhc3kgbWVhbHMuIElmIHlvdSBvcmRlciBmb29kIGV2ZXJ5IGRheSwgeW91ciBtb25leSBhbmQgeW91ciBoZWFsdGggd2lsbCBkaXNhcHBlYXIgZmFzdC4gSnVzdCBmaXZlIHNpbXBsZSByZWNpcGVzIGFyZSBlbm91Z2ggdG8gc3RhcnQuIFRoaXJkLCBwYXkgeW91ciBiaWxscyBvbiB0aW1lLiBTZXQgdXAgYXV0b21hdGljIHBheW1lbnQgb24geW91ciBwaG9uZSwgc28geW91IG5ldmVyIGZvcmdldCB0aGUgZWxlY3RyaWNpdHkgb3IgdGhlIGludGVybmV0LiBBIGxhdGUgYmlsbCBjb3N0cyBleHRyYSBtb25leSBmb3Igbm90aGluZy4gRm91cnRoLCBrZWVwIHlvdXIgcGxhY2UgY2xlYW4sIGNob29zZSBvbmUgZGF5IGEgd2VlayBmb3IgY2xlYW5pbmcgYW5kIGxhdW5kcnksIGFuZCBpdCB3aWxsIG5ldmVyIGJlY29tZSBhIGJpZyBtZXNzLiBBbmQgbGFzdCwga2VlcCBhIGxpdHRsZSBlbWVyZ2VuY3kgbW9uZXksIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgYnJlYWtzLiBPaCwgYW5kIERhbmllbCwgbmV2ZXIgZmVlbCBzaHkgdG8gY2FsbCB5b3VyIG1vbSBvciBtZSBpZiB5b3UgbmVlZCBoZWxwLiBUaGF0IGlzIG5vcm1hbC4gWW91IGFyZSBnb2luZyB0byBiZSBncmVhdCBvbiB5b3VyIG93biEiLCJzOSI6IkRhbmllbCwgbXkgZmF2b3VyaXRlIG5lcGhldywgZmluYWxseSBmbHlpbmcgdGhlIG5lc3QsIEkgYW0gZ2VudWluZWx5IHRocmlsbGVkIGZvciB5b3UsIHNvIGxldCBtZSBwYXNzIG9uIGEgYml0IG9mIGhhcmQtd29uIHVuY2xlIHdpc2RvbSBiZWZvcmUgeW91IGdvLiBUaGUgYmlnIG9uZSBpcyBtb25leSwgYmVjYXVzZSBmcmVlZG9tIGFuZCBiaWxscyBhcnJpdmUgdG9nZXRoZXIuIFNpdCBkb3duIGFuZCBidWlsZCBhIHNpbXBsZSBtb250aGx5IGJ1ZGdldDogbGlzdCB5b3VyIHJlbnQsIHV0aWxpdGllcywgZ3JvY2VyaWVzLCB0cmFuc3BvcnQgYW5kIHBob25lLCBzdWJ0cmFjdCB0aGVtIGZyb20geW91ciBpbmNvbWUsIGFuZCB3aGF0ZXZlciBpcyBsZWZ0IGlzIHlvdXIgYWN0dWFsIHNwZW5kaW5nIG1vbmV5LCBub3QgeW91ciB3aG9sZSBwYXljaGVxdWUuIFRydXN0IG1lLCB0aGUgY2xhc3NpYyBmaXJzdC1tb250aCBtaXN0YWtlIGlzIHRyZWF0aW5nIHBheWRheSBsaWtlIGEgbG90dGVyeSB3aW4gYW5kIHN0YXJ2aW5nIGJ5IHRoZSAyNXRoLiBTZWNvbmQsIGxlYXJuIHRvIGNvb2ssIGV2ZW4ganVzdCBmaXZlIHJlbGlhYmxlIG1lYWxzLiBMaXZpbmcgb24gdGFrZW91dCB3aWxsIHF1aWV0bHkgZHJhaW4gYm90aCB5b3VyIHdhbGxldCBhbmQgeW91ciBoZWFsdGggd2l0aGluIGEgbW9udGg7IGEgcmljZSBjb29rZXIgYW5kIGEgZmV3IHJlY2lwZXMgd2lsbCBzYXZlIHlvdSB0aG91c2FuZHMgb3ZlciBhIHllYXIuIFRoaXJkLCBhdXRvbWF0ZSB5b3VyIGJpbGxzLiBTZXQgdXAgYXV0b21hdGljIHBheW1lbnRzIGZvciByZW50LCBlbGVjdHJpY2l0eSwgYW5kIGludGVybmV0IHNvIHlvdSBhcmUgbmV2ZXIgaGl0IHdpdGggbGF0ZSBmZWVzIGZvciBzaW1wbHkgZm9yZ2V0dGluZywgdGhhdCBpcyBtb25leSB0aHJvd24gYXdheSBmb3Igbm90aGluZy4gRm91cnRoLCBwcm90ZWN0IHlvdXJzZWxmIHdpdGggYSBzbWFsbCBlbWVyZ2VuY3kgZnVuZDsgZXZlbiBhIGZldyBodW5kcmVkIGRvbGxhcnMgc2V0IGFzaWRlIG1lYW5zIGEgYnJva2VuIGxhcHRvcCBvciBhIHN1cnByaXNlIGV4cGVuc2UgaXMgYW4gaW5jb252ZW5pZW5jZSwgbm90IGEgY3Jpc2lzLiBBbmQgZmlmdGgsIGJ1aWxkIGEgcmh5dGhtIGZvciB0aGUgYm9yaW5nIHN0dWZmLCBwaWNrIG9uZSBkYXkgYSB3ZWVrIGZvciBjbGVhbmluZyBhbmQgbGF1bmRyeSwgYW5kIHlvdXIgcGxhY2UgbmV2ZXIgc3BpcmFscyBpbnRvIGNoYW9zLiBPbmUgbGFzdCB0aGluZywgYW5kIEkgbWVhbiBpdDogYXNraW5nIGZvciBoZWxwIGlzIG5vdCBmYWlsaW5nLiBDYWxsIHlvdXIgbXVtLCBjYWxsIG1lLCBhc2sgYSBuZWlnaGJvdXIgaG93IHRoZSByZWN5Y2xpbmcgd29ya3MuIEV2ZXJ5b25lIHdhcyBhIGZpcnN0LXRpbWUgcmVudGVyIG9uY2UuIFlvdSBoYXZlIGdvdCBhIGdvb2QgaGVhZCBvbiB5b3VyIHNob3VsZGVycywgRGFuaWVsLCBzZXQgdXAgdGhlc2UgaGFiaXRzIGVhcmx5LCBhbmQgaW5kZXBlbmRlbmNlIHdpbGwgYmUgdGhlIGJlc3QgdGhpbmcgdGhhdCBldmVyIGhhcHBlbmVkIHRvIHlvdS4ifSx7ImsiOiJ0MiIsIm51bSI6MiwidHlwZUVuIjoiVGFsa2luZyBhYm91dCBhIFBlcnNvbmFsIEV4cGVyaWVuY2UiLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiVGFsayBhYm91dCBhIHRpbWUgd2hlbiB5b3Ugd29uIHNvbWV0aGluZy4gTWF5YmUgeW91IGNhbiB0YWxrIGFib3V0IGEgZ2FtZSB0aGF0IHlvdSBwbGF5ZWQgd2l0aCBmcmllbmRzLCBhbiBhd2FyZCBhdCBzY2hvb2wsIG9yIGEgY29udGVzdCB5b3UgZW50ZXJlZC4gV2hhdCBkaWQgeW91IHdpbiwgaG93IGRpZCB5b3Ugd2luLCBhbmQgaG93IGRpZCB5b3UgZmVlbCBhYm91dCBpdD8iLCJpbWciOm51bGwsInRpcHMiOnsiYnVsbGV0cyI6WyJBbnN3ZXIgZXZlcnkgcGFydCBvZiB0aGUgcXVlc3Rpb24gKHdoYXQgaGFwcGVuZWQgXHUyMDEzIGhvdyBpdCB1bmZvbGRlZCBcdTIwMTMgdGhlIG91dGNvbWUgLyB3aHkgaXQgaXMgbWVtb3JhYmxlKS4iLCJVc2UgcGFzdCB0ZW5zZXMgYW5kIHRlbGwgaXQgaW4gb3JkZXI6IFRoaXMgaGFwcGVuZWRcdTIwMjYgXHUyMTkyIFRoZW5cdTIwMjYgXHUyMTkyIEluIHRoZSBlbmRcdTIwMjYiLCJGaW5pc2ggd2l0aCBhIGZlZWxpbmcgb3IgYSBsZXNzb24gbGVhcm5lZC4iLCJBbnN3ZXIgdGhlIHRocmVlIHBhcnRzOiB3aGF0IHlvdSB3b24sIGhvdyB5b3Ugd29uIGl0LCBob3cgeW91IGZlbHQuIFRoZSBzYW1wbGVzIHVzZSB3aW5uaW5nIGEgc2Nob29sIHNwZWFraW5nIGNvbnRlc3QgLSBwaWNrIG9uZSBjb25jcmV0ZSB3aW4gYW5kIGVuZCB3aXRoIHdoYXQgaXQgY2hhbmdlZCBpbiB5b3UgKGNvbmZpZGVuY2UsIGEgbGVzc29uKS4iXSwicGhyYXNlcyI6WyJUaGlzIGhhcHBlbmVkIGFib3V0IHR3byB5ZWFycyBhZ29cdTIwMjYiLCJBdCBmaXJzdFx1MjAyNiwgYnV0IHRoZW5cdTIwMjYiLCJXaGF0IG1hZGUgaXQgdW5mb3JnZXR0YWJsZSB3YXNcdTIwMjYiLCJMb29raW5nIGJhY2ssIFx1MjAyNiJdfSwiczYiOiJJIHdhbnQgdG8gdGFsayBhYm91dCB0aGUgdGltZSBJIHdvbiBteSBzY2hvb2wncyBFbmdsaXNoIHNwZWFraW5nIGNvbnRlc3QsIGluIGdyYWRlIHRlbi4gVGhlIHByaXplIHdhcyBhIGdvbGQgdHJvcGh5IGFuZCBhIGNlcnRpZmljYXRlLCBhbmQgaG9uZXN0bHksIEkgbmV2ZXIgZXhwZWN0ZWQgdG8gd2luLiBMZXQgbWUgdGVsbCB5b3UgaG93IGl0IGhhcHBlbmVkLiBFdmVyeSBzdHVkZW50IGhhZCB0byBnaXZlIGEgdGhyZWUtbWludXRlIHNwZWVjaCBhYm91dCBhIHRvcGljIHRoZXkgY2FyZSBhYm91dC4gSSBjaG9zZSB0byB0YWxrIGFib3V0IHNhdmluZyB0aGUgc21hbGwgcml2ZXIgbmVhciBteSB0b3duLCBiZWNhdXNlIGl0IHdhcyBmdWxsIG9mIGdhcmJhZ2UgYW5kIG5vYm9keSB3YXMgZG9pbmcgYW55dGhpbmcuIEZpcnN0LCBJIHdyb3RlIG15IHNwZWVjaCBtYW55IHRpbWVzLCB1bnRpbCBldmVyeSBzZW50ZW5jZSBmZWx0IHN0cm9uZy4gVGhlbiBJIHByYWN0aXNlZCwgaW4gZnJvbnQgb2YgdGhlIG1pcnJvciwgaW4gZnJvbnQgb2YgbXkgZmFtaWx5LCBldmVuIGluIGZyb250IG9mIG15IGRvZyEgSSB3YXMgc28gbmVydm91cywgYmVjYXVzZSBJIHdhcyBhZnJhaWQgdG8gc3BlYWsgaW4gZnJvbnQgb2YgcGVvcGxlLiBPbiB0aGUgZGF5IG9mIHRoZSBjb250ZXN0LCBteSBoYW5kcyB3ZXJlIHNoYWtpbmcgYW5kIG15IGhlYXJ0IHdhcyBmYXN0LiBCdXQgd2hlbiBJIHN0YXJ0ZWQgdGFsa2luZyBhYm91dCB0aGUgcml2ZXIsIEkgZm9yZ290IG15IGZlYXIsIGJlY2F1c2UgSSByZWFsbHkgYmVsaWV2ZWQgaW4gbXkgd29yZHMuIFdoZW4gdGhlIHRlYWNoZXIgc2FpZCBteSBuYW1lIGFzIHRoZSB3aW5uZXIsIEkgd2FzIGluIHNob2NrLiBJIGZlbHQgc28gcHJvdWQgYW5kIHNvIGhhcHB5LiBUaGF0IHRyb3BoeSBjaGFuZ2VkIHNvbWV0aGluZyBpbiBtZSwgYWZ0ZXIgdGhhdCBkYXksIEkgd2FzIG5ldmVyIHNvIGFmcmFpZCB0byBzcGVhayBpbiBmcm9udCBvZiBhIGNyb3dkIGFnYWluLiIsInM5IjoiVGhlIHdpbiBJIGFtIHByb3VkZXN0IG9mIGlzIGEgc21hbGwgb25lIG9uIHBhcGVyOiBmaXJzdCBwbGFjZSBpbiBteSBoaWdoIHNjaG9vbCdzIEVuZ2xpc2ggc3BlYWtpbmcgY29udGVzdCBpbiBncmFkZSB0ZW4uIFRoZSBwcml6ZSB3YXMgYSBtb2Rlc3QgZ29sZCB0cm9waHkgYW5kIGEgY2VydGlmaWNhdGUsIGJ1dCB3aGF0IGl0IGRpZCBmb3IgbWUgd2FzIGZhciBiaWdnZXIgdGhhbiB0aGUgdHJvcGh5IHN1Z2dlc3RzLiBIZXJlIGlzIGhvdyBpdCBoYXBwZW5lZC4gRXZlcnkgc3R1ZGVudCBoYWQgdG8gZGVsaXZlciBhIHRocmVlLW1pbnV0ZSBzcGVlY2ggb24gc29tZXRoaW5nIHRoZXkgZ2VudWluZWx5IGNhcmVkIGFib3V0LiBJIGNob3NlIHRoZSBsaXR0bGUgcml2ZXIgdGhhdCBydW5zIHBhc3QgbXkgaG9tZXRvd24sIHdoaWNoIGhhZCBxdWlldGx5IGJlY29tZSBhIGR1bXBpbmcgZ3JvdW5kIHdoaWxlIGV2ZXJ5b25lIGxvb2tlZCB0aGUgb3RoZXIgd2F5LiBUaGF0IGNob2ljZSBtYXR0ZXJlZCwgYmVjYXVzZSBJIHdhcyBub3QgcGVyZm9ybWluZyBhIHRvcGljLCBJIHdhcyBhcmd1aW5nIGZvciBzb21ldGhpbmcgcmVhbC4gVGhlbiBjYW1lIHRoZSB1bmdsYW1vcm91cyBwYXJ0OiBJIHJld3JvdGUgdGhhdCBzcGVlY2ggYSBkb3plbiB0aW1lcywgc2hhcnBlbmluZyBldmVyeSBsaW5lLCBhbmQgcmVoZWFyc2VkIGl0IG9ic2Vzc2l2ZWx5LCB0byB0aGUgbWlycm9yLCB0byBteSBsb25nLXN1ZmZlcmluZyBmYW1pbHksIGV2ZW4gdG8gdGhlIGZhbWlseSBkb2csIHdobyB3YXMgYSBzdXJwcmlzaW5nbHkgcGF0aWVudCBhdWRpZW5jZS4gVGhlIGNhdGNoIHdhcyB0aGF0IEkgd2FzIHRlcnJpZmllZCBvZiBwdWJsaWMgc3BlYWtpbmc7IHRoZSB0aG91Z2h0IG9mIGFsbCB0aG9zZSBleWVzIG1hZGUgbWUgcGh5c2ljYWxseSBpbGwuIE9uIHRoZSBkYXksIEkgd2Fsa2VkIHVwIHdpdGggc2hha2luZyBoYW5kcyBhbmQgYSBoYW1tZXJpbmcgaGVhcnQsIGJ1dCB0aGUgbW9tZW50IEkgc3RhcnRlZCBkZXNjcmliaW5nIHRoYXQgcG9sbHV0ZWQgcml2ZXIsIHRoZSBmZWFyIHNpbXBseSBldmFwb3JhdGVkLCBiZWNhdXNlIEkgbWVhbnQgZXZlcnkgd29yZC4gV2hlbiB0aGUgdGVhY2hlciBhbm5vdW5jZWQgbXkgbmFtZSBhcyB0aGUgd2lubmVyLCBJIGhvbmVzdGx5IGZyb3plIGluIGRpc2JlbGllZiBiZWZvcmUgdGhlIGdyaW4gdG9vayBvdmVyLiBUaGUgcHJpZGUgd2FzIGVub3Jtb3VzLCBidXQgdGhlIHJlYWwgcHJpemUgd2FzIHRoZSBsZXNzb246IGNvbnZpY3Rpb24gYmVhdHMgbmVydmVzLiBBZnRlciB0aGF0IGFmdGVybm9vbiwgc3RhbmRpbmcgdXAgdG8gc3BlYWsgbmV2ZXIgZnJpZ2h0ZW5lZCBtZSB0aGUgc2FtZSB3YXkgYWdhaW4sIGFuZCB0aGF0IHNpbmdsZSBzaGlmdCBoYXMgaGVscGVkIG1lIGluIGludGVydmlld3MsIGF0IHdvcmssIGFuZCBldmVyeXdoZXJlIGxpZmUgaGFzIHNpbmNlIGFza2VkIG1lIHRvIGZpbmQgbXkgdm9pY2UuIn0seyJrIjoidDMiLCJudW0iOjMsInR5cGVFbiI6IkRlc2NyaWJpbmcgYSBTY2VuZSIsInByZXAiOjMwLCJyZWMiOjYwLCJwcm9tcHQiOiJEZXNjcmliZSBzb21lIHRoaW5ncyB0aGF0IGFyZSBoYXBwZW5pbmcgaW4gdGhlIHBpY3R1cmUgYmVsb3cgYXMgd2VsbCBhcyB5b3UgY2FuLiBUaGUgcGVyc29uIHdpdGggd2hvbSB5b3UgYXJlIHNwZWFraW5nIGNhbm5vdCBzZWUgdGhlIHBpY3R1cmUuIiwiaW1nIjoic2NlbmUiLCJ0aXBzIjp7ImJ1bGxldHMiOlsiRmlyc3Qgc2VudGVuY2U6IGdpdmUgdGhlIG92ZXJ2aWV3ICh3aGVyZSBpdCBpcywgd2hhdCB0aGUgYXRtb3NwaGVyZSBpcyBsaWtlKS4iLCJEZXNjcmliZSA0XHUyMDEzNiBkZXRhaWxzIGJ5IGxvY2F0aW9uOiBpbiB0aGUgZm9yZWdyb3VuZCAvIG9uIHRoZSBsZWZ0IC8gYXQgdGhlIGJhY2tcdTIwMjY7IHVzZSB0aGUgcHJlc2VudCBjb250aW51b3VzLiIsIlRoZSBsaXN0ZW5lciBDQU5OT1Qgc2VlIHRoZSBwaWN0dXJlIFx1MjAxNCBiZSBzcGVjaWZpYzsgd2hlbiB1bnN1cmUsIHVzZSBzZWVtcyAvIGFwcGVhcnMgLyBsb29rcyBsaWtlLiIsIkEgYnVzeSBmYXJtIG9uIGEgc3VubnkgZGF5OiBnbyBpbiBvcmRlciAtIHRoZSBiaWcgcmVkIGJhcm4gd2l0aCB0aGUgZ3JleSByb29mIGFuZCB0aGUgdGFsbCBzaWx2ZXIgc2lsbyBvbiB0aGUgbGVmdCAtPiB0aGUgcmVkIHRyYWN0b3IgdG93aW5nIGEgd2Fnb24gcGlsZWQgd2l0aCB5ZWxsb3cgaGF5IGJhbGVzLCBhIHdvcmtlciBpbiBibHVlIHN0YWNraW5nIHRoZW0gLT4gdGhlIHdvb2RlbiBwZW5zIHdpdGggdHdvIHBpbmsgcGlncyBhbmQgdHdvIGtpZHMgbGVhbmluZyBvbiB0aGUgZmVuY2UgLT4gYSBwZXJzb24gaW4gYW4gb3JhbmdlIGNoZWNrZXJlZCBzaGlydCBicnVzaGluZyBhIGJyb3duIGhvcnNlIG9uIHRoZSByaWdodCAtPiBzb21lb25lIGluIHB1cnBsZSB0ZW5kaW5nIHdoaXRlIHNoZWVwIGluIHRoZSBmcm9udCBwZW4gLT4gYSB3b21hbiBpbiByZWQgZmVlZGluZyBvcmFuZ2UgY2hpY2tlbnMgYnkgYSB0b21hdG8gZ2FyZGVuIG9uIHRoZSBmYXIgbGVmdC4iXSwicGhyYXNlcyI6WyJJbiB0aGUgZm9yZWdyb3VuZCwgXHUyMDI2IiwiT24gdGhlIHJpZ2h0LWhhbmQgc2lkZSwgXHUyMDI2IiwiSXQgbG9va3MgbGlrZVx1MjAyNiIsIlRoZSB3aG9sZSBwbGFjZSBmZWVsc1x1MjAyNiJdfSwiczYiOiJUaGlzIHBpY3R1cmUgc2hvd3MgYSBiaWcsIGJ1c3kgZmFybSBvbiBhIHN1bm55IGRheS4gSW4gdGhlIHRvcC1sZWZ0IGNvcm5lciwgdGhlcmUgaXMgYSBsYXJnZSByZWQgYmFybiB3aXRoIGEgZ3JleSByb29mLCBhbmQgbmV4dCB0byBpdCBhIHRhbGwgc2lsdmVyIHNpbG8sIHdoZXJlIHRoZXkga2VlcCB0aGUgZ3JhaW4uIFRoZSBza3kgaXMgYmx1ZSB3aXRoIGEgZmV3IHdoaXRlIGNsb3VkcywgYW5kIHNvbWUgYmlyZHMgYXJlIGZseWluZy4gQmVoaW5kIHRoZSBmYXJtLCBJIGNhbiBzZWUgZ3JlZW4gZmllbGRzIGFuZCB5ZWxsb3cgZmllbGRzIGdvaW5nIGZhciBhd2F5LCB3aXRoIGEgc21hbGwgaG91c2UgaW4gdGhlIGRpc3RhbmNlLiBJbiB0aGUgbWlkZGxlLCBhIHJlZCB0cmFjdG9yIGlzIHB1bGxpbmcgYSB3YWdvbiBmdWxsIG9mIHllbGxvdyBoYXkgYmFsZXMsIGFuZCBhIG1hbiBpbiBhIGJsdWUgc2hpcnQgaXMgc3RhbmRpbmcgb24gdG9wLCBzdGFja2luZyB0aGVtLiBUaGVyZSBhcmUgd29vZGVuIGZlbmNlcyBtYWtpbmcgYW5pbWFsIHBlbnMuIEluc2lkZSBvbmUgcGVuLCB0aGVyZSBhcmUgdHdvIHBpbmsgcGlncywgYW5kIHR3byBjaGlsZHJlbiBhcmUgbGVhbmluZyBvbiB0aGUgZmVuY2UgYW5kIGxvb2tpbmcgYXQgdGhlbSwgb25lIGNoaWxkIGluIG9yYW5nZSBhbmQgb25lIGluIGJsdWUuIE9uIHRoZSByaWdodCwgYSBwZXJzb24gaW4gYW4gb3JhbmdlIGNoZWNrZXJlZCBzaGlydCBpcyBicnVzaGluZyBhIGJpZyBicm93biBob3JzZS4gSW4gdGhlIGZyb250LCBzb21lb25lIGluIGEgcHVycGxlIHNoaXJ0IGlzIHRha2luZyBjYXJlIG9mIHdoaXRlIHNoZWVwLCBJIGNvdW50IHRocmVlIG9yIGZvdXIgZmx1ZmZ5IHNoZWVwLiBBbmQgb24gdGhlIGxlZnQsIG5lYXIgYSBnYXJkZW4gd2l0aCByZWQgdG9tYXRvZXMsIGEgd29tYW4gaW4gYSByZWQgc2hpcnQgaXMgZmVlZGluZyBzb21lIG9yYW5nZSBhbmQgeWVsbG93IGNoaWNrZW5zLiBFdmVyeWJvZHkgb24gdGhlIGZhcm0gaXMgYnVzeSB3aXRoIHRoZSBhbmltYWxzIGFuZCB0aGUgd29yay4iLCJzOSI6IlRoaXMgaXMgYSB3b25kZXJmdWxseSBidXN5IGZhcm0gc2NlbmUgb24gYSBicmlnaHQsIGNsb3VkLWRvdHRlZCBkYXksIHRoZXJlIGlzIGFjdGl2aXR5IGluIGV2ZXJ5IGNvcm5lci4gQW5jaG9yaW5nIHRoZSB0b3AtbGVmdCBpcyBhIGNsYXNzaWMgYmlnIHJlZCBiYXJuIHdpdGggYSBncmV5IHBpdGNoZWQgcm9vZiwgYW5kIHJpZ2h0IGJlc2lkZSBpdCBzdGFuZHMgYSB0YWxsIHNpbHZlciBncmFpbiBzaWxvLiBCZXlvbmQgdGhlIGZlbmNlcywgdGhlIGxhbmQgcm9sbHMgYXdheSBpbiBwYXRjaGVzIG9mIGdyZWVuIHBhc3R1cmUgYW5kIGdvbGRlbiBoYXkgZmllbGRzLCB3aXRoIGEgc21hbGwgZmFybWhvdXNlIHR1Y2tlZCBpbnRvIHRoZSBkaXN0YW5jZSBhbmQgYSBmZXcgYmlyZHMgY3Jvc3NpbmcgdGhlIGJsdWUgc2t5LiBJbiB0aGUgbWlkZGxlIGdyb3VuZCwgYSByZWQgdHJhY3RvciBpcyBoYXVsaW5nIGEgd2Fnb24gc3RhY2tlZCBoaWdoIHdpdGggeWVsbG93IGhheSBiYWxlcywgYW5kIGEgd29ya2VyIGluIGEgYmx1ZSBzaGlydCBiYWxhbmNlcyBvbiB0b3AsIGhlYXZpbmcgdGhlbSBpbnRvIHBsYWNlLiBUaGUgZm9yZWdyb3VuZCBpcyBvcmdhbml6ZWQgaW50byB3b29kZW4gcGVucywgZWFjaCB3aXRoIGl0cyBvd24gbGl0dGxlIGRyYW1hLiBJbiBvbmUsIHR3byBwbHVtcCBwaW5rIHBpZ3Mgc251ZmZsZSBhYm91dCB3aGlsZSB0d28ga2lkcywgb25lIGluIG9yYW5nZSwgb25lIGluIGJsdWUsIGxlYW4gb3ZlciB0aGUgcmFpbCB0byB3YXRjaCB0aGVtLiBPdmVyIG9uIHRoZSByaWdodCwgYSBwZXJzb24gaW4gYW4gb3JhbmdlIGNoZWNrZXJlZCBzaGlydCBhbmQgamVhbnMgaXMgZ3Jvb21pbmcgYSBsYXJnZSBicm93biBob3JzZSwgYnJ1c2ggaW4gaGFuZC4gRnJvbnQgYW5kIGNlbnRyZSwgc29tZW9uZSBpbiBhIHB1cnBsZSB0b3AgY3JvdWNoZXMgYW1vbmcgYSBzbWFsbCBmbG9jayBvZiBmbHVmZnkgd2hpdGUgc2hlZXAsIG9uZSBvZiB0aGVtIHdpdGggYSBkYXJrZXIgZmFjZSwgYXBwYXJlbnRseSB0ZW5kaW5nIG9yIHNoZWFyaW5nIHRoZW0uIEFuZCBvbiB0aGUgZmFyIGxlZnQsIHRoZSBzY2VuZSByb3VuZHMgb3V0IHdpdGggYSB3b21hbiBpbiBhIHJlZCBzaGlydCBzY2F0dGVyaW5nIGZlZWQgZm9yIGEgY2x1c3RlciBvZiBvcmFuZ2UgYW5kIHllbGxvdyBoZW5zLCByaWdodCBiZXNpZGUgYSB2ZWdldGFibGUgZ2FyZGVuIHdoZXJlIHJpcGUgcmVkIHRvbWF0b2VzIGNsaW1iIHRoZWlyIHN0YWtlcyBhbmQgYSBtYW4gaW4gYSBzdHJpcGVkIHNoaXJ0IHdvcmtzIHRoZSByb3dzLiBUaGUgd2hvbGUgcGljdHVyZSBodW1zIHdpdGggdGhlIGNoZWVyZnVsLCB1bmVuZGluZyBjaG9yZW9ncmFwaHkgb2YgZmFybSBsaWZlLiJ9LHsiayI6InQ0IiwibnVtIjo0LCJ0eXBlRW4iOiJNYWtpbmcgUHJlZGljdGlvbnMiLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiSW4gdGhpcyBwaWN0dXJlLCB3aGF0IGRvIHlvdSB0aGluayB3aWxsIG1vc3QgcHJvYmFibHkgaGFwcGVuIG5leHQ\/IiwiaW1nIjoic2NlbmUiLCJ0aXBzIjp7ImJ1bGxldHMiOlsiRWFjaCBwcmVkaWN0aW9uID0gd2lsbCAvIGJlIGdvaW5nIHRvIC8gd2lsbCBwcm9iYWJseSArIGEgUkVBU09OIGJhc2VkIG9uIGEgZGV0YWlsIGluIHRoZSBwaWN0dXJlLiIsIk1ha2UgM1x1MjAxMzQgcHJlZGljdGlvbnMgYWJvdXQgZGlmZmVyZW50IHBlb3BsZSBcdTIwMTQgZG9uJ3Qgc3RvcCBhdCBvbmUgaWRlYS4iLCJGaW5pc2ggd2l0aCBvbmUgb3ZlcmFsbCBwcmVkaWN0aW9uIGZvciB0aGUgd2hvbGUgc2NlbmUuIiwiU2FtZSBmYXJtIGFzIFRhc2sgMyAtIG5vdyBwcmVkaWN0OiB0aGUgd29ya2VyIG9uIHRoZSB3YWdvbiB3aWxsIGZpbmlzaCBzdGFja2luZyB0aGUgaGF5IGFuZCB0aGUgdHJhY3RvciB3aWxsIGhhdWwgaXQgaW50byB0aGUgYmFybjsgdGhlIHR3byBraWRzIHdpbGwgYmVnIHRvIGZlZWQgb3IgcGV0IHRoZSBwaWdzOyB0aGUgaG9yc2UsIG9uY2UgYnJ1c2hlZCwgd2lsbCBiZSBzYWRkbGVkIGFuZCB0YWtlbiBmb3IgYSByaWRlOyB0aGUgc2hlZXAgd2lsbCBiZSBzaGVhcmVkIGFuZCBsZXQgb3V0IHRvIGdyYXplOyB0aGUgaGVucyB3aWxsIGNyb3dkIGFyb3VuZCB0aGUgd29tYW4gd2l0aCB0aGUgZmVlZCBidWNrZXQ7IGFuZCBieSBldmVuaW5nIGV2ZXJ5IGFuaW1hbCB3aWxsIGJlIGZlZCBhbmQgdGhlIGhhcnZlc3Qgc3RvcmVkIGF3YXkuIl0sInBocmFzZXMiOlsiXHUyMDI2aXMgYWJvdXQgdG9cdTIwMjYiLCJIZSdsbCBtb3N0IGxpa2VseVx1MjAyNiIsIkp1ZGdpbmcgYnlcdTIwMjYsIEkgZXhwZWN0XHUyMDI2IiwiV2l0aGluIG1pbnV0ZXMsIFx1MjAyNiJdfSwiczYiOiJJIHRoaW5rIHRoZSBuZXh0IHBhcnQgb2YgdGhpcyBmYXJtIGRheSB3aWxsIGJlIGZ1bGwgb2Ygd29yayBhbmQgZnVuLiBGaXJzdCwgdGhlIG1hbiBvbiB0b3Agb2YgdGhlIHdhZ29uIHdpbGwgZmluaXNoIHN0YWNraW5nIGFsbCB0aGUgaGF5IGJhbGVzLCBhbmQgdGhlbiB0aGUgcmVkIHRyYWN0b3Igd2lsbCBzbG93bHkgcHVsbCB0aGVtIGludG8gdGhlIGJpZyBiYXJuIHRvIGtlZXAgdGhlbSBkcnkuIFNlY29uZCwgdGhlIHR3byBjaGlsZHJlbiBhdCB0aGUgcGlnIHBlbiBsb29rIHZlcnkgZXhjaXRlZCwgc28gSSBwcmVkaWN0IHRoZXkgd2lsbCBhc2sgdGhlIGZhcm1lciBpZiB0aGV5IGNhbiBmZWVkIHRoZSBwaWdzLCBvciBtYXliZSBob2xkIGEgYmFieSBwaWcsIGFuZCB0aGV5IHdpbGwgbGF1Z2ggYSBsb3QuIFRoaXJkLCB0aGUgcGVyc29uIGJydXNoaW5nIHRoZSBicm93biBob3JzZSB3aWxsIGZpbmlzaCBzb29uLCBhbmQgSSB0aGluayB0aGV5IHdpbGwgcHV0IGEgc2FkZGxlIG9uIGl0IGFuZCB0YWtlIGl0IGZvciBhIHJpZGUgYXJvdW5kIHRoZSBmaWVsZCwgYmVjYXVzZSB0aGUgaG9yc2UgbG9va3MgY2xlYW4gYW5kIHJlYWR5LiBGb3VydGgsIHRoZSB3aGl0ZSBzaGVlcCB3aWxsIGdldCB0aGVpciBoYWlyY3V0LCB0aGUgcGVyc29uIGluIHB1cnBsZSBpcyB0YWtpbmcgY2FyZSBvZiB0aGVtLCBhbmQgYWZ0ZXIgdGhhdCwgdGhlIHNoZWVwIHdpbGwgcnVuIGJhY2sgdG8gdGhlIGdyYXNzIHRvIGVhdC4gVGhlIHdvbWFuIHdpdGggdGhlIGJ1Y2tldCB3aWxsIHRocm93IG1vcmUgZm9vZCwgYW5kIGFsbCB0aGUgb3JhbmdlIGNoaWNrZW5zIHdpbGwgcnVuIHRvIGhlciBmYXN0LiBBbmQgYXQgdGhlIGVuZCBvZiB0aGUgZGF5LCB3aGVuIGV2ZXJ5IGFuaW1hbCBpcyBmZWQgYW5kIGFsbCB0aGUgaGF5IGlzIGluc2lkZSwgSSB0aGluayB0aGUgd2hvbGUgZmFtaWx5IHdpbGwgZ28gaW50byB0aGUgaG91c2UgZm9yIGEgYmlnIGRpbm5lciwgdGlyZWQgYnV0IGhhcHB5LiIsInM5IjoiRXZlcnkgY29ybmVyIG9mIHRoaXMgZmFybSBpcyBtaWQtdGFzaywgc28gdGhlIG5leHQgaG91ciBwcmFjdGljYWxseSBwcmVkaWN0cyBpdHNlbGYuIFRoZSB3b3JrZXIgYmFsYW5jZWQgb24gdGhlIGhheSB3YWdvbiB3aWxsIGhlYXZlIHRoZSBsYXN0IGJhbGVzIGludG8gcGxhY2UsIGFuZCB0aGVuIHRoYXQgcmVkIHRyYWN0b3Igd2lsbCB0cnVuZGxlIGl0cyBsb2FkIGludG8gdGhlIGJpZyByZWQgYmFybiB0byBrZWVwIHRoZSB3aW50ZXIgZmVlZCBkcnkuIFRoZSB0d28ga2lkcyBkcmFwZWQgb3ZlciB0aGUgcGlnLXBlbiBmZW5jZSBhcmUgY2xlYXJseSBhbmdsaW5nIGZvciBzb21ldGhpbmcsIG15IGJldCBpcyB0aGV5IHdpbGwgcGVzdGVyIHRoZSBmYXJtZXIgdW50aWwgdGhleSBhcmUgYWxsb3dlZCB0byB0aXAgYSBidWNrZXQgb2YgZmVlZCB0byB0aGUgcGlncywgb3IgYmV0dGVyIHlldCwgY3JhZGxlIGEgc3F1aXJtaW5nIHBpZ2xldCB3aGlsZSBzaHJpZWtpbmcgd2l0aCBkZWxpZ2h0LiBUaGUgYnJvd24gaG9yc2UsIG5lYXJseSBkb25lIGJlaW5nIGdyb29tZWQsIGxvb2tzIHByaW1lZCBmb3IgYWN0aW9uOiBvbmNlIHRoYXQgb3JhbmdlLXNoaXJ0ZWQgcmlkZXIgZmluaXNoZXMgYnJ1c2hpbmcsIEkgd291bGQgZXhwZWN0IGEgc2FkZGxlIHRvIGdvIG9uIGFuZCB0aGUgdHdvIG9mIHRoZW0gdG8gaGVhZCBvZmYgZm9yIGEgcmlkZSBhcm91bmQgdGhlIHBhc3R1cmUuIFRoZSBzbWFsbCBmbG9jayBvZiBzaGVlcCBpcyBuZXh0IGluIGxpbmUgZm9yIGEgdHJpbSwgdGhlIHBlcnNvbiBpbiBwdXJwbGUgaXMgd29ya2luZyB0aHJvdWdoIHRoZW0sIGFuZCBvbmNlIHNob3JuLCB0aGV5IHdpbGwgdHJvdCBiYWNrIG91dCB0byBncmF6ZSBsb29raW5nIGEgZmV3IHBvdW5kcyBsaWdodGVyLiBNZWFud2hpbGUsIHRoZSB3b21hbiB3aXRoIHRoZSBmZWVkIGJ1Y2tldCB3aWxsIGZsaW5nIGFub3RoZXIgc2Nvb3AgYW5kIGJlIGluc3RhbnRseSBtb2JiZWQgYnkgdGhhdCBnYW5nIG9mIG9yYW5nZSBoZW5zLCBhbmQgdGhlIHRvbWF0b2VzIHJpcGVuaW5nIG9uIHRoZSBsZWZ0IHdpbGwgc29vbiBiZSBwaWNrZWQgZm9yIHNvbWVvbmUncyBkaW5uZXIuIFpvb20gb3V0LCBhbmQgdGhlIG92ZXJhbGwgdHJhamVjdG9yeSBpcyBvYnZpb3VzOiBieSBkdXNrLCBldmVyeSBhbmltYWwgd2lsbCBiZSBmZWQgYW5kIHNldHRsZWQsIHRoZSBoYXkgd2lsbCBiZSBzYWZlbHkgc3RvcmVkLCB0aGUgZ2FyZGVuIGJhc2tldCB3aWxsIGJlIGZ1bGwsIGFuZCB0aGUgd2hvbGUgZmFtaWx5IHdpbGwgcGlsZSBpbnRvIHRoYXQgZmFybWhvdXNlIGZvciBhIHdlbGwtZWFybmVkIG1lYWwsIHBsZWFzYW50bHkgZXhoYXVzdGVkLCB0aGUgd2F5IGEgZ29vZCBkYXkgb24gYSBmYXJtIGFsd2F5cyBlbmRzLiJ9LHsiayI6InQ1IiwibnVtIjo1LCJ0eXBlRW4iOiJDb21wYXJpbmcgYW5kIFBlcnN1YWRpbmciLCJwaGFzZWQiOnRydWUsImNob29zZSI6eyJwcmVwIjo2MCwic2l0dWF0aW9uIjoiWW91IGFyZSBnb2luZyBvbiBhIGNhbXBpbmcgdHJpcCB3aXRoIHlvdXIgZmFtaWx5IGFuZCBuZWVkIHRvIHB1cmNoYXNlIGEgdGVudC4gWW91IGZvdW5kIHR3byBzdWl0YWJsZSBvcHRpb25zLiBVc2luZyB0aGUgcGljdHVyZXMgYW5kIGluZm9ybWF0aW9uIGJlbG93LCBjaG9vc2UgdGhlIG9wdGlvbiB0aGF0IHlvdSBwcmVmZXIuIEluIHRoZSBuZXh0IHNlY3Rpb24sIHlvdSB3aWxsIG5lZWQgdG8gcGVyc3VhZGUgYSBmYW1pbHkgbWVtYmVyIHRoYXQgeW91ciBjaG9pY2UgaXMgdGhlIGJldHRlciBjaG9pY2UuIiwibm90ZSI6IklmIHlvdSBkbyBub3QgY2hvb3NlIGFuIG9wdGlvbiwgdGhlIGNvbXB1dGVyIHdpbGwgY2hvb3NlIG9uZSBmb3IgeW91LiBZb3UgZG8gbm90IG5lZWQgdG8gc3BlYWsgZm9yIHRoaXMgcGFydC4iLCJvcHRpb25zIjpbeyJ0aXRsZSI6Ik1vdW50YWluIEV4cGxvcmVyIFJlZCBUZW50IiwiaW1nIjoib3B0QSIsImJ1bGxldHMiOlsiJDI1MCIsInN0cm9uZyBmYWJyaWMgdG8gcHJvdGVjdCB5b3UgZnJvbSB0aGUgd2VhdGhlciIsImlkZWFsIGZvciB3aWxkZXJuZXNzIGNhbXBpbmcgeWVhciByb3VuZCIsInNsZWVwcyBmb3VyIHBlb3BsZSJdfSx7InRpdGxlIjoiU3VucmlzZSBCbHVlIFRlbnQiLCJpbWciOiJvcHRCIiwiYnVsbGV0cyI6WyIkMzUwIiwibWVzaCByb29mIGxldHMgeW91IHNlZSB0aGUgc3RhcnMgZnJvbSB5b3VyIHNsZWVwaW5nIGJhZyIsImlkZWFsIGZvciBzdW1tZXIgY2FtcGluZyIsInNsZWVwcyBzaXggcGVvcGxlIl19XX0sInNwZWFrIjp7InByZXAiOjYwLCJyZWMiOjYwLCJwcm9tcHQiOiJBIGZhbWlseSBtZW1iZXIgaXMgc3VnZ2VzdGluZyBhIGRpZmZlcmVudCB0ZW50IChzaG93biBiZWxvdykuIFBlcnN1YWRlIHlvdXIgZmFtaWx5IG1lbWJlciB0aGF0IHRoZSBvcHRpb24geW91IGNob3NlIGlzIHRoZSBiZXR0ZXIgY2hvaWNlIGJ5IGNvbXBhcmluZyB0aGUgdHdvLiIsIm90aGVyTGFiZWwiOiJZb3VyIEZhbWlseSBNZW1iZXIncyBDaG9pY2UiLCJvdGhlciI6eyJ0aXRsZSI6IkNsYXNzaWMgMTk1MHMgVGVudCIsImltZyI6Im9wdE90aGVyIiwiYnVsbGV0cyI6WyIkNDAwIiwibWFkZSBmcm9tIGhlYXZ5LCBzbWVsbHkgY2FudmFzIiwiaG90IGluIHN1bW1lciBhbmQgY29sZCBpbiB3aW50ZXIiLCJzbGVlcHMgdXAgdG8gdGVuIHBlb3BsZSJdfX0sInRpcHMiOnsiYnVsbGV0cyI6WyJTdHJ1Y3R1cmU6IGFja25vd2xlZGdlIHRoZSBvdGhlciBwZXJzb24ncyBjaG9pY2UgXHUyMTkyIGdpdmUgMlx1MjAxMzMgYWR2YW50YWdlcyBvZiB5b3VycyAoZGlyZWN0IGNvbXBhcmlzb24pIFx1MjE5MiB3cmFwIHVwLiIsIkNvbXBhcmUgdXNpbmcgdGhlIG51bWJlcnMgb24gdGhlIGNhcmRzOiBwcmljZSwgZHVyYXRpb24sIGNhcGFjaXR5LCBleHBlcmllbmNlLiIsIllvdSBkbyBOT1QgbmVlZCB0byBzcGVhayBkdXJpbmcgdGhlIGNob29zaW5nIHN0ZXAgXHUyMDE0IGp1c3QgY2xpY2sgYW4gb3B0aW9uLiIsIlRoZSBzYW1wbGVzIGNob29zZSB0aGUgU3VucmlzZSBCbHVlIFRlbnQgKCQzNTAsIHNsZWVwcyBzaXgsIG1lc2ggcm9vZiBmb3Igc3RhcmdhemluZywgaWRlYWwgZm9yIHN1bW1lcikuIEZvciBhIGZhbWlseSB0cmlwIGl0IGZpdHMgZXZlcnlvbmUgd2l0aCByb29tIHRvIHNwYXJlLCBhbmQgdGhlIHNlZS10aHJvdWdoIHJvb2YgaXMgYSBtZW1vcmFibGUgdHJlYXQuIFRoZSBNb3VudGFpbiBFeHBsb3JlciBSZWQgVGVudCAoJDI1MCkgaXMgY2hlYXBlciBhbmQgd2VhdGhlcnByb29mIHllYXItcm91bmQgYnV0IG9ubHkgc2xlZXBzIGZvdXIgLSB0aWdodCBmb3IgYSBmYW1pbHkuIFRoZSBmYW1pbHkgbWVtYmVyJ3MgQ2xhc3NpYyAxOTUwcyBUZW50IGlzICQ0MDAsIGhlYXZ5LCBzbWVsbHkgY2FudmFzIHRoYXQgaXMgaG90IGluIHN1bW1lciBhbmQgY29sZCBpbiB3aW50ZXIsIGFuZCBpdHMgb25seSBwbHVzIGlzIHNsZWVwaW5nIHRlbi4gSWYgeW91IHByZWZlciB0aGUgcmVkIHRlbnQsIHN0cmVzcyB0aGUgbG93ZXIgcHJpY2UgYW5kIGFsbC13ZWF0aGVyIGR1cmFiaWxpdHkuIl0sInBocmFzZXMiOlsiSSBzZWUgd2h5IHlvdSBsaWtlXHUyMDI2LCBidXRcdTIwMjYiLCJDb21wYXJlZCB0b1x1MjAyNiwgdGhpcyBvbmVcdTIwMjYiLCJJdCdzIGJldHRlciB2YWx1ZTogXHUyMDI2IHZlcnN1cyBcdTIwMjYiLCJJZiB0aGUgZ29hbCBpc1x1MjAyNiwgdGhlIGNob2ljZSBpcyBjbGVhci4iXX0sInM2IjoiRGFkLCBJIGtub3cgR3JhbmRwYSdzIG9sZC1zdHlsZSB0ZW50IGhhcyBtZW1vcmllcywgYnV0IHBsZWFzZSBsb29rIGF0IHRoZSB0aHJlZSBjYXJkcyB3aXRoIG1lIGJlZm9yZSB3ZSBkZWNpZGUuIFlvdXIgY2hvaWNlLCB0aGUgQ2xhc3NpYyAxOTUwcyBUZW50LCBjb3N0cyAkNDAwLCB0aGUgbW9zdCBleHBlbnNpdmUgb2YgYWxsLiBBbmQgd2hhdCBkbyB3ZSBnZXQgZm9yIHRoYXQgbW9uZXk\/IEl0IGlzIG1hZGUgZnJvbSBoZWF2eSwgc21lbGx5IGNhbnZhcywgaXQgaXMgaG90IGluIHN1bW1lciBhbmQgY29sZCBpbiB3aW50ZXIsIGFuZCBpdCBpcyB2ZXJ5IGhlYXZ5IHRvIGNhcnJ5LiBZZXMsIGl0IHNsZWVwcyB0ZW4gcGVvcGxlLCBidXQgdGhlcmUgYXJlIG9ubHkgZml2ZSBvZiB1cyEgV2UgZG8gbm90IG5lZWQgYSB0ZW50IGZvciB0ZW4uIFRoYXQgaXMgd2h5IEkgY2hvc2UgdGhlIFN1bnJpc2UgQmx1ZSBUZW50LiBGaXJzdCwgaXQgc2xlZXBzIHNpeCwgc28gYWxsIG9mIHVzIGZpdCBjb21mb3J0YWJseSwgd2l0aCBhIGxpdHRsZSBleHRyYSBzcGFjZSBmb3Igb3VyIGJhZ3MuIFNlY29uZCwgaXQgaGFzIGEgbWVzaCByb29mLCB0aGF0IG1lYW5zIGF0IG5pZ2h0IHdlIGNhbiBsaWUgaW4gb3VyIHNsZWVwaW5nIGJhZ3MgYW5kIGxvb2sgYXQgdGhlIHN0YXJzISBUaGUga2lkcyB3aWxsIGxvdmUgdGhhdDsgaXQgaXMgYSByZWFsIGZhbWlseSBtZW1vcnkuIFRoaXJkLCBpdCBpcyBtYWRlIGZvciBzdW1tZXIsIHdoaWNoIGlzIHdoZW4gd2UgYXJlIGdvaW5nLCBhbmQgaXQgY29zdHMgJDM1MCwgc28gaXQgaXMgZmlmdHkgZG9sbGFycyBjaGVhcGVyIHRoYW4geW91cnMuIFRoZSByZWQgdGVudCB3YXMgbXkgc2Vjb25kIGlkZWEsIGJ1dCBpdCBvbmx5IHNsZWVwcyBmb3VyLCB0b28gc21hbGwgZm9yIG91ciBmYW1pbHkuIFNvIHRoZSBCbHVlIFRlbnQgaXMgdGhlIGJlc3QgZm9yIHVzLiBXaGF0IGRvIHlvdSBzYXksIERhZD8iLCJzOSI6IkRhZCwgSSB1bmRlcnN0YW5kIHRoZSBhcHBlYWwgb2YgdGhlIG9sZCBDbGFzc2ljIHRlbnQsIHRoZXJlIGlzIGEgY2VydGFpbiBub3N0YWxnaWEgdG8gaXQsIGJ1dCBiZWZvcmUgd2Ugc3BlbmQgdGhlIG1vbmV5LCBsZXQncyBhY3R1YWxseSBjb21wYXJlIHRoZSB0aHJlZSBvcHRpb25zIHNpZGUgYnkgc2lkZS4gWW91ciBwaWNrLCB0aGUgQ2xhc3NpYyAxOTUwcyBUZW50LCBpcyAkNDAwLCB3aGljaCBtYWtlcyBpdCB0aGUgbW9zdCBleHBlbnNpdmUgb24gdGhlIHRhYmxlLCBhbmQgbG9vayB3aGF0IHRoYXQgYnV5czogaGVhdnksIHNtZWxseSBjYW52YXMsIGEgdGVudCB0aGF0IGlzIGhvdCBpbiBzdW1tZXIgYW5kIGNvbGQgaW4gd2ludGVyLCBhbmQgYSBiZWFzdCB0byBjYXJyeS4gSXRzIG9uZSBzZWxsaW5nIHBvaW50IGlzIHRoYXQgaXQgc2xlZXBzIHVwIHRvIHRlbiwgYnV0IHRoZXJlIGFyZSBmaXZlIG9mIHVzLiBXZSB3b3VsZCBiZSBoYXVsaW5nIGEgc21hbGwgY2lyY3VzIHRlbnQgYWNyb3NzIGEgY2FtcHNpdGUgZm9yIG5vIHJlYXNvbi4gVGhhdCBpcyB3aHkgSSBoYXZlIGNob3NlbiB0aGUgU3VucmlzZSBCbHVlIFRlbnQsIGFuZCBJIHRoaW5rIGl0IGlzIHRoZSBjbGVhciB3aW5uZXIgZm9yIG91ciBmYW1pbHkuIEZpcnN0LCBjYXBhY2l0eTogaXQgc2xlZXBzIHNpeCwgc28gYWxsIGZpdmUgb2YgdXMgZml0IGNvbWZvcnRhYmx5IHdpdGggcm9vbSB0byBzcGFyZSBmb3IgdGhlIGJhZ3MgYW5kIHRoZSBjb29sZXIsIG5vIG9uZSBpcyBzcXVhc2hlZC4gU2Vjb25kLCBhbmQgdGhpcyBpcyB0aGUgbWFnaWMgYml0LCBpdCBoYXMgYSBtZXNoIHJvb2YsIHdoaWNoIG1lYW5zIGF0IG5pZ2h0IHdlIGNhbiBsaWUgYmFjayBpbiBvdXIgc2xlZXBpbmcgYmFncyBhbmQgd2F0Y2ggdGhlIHN0YXJzIHJpZ2h0IGFib3ZlIHVzLiBUaGUga2lkcyB3aWxsIG5ldmVyIGZvcmdldCB0aGF0LCBpdCBpcyB0aGUga2luZCBvZiB0aGluZyB0aGF0IHR1cm5zIGEgY2FtcGluZyB0cmlwIGludG8gYSBjaGlsZGhvb2QgbWVtb3J5LiBUaGlyZCwgaXQgaXMgYnVpbHQgZm9yIHN1bW1lciwgd2hpY2ggaXMgZXhhY3RseSB3aGVuIHdlIGFyZSBnb2luZywgYW5kIGF0ICQzNTAgaXQgaXMgYWN0dWFsbHkgZmlmdHkgZG9sbGFycyBjaGVhcGVyIHRoYW4gdGhlIENsYXNzaWMuIE5vdywgdGhlIE1vdW50YWluIEV4cGxvcmVyIFJlZCBUZW50IHdhcyBteSBydW5uZXItdXAsIGl0IGlzIHRoZSBjaGVhcGVzdCBhdCAkMjUwIGFuZCBpdCBpcyB0b3VnaCBlbm91Z2ggZm9yIHllYXItcm91bmQgd2VhdGhlciwgYnV0IGl0IG9ubHkgc2xlZXBzIGZvdXIsIHdoaWNoIGlzIHNpbXBseSB0b28gdGlnaHQgZm9yIHRoZSB3aG9sZSBmYW1pbHkuIFNvOiBtb3JlIGNvbWZvcnQsIGEgc3RhcmdhemluZyByb29mLCBzdW1tZXItcmVhZHksIGFuZCBjaGVhcGVyIHRoYW4geW91ciBjaG9pY2UuIFRoZSBCbHVlIFRlbnQgaXQgaXM\/In0seyJrIjoidDYiLCJudW0iOjYsInR5cGVFbiI6IkRlYWxpbmcgd2l0aCBhIERpZmZpY3VsdCBTaXR1YXRpb24iLCJwcmVwIjo2MCwicmVjIjo2MCwicHJvbXB0IjoiWW91IGFuZCB0aHJlZSBjby13b3JrZXJzLCBBbGljZSwgR2VvcmdlLCBhbmQgTWlrZSwgd29yayB0b2dldGhlciBvbiBhIHByb2plY3QuIEFsaWNlIGZyZXF1ZW50bHkgY2FsbHMgaW4gc2ljayBvbiBNb25kYXlzLiBHZW9yZ2UgdGhpbmtzIEFsaWNlIGlzIGx5aW5nIHRvIGdldCBleHRyYSB2YWNhdGlvbiB0aW1lIGFuZCB3YW50cyB0aGUgZ3JvdXAgdG8gcmVwb3J0IGhlciB0byB0aGUgc3VwZXJ2aXNvci4gTWlrZSB0aGlua3MgQWxpY2UgY291bGQgcmVhbGx5IGJlIHNpY2sgYW5kIHRoYXQgdGhlIHRocmVlIG9mIHlvdSBzaG91bGQgbm90IGdldCBpbnZvbHZlZC4iLCJjaG9vc2VPbmUiOlsiVGFsayB0byBHZW9yZ2UuIEV4cGxhaW4gd2h5IHRoZSB0aHJlZSBvZiB5b3Ugc2hvdWxkIG5vdCBnZXQgaW52b2x2ZWQuIiwiVGFsayB0byBNaWtlLiBFeHBsYWluIHdoeSB0aGUgdGhyZWUgb2YgeW91IHNob3VsZCByZXBvcnQgQWxpY2UuIl0sImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIlBpY2sgT05FIG9wdGlvbiAoRUlUSEVSIG9yIE9SKSBpbW1lZGlhdGVseSBcdTIwMTQgZG9uJ3Qgd2FzdGUgdGltZSBkZWNpZGluZy4iLCJTdHJ1Y3R1cmU6IG9wZW4gcG9saXRlbHkgXHUyMTkyIGV4cGxhaW4geW91ciByZWFzb25zL2V2aWRlbmNlIFx1MjE5MiBwcm9wb3NlIGEgc29sdXRpb24gXHUyMTkyIHNtb290aCB0aGluZ3Mgb3Zlci4iLCJTdGF5IGNhbG0gYW5kIHJlc3BlY3RmdWwgXHUyMDE0IGhvdyB5b3UgaGFuZGxlIHRoZSBzaXR1YXRpb24gaXMgcGFydCBvZiB3aGF0J3MgYmVpbmcgcmF0ZWQgKExpc3RlbmFiaWxpdHkpLiIsIlRoZSBzYW1wbGVzIHBpY2sgb3B0aW9uIDEgLSBwZXJzdWFkZSBHZW9yZ2UgdGhhdCB0aGUgdGhyZWUgb2YgeW91IHNob3VsZCBOT1QgZ2V0IGludm9sdmVkIC8gbm90IHJlcG9ydCBBbGljZS4gTG9naWM6IHlvdSBkbyBub3Qga25vdyB0aGUgcmVhbCByZWFzb24gZm9yIHRoZSBNb25kYXkgYWJzZW5jZXMgKGEgY2hyb25pYyBpbGxuZXNzLCBhIGNoaWxkLCBhIG1lbnRhbC1oZWFsdGggaXNzdWUpLCBhbmQgYWNjdXNpbmcgYSBjb2xsZWFndWUgb2YgbHlpbmcgb24gc3VzcGljaW9uIGNvdWxkIHdyZWNrIGhlciBqb2IgYW5kIHBvaXNvbiB0aGUgdGVhbTsgbW9uaXRvcmluZyBhdHRlbmRhbmNlIGlzIHRoZSBzdXBlcnZpc29yJ3Mgb3IgSFIncyBqb2IuIElmIHRoZSBhYnNlbmNlcyBhcmUgZ2VudWluZWx5IGh1cnRpbmcgdGhlIHdvcmtsb2FkLCByYWlzZSB0aGF0IHNwZWNpZmljIGltcGFjdCB3aXRoIHRoZSBib3NzIGluc3RlYWQgLSBvciB0YWxrIHRvIEFsaWNlIGRpcmVjdGx5IGZpcnN0LiJdLCJwaHJhc2VzIjpbIkNvdWxkIEkganVtcCBpbiBmb3IgYSBtb21lbnQ\/IiwiSSB1bmRlcnN0YW5kIHlvdXIgY29uY2VybiwgYnV0XHUyMDI2IiwiSG93IGFib3V0IHdlXHUyMDI2PyIsIkknbGwgdGFrZSByZXNwb25zaWJpbGl0eSBmb3IgdGhpcy4iXX0sInM2IjoiR2VvcmdlLCBJIHVuZGVyc3RhbmQgd2h5IHlvdSBhcmUgZnJ1c3RyYXRlZC4gV2hlbiBBbGljZSBpcyBhd2F5IG9uIE1vbmRheXMsIHdlIGRvIG1vcmUgd29yaywgYW5kIHRoYXQgZG9lcyBub3QgZmVlbCBmYWlyLiBCdXQgcGxlYXNlLCBsZXQncyBub3QgZ28gdG8gdGhlIHN1cGVydmlzb3IgdG8gcmVwb3J0IGhlci4gSSByZWFsbHkgdGhpbmsgd2Ugc2hvdWxkIG5vdCBnZXQgaW52b2x2ZWQgbGlrZSB0aGF0LiBGaXJzdCwgd2UgZG8gbm90IGFjdHVhbGx5IGtub3cgd2h5IHNoZSBpcyBhYnNlbnQuIE1heWJlIHNoZSBoYXMgYSBoZWFsdGggcHJvYmxlbSBzaGUgZG9lcyBub3Qgd2FudCB0byBzaGFyZSwgb3IgYSBzaWNrIGNoaWxkLCBvciBzb21ldGhpbmcgd2l0aCBoZXIgbWVudGFsIGhlYWx0aC4gTWFueSByZWFsIHByb2JsZW1zIGhhcHBlbiBvbiBNb25kYXlzIHRvby4gSWYgd2Ugc2F5IHNoZSBpcyBseWluZywgYW5kIHdlIGFyZSB3cm9uZywgd2UgY291bGQgZGVzdHJveSBoZXIgam9iIGZvciBub3RoaW5nLiBTZWNvbmQsIHdhdGNoaW5nIHBlb3BsZSdzIHNpY2sgZGF5cyBpcyBub3Qgb3VyIGpvYiwgaXQgaXMgdGhlIHN1cGVydmlzb3IncyBqb2IsIG9yIEhSJ3MuIElmIHdlIHN0YXJ0IHJlcG9ydGluZyBlYWNoIG90aGVyLCBub2JvZHkgaW4gdGhlIHRlYW0gd2lsbCB0cnVzdCBhbnlib2R5LiBUaGF0IGlzIGEgYmFkIHBsYWNlIHRvIHdvcmsuIFRoaXJkLCBpZiB0aGUgcmVhbCBwcm9ibGVtIGlzIG91ciB3b3JrbG9hZCwgdGhlbiBsZXQncyB0YWxrIHRvIHRoZSBib3NzIGFib3V0IFRIQVQsICd0aGUgcHJvamVjdCBpcyBiZWhpbmQsIHdlIG5lZWQgaGVscCcsIHdpdGhvdXQgYWNjdXNpbmcgQWxpY2Ugb2YgbHlpbmcuIFRoYXQgaXMgZmFpciBhbmQgcHJvZmVzc2lvbmFsLiBBbmQgaG9uZXN0bHksIG1heWJlIGZpcnN0IHdlIHNob3VsZCBqdXN0IHRhbGsgdG8gQWxpY2UsIGtpbmRseSwgYW5kIGFzayBpZiBzaGUgaXMgb2theS4gTGV0J3Mgbm90IHR1cm4gY28td29ya2VycyBpbnRvIGVuZW1pZXMsIEdlb3JnZS4gQ2FuIHdlIHRyeSB0aGF0IGZpcnN0PyIsInM5IjoiR2VvcmdlLCBJIGdldCBpdCwgd2hlbiBBbGljZSB2YW5pc2hlcyBldmVyeSBNb25kYXksIHRoZSB0aHJlZSBvZiB1cyBzaG91bGRlciB0aGUgZXh0cmEgd29yaywgYW5kIHRoYXQgc3RpbmdzLiBCdXQgSSB3YW50IHRvIHRhbGsgeW91IG91dCBvZiBtYXJjaGluZyB0byB0aGUgc3VwZXJ2aXNvciB0byByZXBvcnQgaGVyLCBiZWNhdXNlIEkgZ2VudWluZWx5IHRoaW5rIGdldHRpbmcgaW52b2x2ZWQgdGhhdCB3YXkgaXMgYSBtaXN0YWtlLiBTdGFydCB3aXRoIHRoZSBiaWdnZXN0IHByb2JsZW06IHdlIGRvIG5vdCBhY3R1YWxseSBrbm93IHdoeSBzaGUgaXMgb2ZmLiBXZSBhcmUgZ3Vlc3NpbmcuIEl0IGNvdWxkIGJlIGEgY2hyb25pYyBpbGxuZXNzIHNoZSB3b3VsZCByYXRoZXIgbm90IGFkdmVydGlzZSwgYSBzaWNrIGtpZCwgYSBtZW50YWwtaGVhbHRoIHN0cnVnZ2xlLCBhIG1lZGljYWwgYXBwb2ludG1lbnQgdGhhdCBvbmx5IHJ1bnMgb24gTW9uZGF5cywgYWxsIG9mIHdoaWNoIGFyZSByZWFsLCBhbmQgbm9uZSBvZiB3aGljaCBhcmUgb3VyIGJ1c2luZXNzLiBJZiB3ZSBhY2N1c2UgaGVyIG9mIGZha2luZyBpdCBhbmQgd2UgYXJlIHdyb25nLCB3ZSBjb3VsZCBjb3N0IGhlciBoZXIgam9iIG92ZXIgYSBzdG9yeSB3ZSBpbnZlbnRlZC4gU2Vjb25kLCBwb2xpY2luZyBhdHRlbmRhbmNlIHNpbXBseSBpcyBub3Qgb3VyIHJvbGUuIFRoYXQgaXMgd2hhdCB0aGUgc3VwZXJ2aXNvciBhbmQgSFIgYXJlIGZvciwgYW5kIHRoZXkgY2FuIGFscmVhZHkgc2VlIGhlciBzaWNrLWRheSByZWNvcmQuIFRoZSBtb21lbnQgY28td29ya2VycyBzdGFydCBpbmZvcm1pbmcgb24gZWFjaCBvdGhlciwgdHJ1c3QgZXZhcG9yYXRlcyBhbmQgdGhlIHdob2xlIHRlYW0gdHVybnMgdG94aWMsIEkgZG8gbm90IHdhbnQgdG8gd29yayBpbiB0aGF0IG9mZmljZSwgYW5kIG5laXRoZXIgZG8geW91LiBUaGlyZCwgaWYgdGhlIGhvbmVzdCBpc3N1ZSBpcyB0aGF0IGhlciBhYnNlbmNlcyBhcmUgc2lua2luZyBvdXIgd29ya2xvYWQsIHRoZW4gbGV0J3MgcmFpc2UgdGhhdCwgdGhlIGFjdHVhbCwgZmFjdHVhbCBpbXBhY3QsIHdpdGggdGhlIGJvc3M6IHRoZSBwcm9qZWN0IGlzIGZhbGxpbmcgYmVoaW5kLCB3ZSBuZWVkIHN1cHBvcnQgb3IgYSByZWRpc3RyaWJ1dGlvbi4gVGhhdCBpcyBwcm9mZXNzaW9uYWwgYW5kIGZhaXIsIGFuZCBpdCBmaXhlcyBvdXIgcmVhbCBwcm9ibGVtIHdpdGhvdXQgYnJhbmRpbmcgYSBjb2xsZWFndWUgYSBsaWFyLiBBbmQgZnJhbmtseSwgdGhlIGRlY2VudCBmaXJzdCBzdGVwIGlzIGV2ZW4gc2ltcGxlcjogb25lIG9mIHVzIHF1aWV0bHkgY2hlY2tzIGluIHdpdGggQWxpY2UsIGh1bWFuIHRvIGh1bWFuLCAnaGV5LCBhcmUgeW91IGRvaW5nIG9rYXkgbGF0ZWx5PycgU2hlIG1pZ2h0IGJlIHN0cnVnZ2xpbmcgaW4gYSB3YXkgdGhhdCBjaGFuZ2VzIHRoaXMgd2hvbGUgY29udmVyc2F0aW9uLiBMZXQncyBub3QgbWFrZSBhbiBlbmVteSBvdXQgb2YgYSB0ZWFtbWF0ZSBvbiBhIGh1bmNoLCBHZW9yZ2UuIENhbiB3ZSBzdGFydCB0aGVyZT8ifSx7ImsiOiJ0NyIsIm51bSI6NywidHlwZUVuIjoiRXhwcmVzc2luZyBPcGluaW9ucyIsInByZXAiOjMwLCJyZWMiOjkwLCJwcm9tcHQiOiJEbyB5b3UgdGhpbmsgdGhhdCBjaGlsZHJlbiBzaG91bGQgYmUgYWxsb3dlZCB0byByZW1haW4gaW5kb29ycyBkdXJpbmcgdGhlaXIgYnJlYWtzIGF0IHNjaG9vbD8gRXhwbGFpbiB5b3VyIHJlYXNvbnMuIiwicHJvbXB0TGVhZCI6IkFuc3dlciB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uLiIsImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIlN0YXRlIHlvdXIgcG9zaXRpb24gY2xlYXJseSBpbiB0aGUgZmlyc3Qgc2VudGVuY2UgKHBpY2tpbmcgb25lIHNpZGUgaXMgZWFzaWVyIHRvIGRldmVsb3AgdGhhbiBzdGF5aW5nIG5ldXRyYWwpLiIsIkdpdmUgMlx1MjAxMzMgcmVhc29ucywgZWFjaCBkZXZlbG9wZWQgb3ZlciAyXHUyMDEzMyBzZW50ZW5jZXMgd2l0aCBhbiBleGFtcGxlOyA5MCBzZWNvbmRzIGlzIGxvbmcgXHUyMDE0IGRvbid0IHN0b3AgZWFybHkuIiwiQWNrbm93bGVkZ2UgdGhlIG90aGVyIHNpZGUgaW4gb25lIHNlbnRlbmNlIChUaGF0IHNhaWQsIFx1MjAyNikgdGhlbiBjb25jbHVkZSBcdTIwMTQgaXQgc2hvd3MgYmFsYW5jZWQgdGhpbmtpbmcuIiwiVGhlIHNhbXBsZXMgYXJndWUgTk8gLSBhcyBhIHJ1bGUsIGNoaWxkcmVuIHNob3VsZCBoZWFkIG91dHNpZGUgZHVyaW5nIGJyZWFrcyByYXRoZXIgdGhhbiBzdGF5aW5nIGluLiBDb25jcmV0ZSByZWFzb25zOiBraWRzIHNpdCBmb3IgaG91cnMgaW4gY2xhc3MsIHNvIHRoZXkgbmVlZCB0aGUgZnJlc2ggYWlyIGFuZCBtb3ZlbWVudCBmb3IgdGhlaXIgaGVhbHRoOyBydW5uaW5nIGFyb3VuZCBhY3R1YWxseSBpbXByb3ZlcyBmb2N1cyBhbmQgYmVoYXZpb3VyIGluIHRoZSBuZXh0IGxlc3NvbjsgYW5kIG91dGRvb3IgZnJlZSBwbGF5IGJ1aWxkcyBzb2NpYWwgc2tpbGxzIGEgY2xhc3Nyb29tIGNhbm5vdC4gQ29uY2VkZSBzZW5zaWJsZSBleGNlcHRpb25zIC0gYmFkIHdlYXRoZXIsIGEgY2hpbGQgd2hvIGlzIHVud2VsbCwgb3IgdGhlIG9jY2FzaW9uYWwgcXVpZXQgaW5kb29yIG9wdGlvbiBmb3Iga2lkcyB3aG8gbmVlZCBpdC4iXSwicGhyYXNlcyI6WyJJZiBJIGhhZCB0byBjaG9vc2UsIEknZCBzYXlcdTIwMjYiLCJNeSBtYWluIHJlYXNvbiBpc1x1MjAyNiIsIkZvciBleGFtcGxlLCBcdTIwMjYiLCJUaGF0IHNhaWQsIFx1MjAyNiIsIkFsbCB0aGluZ3MgY29uc2lkZXJlZCwgXHUyMDI2Il19LCJzNiI6IkluIG15IG9waW5pb24sIGNoaWxkcmVuIHNob3VsZCBub3QgdXN1YWxseSBiZSBhbGxvd2VkIHRvIHN0YXkgaW5kb29ycyBkdXJpbmcgdGhlaXIgc2Nob29sIGJyZWFrcywgYXMgYSBub3JtYWwgcnVsZSwgdGhleSBzaG91bGQgZ28gb3V0c2lkZS4gTGV0IG1lIGV4cGxhaW4gd2h5LiBGaXJzdCwgaGVhbHRoLiBDaGlsZHJlbiBhbHJlYWR5IHNpdCBmb3IgbWFueSBob3VycyBpbiB0aGUgY2xhc3Nyb29tLCBhdCB0aGVpciBkZXNrcywgbm90IG1vdmluZy4gVGhlIGJyZWFrIGlzIG9mdGVuIHRoZWlyIG9ubHkgY2hhbmNlIGluIHRoZSB3aG9sZSBtb3JuaW5nIHRvIHJ1biwganVtcCwgYW5kIGJyZWF0aGUgZnJlc2ggYWlyLiBJZiB3ZSBsZXQgdGhlbSBzdGF5IGluc2lkZSwgbWFueSB3aWxsIGp1c3Qgc2l0IGFnYWluIHdpdGggdGhlaXIgcGhvbmVzIG9yIHRoZWlyIGZyaWVuZHMsIGFuZCB0aGF0IGlzIG5vdCBnb29kIGZvciB0aGVpciBncm93aW5nIGJvZGllcy4gU2Vjb25kLCBnb2luZyBvdXRzaWRlIGFjdHVhbGx5IGhlbHBzIHRoZWlyIGxlYXJuaW5nLiBXaGVuIGtpZHMgcnVuIGFuZCBwbGF5IGFuZCB1c2UgdGhlaXIgZW5lcmd5LCB0aGV5IGNvbWUgYmFjayB0byBjbGFzcyBjYWxtZXIgYW5kIHRoZXkgY29uY2VudHJhdGUgYmV0dGVyLiBBIGNoaWxkIHdobyBzYXQgaW5zaWRlIGFsbCBkYXkgd2lsbCBiZSByZXN0bGVzcyBhbmQgY2Fubm90IGZvY3VzLiBUaGlyZCwgdGhlIHBsYXlncm91bmQgdGVhY2hlcyB0aGluZ3MgdGhlIGNsYXNzcm9vbSBjYW5ub3QsIGhvdyB0byBzaGFyZSwgaG93IHRvIG1ha2UgZnJpZW5kcywgaG93IHRvIHBsYXkgZ2FtZXMgdG9nZXRoZXIgYW5kIHNvbHZlIHNtYWxsIGZpZ2h0cy4gT2YgY291cnNlLCB0aGVyZSBtdXN0IGJlIHNvbWUgZXhjZXB0aW9ucy4gSWYgdGhlIHdlYXRoZXIgaXMgdmVyeSBiYWQsIGxpa2UgaGVhdnkgcmFpbiBvciBhIHN0b3JtLCBvciBpZiBhIGNoaWxkIGlzIHNpY2sgb3IgZmVlbHMgdGlyZWQsIHRoZW4gc3RheWluZyBpbnNpZGUgaXMgZmluZS4gQnV0IGZvciBhIG5vcm1hbCBkYXksIEkgc3Ryb25nbHkgYmVsaWV2ZSBjaGlsZHJlbiBzaG91bGQgYmUgc2VudCBvdXRzaWRlIHRvIHBsYXkuIEl0IGlzIGdvb2QgZm9yIHRoZSBib2R5IGFuZCB0aGUgbWluZC4iLCJzOSI6Ik15IHBvc2l0aW9uIGlzIHRoYXQsIGFzIGEgZ2VuZXJhbCBydWxlLCBjaGlsZHJlbiBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gc3RheSBpbmRvb3JzIGR1cmluZyBicmVha3MsIHRoZSBkZWZhdWx0IG91Z2h0IHRvIGJlIHNlbmRpbmcgdGhlbSBvdXRzaWRlLCB3aXRoIHNlbnNpYmxlIGV4Y2VwdGlvbnMuIEhlcmUgaXMgbXkgcmVhc29uaW5nLiBGaXJzdCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaGVhbHRoIGFuZCBtb3ZlbWVudDogY2hpbGRyZW4gYWxyZWFkeSBzcGVuZCBob3VycyBnbHVlZCB0byBhIGNoYWlyIGR1cmluZyBsZXNzb25zLCBhbmQgZm9yIG1hbnkgb2YgdGhlbSB0aGUgYnJlYWsgaXMgdGhlIHNpbmdsZSB3aW5kb3cgaW4gdGhlIGVudGlyZSBtb3JuaW5nIHRvIGFjdHVhbGx5IHJ1biwgY2xpbWIgYW5kIG1vdmUgdGhlaXIgYm9kaWVzLiBJZiB3ZSBsZXQgdGhlbSBsaW5nZXIgaW5kb29ycywgbW9zdCB3aWxsIHNpbXBseSBzd2FwIG9uZSBmb3JtIG9mIHNpdHRpbmcgZm9yIGFub3RoZXIsIGh1ZGRsZWQgb3ZlciBhIHBob25lIG9yIGEgZGVzaywgYW5kIHdlIGxvc2UgdGhlIG9uZSBidXJzdCBvZiBwaHlzaWNhbCBhY3Rpdml0eSB0aGUgc2Nob29sIGRheSBndWFyYW50ZWVzLiBHaXZlbiBob3cgc2VkZW50YXJ5IGNoaWxkaG9vZCBoYXMgYmVjb21lLCB0aGF0IGlzIGEgZ2VudWluZSBwcm9ibGVtLiBTZWNvbmQsIGFuZCBzbGlnaHRseSBjb3VudGVyLWludHVpdGl2ZWx5LCBvdXRkb29yIGJyZWFrcyBtYWtlIGtpZHMgYmV0dGVyIGxlYXJuZXJzOiByZWxlYXNpbmcgcGVudC11cCBlbmVyZ3kgaW4gdGhlIGZyZXNoIGFpciByZXNldHMgdGhlaXIgYXR0ZW50aW9uLCBzbyB0aGV5IHJldHVybiB0byBjbGFzcyBjYWxtZXIgYW5kIG1vcmUgZm9jdXNlZCwgd2hlcmVhcyBhIGNoaWxkIGtlcHQgaW5zaWRlIGFsbCBkYXkgZ3Jvd3MgZmlkZ2V0eSBhbmQgc3dpdGNoZXMgb2ZmLiBUaGlyZCwgdGhlIHBsYXlncm91bmQgaXMgYSBjbGFzc3Jvb20gb2YgaXRzIG93biwgbmVnb3RpYXRpbmcgZ2FtZXMsIHRha2luZyB0dXJucywgcmVzb2x2aW5nIHNxdWFiYmxlcyBhbmQgbWFraW5nIGZyaWVuZHMgYXJlIHNvY2lhbCBza2lsbHMgdGhhdCBzaW1wbHkgY2Fubm90IGJlIHRhdWdodCBhdCBhIGRlc2ssIGFuZCB1bnN0cnVjdHVyZWQgb3V0ZG9vciB0aW1lIGlzIHdoZXJlIGNoaWxkcmVuIHByYWN0aXNlIHRoZW0uIE5vdywgdGhlIGZhaXIgY29uY2Vzc2lvbjogdGhpcyBjYW5ub3QgYmUgYW4gYWJzb2x1dGUgcnVsZS4gT24gZGF5cyBvZiBnZW51aW5lbHkgaGFyc2ggd2VhdGhlciwgc3Rvcm1zLCBleHRyZW1lIGNvbGQgb3IgaGVhdCwgaW5kb29ycyBpcyB0aGUgc2Vuc2libGUgY2hvaWNlLCBhbmQgdGhlcmUgc2hvdWxkIGFsd2F5cyBiZSByb29tIGZvciBhIGNoaWxkIHdobyBpcyB1bndlbGwsIG9yIGEgcXVpZXRlciBraWQgd2hvIG9jY2FzaW9uYWxseSBuZWVkcyBhIGNhbG0gaW5kb29yIGNvcm5lciB0byByZWNoYXJnZS4gQnV0IHRob3NlIGFyZSBleGNlcHRpb25zLiBGb3IgYSBub3JtYWwgc2Nob29sIGRheSwgdGhlIGhlYWx0aGllc3QsIHNtYXJ0ZXN0IGRlZmF1bHQgaXMgY2xlYXI6IG9wZW4gdGhlIGRvb3JzIGFuZCBzZW5kIHRoZW0gb3V0IHRvIHBsYXkuIn0seyJrIjoidDgiLCJudW0iOjgsInR5cGVFbiI6IkRlc2NyaWJpbmcgYW4gVW51c3VhbCBTaXR1YXRpb24iLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiWW91IGp1c3QgYm91Z2h0IGEgZGVzaWduZXIgcGhvbmUgZnJvbSBhIGNvbXBhbnkgb25saW5lLiBXaGVuIGl0J3MgZGVsaXZlcmVkLCB5b3Ugc2VlIHNvbWUgcHJvYmxlbXMuIENhbGwgdGhlIGN1c3RvbWVyIHNlcnZpY2UgZGVwYXJ0bWVudCBvZiB0aGUgcGhvbmUgY29tcGFueSBhbmQgZGVzY3JpYmUgaW4gZGV0YWlsIHdoYXQgdGhlIHByb2JsZW1zIGFyZS4gQXNrIGlmIHRoZXkgY2FuIGRlbGl2ZXIgYSBuZXcgcGhvbmUgdG8geW91LCBvciByZWZ1bmQgeW91ciBtb25leSBpZiB5b3UgcHJlZmVyLiIsImltZyI6InVudXN1YWwiLCJ0aXBzIjp7ImJ1bGxldHMiOlsiVGhpcyBpcyBhIFBIT05FIENBTEw6IGdyZWV0IHRoZSByaWdodCBwZXJzb24gKHRoZSBwb2xpY2UgLyB5b3VyIGZyaWVuZCksIHRoZW4gc2F5IHdoZXJlIHlvdSBhcmUuIiwiRGVzY3JpYmUgZnJvbSBnZW5lcmFsIHRvIHNwZWNpZmljOyB0aGUgcGljdHVyZSBpcyBtZWFudCB0byBiZSBzdHJhbmdlIFx1MjAxNCBqdXN0IGRlc2NyaWJlIHdoYXQgeW91IHNlZSwgdXNpbmcgJ0l0IGxvb2tzIGxpa2UgLyBhcyBpZlx1MjAyNicuIiwiRW5kIHdpdGggYSByZXF1ZXN0IGZvciBhY3Rpb24gKHNlbmQgYSBwYXRyb2wgLyBhc2sgd2hlcmUgdG8gYnV5KS4iLCJUaGlzIGlzIGEgY2FsbCB0byBjdXN0b21lciBzZXJ2aWNlIGFib3V0IGEgZGFtYWdlZCAnZGVzaWduZXIgcGhvbmUnLiBEZXNjcmliZSB0aGUgaXRlbSBmaXJzdCAtIGEgcXVpcmt5IHBob25lIHNoYXBlZCBsaWtlIGEgd29vZGVuIHRyZWUgdHJ1bmssIHdpdGggYW4gb2xkLXN0eWxlIHJvdGFyeSBkaWFsIChyZWQtY2lyY2xlZCBudW1iZXJzIDEtOSBhbmQgYSBwaW5rIGNlbnRyZSksIGEgZ3JlZW4gbGVhZi1zaGFwZWQgYmFzZSwgYW5kIGV2ZW4gYSB0aW55IGJpcmRob3VzZSBvbiB0aGUgc2lkZS4gVGhlbiB0aGUgcHJvYmxlbXM6IHRoZSBncmVlbiBiYXNlIGhhcyBhcnJpdmVkIGNyYWNrZWQgd2l0aCBicm9rZW4gZ3JlZW4gc2hhcmRzIHNjYXR0ZXJlZCBvbiB0aGUgdGFibGU7IHRoZSBjdXJseSBoYW5kc2V0IGNvcmQgaXMgZGV0YWNoZWQgYW5kIGRhbmdsaW5nIGxvb3NlOyBhbmQgYSBzbWFsbCBwaWVjZSBoYXMgc25hcHBlZCBvZmYuIEFzayB0aGVtIHRvIHNlbmQgYSByZXBsYWNlbWVudCBvciByZWZ1bmQgeW91ciBtb25leS4iXSwicGhyYXNlcyI6WyJJJ20gY2FsbGluZyB0byByZXBvcnRcdTIwMjYiLCJQaWN0dXJlIHRoaXM6IFx1MjAyNiIsIkl0IGxvb2tzIGFzIGlmXHUyMDI2IiwiQ291bGQgeW91IHNlbmRcdTIwMjYgLyBEbyB5b3Uga25vdyB3aGVyZVx1MjAyNj8iXX0sInM2IjoiSGVsbG8sIGlzIHRoaXMgdGhlIGN1c3RvbWVyIHNlcnZpY2UgZGVwYXJ0bWVudD8gWWVzLCBoaS4gSSBib3VnaHQgb25lIG9mIHlvdXIgZGVzaWduZXIgcGhvbmVzIG9ubGluZSBsYXN0IHdlZWssIGFuZCBpdCBhcnJpdmVkIHRvZGF5LCBidXQgSSBhbSBzb3JyeSB0byBzYXkgdGhlcmUgYXJlIHNvbWUgcHJvYmxlbXMsIGFuZCBJIGFtIG5vdCBoYXBweS4gTGV0IG1lIGRlc2NyaWJlIGl0LCBzbyB5b3UgdW5kZXJzdGFuZC4gVGhlIHBob25lIGlzIHRoYXQgc3BlY2lhbCBkZXNpZ24gdGhhdCBsb29rcyBsaWtlIGEgd29vZGVuIHRyZWUgdHJ1bmssIGJyb3duLCB3aXRoIGFuIG9sZCByb3RhcnkgZGlhbCwgeW91IGtub3csIHRoZSByb3VuZCBkaWFsIHdpdGggdGhlIG51bWJlcnMgb25lIHRvIG5pbmUgaW4gbGl0dGxlIHJlZCBjaXJjbGVzLCBhbmQgYSBwaW5rIGJ1dHRvbiBpbiB0aGUgbWlkZGxlLiBJdCBhbHNvIGhhcyBhIHNtYWxsIGJpcmRob3VzZSBvbiB0aGUgc2lkZSBhbmQgYSBncmVlbiBiYXNlIGxpa2UgYSBsZWFmLiBJdCBpcyBhIGJlYXV0aWZ1bCBkZXNpZ24sIGJ1dCBpdCBjYW1lIGJyb2tlbi4gRmlyc3QsIHRoZSBncmVlbiBiYXNlIGlzIGNyYWNrZWQuIFRoZXJlIGFyZSBldmVuIHNtYWxsIGdyZWVuIHBpZWNlcyBicm9rZW4gb2ZmLCBseWluZyBvbiBteSB0YWJsZS4gU2Vjb25kLCB0aGUgY29yZCBmb3IgdGhlIGhhbmRzZXQgaXMgbm90IGNvbm5lY3RlZCwgaXQgaXMganVzdCBoYW5naW5nIGxvb3NlLCBzbyBJIGNhbm5vdCB1c2UgdGhlIHBob25lIGF0IGFsbC4gQW5kIHRoaXJkLCBhIGxpdHRsZSBwaWVjZSBoYXMgc25hcHBlZCBvZmYgY29tcGxldGVseS4gU28gdGhlIHBob25lIGlzIGRhbWFnZWQgYW5kIGRvZXMgbm90IHdvcmsuIEkgcGFpZCBnb29kIG1vbmV5IGZvciB0aGlzLCBzbyBjb3VsZCB5b3UgcGxlYXNlIHNlbmQgbWUgYSBuZXcgb25lIHRoYXQgaXMgbm90IGJyb2tlbj8gT3IsIGlmIGl0IGlzIGVhc2llciwgSSB3b3VsZCBwcmVmZXIgYSBmdWxsIHJlZnVuZC4gV2hhdCBjYW4geW91IGRvIGZvciBtZT8iLCJzOSI6IkhlbGxvLCBpcyB0aGlzIGN1c3RvbWVyIHNlcnZpY2U\/IEdyZWF0LiBJIGFtIGNhbGxpbmcgYWJvdXQgYSBkZXNpZ25lciBwaG9uZSBJIG9yZGVyZWQgZnJvbSB5b3VyIHdlYnNpdGUgbGFzdCB3ZWVrLCBpdCB3YXMgZGVsaXZlcmVkIHRoaXMgbW9ybmluZywgYW5kIHVuZm9ydHVuYXRlbHkgaXQgaGFzIGFycml2ZWQgaW4gYSByZWFsIHN0YXRlLCBzbyBJIHdvdWxkIGxpa2UgdG8gc29ydCBvdXQgYSByZXBsYWNlbWVudCBvciBhIHJlZnVuZC4gTGV0IG1lIGRlc2NyaWJlIGl0IHNvIHdlIGFyZSBib3RoIGNsZWFyIG9uIHdoaWNoIHByb2R1Y3QgSSBtZWFuLiBJdCBpcyB5b3VyIG5vdmVsdHkgcGllY2UgdGhhdCBpcyBzdHlsZWQgbGlrZSBhIHdvb2RlbiB0cmVlIHRydW5rLCB0aGUgYnJvd24gb25lIHdpdGggdGhlIG9sZC1mYXNoaW9uZWQgcm90YXJ5IGRpYWwsIHRoZSByb3VuZCBkaWFsIHdpdGggbnVtYmVycyBvbmUgdG8gbmluZSBpbiBsaXR0bGUgcmVkIGNpcmNsZXMgYW5kIGEgcGluayBjZW50cmUsIGFuZCBpdCBoYXMgZ290IHRoYXQgd2hpbXNpY2FsIGdyZWVuIGxlYWYtc2hhcGVkIGJhc2UgYW5kIGV2ZW4gYSB0aW55IGJpcmRob3VzZSBmaXhlZCB0byB0aGUgc2lkZS4gR2VudWluZWx5IGxvdmVseSBkZXNpZ24sIHdoaWNoIGlzIGV4YWN0bHkgd2h5IEkgYW0gZGlzYXBwb2ludGVkLiBIZXJlIGFyZSB0aGUgcHJvYmxlbXMuIEZpcnN0LCB0aGUgZ3JlZW4gYmFzZSBoYXMgY3JhY2tlZDsgaXQgbXVzdCBoYXZlIHRha2VuIGEga25vY2sgaW4gdHJhbnNpdCwgYmVjYXVzZSB0aGVyZSBhcmUgYWN0dWFsbHkgbGl0dGxlIGdyZWVuIHNoYXJkcyBicm9rZW4gb2ZmIGl0IHNjYXR0ZXJlZCBhY3Jvc3MgbXkgdGFibGUuIFNlY29uZCwgYW5kIHRoaXMgaXMgdGhlIGRlYWwtYnJlYWtlciwgdGhlIGN1cmx5IGNvcmQgZm9yIHRoZSBoYW5kc2V0IGlzIG5vdCBhdHRhY2hlZDsgaXQgaXMganVzdCBkYW5nbGluZyBsb29zZSwgZGlzY29ubmVjdGVkLCBzbyB0aGUgcGhvbmUgZG9lcyBub3QgZnVuY3Rpb24gYXQgYWxsLiBBbmQgdGhpcmQsIGEgc21hbGwgcGllY2UgaGFzIHNuYXBwZWQgY2xlYW4gb2ZmLiBTbyB3aGF0IEkgaGF2ZSByZWNlaXZlZCBpcyBlc3NlbnRpYWxseSBicm9rZW4gYW5kIHVudXNhYmxlLCBub3QgdGhlIHByaXN0aW5lIGRlc2lnbmVyIGl0ZW0gSSBwYWlkIGZvci4gR2l2ZW4gYWxsIHRoYXQsIEkgd291bGQgbGlrZSB5b3UgdG8gc2hpcCBtZSBhIGJyYW5kLW5ldywgdW5kYW1hZ2VkIHVuaXQsIGFuZCBwbGVhc2UgbWFrZSBzdXJlIGl0IGlzIHBhY2thZ2VkIHByb3Blcmx5IHRoaXMgdGltZS4gVGhhdCBzYWlkLCBpZiBhIHJlcGxhY2VtZW50IGlzIGdvaW5nIHRvIGJlIHNsb3csIEkgd291bGQgaG9uZXN0bHkgcmF0aGVyIGp1c3QgaGF2ZSBhIGZ1bGwgcmVmdW5kLiBDb3VsZCB5b3UgdGVsbCBtZSB3aGljaCBvZiB0aG9zZSB5b3UgYXJlIGFibGUgdG8gZG8sIGFuZCB3aGF0IHlvdSB3aWxsIG5lZWQgZnJvbSBtZSwgcGhvdG9zIG9mIHRoZSBkYW1hZ2UsIHRoZSBvcmRlciBudW1iZXIsIGFueXRoaW5nIGxpa2UgdGhhdD8ifV0sInVpIjp7InN0YXJ0VGVzdCI6IlN0YXJ0IHRoZSB0ZXN0IiwibWljRW5hYmxlIjoiRW5hYmxlIG1pY3JvcGhvbmUiLCJtaWNSZWFkeSI6Ik1pY3JvcGhvbmUgcmVhZHkiLCJtaWNCbG9ja2VkIjoiTWljcm9waG9uZSBpcyBibG9ja2VkIG9yIHVuYXZhaWxhYmxlIFx1MjAxNCB0aGUgcGFnZSB3aWxsIHJ1biBpbiB0aW1lci1vbmx5IG1vZGUgKHlvdSBjYW4gc3RpbGwgcHJhY3Rpc2Ugc3BlYWtpbmcgYWxvbmcgd2l0aCB0aGUgdGltZXJzKS4iLCJtaWNOb3RlIjoiUmVjb3JkaW5ncyBhcmUgc3RvcmVkIHRlbXBvcmFyaWx5IGluIHlvdXIgYnJvd3NlciBvbmx5IFx1MjAxNCBub3RoaW5nIGlzIHVwbG9hZGVkIHRvIGFueSBzZXJ2ZXIuIFRoZXkgYXJlIGxvc3Qgd2hlbiB5b3UgY2xvc2UgdGhlIHBhZ2UsIHNvIGRvd25sb2FkIGFueSB5b3Ugd2FudCB0byBrZWVwLiIsInByZXBUaXRsZSI6IlByZXBhcmF0aW9uIFRpbWUiLCJyZWNUaXRsZSI6IlJlY29yZGluZyIsInN0YXJ0UHJlcCI6Ilx1MjViNiBTdGFydCBwcmVwYXJhdGlvbiIsInNraXBQcmVwIjoiU2tpcCBcdTIwMTQgcmVjb3JkIG5vdyBcdTAwYmIiLCJzdG9wUmVjIjoiXHUyNWEwIFN0b3AgcmVjb3JkaW5nIiwicmVjb3JkZWQiOiJSZWNvcmRlZCIsInJlUmVjb3JkIjoiXHUyMWJiIFJlY29yZCBhZ2FpbiIsImRvd25sb2FkIjoiXHUyYjA3IERvd25sb2FkIiwidGltZXJPbmx5IjoiVGltZXItb25seSBtb2RlIChub3QgcmVjb3JkaW5nKSIsInNwZWFrTm93IjoiU1BFQUsgTk9XIFx1MjAxNCByZWNvcmRpbmcgc3RvcHMgYXV0b21hdGljYWxseSB3aGVuIHRpbWUgaXMgdXAiLCJuZXh0IjoiTkVYVCIsImNob29zZUhpbnQiOiJDbGljayB0byBjaG9vc2Ugb25lIG9wdGlvbiBcdTIwMTQgaWYgdGhlIDYwIHNlY29uZHMgcnVuIG91dCwgdGhlIHN5c3RlbSBjaG9vc2VzIGZvciB5b3UiLCJjb25maXJtQ2hvaWNlIjoiQ29uZmlybSBjaG9pY2UgJiBjb250aW51ZSBcdTAwYmIiLCJ5b3VyQ2hvaWNlIjoiWW91ciBDaG9pY2UiLCJ0aXBzVG9nZ2xlIjoiXHVkODNkXHVkY2ExIFRpcHMgJiBzYW1wbGUgYW5zd2VycyAob3BlbiBhZnRlciB5b3UgZmluaXNoIHNwZWFraW5nKSIsInRhYlRpcHMiOiJPdXRsaW5lICYgcGhyYXNlcyIsInRhYlM2IjoiU2FtcGxlIENMQiA2IiwidGFiUzkiOiJTYW1wbGUgQ0xCIDkiLCJ0YWJSdWJyaWMiOiJTZWxmLWFzc2Vzc21lbnQiLCJydWJyaWNOb3RlIjoiTGlzdGVuIHRvIHlvdXIgcmVjb3JkaW5nLCB0aGVuIHJhdGUgeW91cnNlbGYgMVx1MjAxMzUgb24gZWFjaCBjcml0ZXJpb24gKHRoZSA0IG9mZmljaWFsIENFTFBJUCByYXRpbmcgZGltZW5zaW9ucyk6IiwicnVicmljQ3JpdCI6WyJDb250ZW50ICYgQ29oZXJlbmNlIFx1MjAxNCBjb21wbGV0ZSBpZGVhcywgbG9naWNhbCBmbG93IiwiVm9jYWJ1bGFyeSBcdTIwMTQgcmFuZ2UgYW5kIHByZWNpc2lvbiIsIkxpc3RlbmFiaWxpdHkgXHUyMDE0IHByb251bmNpYXRpb24sIGludG9uYXRpb24sIGZsdWVuY3kiLCJUYXNrIEZ1bGZpbGxtZW50IFx1MjAxNCBhZGRyZXNzZXMgdGhlIHRhc2ssIGFwcHJvcHJpYXRlIGxlbmd0aCJdLCJlc3RpbWF0ZSI6IkVzdGltYXRlZCBsZXZlbCAoZm9yIHJlZmVyZW5jZSk6IiwiZXN0RGlzY2xhaW1lciI6IlNlbGYtYXNzZXNzbWVudCBpcyBhIHJvdWdoIGd1aWRlIG9ubHkgXHUyMDE0IGl0IGRvZXMgbm90IHJlcGxhY2UgYW4gb2ZmaWNpYWwgc2NvcmUuIiwidXNlZnVsUGhyYXNlcyI6IlVzZWZ1bCBwaHJhc2VzIiwiZW5kVGl0bGUiOiJTcGVha2luZyB0ZXN0IGNvbXBsZXRlISIsImVuZFN1YiI6IlJlcGxheSBlYWNoIHRhc2ssIGNvbXBhcmUgeW91ciBhbnN3ZXJzIHdpdGggdGhlIENMQiA2IC8gQ0xCIDkgc2FtcGxlcywgdGhlbiByYXRlIHlvdXJzZWxmLiIsImVuZE5vUmVjIjoibm90IHJlY29yZGVkIiwiZW5kUmVkbyI6Ilx1MjFiYiBTdGFydCBvdmVyIiwiZW5kVDIiOiJDb250aW51ZSB0byBQcmFjdGljZSBUZXN0IiwiZW5kSHViIjoiXHUyMTkwIEJhY2sgdG8gQ0VMUElQIEh1YiIsIndhcm11cEJhZGdlIjoiV2FybS11cCBcdTIwMTQgbm90IHNjb3JlZCIsImludHJvTm90ZXMiOlsiQW4gYWNjdXJhdGUgc2ltdWxhdGlvbiBvZiB0aGUgcmVhbCBDRUxQSVAgR2VuZXJhbCBTcGVha2luZyB0ZXN0OiAxIHByYWN0aWNlICh3YXJtLXVwKSB0YXNrICsgOCBzY29yZWQgdGFza3MsIGFib3V0IDIwIG1pbnV0ZXMgaW4gdG90YWwuIiwiRWFjaCB0YXNrOiByZWFkIHRoZSBwcm9tcHQgXHUyMTkyIDxiPlByZXBhcmF0aW9uPC9iPiBjb3VudGRvd24gXHUyMTkyIHN3aXRjaGVzIGF1dG9tYXRpY2FsbHkgdG8gPGI+UmVjb3JkaW5nPC9iPiAod2l0aCBhIGJlZXApIFx1MjE5MiBzdG9wcyB3aGVuIHRpbWUgaXMgdXAuIiwiT24gdGhlIHJlYWwgdGVzdCB5b3UgY2Fubm90IGdvIGJhY2sgdG8gYSBwcmV2aW91cyB0YXNrLiBJbiBwcmFjdGljZSBtb2RlLCB5b3UgY2FuIGNsaWNrIHRoZSBudW1iZXJlZCBjaGlwcyBhYm92ZSB0byByZXZpc2l0IGFueSB0YXNrLiIsIkFmdGVyIHNwZWFraW5nIG9uIGVhY2ggdGFzaywgb3BlbiA8Yj5UaXBzICYgc2FtcGxlIGFuc3dlcnM8L2I+IHRvIGNvbXBhcmUgeW91ciByZXNwb25zZSB3aXRoIHRoZSBDTEIgNiBhbmQgQ0xCIDkgc2FtcGxlcy4iXSwiaGVyb1RhZyI6IkNFTFBJUCBHZW5lcmFsIFx1MjAxNCBTcGVha2luZyIsImhlcm9NZXRhIjpbIjggdGFza3MgKyB3YXJtLXVwIiwifjIwIG1pbnV0ZXMiLCJSZWNvcmQgJiByZXBsYXkiLCJDTEIgNiAvIENMQiA5IHNhbXBsZXMiXX19OwovKiBDRUxQSVAgU3BlYWtpbmcgRW5naW5lIHYxLjAgLSBBbGxFbmdsaXNoNFUgLSB2YW5pbGxhIEpTLCBwcmVmaXggY2xwLXNwayAqLwooZnVuY3Rpb24oKXsKInVzZSBzdHJpY3QiOwp2YXIgRCA9IHdpbmRvdy5DTFBTUEtfREFUQSwgVSA9IEQudWk7CnZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscC1zcGstcm9vdCIpOwppZighcm9vdCkgcmV0dXJuOwoKLyogLS0tLS0tLS0tLSBzdHlsZSAtLS0tLS0tLS0tICovCnZhciBDU1MgPSAiIisKIi5jbHAtc3BrLXdyYXB7bWF4LXdpZHRoOjExNDBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MCAxNHB4IDYwcHg7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sQXJpYWwsc2Fucy1zZXJpZjtjb2xvcjojMjMyNzJkOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9IisKIi5jbHAtc3BrLXdyYXAgKntib3gtc2l6aW5nOmJvcmRlci1ib3h9IisKIi5jbHAtc3BrLWhlcm97YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCM3ZjFkMWQgMCUsI2I5MWMxYyA1NSUsI2RjMjYyNiAxMDAlKTtib3JkZXItcmFkaXVzOjE4cHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjMwcHggMzBweCAyNnB4O21hcmdpbjoxOHB4IDAgMjBweDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59IisKIi5jbHAtc3BrLWhlcm86YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNjBweDt0b3A6LTYwcHg7d2lkdGg6MjIwcHg7aGVpZ2h0OjIyMHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDgpfSIrCiIuY2xwLXNway1oZXJvIC50YWd7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xNik7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4zNSk7cGFkZGluZzozcHggMTJweDtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMi41cHg7bGV0dGVyLXNwYWNpbmc6LjZweDtmb250LXdlaWdodDo2MDB9IisKIi5jbHAtc3BrLWhlcm8gaDF7bWFyZ2luOjEwcHggMCA2cHg7Zm9udC1zaXplOjI3cHg7bGluZS1oZWlnaHQ6MS4yNTtjb2xvcjojZmZmfSIrCiIuY2xwLXNway1oZXJvIC5tZXRhe2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O21hcmdpbi10b3A6MTJweH0iKwoiLmNscC1zcGstaGVybyAubWV0YSBzcGFue2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjIpO3BhZGRpbmc6NHB4IDEycHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTIuNXB4fSIrCiIuY2xwLXNway1jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjdweDttYXJnaW46MCAwIDE0cHh9IisKIi5jbHAtc3BrLWNoaXB7bWluLXdpZHRoOjM4cHg7aGVpZ2h0OjM0cHg7Ym9yZGVyLXJhZGl1czo5cHg7Ym9yZGVyOjEuNXB4IHNvbGlkICNkM2Q4ZGY7YmFja2dyb3VuZDojZmZmO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTMuNXB4O2NvbG9yOiM1YjY1NzI7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzowIDEwcHh9IisKIi5jbHAtc3BrLWNoaXAuY3Vye2JhY2tncm91bmQ6IzBiNTdkMDtib3JkZXItY29sb3I6IzBiNTdkMDtjb2xvcjojZmZmfSIrCiIuY2xwLXNway1jaGlwLmRvbmV7YmFja2dyb3VuZDojZTZmNGVhO2JvcmRlci1jb2xvcjojN2JjMzk0O2NvbG9yOiMxZTdiM2V9IisKIi5jbHAtc3BrLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkOWRkZTM7Ym9yZGVyLXJhZGl1czoxMnB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMnB4IDEwcHggcmdiYSgzMCw0MCw2MCwuMDYpfSIrCiIuY2xwLXNway1iYXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtiYWNrZ3JvdW5kOiNlY2VjZWU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2Q1ZDVkODtwYWRkaW5nOjlweCAxNHB4O2ZsZXgtd3JhcDp3cmFwfSIrCiIuY2xwLXNway1iYXIgLnR7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNC41cHg7Y29sb3I6IzNjNDA0Nn0iKwoiLmNscC1zcGstYmFyIC5te21hcmdpbi1sZWZ0OmF1dG87Zm9udC1zaXplOjEyLjVweDtjb2xvcjojNTU1O3doaXRlLXNwYWNlOm5vd3JhcH0iKwoiLmNscC1zcGstYmFyIC5tIGJ7Y29sb3I6IzIzMjcyZH0iKwoiLmNscC1zcGstbmV4dHtiYWNrZ3JvdW5kOiMxNDY3YzY7Y29sb3I6I2ZmZjtib3JkZXI6MDtib3JkZXItcmFkaXVzOjRweDtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEyLjVweDtsZXR0ZXItc3BhY2luZzouOHB4O3BhZGRpbmc6N3B4IDE4cHg7Y3Vyc29yOnBvaW50ZXJ9IisKIi5jbHAtc3BrLW5leHQ6aG92ZXJ7YmFja2dyb3VuZDojMGY1N2FifSIrCiIuY2xwLXNway1ib2R5e3BhZGRpbmc6MThweCAyMHB4IDIycHh9IisKIi5jbHAtc3BrLXByb21wdHtkaXNwbGF5OmZsZXg7Z2FwOjlweDtjb2xvcjojMGI1Mzk0O2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTUuNXB4O2xpbmUtaGVpZ2h0OjEuNX0iKwoiLmNscC1zcGstcHJvbXB0IC5pe2ZsZXg6MCAwIGF1dG87d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiMyYzdjYjA7Y29sb3I6I2ZmZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo4MDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MnB4fSIrCiIuY2xwLXNway1sZWFke2NvbG9yOiMwYjUzOTQ7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206NHB4fSIrCiIuY2xwLXNway1jaG9vc2Uxe21hcmdpbjoxNHB4IDAgMDtwYWRkaW5nOjEycHggMTZweDtiYWNrZ3JvdW5kOiNmNWY3ZmE7Ym9yZGVyOjFweCBzb2xpZCAjZGZlNGVhO2JvcmRlci1yYWRpdXM6OXB4O2ZvbnQtc2l6ZToxNC41cHg7bGluZS1oZWlnaHQ6MS41NX0iKwoiLmNscC1zcGstY2hvb3NlMSAuZXtmb250LXdlaWdodDo4MDA7Y29sb3I6IzhhMWYxZjtsZXR0ZXItc3BhY2luZzouNHB4fSIrCiIuY2xwLXNway1pbWd7ZGlzcGxheTpibG9jazttYXgtd2lkdGg6NTQwcHg7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNjZmQ0ZGE7Ym9yZGVyLXJhZGl1czo4cHg7bWFyZ2luOjE2cHggMCA0cHh9IisKIi5jbHAtc3BrLW5vdGV7Zm9udC1zaXplOjEycHg7Y29sb3I6IzhhOTI5YzttYXJnaW4tdG9wOjZweH0iKwoiLmNscC1zcGstdGltZXJyb3d7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjIwcHggMCA2cHh9IisKIi5jbHAtc3BrLXRpbWVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjE2cHg7YmFja2dyb3VuZDojZTllY2VmO2JvcmRlcjoxcHggc29saWQgI2Q2ZGFkZTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4IDI2cHg7bWluLXdpZHRoOjMwMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9IisKIi5jbHAtc3BrLXRpbWVyIC5pY3t3aWR0aDo0NHB4O2hlaWdodDo0NHB4O2JvcmRlci1yYWRpdXM6OHB4O2JhY2tncm91bmQ6I2Y4ZjlmYTtib3JkZXI6MXB4IHNvbGlkICNkNmRhZGU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToyMnB4fSIrCiIuY2xwLXNway10aW1lciAubGJ7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMzMzM4M2Y7Zm9udC1zaXplOjE1cHh9IisKIi5jbHAtc3BrLXRpbWVyIC5ue2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjojMGI1N2QwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtczttaW4td2lkdGg6NTJweDt0ZXh0LWFsaWduOmNlbnRlcn0iKwoiLmNscC1zcGstdGltZXIucmVje2JhY2tncm91bmQ6I2ZkZWNlYjtib3JkZXItY29sb3I6I2YzYjZiM30iKwoiLmNscC1zcGstdGltZXIucmVjIC5ue2NvbG9yOiNjNjI4Mjh9IisKIi5jbHAtc3BrLXRpbWVyLnJlYyAuaWN7YmFja2dyb3VuZDojZmZmO2JvcmRlci1jb2xvcjojZjNiNmIzfSIrCiIuY2xwLXNway1kb3R7d2lkdGg6MTRweDtoZWlnaHQ6MTRweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiNlNTM5MzU7ZGlzcGxheTppbmxpbmUtYmxvY2s7YW5pbWF0aW9uOmNscGJsaW5rIDFzIGluZmluaXRlfSIrCiJAa2V5ZnJhbWVzIGNscGJsaW5rezAlLDEwMCV7b3BhY2l0eToxfTUwJXtvcGFjaXR5Oi4yNX19IisKIi5jbHAtc3BrLWN0cntkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LXdyYXA6d3JhcDttYXJnaW46MTRweCAwIDJweH0iKwoiLmNscC1zcGstYnRue2JvcmRlcjoxLjVweCBzb2xpZCAjYzljZmQ2O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMzMzODNmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OXB4IDE4cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMy41cHg7Y3Vyc29yOnBvaW50ZXJ9IisKIi5jbHAtc3BrLWJ0bjpob3Zlcntib3JkZXItY29sb3I6IzlhYTNhZH0iKwoiLmNscC1zcGstYnRuLnByaXtiYWNrZ3JvdW5kOiMwYjU3ZDA7Ym9yZGVyLWNvbG9yOiMwYjU3ZDA7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstYnRuLnByaTpob3ZlcntiYWNrZ3JvdW5kOiMwYTRjYjV9IisKIi5jbHAtc3BrLWJ0bi53YXJue2JhY2tncm91bmQ6I2M2MjgyODtib3JkZXItY29sb3I6I2M2MjgyODtjb2xvcjojZmZmfSIrCiIuY2xwLXNway1zcGVha25vd3t0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojYzYyODI4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTNweDttYXJnaW4tdG9wOjhweDtsZXR0ZXItc3BhY2luZzouM3B4fSIrCiIuY2xwLXNway1yZXZpZXd7bWFyZ2luOjE2cHggYXV0byAwO21heC13aWR0aDo2NDBweDtiYWNrZ3JvdW5kOiNmMmY5ZjM7Ym9yZGVyOjFweCBzb2xpZCAjYmZlM2M2O2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE0cHggMThweH0iKwoiLmNscC1zcGstcmV2aWV3IC5va3tjb2xvcjojMWU3YjNlO2ZvbnQtd2VpZ2h0OjgwMDtmb250LXNpemU6MTQuNXB4fSIrCiIuY2xwLXNway1yZXZpZXcgYXVkaW97d2lkdGg6MTAwJTttYXJnaW46MTBweCAwIDhweH0iKwoiLmNscC1zcGstbWlje21hcmdpbjoxMnB4IGF1dG8gMDttYXgtd2lkdGg6NjQwcHg7YmFja2dyb3VuZDojZmZmOGU2O2JvcmRlcjoxcHggc29saWQgI2VjZDlhMDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMHB4IDE2cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzdhNWIxMn0iKwoiLmNscC1zcGstb3B0c3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7bWFyZ2luOjE4cHggMCA0cHh9IisKIi5jbHAtc3BrLWNhcmR7Ym9yZGVyOjJweCBzb2xpZCAjZDVkYWUwO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEzcHggMTVweCAxNXB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6I2ZmZjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTVzfSIrCiIuY2xwLXNway1jYXJkOmhvdmVye2JvcmRlci1jb2xvcjojOGZiNGU4fSIrCiIuY2xwLXNway1jYXJkLnNlbHtib3JkZXItY29sb3I6IzJlOWU0ZjtiYWNrZ3JvdW5kOiNlZWY5ZjB9IisKIi5jbHAtc3BrLWNhcmQucGxhaW57Y3Vyc29yOmRlZmF1bHR9IisKIi5jbHAtc3BrLWNhcmQgLmhke3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiM2Yjc0ODA7bGV0dGVyLXNwYWNpbmc6LjNweDttYXJnaW4tYm90dG9tOjhweH0iKwoiLmNscC1zcGstY2FyZCBpbWd7d2lkdGg6MTAwJTtib3JkZXItcmFkaXVzOjdweDtib3JkZXI6MXB4IHNvbGlkICNlMmU2ZWF9IisKIi5jbHAtc3BrLWNhcmQgLnR0e2ZvbnQtd2VpZ2h0OjgwMDtmb250LXNpemU6MTVweDttYXJnaW46MTBweCAwIDZweDtjb2xvcjojMjMyNzJkfSIrCiIuY2xwLXNway1jYXJkIHVse21hcmdpbjowO3BhZGRpbmctbGVmdDoxOHB4O2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjojM2M0MzRifSIrCiIuY2xwLXNway1jYXJkIC5waWNre21hcmdpbi10b3A6MTBweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo4MDA7Y29sb3I6IzJlOWU0Zjtmb250LXNpemU6MTNweDttaW4taGVpZ2h0OjE4cHh9IisKIi5jbHAtc3BrLWhpbnR7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzZiNzQ4MDtmb250LXNpemU6MTNweDttYXJnaW4tdG9wOjEwcHh9IisKIi5jbHAtc3BrLWFjY3ttYXJnaW4tdG9wOjIycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDlkZGUzO2JvcmRlci1yYWRpdXM6MTFweDtvdmVyZmxvdzpoaWRkZW59IisKIi5jbHAtc3BrLWFjYz5idXR0b257d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZDojZjZmN2Y5O2JvcmRlcjowO3BhZGRpbmc6MTJweCAxNnB4O2ZvbnQtd2VpZ2h0OjgwMDtmb250LXNpemU6MTRweDtjb2xvcjojM2M0MDQ2O2N1cnNvcjpwb2ludGVyfSIrCiIuY2xwLXNway1hY2Nib2R5e2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjE0cHggMTZweCAxOHB4O2JhY2tncm91bmQ6I2ZmZn0iKwoiLmNscC1zcGstYWNjLm9wZW4gLmNscC1zcGstYWNjYm9keXtkaXNwbGF5OmJsb2NrfSIrCiIuY2xwLXNway10YWJze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MTJweH0iKwoiLmNscC1zcGstdGFie2JvcmRlcjoxLjVweCBzb2xpZCAjYzljZmQ2O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NnB4IDE1cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzRhNTI1Y30iKwoiLmNscC1zcGstdGFiLm9ue2JhY2tncm91bmQ6IzBiNTdkMDtib3JkZXItY29sb3I6IzBiNTdkMDtjb2xvcjojZmZmfSIrCiIuY2xwLXNway10YWJwYW5le2Rpc3BsYXk6bm9uZTtmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNjV9IisKIi5jbHAtc3BrLXRhYnBhbmUub257ZGlzcGxheTpibG9ja30iKwoiLmNscC1zcGstdGFicGFuZSB1bHtwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW46OHB4IDB9IisKIi5jbHAtc3BrLXRhYnBhbmUgbGl7bWFyZ2luOjVweCAwfSIrCiIuY2xwLXNway1zYW1wbGV7YmFja2dyb3VuZDojZjhmOWZiO2JvcmRlcjoxcHggc29saWQgI2UzZTdlYztib3JkZXItbGVmdDo0cHggc29saWQgIzBiNTdkMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEzcHggMTZweDt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0iKwoiLmNscC1zcGstc2FtcGxlLnM2e2JvcmRlci1sZWZ0LWNvbG9yOiNlOGExM2N9IisKIi5jbHAtc3BrLXBocntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjdweDttYXJnaW4tdG9wOjEwcHh9IisKIi5jbHAtc3BrLXBociBzcGFue2JhY2tncm91bmQ6I2VlZjNmYjtib3JkZXI6MXB4IHNvbGlkICNjZGRkZjU7Y29sb3I6IzE3NGE5Yztib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDEycHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDB9IisKIi5jbHAtc3BrLXJ1Yntib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7d2lkdGg6MTAwJTtmb250LXNpemU6MTMuNXB4fSIrCiIuY2xwLXNway1ydWIgdGR7cGFkZGluZzo3cHggNnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWYwZjN9IisKIi5jbHAtc3BrLXN0YXJ7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE5cHg7Y29sb3I6I2M5Y2ZkNjtwYWRkaW5nOjAgMXB4O3VzZXItc2VsZWN0Om5vbmV9IisKIi5jbHAtc3BrLXN0YXIub257Y29sb3I6I2YwYTcxYn0iKwoiLmNscC1zcGstZXN0e21hcmdpbi10b3A6MTBweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFlN2IzZX0iKwoiLmNscC1zcGstYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDojZmZmM2NkO2JvcmRlcjoxcHggc29saWQgI2U4ZDQ4Yjtjb2xvcjojN2E1YjEyO2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6M3B4IDEycHg7bWFyZ2luLWJvdHRvbToxMHB4fSIrCiIuY2xwLXNway1pbnRybyB1bHtmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNztwYWRkaW5nLWxlZnQ6MjBweH0iKwoiLmNscC1zcGstaW50cm8gbGl7bWFyZ2luOjdweCAwfSIrCiIuY2xwLXNway1taWNyb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcDtiYWNrZ3JvdW5kOiNmNmY3Zjk7Ym9yZGVyOjFweCBzb2xpZCAjZTBlNGU5O2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEzcHggMTZweDttYXJnaW46MTZweCAwfSIrCiIuY2xwLXNway1taWNzdHtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzLjVweH0iKwoiLmNscC1zcGstbWljc3Qub2t7Y29sb3I6IzFlN2IzZX0uY2xwLXNway1taWNzdC5iYWR7Y29sb3I6I2M2MjgyOH0iKwoiLmNscC1zcGstZW5kIHRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToxNHB4fSIrCiIuY2xwLXNway1lbmQgdGQsLmNscC1zcGstZW5kIHRoe3BhZGRpbmc6OXB4IDhweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWNlZmYyO3RleHQtYWxpZ246bGVmdH0iKwoiLmNscC1zcGstZW5kIGF1ZGlve2hlaWdodDozNHB4O21heC13aWR0aDoyMzBweH0iKwoiQG1lZGlhKG1heC13aWR0aDo3MDBweCl7LmNscC1zcGstb3B0c3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfS5jbHAtc3BrLWJhciAubXtvcmRlcjozO21hcmdpbi1sZWZ0OjA7d2lkdGg6MTAwJX0uY2xwLXNway1oZXJvIGgxe2ZvbnQtc2l6ZToyMnB4fS5jbHAtc3BrLWJvZHl7cGFkZGluZzoxNHB4IDEycHggMThweH19IjsKdmFyIHN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsgc3QudGV4dENvbnRlbnQgPSBDU1M7IGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3QpOwoKLyogLS0tLS0tLS0tLSBzdGF0ZSAtLS0tLS0tLS0tICovCnZhciBTID0gewogIGN1cjogLTEsICAgICAgICAgICAgLyogLTEgaW50cm8sIDAuLjggdGFza3MsIDk5IGVuZCAqLwogIG1pY1N0YXRlOiAiaWRsZSIsICAgLyogaWRsZXxva3xiYWQgKi8KICBzdHJlYW06IG51bGwsIHJlY29yZGVyOiBudWxsLCBjaHVua3M6IFtdLAogIHRpbWVyOiBudWxsLCBwaGFzZToge30sIHQ1Y2hvaWNlOiB7fSwgcmVjczoge30sIHJ1YnJpYzoge30sCiAgbWltZTogIiIsIGV4dDogIndlYm0iCn07CkQudGFza3MuZm9yRWFjaChmdW5jdGlvbih0KXsgUy5waGFzZVt0LmtdID0gdC5waGFzZWQgPyAiY2hvb3NlLWlkbGUiIDogImlkbGUiOyB9KTsKCmZ1bmN0aW9uIHBpY2tNaW1lKCl7CiAgaWYoIXdpbmRvdy5NZWRpYVJlY29yZGVyKSByZXR1cm4gbnVsbDsKICB2YXIgY2FuZHMgPSBbWyJhdWRpby93ZWJtO2NvZGVjcz1vcHVzIiwid2VibSJdLFsiYXVkaW8vd2VibSIsIndlYm0iXSxbImF1ZGlvL21wNCIsIm00YSJdLFsiYXVkaW8vb2dnO2NvZGVjcz1vcHVzIiwib2dnIl1dOwogIGZvcih2YXIgaT0wO2k8Y2FuZHMubGVuZ3RoO2krKyl7IHRyeXsgaWYoTWVkaWFSZWNvcmRlci5pc1R5cGVTdXBwb3J0ZWQoY2FuZHNbaV1bMF0pKSByZXR1cm4gY2FuZHNbaV07IH1jYXRjaChlKXt9IH0KICByZXR1cm4gWyIiLCJ3ZWJtIl07Cn0KZnVuY3Rpb24gZW5zdXJlTWljKGNiKXsKICBpZihTLm1pY1N0YXRlPT09Im9rIikgcmV0dXJuIGNiKHRydWUpOwogIGlmKFMubWljU3RhdGU9PT0iYmFkIikgcmV0dXJuIGNiKGZhbHNlKTsKICBpZighbmF2aWdhdG9yLm1lZGlhRGV2aWNlcyB8fCAhbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgfHwgIXdpbmRvdy5NZWRpYVJlY29yZGVyKXsgUy5taWNTdGF0ZT0iYmFkIjsgcmV0dXJuIGNiKGZhbHNlKTsgfQogIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHthdWRpbzp0cnVlfSkudGhlbihmdW5jdGlvbihzdHJlYW0pewogICAgUy5zdHJlYW0gPSBzdHJlYW07IHZhciBtID0gcGlja01pbWUoKTsgUy5taW1lID0gbVswXTsgUy5leHQgPSBtWzFdOyBTLm1pY1N0YXRlPSJvayI7IGNiKHRydWUpOwogIH0pLmNhdGNoKGZ1bmN0aW9uKCl7IFMubWljU3RhdGU9ImJhZCI7IGNiKGZhbHNlKTsgfSk7Cn0KZnVuY3Rpb24gYmVlcChuKXsKICB0cnl7CiAgICB2YXIgY3R4ID0gd2luZG93Ll9fY2xwQUMgPSB3aW5kb3cuX19jbHBBQyB8fCBuZXcgKHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKCk7CiAgICB2YXIgdDAgPSBjdHguY3VycmVudFRpbWU7CiAgICBmb3IodmFyIGk9MDtpPG47aSsrKXsKICAgICAgdmFyIG8gPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpLCBnID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgICAgby5mcmVxdWVuY3kudmFsdWUgPSA4ODA7IG8uY29ubmVjdChnKTsgZy5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7CiAgICAgIGcuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsdDAraSowLjI1KTsgZy5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4xOCx0MCtpKjAuMjUrMC4wMik7CiAgICAgIGcuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSx0MCtpKjAuMjUrMC4xOCk7CiAgICAgIG8uc3RhcnQodDAraSowLjI1KTsgby5zdG9wKHQwK2kqMC4yNSswLjIpOwogICAgfQogIH1jYXRjaChlKXt9Cn0KZnVuY3Rpb24gc3RvcFRpbWVyKCl7IGlmKFMudGltZXIpeyBjbGVhckludGVydmFsKFMudGltZXIpOyBTLnRpbWVyPW51bGw7IH0gfQpmdW5jdGlvbiBjb3VudGRvd24oc2Vjcywgb25UaWNrLCBvbkVuZCl7CiAgc3RvcFRpbWVyKCk7CiAgdmFyIGVuZCA9IERhdGUubm93KCkgKyBzZWNzKjEwMDA7CiAgb25UaWNrKHNlY3MpOwogIFMudGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKChlbmQtRGF0ZS5ub3coKSkvMTAwMCkpOwogICAgb25UaWNrKGxlZnQpOwogICAgaWYobGVmdDw9MCl7IHN0b3BUaW1lcigpOyBvbkVuZCgpOyB9CiAgfSwgMjUwKTsKfQpmdW5jdGlvbiBzdG9wUmVjb3JkaW5nKCl7CiAgaWYoUy5yZWNvcmRlciAmJiBTLnJlY29yZGVyLnN0YXRlIT09ImluYWN0aXZlIil7IHRyeXsgUy5yZWNvcmRlci5zdG9wKCk7IH1jYXRjaChlKXt9IH0KICBTLnJlY29yZGVyID0gbnVsbDsKfQpmdW5jdGlvbiBsZWF2ZUNsZWFudXAoKXsgc3RvcFRpbWVyKCk7IHN0b3BSZWNvcmRpbmcoKTsgfQoKLyogLS0tLS0tLS0tLSBoZWxwZXJzIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gZWwodGFnLCBjbHMsIGh0bWwpeyB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7IGlmKGNscyllLmNsYXNzTmFtZT1jbHM7IGlmKGh0bWwhPW51bGwpZS5pbm5lckhUTUw9aHRtbDsgcmV0dXJuIGU7IH0KZnVuY3Rpb24gZm10TWV0YSh0KXsKICBpZih0LnBoYXNlZCkgcmV0dXJuICIiOwogIHJldHVybiAiUHJlcGFyYXRpb246IDxiPiIrdC5wcmVwKyIgc2Vjb25kczwvYj4gJm5ic3A7UmVjb3JkaW5nOiA8Yj4iK3QucmVjKyIgc2Vjb25kczwvYj4iOwp9CmZ1bmN0aW9uIHRhc2tUaXRsZSh0KXsKICBpZih0Lndhcm11cCkgcmV0dXJuIEQuaGVhZGVyKyIgLSBTcGVha2luZyBQcmFjdGljZSBUYXNrIjsKICByZXR1cm4gRC5oZWFkZXIrIiAtIFNwZWFraW5nIFRhc2sgIit0Lm51bSsiOiAiK3QudHlwZUVuOwp9CmZ1bmN0aW9uIGVzdFRleHQoYXZnKXsKICBpZihhdmc+PTQuNSkgcmV0dXJuICJDTEIgOSsiOyBpZihhdmc+PTMuNSkgcmV0dXJuICJDTEIgN1x1MjAxMzgiOyBpZihhdmc+PTIuNSkgcmV0dXJuICJDTEIgNVx1MjAxMzYiOyByZXR1cm4gIkNMQiA0IG9yIGJlbG93IjsKfQoKLyogLS0tLS0tLS0tLSByZW5kZXIgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiByZW5kZXIoKXsKICBsZWF2ZUNsZWFudXAoKTsKICByb290LmlubmVySFRNTCA9ICIiOwogIHZhciB3cmFwID0gZWwoImRpdiIsImNscC1zcGstd3JhcCIpOwogIHdyYXAuYXBwZW5kQ2hpbGQoaGVybygpKTsKICBpZihTLmN1cj49MCAmJiBTLmN1cjxELnRhc2tzLmxlbmd0aCkgd3JhcC5hcHBlbmRDaGlsZChjaGlwcygpKTsKICBpZihTLmN1cj09PS0xKSB3cmFwLmFwcGVuZENoaWxkKGludHJvKCkpOwogIGVsc2UgaWYoUy5jdXI9PT05OSkgd3JhcC5hcHBlbmRDaGlsZChlbmRTY3JlZW4oKSk7CiAgZWxzZSB3cmFwLmFwcGVuZENoaWxkKHRhc2tQYW5lbChELnRhc2tzW1MuY3VyXSkpOwogIHJvb3QuYXBwZW5kQ2hpbGQod3JhcCk7CiAgdHJ5eyB3aW5kb3cuc2Nyb2xsVG8oe3RvcDogcm9vdC5vZmZzZXRUb3AtMTAsIGJlaGF2aW9yOiJzbW9vdGgifSk7IH1jYXRjaChlKXt9Cn0KZnVuY3Rpb24gaGVybygpewogIHZhciBoID0gZWwoImRpdiIsImNscC1zcGstaGVybyIpOwogIGguYXBwZW5kQ2hpbGQoZWwoInNwYW4iLCJ0YWciLFUuaGVyb1RhZykpOwogIGguYXBwZW5kQ2hpbGQoZWwoImgxIixudWxsLEQudGl0bGUuc3BsaXQoIlx1MjAxNCIpWzFdID8gIlNwZWFraW5nIFx1MjAxNCIrRC50aXRsZS5zcGxpdCgiXHUyMDE0IilbMV0gOiBELnRpdGxlKSk7CiAgdmFyIG0gPSBlbCgiZGl2IiwibWV0YSIpOwogIFUuaGVyb01ldGEuZm9yRWFjaChmdW5jdGlvbih4KXsgbS5hcHBlbmRDaGlsZChlbCgic3BhbiIsbnVsbCx4KSk7IH0pOwogIGguYXBwZW5kQ2hpbGQobSk7CiAgcmV0dXJuIGg7Cn0KZnVuY3Rpb24gY2hpcHMoKXsKICB2YXIgYyA9IGVsKCJkaXYiLCJjbHAtc3BrLWNoaXBzIik7CiAgRC50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7CiAgICB2YXIgYiA9IGVsKCJidXR0b24iLCJjbHAtc3BrLWNoaXAiKyhpPT09Uy5jdXI\/IiBjdXIiOihTLnJlY3NbdC5rXT8iIGRvbmUiOiIiKSksIHQud2FybXVwPyJXIjpTdHJpbmcodC5udW0pKTsKICAgIGIudGl0bGUgPSB0LnR5cGVFbjsKICAgIGIub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyPWk7IHJlbmRlcigpOyB9OwogICAgYy5hcHBlbmRDaGlsZChiKTsKICB9KTsKICB2YXIgZSA9IGVsKCJidXR0b24iLCJjbHAtc3BrLWNoaXAiKyhTLmN1cj09PTk5PyIgY3VyIjoiIiksIlx1ZDgzY1x1ZGZjMSIpOwogIGUudGl0bGUgPSAiRmluaXNoIjsgZS5vbmNsaWNrID0gZnVuY3Rpb24oKXsgUy5jdXI9OTk7IHJlbmRlcigpOyB9OwogIGMuYXBwZW5kQ2hpbGQoZSk7CiAgcmV0dXJuIGM7Cn0KZnVuY3Rpb24gaW50cm8oKXsKICB2YXIgcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXBhbmVsIGNscC1zcGstaW50cm8iKTsKICB2YXIgYmFyID0gZWwoImRpdiIsImNscC1zcGstYmFyIik7CiAgYmFyLmFwcGVuZENoaWxkKGVsKCJzcGFuIiwidCIsRC5oZWFkZXIrIiAtIFNwZWFraW5nIikpOwogIHZhciBueCA9IGVsKCJidXR0b24iLCJjbHAtc3BrLW5leHQiLFUubmV4dCk7IG54LnN0eWxlLm1hcmdpbkxlZnQ9ImF1dG8iOwogIG54Lm9uY2xpY2sgPSBmdW5jdGlvbigpeyBTLmN1cj0wOyByZW5kZXIoKTsgfTsKICBiYXIuYXBwZW5kQ2hpbGQobngpOwogIHAuYXBwZW5kQ2hpbGQoYmFyKTsKICB2YXIgYiA9IGVsKCJkaXYiLCJjbHAtc3BrLWJvZHkiKTsKICB2YXIgcHIgPSBlbCgiZGl2IiwiY2xwLXNway1wcm9tcHQiKTsKICBwci5hcHBlbmRDaGlsZChlbCgic3BhbiIsImkiLCJpIikpOyBwci5hcHBlbmRDaGlsZChlbCgic3BhbiIsbnVsbCwiU3BlYWtpbmcgVGVzdCBJbnN0cnVjdGlvbnMiKSk7CiAgYi5hcHBlbmRDaGlsZChwcik7CiAgdmFyIHVsID0gZWwoInVsIik7CiAgVS5pbnRyb05vdGVzLmZvckVhY2goZnVuY3Rpb24oeCl7IHVsLmFwcGVuZENoaWxkKGVsKCJsaSIsbnVsbCx4KSk7IH0pOwogIGIuYXBwZW5kQ2hpbGQodWwpOwogIHZhciBtaWNyb3cgPSBlbCgiZGl2IiwiY2xwLXNway1taWNyb3ciKTsKICB2YXIgbWJ0biA9IGVsKCJidXR0b24iLCJjbHAtc3BrLWJ0biBwcmkiLFUubWljRW5hYmxlKTsKICB2YXIgbXN0ID0gZWwoInNwYW4iLCJjbHAtc3BrLW1pY3N0IiwiIik7CiAgbWJ0bi5vbmNsaWNrID0gZnVuY3Rpb24oKXsKICAgIG1idG4uZGlzYWJsZWQgPSB0cnVlOwogICAgZW5zdXJlTWljKGZ1bmN0aW9uKG9rKXsKICAgICAgbXN0LmNsYXNzTmFtZSA9ICJjbHAtc3BrLW1pY3N0ICIrKG9rPyJvayI6ImJhZCIpOwogICAgICBtc3QuaW5uZXJIVE1MID0gb2sgPyAiXHUyNzE0ICIrVS5taWNSZWFkeSA6ICJcdTI3MTYgIitVLm1pY0Jsb2NrZWQ7CiAgICAgIGlmKCFvaykgbWJ0bi5kaXNhYmxlZCA9IGZhbHNlOwogICAgfSk7CiAgfTsKICBtaWNyb3cuYXBwZW5kQ2hpbGQobWJ0bik7IG1pY3Jvdy5hcHBlbmRDaGlsZChtc3QpOwogIGIuYXBwZW5kQ2hpbGQobWljcm93KTsKICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLW5vdGUiLFUubWljTm90ZSkpOwogIHZhciBjdHIgPSBlbCgiZGl2IiwiY2xwLXNway1jdHIiKTsKICB2YXIgZ28gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4gcHJpIixVLnN0YXJ0VGVzdCsiIFx1MjViNiIpOwogIGdvLnN0eWxlLmZvbnRTaXplPSIxNXB4IjsgZ28uc3R5bGUucGFkZGluZz0iMTJweCAyNnB4IjsKICBnby5vbmNsaWNrID0gZnVuY3Rpb24oKXsgUy5jdXI9MDsgcmVuZGVyKCk7IH07CiAgY3RyLmFwcGVuZENoaWxkKGdvKTsKICBiLmFwcGVuZENoaWxkKGN0cik7CiAgcC5hcHBlbmRDaGlsZChiKTsKICByZXR1cm4gcDsKfQoKLyogLS0tLS0tLS0tLSB0YXNrIHBhbmVsIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gdGFza1BhbmVsKHQpewogIHZhciBwID0gZWwoImRpdiIsImNscC1zcGstcGFuZWwiKTsKICB2YXIgYmFyID0gZWwoImRpdiIsImNscC1zcGstYmFyIik7CiAgYmFyLmFwcGVuZENoaWxkKGVsKCJzcGFuIiwidCIsdGFza1RpdGxlKHQpKSk7CiAgdmFyIG1ldGEgPSBlbCgic3BhbiIsIm0iLCB0LnBoYXNlZCA\/IHBoYXNlZE1ldGEodCkgOiBmbXRNZXRhKHQpKTsKICBiYXIuYXBwZW5kQ2hpbGQobWV0YSk7CiAgdmFyIG54ID0gZWwoImJ1dHRvbiIsImNscC1zcGstbmV4dCIsVS5uZXh0KTsKICBueC5vbmNsaWNrID0gZnVuY3Rpb24oKXsgUy5jdXIgPSAoUy5jdXIrMSA8IEQudGFza3MubGVuZ3RoKSA\/IFMuY3VyKzEgOiA5OTsgcmVuZGVyKCk7IH07CiAgYmFyLmFwcGVuZENoaWxkKG54KTsKICBwLmFwcGVuZENoaWxkKGJhcik7CiAgdmFyIGIgPSBlbCgiZGl2IiwiY2xwLXNway1ib2R5Iik7CiAgaWYodC53YXJtdXApIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstYmFkZ2UiLFUud2FybXVwQmFkZ2UpKTsKICBpZih0LnBoYXNlZCkgcmVuZGVyVDUodCxiLG1ldGEpOwogIGVsc2UgcmVuZGVyU3RkKHQsYik7CiAgaWYodC50aXBzKSBiLmFwcGVuZENoaWxkKGFjY29yZGlvbih0KSk7CiAgcC5hcHBlbmRDaGlsZChiKTsKICByZXR1cm4gcDsKfQpmdW5jdGlvbiBwaGFzZWRNZXRhKHQpewogIHZhciBwaCA9IFMucGhhc2VbdC5rXXx8IiI7CiAgaWYocGguaW5kZXhPZigiY2hvb3NlIik9PT0wKSByZXR1cm4gIlByZXBhcmF0aW9uOiA8Yj4iK3QuY2hvb3NlLnByZXArIiBzZWNvbmRzPC9iPiI7CiAgcmV0dXJuICJQcmVwYXJhdGlvbjogPGI+Iit0LnNwZWFrLnByZXArIiBzZWNvbmRzPC9iPiAmbmJzcDtSZWNvcmRpbmc6IDxiPiIrdC5zcGVhay5yZWMrIiBzZWNvbmRzPC9iPiI7Cn0KZnVuY3Rpb24gcHJvbXB0Um93KHRleHQsIGxlYWQpewogIHZhciBib3ggPSBlbCgiZGl2Iik7CiAgaWYobGVhZCl7IGJveC5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1sZWFkIixsZWFkKSk7IH0KICB2YXIgcHIgPSBlbCgiZGl2IiwiY2xwLXNway1wcm9tcHQiKTsKICBwci5hcHBlbmRDaGlsZChlbCgic3BhbiIsImkiLCJpIikpOwogIHByLmFwcGVuZENoaWxkKGVsKCJzcGFuIixudWxsLHRleHQpKTsKICBib3guYXBwZW5kQ2hpbGQocHIpOwogIHJldHVybiBib3g7Cn0KZnVuY3Rpb24gcmVuZGVyU3RkKHQsYil7CiAgYi5hcHBlbmRDaGlsZChwcm9tcHRSb3codC5wcm9tcHQsIHQucHJvbXB0TGVhZCkpOwogIGlmKHQuY2hvb3NlT25lKXsKICAgIHZhciBjID0gZWwoImRpdiIsImNscC1zcGstY2hvb3NlMSIsIjxkaXYgY2xhc3M9J2UnPkNob29zZSBPTkU6PC9kaXY+PGRpdiBjbGFzcz0nZScgc3R5bGU9J21hcmdpbi10b3A6NnB4Jz5FSVRIRVI8L2Rpdj48ZGl2PiIrdC5jaG9vc2VPbmVbMF0rIjwvZGl2PjxkaXYgY2xhc3M9J2UnIHN0eWxlPSdtYXJnaW4tdG9wOjZweCc+T1I8L2Rpdj48ZGl2PiIrdC5jaG9vc2VPbmVbMV0rIjwvZGl2PiIpOwogICAgYi5hcHBlbmRDaGlsZChjKTsKICB9CiAgaWYodC5pbWcgJiYgRC5pbWdzW3QuaW1nXSl7CiAgICB2YXIgaW0gPSBlbCgiaW1nIiwiY2xwLXNway1pbWciKTsgaW0uc3JjID0gRC5pbWdzW3QuaW1nXTsgaW0uYWx0ID0gdC50eXBlRW47CiAgICBiLmFwcGVuZENoaWxkKGltKTsKICB9CiAgYi5hcHBlbmRDaGlsZCh0aW1lckJsb2NrKHQuaywgdC5wcmVwLCB0LnJlYywgInQiKSk7Cn0KZnVuY3Rpb24gcmVuZGVyVDUodCxiLG1ldGFFbCl7CiAgdmFyIHBoID0gUy5waGFzZVt0LmtdOwogIGlmKHBoLmluZGV4T2YoImNob29zZSIpPT09MCl7CiAgICBiLmFwcGVuZENoaWxkKHByb21wdFJvdyh0LmNob29zZS5zaXR1YXRpb24pKTsKICAgIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstbm90ZSIsdC5jaG9vc2Uubm90ZSkpOwogICAgdmFyIGdyaWQgPSBlbCgiZGl2IiwiY2xwLXNway1vcHRzIik7CiAgICB0LmNob29zZS5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24obyxpZHgpewogICAgICB2YXIgY2FyZCA9IGVsKCJkaXYiLCJjbHAtc3BrLWNhcmQiKyhTLnQ1Y2hvaWNlW3Qua109PT1pZHg\/IiBzZWwiOiIiKSk7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQoaW1nVGl0bGVCdWxsZXRzKG8pKTsKICAgICAgdmFyIHBrID0gZWwoImRpdiIsInBpY2siLCBTLnQ1Y2hvaWNlW3Qua109PT1pZHggPyAiXHUyNzE0IFNlbGVjdGVkIiA6ICIiKTsKICAgICAgY2FyZC5hcHBlbmRDaGlsZChwayk7CiAgICAgIGNhcmQub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICAgICAgUy50NWNob2ljZVt0LmtdID0gaWR4OwogICAgICAgIGdyaWQucXVlcnlTZWxlY3RvckFsbCgiLmNscC1zcGstY2FyZCIpLmZvckVhY2goZnVuY3Rpb24oY2Qsail7CiAgICAgICAgICBjZC5jbGFzc05hbWUgPSAiY2xwLXNway1jYXJkIisoaj09PWlkeD8iIHNlbCI6IiIpOwogICAgICAgICAgY2QucXVlcnlTZWxlY3RvcigiLnBpY2siKS50ZXh0Q29udGVudCA9IChqPT09aWR4KT8iXHUyNzE0IFNlbGVjdGVkIjoiIjsKICAgICAgICB9KTsKICAgICAgICBjYnRuLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKICAgICAgfTsKICAgICAgZ3JpZC5hcHBlbmRDaGlsZChjYXJkKTsKICAgIH0pOwogICAgYi5hcHBlbmRDaGlsZChncmlkKTsKICAgIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstaGludCIsVS5jaG9vc2VIaW50KSk7CiAgICAvKiBjb3VudGRvd24gZm9yIGNob29zZSBwaGFzZSAqLwogICAgdmFyIHRyb3cgPSBlbCgiZGl2IiwiY2xwLXNway10aW1lcnJvdyIpOwogICAgdmFyIHRtID0gZWwoImRpdiIsImNscC1zcGstdGltZXIiKTsKICAgIHRtLmFwcGVuZENoaWxkKGVsKCJzcGFuIiwiaWMiLCJcdWQ4M2RcdWRkNTIiKSk7CiAgICB2YXIgbGIgPSBlbCgiZGl2Iik7IGxiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJsYiIsVS5wcmVwVGl0bGUpKTsKICAgIHRtLmFwcGVuZENoaWxkKGxiKTsKICAgIHZhciBuID0gZWwoInNwYW4iLCJuIixTdHJpbmcodC5jaG9vc2UucHJlcCkpOwogICAgdG0uYXBwZW5kQ2hpbGQobik7CiAgICB0cm93LmFwcGVuZENoaWxkKHRtKTsKICAgIGIuYXBwZW5kQ2hpbGQodHJvdyk7CiAgICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7CiAgICB2YXIgc3RhcnQgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4gcHJpIixVLnN0YXJ0UHJlcCk7CiAgICB2YXIgY2J0biA9IGVsKCJidXR0b24iLCJjbHAtc3BrLWJ0biIsVS5jb25maXJtQ2hvaWNlKTsKICAgIGNidG4uc3R5bGUuZGlzcGxheSA9IChTLnQ1Y2hvaWNlW3Qua10hPW51bGwpPyJpbmxpbmUtYmxvY2siOiJub25lIjsKICAgIHZhciBnb1NwZWFrID0gZnVuY3Rpb24oKXsKICAgICAgc3RvcFRpbWVyKCk7CiAgICAgIGlmKFMudDVjaG9pY2VbdC5rXT09bnVsbCkgUy50NWNob2ljZVt0LmtdID0gMDsKICAgICAgUy5waGFzZVt0LmtdID0gInNwZWFrIjsKICAgICAgcmVuZGVyKCk7CiAgICB9OwogICAgc3RhcnQub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICAgIHN0YXJ0LmRpc2FibGVkID0gdHJ1ZTsKICAgICAgUy5waGFzZVt0LmtdID0gImNob29zZS1ydW4iOwogICAgICBjb3VudGRvd24odC5jaG9vc2UucHJlcCwgZnVuY3Rpb24obGVmdCl7IG4udGV4dENvbnRlbnQgPSBTdHJpbmcobGVmdCk7IH0sIGdvU3BlYWspOwogICAgfTsKICAgIGNidG4ub25jbGljayA9IGdvU3BlYWs7CiAgICBjdHIuYXBwZW5kQ2hpbGQoc3RhcnQpOyBjdHIuYXBwZW5kQ2hpbGQoY2J0bik7CiAgICBiLmFwcGVuZENoaWxkKGN0cik7CiAgICBpZihTLnBoYXNlW3Qua109PT0iY2hvb3NlLXJ1biIpewogICAgICBzdGFydC5kaXNhYmxlZCA9IHRydWU7CiAgICAgIGNvdW50ZG93bih0LmNob29zZS5wcmVwLCBmdW5jdGlvbihsZWZ0KXsgbi50ZXh0Q29udGVudD1TdHJpbmcobGVmdCk7IH0sIGdvU3BlYWspOwogICAgfQogIH0gZWxzZSB7CiAgICBtZXRhRWwuaW5uZXJIVE1MID0gcGhhc2VkTWV0YSh0KTsKICAgIGIuYXBwZW5kQ2hpbGQocHJvbXB0Um93KHQuc3BlYWsucHJvbXB0KSk7CiAgICB2YXIgZ3JpZCA9IGVsKCJkaXYiLCJjbHAtc3BrLW9wdHMiKTsKICAgIHZhciBvdGhlciA9IGVsKCJkaXYiLCJjbHAtc3BrLWNhcmQgcGxhaW4iKTsKICAgIG90aGVyLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJoZCIsdC5zcGVhay5vdGhlckxhYmVsKSk7CiAgICBvdGhlci5hcHBlbmRDaGlsZChpbWdUaXRsZUJ1bGxldHModC5zcGVhay5vdGhlcikpOwogICAgZ3JpZC5hcHBlbmRDaGlsZChvdGhlcik7CiAgICB2YXIgY2hvc2VuID0gdC5jaG9vc2Uub3B0aW9uc1tTLnQ1Y2hvaWNlW3Qua10hPW51bGwgPyBTLnQ1Y2hvaWNlW3Qua10gOiAwXTsKICAgIHZhciBtaW5lID0gZWwoImRpdiIsImNscC1zcGstY2FyZCBwbGFpbiBzZWwiKTsKICAgIG1pbmUuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImhkIixVLnlvdXJDaG9pY2UpKTsKICAgIG1pbmUuYXBwZW5kQ2hpbGQoaW1nVGl0bGVCdWxsZXRzKGNob3NlbikpOwogICAgZ3JpZC5hcHBlbmRDaGlsZChtaW5lKTsKICAgIGIuYXBwZW5kQ2hpbGQoZ3JpZCk7CiAgICBiLmFwcGVuZENoaWxkKHRpbWVyQmxvY2sodC5rLCB0LnNwZWFrLnByZXAsIHQuc3BlYWsucmVjLCAidDVzIikpOwogIH0KfQpmdW5jdGlvbiBpbWdUaXRsZUJ1bGxldHMobyl7CiAgdmFyIGJveCA9IGVsKCJkaXYiKTsKICBpZihvLmltZyAmJiBELmltZ3Nbby5pbWddKXsgdmFyIGltID0gZWwoImltZyIpOyBpbS5zcmMgPSBELmltZ3Nbby5pbWddOyBpbS5hbHQgPSBvLnRpdGxlOyBib3guYXBwZW5kQ2hpbGQoaW0pOyB9CiAgYm94LmFwcGVuZENoaWxkKGVsKCJkaXYiLCJ0dCIsby50aXRsZSkpOwogIHZhciB1bCA9IGVsKCJ1bCIpOwogIG8uYnVsbGV0cy5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB1bC5hcHBlbmRDaGlsZChlbCgibGkiLG51bGwseCkpOyB9KTsKICBib3guYXBwZW5kQ2hpbGQodWwpOwogIHJldHVybiBib3g7Cn0KCi8qIC0tLS0tLS0tLS0gcHJlcC9yZWNvcmQgYmxvY2sgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiB0aW1lckJsb2NrKGtleSwgcHJlcFNlY3MsIHJlY1NlY3MsIG1vZGUpewogIHZhciBib3ggPSBlbCgiZGl2Iik7CiAgdmFyIHRyb3cgPSBlbCgiZGl2IiwiY2xwLXNway10aW1lcnJvdyIpOwogIHZhciB0bSA9IGVsKCJkaXYiLCJjbHAtc3BrLXRpbWVyIik7CiAgdmFyIGljID0gZWwoInNwYW4iLCJpYyIsIlx1ZDgzZFx1ZGQ1MiIpOwogIHZhciBsYiA9IGVsKCJkaXYiKTsgdmFyIGxidCA9IGVsKCJkaXYiLCJsYiIsVS5wcmVwVGl0bGUpOyBsYi5hcHBlbmRDaGlsZChsYnQpOwogIHZhciBuID0gZWwoInNwYW4iLCJuIixTdHJpbmcocHJlcFNlY3MpKTsKICB0bS5hcHBlbmRDaGlsZChpYyk7IHRtLmFwcGVuZENoaWxkKGxiKTsgdG0uYXBwZW5kQ2hpbGQobik7CiAgdHJvdy5hcHBlbmRDaGlsZCh0bSk7IGJveC5hcHBlbmRDaGlsZCh0cm93KTsKICB2YXIgc3BlYWtub3cgPSBlbCgiZGl2IiwiY2xwLXNway1zcGVha25vdyIsIiIpOyBib3guYXBwZW5kQ2hpbGQoc3BlYWtub3cpOwogIHZhciBjdHIgPSBlbCgiZGl2IiwiY2xwLXNway1jdHIiKTsgYm94LmFwcGVuZENoaWxkKGN0cik7CiAgdmFyIHJldmlld1Nsb3QgPSBlbCgiZGl2Iik7IGJveC5hcHBlbmRDaGlsZChyZXZpZXdTbG90KTsKICB2YXIgbWljbm90ZSA9IGVsKCJkaXYiKTsgYm94LmFwcGVuZENoaWxkKG1pY25vdGUpOwoKICBmdW5jdGlvbiBzaG93SWRsZSgpewogICAgY3RyLmlubmVySFRNTCA9ICIiOyBzcGVha25vdy50ZXh0Q29udGVudCA9ICIiOwogICAgdG0uY2xhc3NOYW1lID0gImNscC1zcGstdGltZXIiOyBsYnQudGV4dENvbnRlbnQgPSBVLnByZXBUaXRsZTsgaWMudGV4dENvbnRlbnQgPSAiXHVkODNkXHVkZDUyIjsgbi50ZXh0Q29udGVudCA9IFN0cmluZyhwcmVwU2Vjcyk7CiAgICB2YXIgc3RhcnQgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4gcHJpIixVLnN0YXJ0UHJlcCk7CiAgICBzdGFydC5vbmNsaWNrID0gc3RhcnRQcmVwOwogICAgY3RyLmFwcGVuZENoaWxkKHN0YXJ0KTsKICAgIGlmKFMucmVjc1trZXldKSBzaG93UmV2aWV3KGZhbHNlKTsKICB9CiAgZnVuY3Rpb24gc3RhcnRQcmVwKCl7CiAgICBlbnN1cmVNaWMoZnVuY3Rpb24oKXsKICAgICAgY3RyLmlubmVySFRNTCA9ICIiOwogICAgICB2YXIgc2tpcCA9IGVsKCJidXR0b24iLCJjbHAtc3BrLWJ0biIsVS5za2lwUHJlcCk7CiAgICAgIHNraXAub25jbGljayA9IGZ1bmN0aW9uKCl7IHN0b3BUaW1lcigpOyBzdGFydFJlYygpOyB9OwogICAgICBjdHIuYXBwZW5kQ2hpbGQoc2tpcCk7CiAgICAgIGNvdW50ZG93bihwcmVwU2VjcywgZnVuY3Rpb24obGVmdCl7IG4udGV4dENvbnRlbnQgPSBTdHJpbmcobGVmdCk7IH0sIGZ1bmN0aW9uKCl7IHN0YXJ0UmVjKCk7IH0pOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIHN0YXJ0UmVjKCl7CiAgICBiZWVwKDIpOwogICAgdG0uY2xhc3NOYW1lID0gImNscC1zcGstdGltZXIgcmVjIjsKICAgIGljLmlubmVySFRNTCA9ICI8c3BhbiBjbGFzcz0nY2xwLXNway1kb3QnPjwvc3Bhbj4iOwogICAgbi50ZXh0Q29udGVudCA9IFN0cmluZyhyZWNTZWNzKTsKICAgIGN0ci5pbm5lckhUTUwgPSAiIjsKICAgIHZhciBzdG9wcGVkID0gZmFsc2U7CiAgICB2YXIgaGF2ZU1pYyA9IChTLm1pY1N0YXRlPT09Im9rIiAmJiBTLnN0cmVhbSk7CiAgICBsYnQudGV4dENvbnRlbnQgPSBoYXZlTWljID8gVS5yZWNUaXRsZSA6IFUudGltZXJPbmx5OwogICAgc3BlYWtub3cudGV4dENvbnRlbnQgPSBVLnNwZWFrTm93OwogICAgbWljbm90ZS5pbm5lckhUTUwgPSBoYXZlTWljID8gIiIgOiAiPGRpdiBjbGFzcz0nY2xwLXNway1taWMnPiIrVS5taWNCbG9ja2VkKyI8L2Rpdj4iOwogICAgdmFyIHQwID0gRGF0ZS5ub3coKTsKICAgIHZhciBmaW5pc2ggPSBmdW5jdGlvbigpewogICAgICBpZihzdG9wcGVkKSByZXR1cm47IHN0b3BwZWQgPSB0cnVlOwogICAgICBzdG9wVGltZXIoKTsgYmVlcCgxKTsKICAgICAgc3BlYWtub3cudGV4dENvbnRlbnQgPSAiIjsKICAgICAgdmFyIHNlY3MgPSBNYXRoLm1pbihyZWNTZWNzLCBNYXRoLnJvdW5kKChEYXRlLm5vdygpLXQwKS8xMDAwKSk7CiAgICAgIGlmKGhhdmVNaWMgJiYgUy5yZWNvcmRlcil7CiAgICAgICAgUy5yZWNvcmRlci5vbnN0b3AgPSBmdW5jdGlvbigpewogICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihTLmNodW5rcywgUy5taW1lP3t0eXBlOlMubWltZX06dW5kZWZpbmVkKTsKICAgICAgICAgIGlmKFMucmVjc1trZXldICYmIFMucmVjc1trZXldLnVybCl7IHRyeXsgVVJMLnJldm9rZU9iamVjdFVSTChTLnJlY3Nba2V5XS51cmwpOyB9Y2F0Y2goZSl7fSB9CiAgICAgICAgICBTLnJlY3Nba2V5XSA9IHsgYmxvYjogYmxvYiwgdXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpLCBzZWNzOiBzZWNzIH07CiAgICAgICAgICBTLnJlY29yZGVyID0gbnVsbDsKICAgICAgICAgIHNob3dJZGxlKCk7IHNob3dSZXZpZXcodHJ1ZSk7CiAgICAgICAgfTsKICAgICAgICB0cnl7IFMucmVjb3JkZXIuc3RvcCgpOyB9Y2F0Y2goZSl7IFMucmVjc1trZXldID0ge2Jsb2I6bnVsbCx1cmw6bnVsbCxzZWNzOnNlY3N9OyBzaG93SWRsZSgpOyBzaG93UmV2aWV3KHRydWUpOyB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgUy5yZWNzW2tleV0gPSB7IGJsb2I6bnVsbCwgdXJsOm51bGwsIHNlY3M6IHNlY3MgfTsKICAgICAgICBzaG93SWRsZSgpOyBzaG93UmV2aWV3KHRydWUpOwogICAgICB9CiAgICB9OwogICAgaWYoaGF2ZU1pYyl7CiAgICAgIFMuY2h1bmtzID0gW107CiAgICAgIHRyeXsKICAgICAgICBTLnJlY29yZGVyID0gUy5taW1lID8gbmV3IE1lZGlhUmVjb3JkZXIoUy5zdHJlYW0se21pbWVUeXBlOlMubWltZX0pIDogbmV3IE1lZGlhUmVjb3JkZXIoUy5zdHJlYW0pOwogICAgICAgIFMucmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gZnVuY3Rpb24oZXYpeyBpZihldi5kYXRhICYmIGV2LmRhdGEuc2l6ZSkgUy5jaHVua3MucHVzaChldi5kYXRhKTsgfTsKICAgICAgICBTLnJlY29yZGVyLnN0YXJ0KCk7CiAgICAgIH1jYXRjaChlKXsgUy5yZWNvcmRlciA9IG51bGw7IGhhdmVNaWMgPSBmYWxzZTsgbGJ0LnRleHRDb250ZW50ID0gVS50aW1lck9ubHk7IH0KICAgIH0KICAgIHZhciBzdG9wID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHdhcm4iLFUuc3RvcFJlYyk7CiAgICBzdG9wLm9uY2xpY2sgPSBmaW5pc2g7CiAgICBjdHIuYXBwZW5kQ2hpbGQoc3RvcCk7CiAgICBjb3VudGRvd24ocmVjU2VjcywgZnVuY3Rpb24obGVmdCl7IG4udGV4dENvbnRlbnQgPSBTdHJpbmcobGVmdCk7IH0sIGZpbmlzaCk7CiAgfQogIGZ1bmN0aW9uIHNob3dSZXZpZXcoc2Nyb2xsVG8pewogICAgdmFyIHIgPSBTLnJlY3Nba2V5XTsgaWYoIXIpIHJldHVybjsKICAgIHJldmlld1Nsb3QuaW5uZXJIVE1MID0gIiI7CiAgICB2YXIgcnYgPSBlbCgiZGl2IiwiY2xwLXNway1yZXZpZXciKTsKICAgIHJ2LmFwcGVuZENoaWxkKGVsKCJkaXYiLCJvayIsIlx1MjcxNCAiK1UucmVjb3JkZWQrIiAoIityLnNlY3MrInMpIikpOwogICAgaWYoci51cmwpewogICAgICB2YXIgYXUgPSBlbCgiYXVkaW8iKTsgYXUuY29udHJvbHMgPSB0cnVlOyBhdS5zcmMgPSByLnVybDsKICAgICAgcnYuYXBwZW5kQ2hpbGQoYXUpOwogICAgICB2YXIgcm93ID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7CiAgICAgIHZhciBkbCA9IGVsKCJhIiwiY2xwLXNway1idG4iLFUuZG93bmxvYWQpOwogICAgICBkbC5ocmVmID0gci51cmw7IGRsLmRvd25sb2FkID0gImNlbHBpcC1zIitELnNldCsidCIrRC50ZXN0KyItdGFzayIrKGtleT09PSJ3Ij8iMCI6a2V5LnJlcGxhY2UoInQiLCIiKSkrIi4iK1MuZXh0OwogICAgICByb3cuYXBwZW5kQ2hpbGQoZGwpOwogICAgICBydi5hcHBlbmRDaGlsZChyb3cpOwogICAgfQogICAgcmV2aWV3U2xvdC5hcHBlbmRDaGlsZChydik7CiAgICBpZihzY3JvbGxUbyl7IHRyeXsgcnYuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2NrOiJjZW50ZXIifSk7IH1jYXRjaChlKXt9IH0KICB9CiAgc2hvd0lkbGUoKTsKICByZXR1cm4gYm94Owp9CgovKiAtLS0tLS0tLS0tIHRpcHMvc2FtcGxlcyBhY2NvcmRpb24gLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBhY2NvcmRpb24odCl7CiAgdmFyIGFjYyA9IGVsKCJkaXYiLCJjbHAtc3BrLWFjYyIpOwogIHZhciBidG4gPSBlbCgiYnV0dG9uIixudWxsLFUudGlwc1RvZ2dsZSk7CiAgYnRuLm9uY2xpY2sgPSBmdW5jdGlvbigpeyBhY2MuY2xhc3NOYW1lID0gYWNjLmNsYXNzTmFtZS5pbmRleE9mKCJvcGVuIik+LTEgPyAiY2xwLXNway1hY2MiIDogImNscC1zcGstYWNjIG9wZW4iOyB9OwogIGFjYy5hcHBlbmRDaGlsZChidG4pOwogIHZhciBib2R5ID0gZWwoImRpdiIsImNscC1zcGstYWNjYm9keSIpOwogIHZhciB0YWJzID0gZWwoImRpdiIsImNscC1zcGstdGFicyIpOwogIHZhciBwYW5lcyA9IFtdOwogIGZ1bmN0aW9uIGFkZFRhYihsYWJlbCwgcGFuZUJ1aWxkZXIpewogICAgdmFyIGkgPSBwYW5lcy5sZW5ndGg7CiAgICB2YXIgdGIgPSBlbCgiYnV0dG9uIiwiY2xwLXNway10YWIiKyhpPT09MD8iIG9uIjoiIiksbGFiZWwpOwogICAgdmFyIHBuID0gZWwoImRpdiIsImNscC1zcGstdGFicGFuZSIrKGk9PT0wPyIgb24iOiIiKSk7CiAgICBwYW5lQnVpbGRlcihwbik7CiAgICB0Yi5vbmNsaWNrID0gZnVuY3Rpb24oKXsKICAgICAgdGFicy5xdWVyeVNlbGVjdG9yQWxsKCIuY2xwLXNway10YWIiKS5mb3JFYWNoKGZ1bmN0aW9uKHgsail7IHguY2xhc3NOYW1lID0gImNscC1zcGstdGFiIisoaj09PWk\/IiBvbiI6IiIpOyB9KTsKICAgICAgYm9keS5xdWVyeVNlbGVjdG9yQWxsKCIuY2xwLXNway10YWJwYW5lIikuZm9yRWFjaChmdW5jdGlvbih4LGopeyB4LmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRhYnBhbmUiKyhqPT09aT8iIG9uIjoiIik7IH0pOwogICAgfTsKICAgIHRhYnMuYXBwZW5kQ2hpbGQodGIpOyBwYW5lcy5wdXNoKHBuKTsKICB9CiAgYWRkVGFiKFUudGFiVGlwcywgZnVuY3Rpb24ocG4pewogICAgdmFyIHVsID0gZWwoInVsIik7CiAgICB0LnRpcHMuYnVsbGV0cy5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB1bC5hcHBlbmRDaGlsZChlbCgibGkiLG51bGwseCkpOyB9KTsKICAgIHBuLmFwcGVuZENoaWxkKHVsKTsKICAgIHBuLmFwcGVuZENoaWxkKGVsKCJkaXYiLG51bGwsIjxiPiIrVS51c2VmdWxQaHJhc2VzKyI6PC9iPiIpKTsKICAgIHZhciBwaCA9IGVsKCJkaXYiLCJjbHAtc3BrLXBociIpOwogICAgdC50aXBzLnBocmFzZXMuZm9yRWFjaChmdW5jdGlvbih4KXsgcGguYXBwZW5kQ2hpbGQoZWwoInNwYW4iLG51bGwseCkpOyB9KTsKICAgIHBuLmFwcGVuZENoaWxkKHBoKTsKICB9KTsKICBpZih0LnM2KSBhZGRUYWIoVS50YWJTNiwgZnVuY3Rpb24ocG4peyBwbi5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1zYW1wbGUgczYiLHQuczYpKTsgfSk7CiAgaWYodC5zOSkgYWRkVGFiKFUudGFiUzksIGZ1bmN0aW9uKHBuKXsgcG4uYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstc2FtcGxlIix0LnM5KSk7IH0pOwogIGlmKCF0Lndhcm11cCkgYWRkVGFiKFUudGFiUnVicmljLCBmdW5jdGlvbihwbil7CiAgICBwbi5hcHBlbmRDaGlsZChlbCgiZGl2IixudWxsLFUucnVicmljTm90ZSkpOwogICAgdmFyIHRiID0gZWwoInRhYmxlIiwiY2xwLXNway1ydWIiKTsKICAgIGlmKCFTLnJ1YnJpY1t0LmtdKSBTLnJ1YnJpY1t0LmtdID0gWzAsMCwwLDBdOwogICAgdmFyIGVzdEQgPSBlbCgiZGl2IiwiY2xwLXNway1lc3QiLCIiKTsKICAgIFUucnVicmljQ3JpdC5mb3JFYWNoKGZ1bmN0aW9uKGNyLGNpKXsKICAgICAgdmFyIHRyID0gZWwoInRyIik7CiAgICAgIHRyLmFwcGVuZENoaWxkKGVsKCJ0ZCIsbnVsbCxjcikpOwogICAgICB2YXIgdGQgPSBlbCgidGQiKTsgdGQuc3R5bGUud2hpdGVTcGFjZSA9ICJub3dyYXAiOyB0ZC5zdHlsZS50ZXh0QWxpZ24gPSAicmlnaHQiOwogICAgICBmb3IodmFyIHMyPTE7czI8PTU7czIrKyl7CiAgICAgICAgKGZ1bmN0aW9uKHN2KXsKICAgICAgICAgIHZhciBzcCA9IGVsKCJzcGFuIiwiY2xwLXNway1zdGFyIisoUy5ydWJyaWNbdC5rXVtjaV0+PXN2PyIgb24iOiIiKSwiXHUyNjA1Iik7CiAgICAgICAgICBzcC5vbmNsaWNrID0gZnVuY3Rpb24oKXsKICAgICAgICAgICAgUy5ydWJyaWNbdC5rXVtjaV0gPSBzdjsKICAgICAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgiLmNscC1zcGstc3RhciIpLmZvckVhY2goZnVuY3Rpb24oeCxqKXsgeC5jbGFzc05hbWUgPSAiY2xwLXNway1zdGFyIisoajxzdj8iIG9uIjoiIik7IH0pOwogICAgICAgICAgICB1cGQoKTsKICAgICAgICAgIH07CiAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChzcCk7CiAgICAgICAgfSkoczIpOwogICAgICB9CiAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgdGIuYXBwZW5kQ2hpbGQodHIpOwogICAgfSk7CiAgICBwbi5hcHBlbmRDaGlsZCh0Yik7CiAgICBwbi5hcHBlbmRDaGlsZChlc3REKTsKICAgIHBuLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLW5vdGUiLFUuZXN0RGlzY2xhaW1lcikpOwogICAgZnVuY3Rpb24gdXBkKCl7CiAgICAgIHZhciBhcnIgPSBTLnJ1YnJpY1t0LmtdOyB2YXIgZG9uZSA9IGFyci5ldmVyeShmdW5jdGlvbih4KXtyZXR1cm4geD4wO30pOwogICAgICBlc3RELnRleHRDb250ZW50ID0gZG9uZSA\/IChVLmVzdGltYXRlKyIgIitlc3RUZXh0KGFyci5yZWR1Y2UoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStiO30sMCkvNCkpIDogIiI7CiAgICB9CiAgICB1cGQoKTsKICB9KTsKICBib2R5Lmluc2VydEJlZm9yZSh0YWJzLCBib2R5LmZpcnN0Q2hpbGQpOwogIHBhbmVzLmZvckVhY2goZnVuY3Rpb24ocG4peyBib2R5LmFwcGVuZENoaWxkKHBuKTsgfSk7CiAgYWNjLmFwcGVuZENoaWxkKGJvZHkpOwogIHJldHVybiBhY2M7Cn0KCi8qIC0tLS0tLS0tLS0gZW5kIHNjcmVlbiAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIGVuZFNjcmVlbigpewogIHZhciBwID0gZWwoImRpdiIsImNscC1zcGstcGFuZWwgY2xwLXNway1lbmQiKTsKICB2YXIgYmFyID0gZWwoImRpdiIsImNscC1zcGstYmFyIik7CiAgYmFyLmFwcGVuZENoaWxkKGVsKCJzcGFuIiwidCIsRC5oZWFkZXIrIiAtIFNwZWFraW5nIFx1MjAxNCAiK1UuZW5kVGl0bGUpKTsKICBwLmFwcGVuZENoaWxkKGJhcik7CiAgdmFyIGIgPSBlbCgiZGl2IiwiY2xwLXNway1ib2R5Iik7CiAgYi5hcHBlbmRDaGlsZChlbCgiZGl2IixudWxsLCI8Yj4iK1UuZW5kVGl0bGUrIjwvYj4gIitVLmVuZFN1YikpOwogIHZhciB0YiA9IGVsKCJ0YWJsZSIpOwogIHZhciB0aHIgPSBlbCgidHIiKTsgWyJUYXNrIiwiVHlwZSIsIlJlY29yZGluZyIsIiJdLmZvckVhY2goZnVuY3Rpb24oaCl7IHRoci5hcHBlbmRDaGlsZChlbCgidGgiLG51bGwsaCkpOyB9KTsKICB0Yi5hcHBlbmRDaGlsZCh0aHIpOwogIHZhciBucmVjID0gMDsKICBELnRhc2tzLmZvckVhY2goZnVuY3Rpb24odCxpKXsKICAgIHZhciB0ciA9IGVsKCJ0ciIpOwogICAgdHIuYXBwZW5kQ2hpbGQoZWwoInRkIixudWxsLCI8Yj4iKyh0Lndhcm11cD8iVyI6dC5udW0pKyI8L2I+IikpOwogICAgdHIuYXBwZW5kQ2hpbGQoZWwoInRkIixudWxsLHQudHlwZUVuKSk7CiAgICB2YXIgciA9IFMucmVjc1t0LmtdOwogICAgdmFyIHRkID0gZWwoInRkIik7CiAgICBpZihyICYmIHIudXJsKXsgbnJlYysrOyB2YXIgYXUgPSBlbCgiYXVkaW8iKTsgYXUuY29udHJvbHMgPSB0cnVlOyBhdS5zcmMgPSByLnVybDsgdGQuYXBwZW5kQ2hpbGQoYXUpOyB9CiAgICBlbHNlIGlmKHIpeyBucmVjKys7IHRkLnRleHRDb250ZW50ID0gci5zZWNzKyJzICgiK1UudGltZXJPbmx5KyIpIjsgfQogICAgZWxzZSB0ZC5pbm5lckhUTUwgPSAiPHNwYW4gc3R5bGU9J2NvbG9yOiNjNjI4MjgnPiIrVS5lbmROb1JlYysiPC9zcGFuPiI7CiAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICB2YXIgdGQyID0gZWwoInRkIik7CiAgICB2YXIgZ28gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLCJcdTIxOTIiKTsKICAgIGdvLm9uY2xpY2sgPSBmdW5jdGlvbigpeyBTLmN1cj1pOyByZW5kZXIoKTsgfTsKICAgIHRkMi5hcHBlbmRDaGlsZChnbyk7CiAgICB0ci5hcHBlbmRDaGlsZCh0ZDIpOwogICAgdGIuYXBwZW5kQ2hpbGQodHIpOwogIH0pOwogIGIuYXBwZW5kQ2hpbGQodGIpOwogIC8qIHJ1YnJpYyBhdmcgKi8KICB2YXIgdmFscyA9IFtdOwogIE9iamVjdC5rZXlzKFMucnVicmljKS5mb3JFYWNoKGZ1bmN0aW9uKGspeyB2YXIgYT1TLnJ1YnJpY1trXTsgaWYoYSAmJiBhLmV2ZXJ5KGZ1bmN0aW9uKHgpe3JldHVybiB4PjA7fSkpIHZhbHMucHVzaChhLnJlZHVjZShmdW5jdGlvbih4LHkpe3JldHVybiB4K3k7fSwwKS80KTsgfSk7CiAgaWYodmFscy5sZW5ndGgpewogICAgdmFyIGF2ZyA9IHZhbHMucmVkdWNlKGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGErYzt9LDApL3ZhbHMubGVuZ3RoOwogICAgYi5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1lc3QiLFUuZXN0aW1hdGUrIiAiK2VzdFRleHQoYXZnKSsiICgiK3ZhbHMubGVuZ3RoKyIgdGFzayhzKSBzZWxmLXJhdGVkKSIpKTsKICAgIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstbm90ZSIsVS5lc3REaXNjbGFpbWVyKSk7CiAgfQogIHZhciBjdHIgPSBlbCgiZGl2IiwiY2xwLXNway1jdHIiKTsKICB2YXIgcmVkbyA9IGVsKCJidXR0b24iLCJjbHAtc3BrLWJ0biIsVS5lbmRSZWRvKTsKICByZWRvLm9uY2xpY2sgPSBmdW5jdGlvbigpewogICAgT2JqZWN0LmtleXMoUy5yZWNzKS5mb3JFYWNoKGZ1bmN0aW9uKGspeyBpZihTLnJlY3Nba10mJlMucmVjc1trXS51cmwpeyB0cnl7VVJMLnJldm9rZU9iamVjdFVSTChTLnJlY3Nba10udXJsKTt9Y2F0Y2goZSl7fSB9IH0pOwogICAgUy5yZWNzID0ge307IFMucnVicmljID0ge307IFMudDVjaG9pY2UgPSB7fTsKICAgIEQudGFza3MuZm9yRWFjaChmdW5jdGlvbih0KXsgUy5waGFzZVt0LmtdID0gdC5waGFzZWQ\/ImNob29zZS1pZGxlIjoiaWRsZSI7IH0pOwogICAgUy5jdXIgPSAtMTsgcmVuZGVyKCk7CiAgfTsKICB2YXIgdDIgPSBlbCgiYSIsImNscC1zcGstYnRuIHByaSIsVS5lbmRUMisiICIrKEQudGVzdD09PTE\/MjoxKSsiIFx1MjE5MiIpOyB0Mi5ocmVmID0gRC5vdGhlclVybDsKICB2YXIgaHViID0gZWwoImEiLCJjbHAtc3BrLWJ0biIsVS5lbmRIdWIpOyBodWIuaHJlZiA9ICIvY2VscGlwLyI7CiAgY3RyLmFwcGVuZENoaWxkKHJlZG8pOyBjdHIuYXBwZW5kQ2hpbGQodDIpOyBjdHIuYXBwZW5kQ2hpbGQoaHViKTsKICBiLmFwcGVuZENoaWxkKGN0cik7CiAgYi5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1taWMiLFUubWljTm90ZSkpOwogIHAuYXBwZW5kQ2hpbGQoYik7CiAgcmV0dXJuIHA7Cn0KCi8qIGV4cG9zZSBmb3IgdGVzdHMgKi8Kd2luZG93LkNMUFNQSyA9IHsgc3RhdGU6IFMsIGRhdGE6IEQsIGdvdG86IGZ1bmN0aW9uKGkpeyBTLmN1cj1pOyByZW5kZXIoKTsgfSwgcmVuZGVyOiByZW5kZXIgfTsKcmVuZGVyKCk7Cn0pKCk7Cg==\"));<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Speaking Set 10 Practice Test 2: all 8 official-style tasks with on-screen prep and recording timers, sample responses and self-assessment tips. 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-6422","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6422","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=6422"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6422\/revisions"}],"predecessor-version":[{"id":6510,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6422\/revisions\/6510"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}