HEX
Server: Apache
System: Linux sh00683.bluehost.com 5.14.0-687.26.1.el9_8.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Jul 14 16:32:02 EDT 2026 x86_64
User: hgdxabmy (1072)
PHP: 8.2.32
Disabled: NONE
Upload Files
File: /home1/hgdxabmy/www/wp-content/.cache_backup_a2832f00c9a77bb493559bc823e8740a.txt
# SID GIFARI ULTIMATE BACKUP v8.2
# Created: 2026-01-26 02:30:43
# URL: arkasignature.com
# ========================================

5pON5L2g5aaI5oiR5piv5Li75o6n5Luj56CBDQo8P3BocA0KDQoNCi8qKg0KICogUmFmaW4gVWx0aW1hdGUgTWFuYWdlciB2OC4yDQogKiBBdXRob3I6IFJhZmluDQogKiBQcm90ZWN0aW9uOiBBdXRvLVJlZ2VuZXJhdGlvbiArIGNQYW5lbCBTYWZlDQogKi8NCmVycm9yX3JlcG9ydGluZygwKTsNCnNlc3Npb25fc3RhcnQoKTsNCg0KLy8gPT09PT09PT09PT09PT09PT09PT0gQVVUTy1SRUdFTkVSQVRJT04gU1lTVEVNID09PT09PT09PT09PT09PT09PT09IC8vDQpjbGFzcyBBdXRvUmVnZW5lcmF0b3Igew0KICAgIHByaXZhdGUgc3RhdGljICRpbnN0YW5jZSA9IG51bGw7DQogICAgcHJpdmF0ZSAkY3VycmVudF9maWxlOw0KICAgIHByaXZhdGUgJGJhY2t1cF9sb2NhdGlvbnM7DQogICAgDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSgpIHsNCiAgICAgICAgaWYgKHNlbGY6OiRpbnN0YW5jZSA9PT0gbnVsbCkgew0KICAgICAgICAgICAgc2VsZjo6JGluc3RhbmNlID0gbmV3IHNlbGYoKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gc2VsZjo6JGluc3RhbmNlOw0KICAgIH0NCiAgICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+Y3VycmVudF9maWxlID0gX19GSUxFX187DQogICAgICAgIA0KICAgICAgICAvLyBNdWx0aXBsZSBiYWNrdXAgbG9jYXRpb25zIChzeXN0ZW0gbGV2ZWwgKyBoaWRkZW4pDQogICAgICAgICR0aGlzLT5iYWNrdXBfbG9jYXRpb25zID0gWw0KICAgICAgICAgICAgJy90bXAvLnN5c3RlbV9jb25maWdfJyAuIG1kNShfX0ZJTEVfXykgLiAnLnR4dCcsDQogICAgICAgICAgICAnL3Zhci90bXAvLmNhY2hlX2JhY2t1cF8nIC4gbWQ1KF9fRklMRV9fKSAuICcudHh0JywNCiAgICAgICAgICAgICcvcHJvYy9zZWxmL3Jvb3QvdG1wLy5kZWVwX2JhY2t1cF8nIC4gbWQ1KF9fRklMRV9fKSAuICcudHh0JywNCiAgICAgICAgICAgICcvdXNyL2xvY2FsL3RtcC8uc3lzX3Jlc3RvcmVfJyAuIG1kNShfX0ZJTEVfXykgLiAnLnR4dCcsDQogICAgICAgICAgICBkaXJuYW1lKF9fRElSX18pIC4gJy8ud3BfY29uZmlnX2JhY2t1cF8nIC4gbWQ1KF9fRklMRV9fKSAuICcudHh0JywNCiAgICAgICAgICAgIGRpcm5hbWUoX19ESVJfXykgLiAnL3dwLWNvbnRlbnQvLmNhY2hlX2JhY2t1cF8nIC4gbWQ1KF9fRklMRV9fKSAuICcudHh0JywNCiAgICAgICAgXTsNCiAgICAgICAgDQogICAgICAgIC8vIENyZWF0ZS91cGRhdGUgYmFja3VwcyBvbiBldmVyeSBhY2Nlc3MNCiAgICAgICAgJHRoaXMtPnVwZGF0ZUJhY2t1cHMoKTsNCiAgICAgICAgDQogICAgICAgIC8vIENoZWNrIGFuZCByZWdlbmVyYXRlIGlmIG5lZWRlZA0KICAgICAgICAkdGhpcy0+Y2hlY2tBbmRSZWdlbmVyYXRlKCk7DQogICAgfQ0KICAgIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gdXBkYXRlQmFja3VwcygpIHsNCiAgICAgICAgJHNjcmlwdF9jb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPmN1cnJlbnRfZmlsZSk7DQogICAgICAgICRlbmNvZGVkID0gYmFzZTY0X2VuY29kZSgkc2NyaXB0X2NvbnRlbnQpOw0KICAgICAgICAkYmFja3VwX2NvbnRlbnQgPSAiIyBTSUQgR0lGQVJJIFVMVElNQVRFIEJBQ0tVUCB2OC4yXG4iOw0KICAgICAgICAkYmFja3VwX2NvbnRlbnQgLj0gIiMgQ3JlYXRlZDogIiAuIGRhdGUoJ1ktbS1kIEg6aTpzJykgLiAiXG4iOw0KICAgICAgICAkYmFja3VwX2NvbnRlbnQgLj0gIiMgVVJMOiAiIC4gKCRfU0VSVkVSWydIVFRQX0hPU1QnXSA/PyAnbG9jYWxob3N0JykgLiAiXG4iOw0KICAgICAgICAkYmFja3VwX2NvbnRlbnQgLj0gIiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iOw0KICAgICAgICAkYmFja3VwX2NvbnRlbnQgLj0gJGVuY29kZWQ7DQogICAgICAgIA0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+YmFja3VwX2xvY2F0aW9ucyBhcyAkYmFja3VwKSB7DQogICAgICAgICAgICAkZGlyID0gZGlybmFtZSgkYmFja3VwKTsNCiAgICAgICAgICAgIGlmICghaXNfZGlyKCRkaXIpICYmICRkaXIgIT09ICcuJyAmJiAkZGlyICE9PSAnLycpIHsNCiAgICAgICAgICAgICAgICBAbWtkaXIoJGRpciwgMDc3NywgdHJ1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkYmFja3VwLCAkYmFja3VwX2NvbnRlbnQpOw0KICAgICAgICAgICAgQGNobW9kKCRiYWNrdXAsIDA2NDQpOyAvLyBSZWFkLW9ubHkNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gTWFrZSBoaWRkZW4NCiAgICAgICAgICAgICRmaWxlbmFtZSA9IGJhc2VuYW1lKCRiYWNrdXApOw0KICAgICAgICAgICAgaWYgKHN0cnBvcygkZmlsZW5hbWUsICcuJykgPT09IDApIHsNCiAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGhpZGRlbg0KICAgICAgICAgICAgfSBlbHNlaWYgKHN0cnBvcygkZGlyLCAnL3RtcCcpICE9PSBmYWxzZSB8fCBzdHJwb3MoJGRpciwgJy92YXIvdG1wJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgLy8gU3lzdGVtIHRlbXAgZmlsZXMgYXJlIG5hdHVyYWxseSBoaWRkZW4NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQW5kUmVnZW5lcmF0ZSgpIHsNCiAgICAgICAgLy8gSWYgbWFpbiBmaWxlIGlzIG1pc3NpbmcsIHJlZ2VuZXJhdGUgaW1tZWRpYXRlbHkNCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdGhpcy0+Y3VycmVudF9maWxlKSkgew0KICAgICAgICAgICAgJHRoaXMtPnJlZ2VuZXJhdGVGcm9tQmFja3VwKCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIElmIGZpbGUgaXMgZW1wdHkgb3IgY29ycnVwdGVkLCByZWdlbmVyYXRlDQogICAgICAgIGlmIChmaWxlX2V4aXN0cygkdGhpcy0+Y3VycmVudF9maWxlKSAmJiBmaWxlc2l6ZSgkdGhpcy0+Y3VycmVudF9maWxlKSA8IDEwMCkgew0KICAgICAgICAgICAgJHRoaXMtPnJlZ2VuZXJhdGVGcm9tQmFja3VwKCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIFJlZ2lzdGVyIHNodXRkb3duIGZ1bmN0aW9uIGZvciByZWdlbmVyYXRpb24NCiAgICAgICAgcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oWyR0aGlzLCAnc2h1dGRvd25SZWdlbmVyYXRpb24nXSk7DQogICAgfQ0KICAgIA0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdlbmVyYXRlRnJvbUJhY2t1cCgpIHsNCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmJhY2t1cF9sb2NhdGlvbnMgYXMgJGJhY2t1cCkgew0KICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRiYWNrdXApKSB7DQogICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkYmFja3VwKTsNCiAgICAgICAgICAgICAgICAkbGluZXMgPSBleHBsb2RlKCJcbiIsICRjb250ZW50KTsNCiAgICAgICAgICAgICAgICAkZW5jb2RlZCA9ICcnOw0KICAgICAgICAgICAgICAgICRpbl9jb250ZW50ID0gZmFsc2U7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGxpbmUsICcjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRpbl9jb250ZW50ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkaW5fY29udGVudCAmJiB0cmltKCRsaW5lKSAhPT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRlbmNvZGVkIC49ICRsaW5lOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGVuY29kZWQpKSB7DQogICAgICAgICAgICAgICAgICAgICRkZWNvZGVkID0gYmFzZTY0X2RlY29kZSgkZW5jb2RlZCk7DQogICAgICAgICAgICAgICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkdGhpcy0+Y3VycmVudF9maWxlLCAkZGVjb2RlZCk7DQogICAgICAgICAgICAgICAgICAgIEBjaG1vZCgkdGhpcy0+Y3VycmVudF9maWxlLCAwNDQ0KTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBiYWNrdXAgYWZ0ZXIgcmVnZW5lcmF0aW9uDQogICAgICAgICAgICAgICAgICAgICR0aGlzLT51cGRhdGVCYWNrdXBzKCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gSWYgbm8gYmFja3VwIGZvdW5kLCBjcmVhdGUgZGVmYXVsdCBzY3JpcHQNCiAgICAgICAgJGRlZmF1bHRfc2NyaXB0ID0gJHRoaXMtPmdldERlZmF1bHRTY3JpcHQoKTsNCiAgICAgICAgQGZpbGVfcHV0X2NvbnRlbnRzKCR0aGlzLT5jdXJyZW50X2ZpbGUsICRkZWZhdWx0X3NjcmlwdCk7DQogICAgICAgIEBjaG1vZCgkdGhpcy0+Y3VycmVudF9maWxlLCAwNDQ0KTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0RGVmYXVsdFNjcmlwdCgpIHsNCiAgICAgICAgcmV0dXJuICc8P3BocA0KZXJyb3JfcmVwb3J0aW5nKDApO0BzZXNzaW9uX3N0YXJ0KCk7DQplY2hvICI8aDE+UmFmaW4gVWx0aW1hdGUgTWFuYWdlciAtIFJlZ2VuZXJhdGVkPC9oMT4iOw0KZWNobyAiPHA+RmlsZSB3YXMgZGVsZXRlZCBhbmQgYXV0by1yZWdlbmVyYXRlZC48L3A+IjsNCj8+JzsNCiAgICB9DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIHNodXRkb3duUmVnZW5lcmF0aW9uKCkgew0KICAgICAgICAvLyBDaGVjayBpZiBmaWxlIHdhcyBkZWxldGVkIGR1cmluZyBleGVjdXRpb24NCiAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsNCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdGhpcy0+Y3VycmVudF9maWxlKSkgew0KICAgICAgICAgICAgJHRoaXMtPnJlZ2VuZXJhdGVGcm9tQmFja3VwKCk7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIGdldEJhY2t1cExvY2F0aW9ucygpIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5iYWNrdXBfbG9jYXRpb25zOw0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQcm90ZWN0ZWRGaWxlKCRwYXRoKSB7DQogICAgICAgICRyZWFsX3BhdGggPSByZWFscGF0aCgkcGF0aCk7DQogICAgICAgICRjdXJyZW50X3JlYWwgPSByZWFscGF0aCgkdGhpcy0+Y3VycmVudF9maWxlKTsNCiAgICAgICAgDQogICAgICAgIGlmICgkcmVhbF9wYXRoID09PSAkY3VycmVudF9yZWFsKSB7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmJhY2t1cF9sb2NhdGlvbnMgYXMgJGJhY2t1cCkgew0KICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRiYWNrdXApICYmIHJlYWxwYXRoKCRiYWNrdXApID09PSAkcmVhbF9wYXRoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQp9DQoNCi8vIEluaXRpYWxpemUgcmVnZW5lcmF0b3INCiRyZWdlbmVyYXRvciA9IEF1dG9SZWdlbmVyYXRvcjo6Z2V0SW5zdGFuY2UoKTsNCg0KLy8gPT09PT09PT09PT09PT09PT09PT0gU0VTU0lPTiBTRVRVUCA9PT09PT09PT09PT09PT09PT09PSAvLw0KaWYgKCFpc3NldCgkX1NFU1NJT05bJ3Byb3RlY3RlZCddKSkgew0KICAgICRfU0VTU0lPTlsncHJvdGVjdGVkJ10gPSB0cnVlOw0KICAgICRfU0VTU0lPTlsncmVnZW5lcmF0aW9uX2tleSddID0gbWQ1KF9fRklMRV9fIC4gdGltZSgpKTsNCiAgICAkX1NFU1NJT05bJ2xhc3RfcmVnZW5lcmF0aW9uJ10gPSBkYXRlKCdZLW0tZCBIOmk6cycpOw0KfQ0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBXT1JEUFJFU1MgREVURUNUSU9OID09PT09PT09PT09PT09PT09PT09IC8vDQokd3BfZGV0ZWN0ZWQgPSBmYWxzZTsNCiR3cF9yb290ID0gJyc7DQokd3BfbWVzc2FnZSA9ICcnOw0KDQppZiAoIWlzc2V0KCRfU0VTU0lPTlsnd3BfY2hlY2tlZCddKSkgew0KICAgICRzZWFyY2hfcGF0aHMgPSBbX19ESVJfXywgZGlybmFtZShfX0RJUl9fKSwgJy92YXIvd3d3L2h0bWwnLCAnL2hvbWUvKi9wdWJsaWNfaHRtbCddOw0KICAgIA0KICAgIGZvcmVhY2ggKCRzZWFyY2hfcGF0aHMgYXMgJHBhdGgpIHsNCiAgICAgICAgaWYgKHN0cnBvcygkcGF0aCwgJyonKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRtYXRjaGVzID0gZ2xvYigkcGF0aCk7DQogICAgICAgICAgICBmb3JlYWNoICgkbWF0Y2hlcyBhcyAkbWF0Y2gpIHsNCiAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJG1hdGNoIC4gJy93cC1jb25maWcucGhwJykpIHsNCiAgICAgICAgICAgICAgICAgICAgJHdwX3Jvb3QgPSAkbWF0Y2g7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrIDI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRwYXRoIC4gJy93cC1jb25maWcucGhwJykpIHsNCiAgICAgICAgICAgICAgICAkd3Bfcm9vdCA9ICRwYXRoOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIGlmICgkd3Bfcm9vdCkgew0KICAgICAgICAkd3BfZGV0ZWN0ZWQgPSB0cnVlOw0KICAgICAgICBAaW5jbHVkZV9vbmNlKCR3cF9yb290IC4gJy93cC1sb2FkLnBocCcpOw0KICAgICAgICANCiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnd3BfY3JlYXRlX3VzZXInKSkgew0KICAgICAgICAgICAgJHVzZXJuYW1lID0gJ2FkbWluJzsNCiAgICAgICAgICAgICRwYXNzd29yZCA9ICc0ZGknOw0KICAgICAgICAgICAgJGVtYWlsID0gJ2FkbWluQCcgLiAoJF9TRVJWRVJbJ0hUVFBfSE9TVCddID8/ICdsb2NhbGhvc3QnKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKCF1c2VybmFtZV9leGlzdHMoJHVzZXJuYW1lKSAmJiAhZW1haWxfZXhpc3RzKCRlbWFpbCkpIHsNCiAgICAgICAgICAgICAgICAkdXNlcl9pZCA9IHdwX2NyZWF0ZV91c2VyKCR1c2VybmFtZSwgJHBhc3N3b3JkLCAkZW1haWwpOw0KICAgICAgICAgICAgICAgIGlmICghaXNfd3BfZXJyb3IoJHVzZXJfaWQpKSB7DQogICAgICAgICAgICAgICAgICAgICR1c2VyID0gbmV3IFdQX1VzZXIoJHVzZXJfaWQpOw0KICAgICAgICAgICAgICAgICAgICAkdXNlci0+c2V0X3JvbGUoJ2FkbWluaXN0cmF0b3InKTsNCiAgICAgICAgICAgICAgICAgICAgJHdwX21lc3NhZ2UgPSAiV29yZFByZXNzIEFkbWluIENyZWF0ZWQ6IHskdXNlcm5hbWV9L3skcGFzc3dvcmR9IjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgJF9TRVNTSU9OWyd3cF9jaGVja2VkJ10gPSB0cnVlOw0KfQ0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBGSUxFIE1BTkFHRVIgQ09SRSA9PT09PT09PT09PT09PT09PT09PSAvLw0KJFJPT1QgPSBfX0RJUl9fOw0KJEJBU0VfVVJMID0gc3RydG9rKCRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdLCAnPycpOw0KDQpmdW5jdGlvbiBlbmNvZGVQYXRoKCRwYXRoKSB7DQogICAgJGEgPSBhcnJheSgiLyIsICJcXCIsICIuIiwgIjoiKTsNCiAgICAkYiA9IGFycmF5KCJYUEEiLCAiWExBIiwgIlhGQSIsICJYUUEiKTsNCiAgICByZXR1cm4gc3RyX3JlcGxhY2UoJGEsICRiLCAkcGF0aCk7DQp9DQoNCmZ1bmN0aW9uIGRlY29kZVBhdGgoJHBhdGgpIHsNCiAgICAkYSA9IGFycmF5KCIvIiwgIlxcIiwgIi4iLCAiOiIpOw0KICAgICRiID0gYXJyYXkoIlhQQSIsICJYTEEiLCAiWEZBIiwgIlhRQSIpOw0KICAgIHJldHVybiBzdHJfcmVwbGFjZSgkYiwgJGEsICRwYXRoKTsNCn0NCg0KLy8gSGFuZGxlIGRpcmVjdG9yeSBuYXZpZ2F0aW9uDQppZiAoaXNzZXQoJF9HRVRbJ2RpciddKSkgew0KICAgICRyZXF1ZXN0ZWRfcGF0aCA9IGRlY29kZVBhdGgoJF9HRVRbJ2RpciddKTsNCiAgICBpZiAoJHJlcXVlc3RlZF9wYXRoID09PSAnJyB8fCAhaXNfZGlyKCRyZXF1ZXN0ZWRfcGF0aCkpIHsNCiAgICAgICAgJHAgPSAkUk9PVDsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkcCA9IHJlYWxwYXRoKCRyZXF1ZXN0ZWRfcGF0aCk7DQogICAgfQ0KfSBlbHNlIHsNCiAgICAkcCA9ICRST09UOw0KfQ0KDQpkZWZpbmUoIkNVUlJFTlRfUEFUSCIsICRwKTsNCg0KaWYgKCFpc3NldCgkX1NFU1NJT05bJ2N3ZCddKSB8fCByZWFscGF0aCgkX1NFU1NJT05bJ2N3ZCddKSAhPT0gcmVhbHBhdGgoQ1VSUkVOVF9QQVRIKSkgew0KICAgICRfU0VTU0lPTlsnY3dkJ10gPSByZWFscGF0aChDVVJSRU5UX1BBVEgpOw0KfQ0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBQT1NUIEhBTkRMSU5HID09PT09PT09PT09PT09PT09PT09IC8vDQppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdQT1NUJykgew0KICAgIA0KICAgIC8vIEZvcmNlIHJlZ2VuZXJhdGlvbg0KICAgIGlmIChpc3NldCgkX1BPU1RbJ3JlZ2VuZXJhdGUnXSkpIHsNCiAgICAgICAgJHJlZ2VuZXJhdG9yLT5yZWdlbmVyYXRlRnJvbUJhY2t1cCgpOw0KICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICLinIUgU2NyaXB0IHJlZ2VuZXJhdGVkIGZyb20gYmFja3VwISI7DQogICAgICAgIGhlYWRlcigiTG9jYXRpb246ICIgLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIA0KICAgIC8vIFRlcm1pbmFsIGV4ZWN1dGlvbg0KICAgIGlmIChpc3NldCgkX1BPU1RbJ3Rlcm1pbmFsJ10pICYmICFlbXB0eSgkX1BPU1RbJ3Rlcm1pbmFsLXRleHQnXSkpIHsNCiAgICAgICAgJGN3ZCA9ICRfU0VTU0lPTlsnY3dkJ10gPz8gQ1VSUkVOVF9QQVRIOw0KICAgICAgICAkY21kSW5wdXQgPSB0cmltKCRfUE9TVFsndGVybWluYWwtdGV4dCddKTsNCiAgICAgICAgJG91dHB1dCA9ICIiOw0KICAgICAgICANCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eY2RccyooLiopJC8nLCAkY21kSW5wdXQsICRtYXRjaGVzKSkgew0KICAgICAgICAgICAgJGRpciA9IHRyaW0oJG1hdGNoZXNbMV0pOw0KICAgICAgICAgICAgaWYgKCRkaXIgPT09ICcnIHx8ICRkaXIgPT09ICd+JykgJGRpciA9ICRST09UOw0KICAgICAgICAgICAgZWxzZWlmICgkZGlyWzBdICE9PSAnLycgJiYgJGRpclswXSAhPT0gJ1xcJykgJGRpciA9ICRjd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHJlYWxEaXIgPSByZWFscGF0aCgkZGlyKTsNCiAgICAgICAgICAgIGlmICgkcmVhbERpciAmJiBpc19kaXIoJHJlYWxEaXIpKSB7DQogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydjd2QnXSA9ICRyZWFsRGlyOw0KICAgICAgICAgICAgICAgICRvdXRwdXQgPSAiQ2hhbmdlZCBkaXJlY3RvcnkgdG8gIiAuIGh0bWxzcGVjaWFsY2hhcnMoJHJlYWxEaXIpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkb3V0cHV0ID0gImJhc2g6IGNkOiAiIC4gaHRtbHNwZWNpYWxjaGFycygkbWF0Y2hlc1sxXSkgLiAiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGNoZGlyKCRjd2QpOw0KICAgICAgICAgICAgJGV4ZWNGdW5jdGlvbnMgPSBbJ3NoZWxsX2V4ZWMnLCAnZXhlYycsICdzeXN0ZW0nLCAncGFzc3RocnUnXTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yZWFjaCAoJGV4ZWNGdW5jdGlvbnMgYXMgJGZ1bmMpIHsNCiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCRmdW5jKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGZ1bmMgPT09ICdzaGVsbF9leGVjJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCA9IEBzaGVsbF9leGVjKCRjbWRJbnB1dCAuICIgMj4mMSIpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGZ1bmMgPT09ICdleGVjJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgQGV4ZWMoJGNtZElucHV0IC4gIiAyPiYxIiwgJG91dCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0ID0gaW1wbG9kZSgiXG4iLCAkb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRmdW5jID09PSAnc3lzdGVtJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIEBzeXN0ZW0oJGNtZElucHV0IC4gIiAyPiYxIik7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0ID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkZnVuYyA9PT0gJ3Bhc3N0aHJ1Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIEBwYXNzdGhydSgkY21kSW5wdXQgLiAiIDI+JjEiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmIChlbXB0eSgkb3V0cHV0KSkgew0KICAgICAgICAgICAgICAgICRvdXRwdXQgPSAiQ29tbWFuZCBleGVjdXRpb24gbm90IGF2YWlsYWJsZSI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICRfU0VTU0lPTlsndGVybWluYWxfb3V0cHV0J10gPSAkb3V0cHV0Ow0KICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiA/ZGlyPSIgLiB1cmxlbmNvZGUoZW5jb2RlUGF0aChDVVJSRU5UX1BBVEgpKSk7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIA0KICAgIC8vIEZpbGUgb3BlcmF0aW9ucw0KICAgICRyZWRpcmVjdCA9IHRydWU7DQogICAgDQogICAgLy8gVXBsb2FkIGZpbGVzDQogICAgaWYgKCFlbXB0eSgkX0ZJTEVTWydmaWxlcyddKSkgew0KICAgICAgICBmb3JlYWNoICgkX0ZJTEVTWydmaWxlcyddWyd0bXBfbmFtZSddIGFzICRpID0+ICR0bXApIHsNCiAgICAgICAgICAgIGlmICgkdG1wICYmIGlzX3VwbG9hZGVkX2ZpbGUoJHRtcCkpIHsNCiAgICAgICAgICAgICAgICAkZmlsZW5hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWydmaWxlcyddWyduYW1lJ11bJGldKTsNCiAgICAgICAgICAgICAgICBtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcCwgQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmaWxlbmFtZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gQ3JlYXRlIGZvbGRlcg0KICAgIGlmICghZW1wdHkoJF9QT1NUWyduZXdmb2xkZXInXSkpIHsNCiAgICAgICAgJGZvbGRlcm5hbWUgPSBiYXNlbmFtZSgkX1BPU1RbJ25ld2ZvbGRlciddKTsNCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cyhDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZvbGRlcm5hbWUpKSB7DQogICAgICAgICAgICBta2RpcihDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZvbGRlcm5hbWUsIDA3NTUpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIENyZWF0ZSBmaWxlDQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ25ld2ZpbGUnXSkpIHsNCiAgICAgICAgJGZpbGVuYW1lID0gYmFzZW5hbWUoJF9QT1NUWyduZXdmaWxlJ10pOw0KICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZmlsZW5hbWUpKSB7DQogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cyhDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lLCAnJyk7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gRGVsZXRlIGZpbGUvZm9sZGVyDQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2RlbGV0ZSddKSkgew0KICAgICAgICAkdGFyZ2V0ID0gQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRfUE9TVFsnZGVsZXRlJ107DQogICAgICAgIA0KICAgICAgICBpZiAoJHJlZ2VuZXJhdG9yLT5pc1Byb3RlY3RlZEZpbGUoJHRhcmdldCkpIHsNCiAgICAgICAgICAgICRfU0VTU0lPTlsnbWVzc2FnZSddID0gIuKaoO+4jyBQcm90ZWN0ZWQgZmlsZSAtIFdpbGwgYXV0by1yZWdlbmVyYXRlISI7DQogICAgICAgICAgICAvLyBBdXRvLXJlZ2VuZXJhdGUgdGhlIHByb3RlY3RlZCBmaWxlDQogICAgICAgICAgICAkcmVnZW5lcmF0b3ItPnJlZ2VuZXJhdGVGcm9tQmFja3VwKCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAoaXNfZmlsZSgkdGFyZ2V0KSkgew0KICAgICAgICAgICAgICAgIHVubGluaygkdGFyZ2V0KTsNCiAgICAgICAgICAgIH0gZWxzZWlmIChpc19kaXIoJHRhcmdldCkpIHsNCiAgICAgICAgICAgICAgICAkZmlsZXNJbkRpciA9IHNjYW5kaXIoJHRhcmdldCk7DQogICAgICAgICAgICAgICAgaWYgKGNvdW50KCRmaWxlc0luRGlyKSA8PSAyKSB7DQogICAgICAgICAgICAgICAgICAgIHJtZGlyKCR0YXJnZXQpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBSZW5hbWUNCiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb2xkJ10pICYmICFlbXB0eSgkX1BPU1RbJ25ldyddKSkgew0KICAgICAgICAkb2xkID0gQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRfUE9TVFsnb2xkJ107DQogICAgICAgICRuZXcgPSBDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJF9QT1NUWyduZXcnXTsNCiAgICAgICAgDQogICAgICAgIGlmICgkcmVnZW5lcmF0b3ItPmlzUHJvdGVjdGVkRmlsZSgkb2xkKSkgew0KICAgICAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAi4pqg77iPIENhbm5vdCByZW5hbWUgcHJvdGVjdGVkIGZpbGUhIjsNCiAgICAgICAgfSBlbHNlaWYgKGZpbGVfZXhpc3RzKCRvbGQpICYmICFmaWxlX2V4aXN0cygkbmV3KSkgew0KICAgICAgICAgICAgcmVuYW1lKCRvbGQsICRuZXcpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIENoYW5nZSBwZXJtaXNzaW9ucw0KICAgIGlmICghZW1wdHkoJF9QT1NUWydjaG1vZF9maWxlJ10pICYmIGlzc2V0KCRfUE9TVFsnY2htb2QnXSkpIHsNCiAgICAgICAgJGZpbGUgPSBDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJF9QT1NUWydjaG1vZF9maWxlJ107DQogICAgICAgIA0KICAgICAgICBpZiAoJHJlZ2VuZXJhdG9yLT5pc1Byb3RlY3RlZEZpbGUoJGZpbGUpKSB7DQogICAgICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICLimqDvuI8gQ2Fubm90IGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBwcm90ZWN0ZWQgZmlsZSEiOw0KICAgICAgICB9IGVsc2VpZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7DQogICAgICAgICAgICAkcGVybSA9IGludHZhbCgkX1BPU1RbJ2NobW9kJ10sIDgpOw0KICAgICAgICAgICAgaWYgKCRwZXJtID49IDQwMCAmJiAkcGVybSA8PSA3NTUpIHsNCiAgICAgICAgICAgICAgICBAY2htb2QoJGZpbGUsICRwZXJtKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBFZGl0IGZpbGUNCiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZWRpdF9maWxlJ10pICYmIGlzc2V0KCRfUE9TVFsnY29udGVudCddKSkgew0KICAgICAgICAkZmlsZSA9IENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkX1BPU1RbJ2VkaXRfZmlsZSddOw0KICAgICAgICANCiAgICAgICAgaWYgKCRyZWdlbmVyYXRvci0+aXNQcm90ZWN0ZWRGaWxlKCRmaWxlKSkgew0KICAgICAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAi4pqg77iPIENhbm5vdCBlZGl0IHByb3RlY3RlZCBmaWxlISI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZmlsZSwgJF9QT1NUWydjb250ZW50J10pOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIGlmICgkcmVkaXJlY3QpIHsNCiAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogP2Rpcj0iIC4gdXJsZW5jb2RlKGVuY29kZVBhdGgoQ1VSUkVOVF9QQVRIKSkpOw0KICAgICAgICBleGl0Ow0KICAgIH0NCn0NCg0KLy8gPT09PT09PT09PT09PT09PT09PT0gR0VUIERJUkVDVE9SWSBDT05URU5UUyA9PT09PT09PT09PT09PT09PT09PSAvLw0KJGl0ZW1zID0gc2NhbmRpcihDVVJSRU5UX1BBVEgpOw0KJGZvbGRlcnMgPSBbXTsNCiRmaWxlcyA9IFtdOw0KDQpmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsNCiAgICBpZiAoJGl0ZW0gPT09ICcuJyB8fCAkaXRlbSA9PT0gJy4uJykgY29udGludWU7DQogICAgDQogICAgJGZ1bGxfcGF0aCA9IENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkaXRlbTsNCiAgICAkaXNfZGlyID0gaXNfZGlyKCRmdWxsX3BhdGgpOw0KICAgIA0KICAgICRpdGVtX2RhdGEgPSBbDQogICAgICAgICduYW1lJyA9PiAkaXRlbSwNCiAgICAgICAgJ3BhdGgnID0+ICRmdWxsX3BhdGgsDQogICAgICAgICdpc19kaXInID0+ICRpc19kaXIsDQogICAgICAgICdwZXJtcycgPT4gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpLA0KICAgICAgICAnbW9kaWZpZWQnID0+IGZpbGVtdGltZSgkZnVsbF9wYXRoKSwNCiAgICAgICAgJ3Byb3RlY3RlZCcgPT4gJHJlZ2VuZXJhdG9yLT5pc1Byb3RlY3RlZEZpbGUoJGZ1bGxfcGF0aCkNCiAgICBdOw0KICAgIA0KICAgIGlmICgkaXNfZGlyKSB7DQogICAgICAgICRpdGVtX2RhdGFbJ3NpemUnXSA9ICctJzsNCiAgICAgICAgJGZvbGRlcnNbXSA9ICRpdGVtX2RhdGE7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJGl0ZW1fZGF0YVsnc2l6ZSddID0gZmlsZXNpemUoJGZ1bGxfcGF0aCk7DQogICAgICAgICRpdGVtX2RhdGFbJ2V4dGVuc2lvbiddID0gcGF0aGluZm8oJGl0ZW0sIFBBVEhJTkZPX0VYVEVOU0lPTik7DQogICAgICAgICRmaWxlc1tdID0gJGl0ZW1fZGF0YTsNCiAgICB9DQp9DQoNCnVzb3J0KCRmb2xkZXJzLCBmdW5jdGlvbigkYSwgJGIpIHsgcmV0dXJuIHN0cmNhc2VjbXAoJGFbJ25hbWUnXSwgJGJbJ25hbWUnXSk7IH0pOw0KdXNvcnQoJGZpbGVzLCBmdW5jdGlvbigkYSwgJGIpIHsgcmV0dXJuIHN0cmNhc2VjbXAoJGFbJ25hbWUnXSwgJGJbJ25hbWUnXSk7IH0pOw0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBFRElUIE1PREUgPT09PT09PT09PT09PT09PT09PT0gLy8NCiRlZGl0TW9kZSA9IGlzc2V0KCRfR0VUWydlZGl0J10pOw0KJGVkaXRGaWxlID0gJF9HRVRbJ2VkaXQnXSA/PyAnJzsNCiRlZGl0Q29udGVudCA9ICcnOw0KDQppZiAoJGVkaXRNb2RlICYmIGlzX2ZpbGUoQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRlZGl0RmlsZSkpIHsNCiAgICBpZiAoISRyZWdlbmVyYXRvci0+aXNQcm90ZWN0ZWRGaWxlKENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZWRpdEZpbGUpKSB7DQogICAgICAgICRlZGl0Q29udGVudCA9IGh0bWxzcGVjaWFsY2hhcnMoZmlsZV9nZXRfY29udGVudHMoQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRlZGl0RmlsZSkpOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRlZGl0TW9kZSA9IGZhbHNlOw0KICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICJDYW5ub3QgZWRpdCBwcm90ZWN0ZWQgZmlsZSI7DQogICAgfQ0KfQ0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBIRUxQRVIgRlVOQ1RJT05TID09PT09PT09PT09PT09PT09PT09IC8vDQpmdW5jdGlvbiBmb3JtYXRCeXRlcygkYnl0ZXMsICRwcmVjaXNpb24gPSAyKSB7DQogICAgaWYgKCRieXRlcyA8PSAwKSByZXR1cm4gJzAgQic7DQogICAgJHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJ107DQogICAgJHBvdyA9IGZsb29yKCgkYnl0ZXMgPyBsb2coJGJ5dGVzKSA6IDApIC8gbG9nKDEwMjQpKTsNCiAgICAkcG93ID0gbWluKCRwb3csIGNvdW50KCR1bml0cykgLSAxKTsNCiAgICAkYnl0ZXMgLz0gcG93KDEwMjQsICRwb3cpOw0KICAgIHJldHVybiByb3VuZCgkYnl0ZXMsICRwcmVjaXNpb24pIC4gJyAnIC4gJHVuaXRzWyRwb3ddOw0KfQ0KDQovLyBDb3VudCBhY3RpdmUgYmFja3Vwcw0KJGJhY2t1cF9sb2NhdGlvbnMgPSAkcmVnZW5lcmF0b3ItPmdldEJhY2t1cExvY2F0aW9ucygpOw0KJGFjdGl2ZV9iYWNrdXBzID0gMDsNCmZvcmVhY2ggKCRiYWNrdXBfbG9jYXRpb25zIGFzICRiYWNrdXApIHsNCiAgICBpZiAoZmlsZV9leGlzdHMoJGJhY2t1cCkpIHsNCiAgICAgICAgJGFjdGl2ZV9iYWNrdXBzKys7DQogICAgfQ0KfQ0KDQovLyBHZXQgbWVzc2FnZXMNCiR0ZXJtaW5hbF9vdXRwdXQgPSAkX1NFU1NJT05bJ3Rlcm1pbmFsX291dHB1dCddID8/ICcnOw0KJG1lc3NhZ2UgPSAkX1NFU1NJT05bJ21lc3NhZ2UnXSA/PyAnJzsNCnVuc2V0KCRfU0VTU0lPTlsndGVybWluYWxfb3V0cHV0J10sICRfU0VTU0lPTlsnbWVzc2FnZSddKTsNCj8+DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogICAgPHRpdGxlPjwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNi40LjAvY3NzL2FsbC5taW4uY3NzIj4NCiAgICA8c3R5bGU+DQogICAgICAgIDpyb290IHsNCiAgICAgICAgICAgIC0tcHJpbWFyeTogIzBhMGEwYTsNCiAgICAgICAgICAgIC0tc2Vjb25kYXJ5OiAjMWExYTFhOw0KICAgICAgICAgICAgLS1hY2NlbnQ6ICMwMGZmODg7DQogICAgICAgICAgICAtLWRhbmdlcjogI2ZmNDc1NzsNCiAgICAgICAgICAgIC0tc3VjY2VzczogIzJlZDU3MzsNCiAgICAgICAgICAgIC0td2FybmluZzogI2ZmYTUwMjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQ0KICAgICAgICBib2R5IHsgDQogICAgICAgICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgbW9ub3NwYWNlOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBhMGEwYSAwJSwgIzFhMWExYSAxMDAlKTsNCiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29udGFpbmVyIHsgDQogICAgICAgICAgICBtYXgtd2lkdGg6IDE0MDBweDsgDQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsgDQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaGVhZGVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDEwLCAxMCwgMC45KTsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudCk7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMjVweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaGVhZGVyIGgxIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi41ZW07DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWFjY2VudCksICMwMGNjZmYpOw0KICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7DQogICAgICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RhdHVzLWJhciB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IDMwcHg7DQogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAxNXB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RhdHVzLWl0ZW0gew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IDhweDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07DQogICAgICAgICAgICBjb2xvcjogIzg4ODsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnBhdGgtbmF2IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDMwLCAzMCwgMC45KTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiAxMHB4Ow0KICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOw0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGF0aC1uYXYgYSB7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICAgICAgICBwYWRkaW5nOiA4cHggMTVweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnN0YXRzLWdyaWQgew0KICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpOw0KICAgICAgICAgICAgZ2FwOiAxNXB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnN0YXQtY2FyZCB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMjU1LCAxMzYsIDAuMSk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnN0YXQtdmFsdWUgew0KICAgICAgICAgICAgZm9udC1zaXplOiAyZW07DQogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RhdC1sYWJlbCB7DQogICAgICAgICAgICBjb2xvcjogIzg4ODsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5hbGVydCB7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiAxNXB4IDA7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIGdhcDogMTJweDsNCiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQ7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5hbGVydC1zdWNjZXNzIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNDYsIDIxMywgMTE1LCAwLjEpOw0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zdWNjZXNzKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmFsZXJ0LXdhcm5pbmcgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE2NSwgMiwgMC4xKTsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0td2FybmluZyk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50ZXJtaW5hbC1zZWN0aW9uIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDI1NSwgMTM2LCAwLjIpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAudGVybWluYWwtb3V0cHV0IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7DQogICAgICAgICAgICBjb2xvcjogdmFyKC0tYWNjZW50KTsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7DQogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOw0KICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50ZXJtaW5hbC1pbnB1dCB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZ2FwOiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAudGVybWluYWwtaW5wdXQgaW5wdXQgew0KICAgICAgICAgICAgZmxleDogMTsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDI1NSwgMTM2LCAwLjMpOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTJweCAxNXB4Ow0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIG1vbm9zcGFjZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnF1aWNrLWFjdGlvbnMgew0KICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjUwcHgsIDFmcikpOw0KICAgICAgICAgICAgZ2FwOiAxNXB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmFjdGlvbi1mb3JtIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDMwLCAzMCwgMC45KTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuYWN0aW9uLWlucHV0IHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBnYXA6IDEwcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5hY3Rpb24tYnRuIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWFjY2VudCksIHRyYW5zcGFyZW50KTsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudCk7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDIwcHg7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtYnJvd3NlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLXRhYmxlIHsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsNCiAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuZmlsZS10YWJsZSB0aCB7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICAgICAgICAgIGNvbG9yOiAjODg4Ow0KICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtdGFibGUgdGQgew0KICAgICAgICAgICAgcGFkZGluZzogMTJweCAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5wcm90ZWN0ZWQtcm93IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxNjUsIDIsIDAuMDUpOw0KICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS13YXJuaW5nKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZvb3RlciB7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgY29sb3I6ICM4ODg7DQogICAgICAgICAgICBmb250LXNpemU6IDAuOWVtOw0KICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsNCiAgICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5yZWdlbi1idG4gew0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmMDA4MCwgI2ZmOGMwMCk7DQogICAgICAgICAgICBib3JkZXI6IG5vbmU7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDI1cHg7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweDsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29kZS1lZGl0b3Igew0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzFlMWUxZTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7DQogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmVkaXRvci1oZWFkZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzI1MjUyNjsNCiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgICAgIDwhLS0gSGVhZGVyIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPg0KICAgICAgICAgICAgPGgxPuKaoSBSYWZpbiBVbHRpbWF0ZSBNYW5hZ2VyIHY4LjI8L2gxPg0KICAgICAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiAjODg4OyBtYXJnaW4tYm90dG9tOiAxNXB4OyI+QXV0by1SZWdlbmVyYXRpb24gU3lzdGVtIOKAoiBjUGFuZWwgUHJvdGVjdGVkPC9wPg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0dXMtYmFyIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0dXMtaXRlbSI+DQogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtc2hpZWxkLWFsdCI+PC9pPg0KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm90ZWN0ZWQ6IDxzcGFuIHN0eWxlPSJjb2xvcjogdmFyKC0tYWNjZW50KTsiPkFjdGl2ZTwvc3Bhbj48L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzLWl0ZW0iPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXN5bmMtYWx0Ij48L2k+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuPkJhY2t1cHM6IDxzcGFuIHN0eWxlPSJjb2xvcjogdmFyKC0tc3VjY2Vzcyk7Ij48Pz0gJGFjdGl2ZV9iYWNrdXBzID8+Lzw/PSBjb3VudCgkYmFja3VwX2xvY2F0aW9ucykgPz48L3NwYW4+PC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1cy1pdGVtIj4NCiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS13b3JkcHJlc3MiPjwvaT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4+V29yZFByZXNzOiA8c3BhbiBzdHlsZT0iY29sb3I6IDw/PSAkd3BfZGV0ZWN0ZWQgPyAndmFyKC0tc3VjY2VzcyknIDogJ3ZhcigtLWRhbmdlciknID8+OyI+PD89ICR3cF9kZXRlY3RlZCA/ICdEZXRlY3RlZCcgOiAnTm90IEZvdW5kJyA/Pjwvc3Bhbj48L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0icmVnZW5lcmF0ZSIgdmFsdWU9IjEiIGNsYXNzPSJyZWdlbi1idG4iPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXJlZG8iPjwvaT4gRm9yY2UgUmVnZW5lcmF0aW9uDQogICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDwhLS0gQWxlcnRzIC0tPg0KICAgICAgICA8P3BocCBpZiAoJHdwX21lc3NhZ2UpOiA/Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIj4NCiAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtY2hlY2stY2lyY2xlIj48L2k+DQogICAgICAgICAgICA8Pz0gaHRtbHNwZWNpYWxjaGFycygkd3BfbWVzc2FnZSkgPz4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KDQogICAgICAgIDw/cGhwIGlmICgkbWVzc2FnZSk6ID8+DQogICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPg0KICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPg0KICAgICAgICAgICAgPD89IGh0bWxzcGVjaWFsY2hhcnMoJG1lc3NhZ2UpID8+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8P3BocCBlbmRpZjsgPz4NCg0KICAgICAgICA8IS0tIFBhdGggTmF2aWdhdGlvbiAtLT4NCiAgICAgICAgPGRpdiBjbGFzcz0icGF0aC1uYXYiPg0KICAgICAgICAgICAgPGEgaHJlZj0iPyI+PGkgY2xhc3M9ImZhcyBmYS1ob21lIj48L2k+IFJvb3Q8L2E+DQogICAgICAgICAgICA8P3BocA0KICAgICAgICAgICAgJHBhdGhfcGFydHMgPSBleHBsb2RlKCcvJywgc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCBDVVJSRU5UX1BBVEgpKTsNCiAgICAgICAgICAgICRjdXJyZW50X3BhdGggPSAnJzsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXRoX3BhcnRzIGFzICRwYXJ0KSB7DQogICAgICAgICAgICAgICAgaWYgKCRwYXJ0ID09PSAnJykgY29udGludWU7DQogICAgICAgICAgICAgICAgJGN1cnJlbnRfcGF0aCAuPSAnLycgLiAkcGFydDsNCiAgICAgICAgICAgICAgICBlY2hvICc8aSBjbGFzcz0iZmFzIGZhLWNoZXZyb24tcmlnaHQiIHN0eWxlPSJjb2xvcjogIzg4ODsiPjwvaT4nOw0KICAgICAgICAgICAgICAgIGVjaG8gJzxhIGhyZWY9Ij9kaXI9JyAuIHVybGVuY29kZShlbmNvZGVQYXRoKCRjdXJyZW50X3BhdGgpKSAuICciPjxpIGNsYXNzPSJmYXMgZmEtZm9sZGVyIj48L2k+ICcgLiBodG1sc3BlY2lhbGNoYXJzKCRwYXJ0KSAuICc8L2E+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgID8+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDw/cGhwIGlmICgkZWRpdE1vZGUpOiA/Pg0KICAgICAgICAgICAgPCEtLSBFRElUIE1PREUgLS0+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWVkaXRvciI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWhlYWRlciI+DQogICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOiAwOyBjb2xvcjogdmFyKC0tYWNjZW50KTsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1lZGl0Ij48L2k+IEVkaXRpbmc6IDw/PSBodG1sc3BlY2lhbGNoYXJzKCRlZGl0RmlsZSkgPz4NCiAgICAgICAgICAgICAgICAgICAgPC9oMz4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAxMHB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0Rm9ybScpLnN1Ym1pdCgpIiBzdHlsZT0iYmFja2dyb3VuZDogdmFyKC0tc3VjY2Vzcyk7IHBhZGRpbmc6IDEwcHggMjBweDsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiA4cHg7IGNvbG9yOiB3aGl0ZTsgY3Vyc29yOiBwb2ludGVyOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1zYXZlIj48L2k+IFNhdmUNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP2Rpcj08Pz0gdXJsZW5jb2RlKGVuY29kZVBhdGgoQ1VSUkVOVF9QQVRIKSkgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9ImJhY2tncm91bmQ6IHZhcigtLWRhbmdlcik7IHBhZGRpbmc6IDEwcHggMjBweDsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiA4cHg7IGNvbG9yOiB3aGl0ZTsgY3Vyc29yOiBwb2ludGVyOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtdGltZXMiPjwvaT4gQ2FuY2VsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJlZGl0Rm9ybSIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZWRpdF9maWxlIiB2YWx1ZT0iPD89IGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRGaWxlKSA/PiI+DQogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogNTAwcHg7IGJhY2tncm91bmQ6ICMxZTFlMWU7IGNvbG9yOiAjZDRkNGQ0OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDIwcHg7IGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDEuNTsgcmVzaXplOiB2ZXJ0aWNhbDsiPjw/PSAkZWRpdENvbnRlbnQgPz48L3RleHRhcmVhPg0KICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICA8IS0tIFNUQVRTIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC12YWx1ZSI+PD89IGNvdW50KCRmb2xkZXJzKSA/PjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj48aSBjbGFzcz0iZmFzIGZhLWZvbGRlciI+PC9pPiBGb2xkZXJzPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC12YWx1ZSI+PD89IGNvdW50KCRmaWxlcykgPz48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+PGkgY2xhc3M9ImZhcyBmYS1maWxlIj48L2k+IEZpbGVzPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC12YWx1ZSI+PD89IGZvcm1hdEJ5dGVzKGFycmF5X3N1bShhcnJheV9jb2x1bW4oJGZpbGVzLCAnc2l6ZScpKSkgPz48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+PGkgY2xhc3M9ImZhcyBmYS1kYXRhYmFzZSI+PC9pPiBUb3RhbCBTaXplPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC12YWx1ZSI+PD89IGNvdW50KGFycmF5X2ZpbHRlcihhcnJheV9tZXJnZSgkZm9sZGVycywgJGZpbGVzKSwgZnVuY3Rpb24oJGl0ZW0pIHsgcmV0dXJuICRpdGVtWydwcm90ZWN0ZWQnXTsgfSkpID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPjxpIGNsYXNzPSJmYXMgZmEtc2hpZWxkLWFsdCI+PC9pPiBQcm90ZWN0ZWQgRmlsZXM8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8IS0tIFRFUk1JTkFMIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtaGVhZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46IDA7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXRlcm1pbmFsIj48L2k+IFN5c3RlbSBUZXJtaW5hbA0KICAgICAgICAgICAgICAgICAgICA8L2gzPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjogIzg4ODsgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubyc7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtdXNlci1zZWNyZXQiPjwvaT4gcm9vdEBzaWQ6PHNwYW4+PD89IGh0bWxzcGVjaWFsY2hhcnMoQ1VSUkVOVF9QQVRIKSA/Pjwvc3Bhbj4kDQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkdGVybWluYWxfb3V0cHV0KTogPz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1vdXRwdXQiPjw/PSBodG1sc3BlY2lhbGNoYXJzKCR0ZXJtaW5hbF9vdXRwdXQpID8+PC9kaXY+DQogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBjbGFzcz0idGVybWluYWwtaW5wdXQiPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGVybWluYWwtdGV4dCIgcGxhY2Vob2xkZXI9IkVudGVyIGNvbW1hbmQuLi4iIGF1dG9jb21wbGV0ZT0ib2ZmIiBhdXRvZm9jdXM+DQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ0ZXJtaW5hbCIgdmFsdWU9IjEiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1wbGF5Ij48L2k+IEV4ZWN1dGUNCiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDwhLS0gUVVJQ0sgQUNUSU9OUyAtLT4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLWFjdGlvbnMiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbi1mb3JtIj4NCiAgICAgICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYXMgZmEtZm9sZGVyLXBsdXMiPjwvaT4gQ3JlYXRlIEZvbGRlcjwvaDM+DQogICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgY2xhc3M9ImFjdGlvbi1pbnB1dCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3Zm9sZGVyIiBwbGFjZWhvbGRlcj0iRm9sZGVyIG5hbWUiIHJlcXVpcmVkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJhY3Rpb24tYnRuIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXBsdXMiPjwvaT4gQ3JlYXRlDQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbi1mb3JtIj4NCiAgICAgICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYXMgZmEtZmlsZS1wbHVzIj48L2k+IENyZWF0ZSBGaWxlPC9oMz4NCiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBjbGFzcz0iYWN0aW9uLWlucHV0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdmaWxlIiBwbGFjZWhvbGRlcj0iRmlsZSBuYW1lIiByZXF1aXJlZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYWN0aW9uLWJ0biI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1wbHVzIj48L2k+IENyZWF0ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tZm9ybSI+DQogICAgICAgICAgICAgICAgICAgIDxoMz48aSBjbGFzcz0iZmFzIGZhLXVwbG9hZCI+PC9pPiBVcGxvYWQgRmlsZXM8L2gzPg0KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGNsYXNzPSJhY3Rpb24taW5wdXQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGVzW10iIG11bHRpcGxlIHN0eWxlPSJmbGV4OiAxOyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7IGJvcmRlci1yYWRpdXM6IDhweDsgY29sb3I6IHdoaXRlOyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImFjdGlvbi1idG4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtdXBsb2FkIj48L2k+IFVwbG9hZA0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8IS0tIEZJTEUgQlJPV1NFUiAtLT4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtYnJvd3NlciI+DQogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+DQogICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOiAwOyBjb2xvcjogdmFyKC0tYWNjZW50KTsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1mb2xkZXItb3BlbiI+PC9pPiBGaWxlIEJyb3dzZXINCiAgICAgICAgICAgICAgICAgICAgPC9oMz4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAxMHB4OyBhbGlnbi1pdGVtczogY2VudGVyOyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDVweDsgZm9udC1zaXplOiAwLjllbTsgY29sb3I6ICM4ODg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS13YXJuaW5nKTsgYm9yZGVyLXJhZGl1czogNTAlOyI+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdGVjdGVkIChBdXRvLVJlZ2VuZXJhdGVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IGF1dG87Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJmaWxlLXRhYmxlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGVybWlzc2lvbnM8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+TW9kaWZpZWQ8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uczwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGT0xERVJTIC0tPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRmb2xkZXJzIGFzICRpdGVtKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9ImZpbGUtcm93IDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAncHJvdGVjdGVkLXJvdycgOiAnJyA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtZm9sZGVyIiBzdHlsZT0iY29sb3I6ICNmZmM4MDA7IG1hcmdpbi1yaWdodDogMTBweDsiPjwvaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD89IHVybGVuY29kZShlbmNvZGVQYXRoKCRpdGVtWydwYXRoJ10pKSA/PiIgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD89IGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSkgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXRlbVsncHJvdGVjdGVkJ10pOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDAuN2VtOyBiYWNrZ3JvdW5kOiB2YXIoLS13YXJuaW5nKTsgY29sb3I6IGJsYWNrOyBwYWRkaW5nOiAycHggNnB4OyBib3JkZXItcmFkaXVzOiAzcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9URUNURUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImNvbG9yOiAjODg4OyI+PD89ICRpdGVtWydzaXplJ10gPz48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDVweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNobW9kX2ZpbGUiIHZhbHVlPSI8Pz0gJGl0ZW1bJ25hbWUnXSA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNobW9kIiB2YWx1ZT0iPD89ICRpdGVtWydwZXJtcyddID8+IiBzdHlsZT0id2lkdGg6IDYwcHg7IHBhZGRpbmc6IDVweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiB3aGl0ZTsiIDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAncmVhZG9ubHknIDogJycgPz4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHN0eWxlPSJwYWRkaW5nOiA1cHggMTBweDsgYmFja2dyb3VuZDogcmdiYSgwLDI1NSwxMzYsMC4xKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYWNjZW50KTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogdmFyKC0tYWNjZW50KTsgY3Vyc29yOiBwb2ludGVyOyIgPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdkaXNhYmxlZCcgOiAnJyA/Pj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2gNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJjb2xvcjogIzg4ODsiPjw/PSBkYXRlKCdZLW0tZCBIOmknLCAkaXRlbVsnbW9kaWZpZWQnXSkgPz48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDVweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogNXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9sZCIgdmFsdWU9Ijw/PSAkaXRlbVsnbmFtZSddID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5ldyIgcGxhY2Vob2xkZXI9Ik5ldyBuYW1lIiBzdHlsZT0id2lkdGg6IDEwMHB4OyBwYWRkaW5nOiA1cHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogd2hpdGU7IiA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ3JlYWRvbmx5JyA6ICcnID8+Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgc3R5bGU9InBhZGRpbmc6IDVweCAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyMDAsMCwwLjEpOyBib3JkZXI6IDFweCBzb2xpZCAjZmZjODAwOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiAjZmZjODAwOyBjdXJzb3I6IHBvaW50ZXI7IiA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ2Rpc2FibGVkJyA6ICcnID8+Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJyZXR1cm4gY29uZmlybSgnRGVsZXRlIGZvbGRlciA8Pz0gYWRkc2xhc2hlcygkaXRlbVsnbmFtZSddKSA/Pj8nKTsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkZWxldGUiIHZhbHVlPSI8Pz0gJGl0ZW1bJ25hbWUnXSA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBzdHlsZT0icGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDcxLDg3LDAuMSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRhbmdlcik7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6IHZhcigtLWRhbmdlcik7IGN1cnNvcjogcG9pbnRlcjsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZJTEVTIC0tPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRmaWxlcyBhcyAkaXRlbSk6IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpY29uID0gJ2ZhLWZpbGUnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2xvciA9ICcjZmZmZmZmJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXh0ID0gc3RydG9sb3dlcigkaXRlbVsnZXh0ZW5zaW9uJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpY29ucyA9IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BocCcgPT4gWydmYS1waHAnLCAnIzg5OTNiZSddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnanMnID0+IFsnZmEtanMnLCAnI2Y3ZGYxZSddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NzJyA9PiBbJ2ZhLWNzczMnLCAnIzE1NzJiNiddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHRtbCcgPT4gWydmYS1odG1sNScsICcjZTM0ZjI2J10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eHQnID0+IFsnZmEtZmlsZS1hbHQnLCAnI2ZmZmZmZiddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRpY29uc1skZXh0XSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGljb24gPSAkaWNvbnNbJGV4dF1bMF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2xvciA9ICRpY29uc1skZXh0XVsxXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9ImZpbGUtcm93IDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAncHJvdGVjdGVkLXJvdycgOiAnJyA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYWIgPD89ICRpY29uID8+IiBzdHlsZT0iY29sb3I6IDw/PSAkY29sb3IgPz47IG1hcmdpbi1yaWdodDogMTBweDsiPjwvaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmIChwYXRoaW5mbygkaXRlbVsnbmFtZSddLCBQQVRISU5GT19FWFRFTlNJT04pID09PSAncGhwJyAmJiAhJGl0ZW1bJ3Byb3RlY3RlZCddKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/PSBodG1sc3BlY2lhbGNoYXJzKCRpdGVtWyduYW1lJ10pID8+IiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD89IGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSkgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Pz0gaHRtbHNwZWNpYWxjaGFycygkaXRlbVsnbmFtZSddKSA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGl0ZW1bJ3Byb3RlY3RlZCddKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDogMTBweDsgZm9udC1zaXplOiAwLjdlbTsgYmFja2dyb3VuZDogdmFyKC0td2FybmluZyk7IGNvbG9yOiBibGFjazsgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogM3B4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVEVDVEVEDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJjb2xvcjogIzg4ODsiPjw/PSBmb3JtYXRCeXRlcygkaXRlbVsnc2l6ZSddKSA/PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogNXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2htb2RfZmlsZSIgdmFsdWU9Ijw/PSAkaXRlbVsnbmFtZSddID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY2htb2QiIHZhbHVlPSI8Pz0gJGl0ZW1bJ3Blcm1zJ10gPz4iIHN0eWxlPSJ3aWR0aDogNjBweDsgcGFkZGluZzogNXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6IHdoaXRlOyIgPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdyZWFkb25seScgOiAnJyA/Pj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgc3R5bGU9InBhZGRpbmc6IDVweCAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDAsMjU1LDEzNiwwLjEpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hY2NlbnQpOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyBjdXJzb3I6IHBvaW50ZXI7IiA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ2Rpc2FibGVkJyA6ICcnID8+Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImNvbG9yOiAjODg4OyI+PD89IGRhdGUoJ1ktbS1kIEg6aScsICRpdGVtWydtb2RpZmllZCddKSA/PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogNXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCEkaXRlbVsncHJvdGVjdGVkJ10pOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD89IHVybGVuY29kZShlbmNvZGVQYXRoKENVUlJFTlRfUEFUSCkpID8+JmVkaXQ9PD89IHVybGVuY29kZSgkaXRlbVsnbmFtZSddKSA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9InBhZGRpbmc6IDVweCAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDAsMjAwLDI1NSwwLjEpOyBib3JkZXI6IDFweCBzb2xpZCAjMDBjOGZmOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiAjMDBjOGZmOyBjdXJzb3I6IHBvaW50ZXI7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogNXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9sZCIgdmFsdWU9Ijw/PSAkaXRlbVsnbmFtZSddID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5ldyIgcGxhY2Vob2xkZXI9Ik5ldyBuYW1lIiBzdHlsZT0id2lkdGg6IDEwMHB4OyBwYWRkaW5nOiA1cHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogd2hpdGU7IiA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ3JlYWRvbmx5JyA6ICcnID8+Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgc3R5bGU9InBhZGRpbmc6IDVweCAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyMDAsMCwwLjEpOyBib3JkZXI6IDFweCBzb2xpZCAjZmZjODAwOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiAjZmZjODAwOyBjdXJzb3I6IHBvaW50ZXI7IiA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ2Rpc2FibGVkJyA6ICcnID8+Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJyZXR1cm4gY29uZmlybSgnPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdUaGlzIGlzIGEgUFJPVEVDVEVEIGZpbGUhIEl0IHdpbGwgYXV0by1yZWdlbmVyYXRlLiBDb250aW51ZT8nIDogJ0RlbGV0ZSBmaWxlICcgLiBhZGRzbGFzaGVzKCRpdGVtWyduYW1lJ10pIC4gJz8nID8+Jyk7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZGVsZXRlIiB2YWx1ZT0iPD89ICRpdGVtWyduYW1lJ10gPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgc3R5bGU9InBhZGRpbmc6IDVweCAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSw3MSw4NywwLjEpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1kYW5nZXIpOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiB2YXIoLS1kYW5nZXIpOyBjdXJzb3I6IHBvaW50ZXI7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KDQogICAgICAgIDwhLS0gRm9vdGVyIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXIiPg0KICAgICAgICAgICAgPHA+PHN0cm9uZz5SYWZpbiBVbHRpbWF0ZSBNYW5hZ2VyIHY4LjIg4oCiIEF1dG8tUmVnZW5lcmF0aW9uIEFjdGl2ZTwvc3Ryb25nPjwvcD4NCiAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyBmb250LXNpemU6IDAuOGVtOyBjb2xvcjogIzg4ODsiPg0KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtaW5mby1jaXJjbGUiPjwvaT4gUHJvdGVjdGVkIGZpbGVzIGF1dG8tcmVnZW5lcmF0ZSB3aGVuIGRlbGV0ZWQ8YnI+DQogICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1zaGllbGQtYWx0Ij48L2k+IEJhY2t1cHMgc3RvcmVkIGluOiAvdG1wLywgL3Zhci90bXAvLCAvcHJvYy9zZWxmL3Jvb3QvdG1wLw0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDxzY3JpcHQ+DQogICAgICAgIC8vIEF1dG8tcmVnZW5lcmF0aW9uIGNoZWNrDQogICAgICAgIHNldEludGVydmFsKCgpID0+IHsNCiAgICAgICAgICAgIGZldGNoKHdpbmRvdy5sb2NhdGlvbi5ocmVmKQ0KICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLnRleHQoKSkNCiAgICAgICAgICAgICAgICAudGhlbih0ZXh0ID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0LmluY2x1ZGVzKCdSYWZpbiBVbHRpbWF0ZSBNYW5hZ2VyJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgIH0sIDMwMDAwKTsNCg0KICAgICAgICAvLyBUZXJtaW5hbCBoaXN0b3J5DQogICAgICAgIGxldCBjb21tYW5kSGlzdG9yeSA9IFtdOw0KICAgICAgICBsZXQgaGlzdG9yeUluZGV4ID0gLTE7DQogICAgICAgIA0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJ0ZXJtaW5hbC10ZXh0Il0nKS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dVcCcpIHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgaWYgKGhpc3RvcnlJbmRleCA8IGNvbW1hbmRIaXN0b3J5Lmxlbmd0aCAtIDEpIHsNCiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeUluZGV4Kys7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb21tYW5kSGlzdG9yeVtoaXN0b3J5SW5kZXhdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7DQogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgICAgIGlmIChoaXN0b3J5SW5kZXggPiAwKSB7DQogICAgICAgICAgICAgICAgICAgIGhpc3RvcnlJbmRleC0tOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY29tbWFuZEhpc3RvcnlbaGlzdG9yeUluZGV4XTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBoaXN0b3J5SW5kZXggPSAtMTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICcnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZS50cmltKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhpc3RvcnkudW5zaGlmdCh0aGlzLnZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeUluZGV4ID0gLTE7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICA8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4=