{
    "id": "event_a4c22d3ca872c3ae",
    "timestamp": 1777292253,
    "branch_id": "main",
    "parent_event_id": "event_1d594ac189671de7",
    "type": "patch_apply",
    "label": "supprimer js bootstrap modernizr manquants",
    "source": "patch",
    "author": "CNOC",
    "session_id": "43305eb2706f6eee2531a5a173355a18",
    "payload": [
        {
            "path": "pointages/admin.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 6264,
                "sha1": "b691f5cb970c626d45b282fe11bd9ac23057bc23",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvYWRtaW4ucGhwIHwgUHJvdMOoZ2UgbOKAmWFjY8OocyBhZG1pbmlzdHJhdGV1ciB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsIGV0IHBlcm1ldCBs4oCZYWpvdXQgZOKAmXVuIHNhbGFyacOpIGVuIGJhc2UuIHwgRXhwb3NlOiBhdWN1biB8IETDqXBlbmQgZGU6IGNvbmZpZy5waHAsIGluY2x1ZGVzL2RldmljZV9hdXRoLnBocCwgaW5kZXgucGhwLCBjb25uZXhpb24ucGhwIHwgSW1wYWN0ZTogw6l0YXQgZGUgc2Vzc2lvbiwgY29va2llIGTigJlhcHBhcmVpbCwgYWNjw6hzIMOgIGzigJlpbnRlcmZhY2UsIGluc2VydGlvbiBCREQsIHJlZGlyZWN0aW9uIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoTm9tLCBQcmVub20sIERhdGVEZU5haXNzYW5jZSwgUm9sZSwgRW1haWwsIENvZGVQaW4sIERhdGVEZUNyZWF0aW9uLCBTdGF0dXQpICovCgoKCnNlc3Npb25fc3RhcnQoKTsKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7Cgo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCgoKPHRpdGxlPkFqb3V0IG5vdXZlYXUgc2FsYXJpw6k8L3RpdGxlPgoKPCEtLQoKCgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKCgpodHRwOi8vd3d3LnRvb3BsYXRlLmNvbS92aWV3LzIwODktbWV0ZW9yCgoKCi0tPgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+CgoKCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jvb3RzdHJhcC5taW4uY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2ZvbnRBd2Vzb21lLmNzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9mb250QXdlc29tZS5jc3MiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9oZXJvLXNsaWRlci5jc3MiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy90b29wbGF0ZS1zdHlsZS5jc3MiPgo8P3BocAokY3NzUGF0aCA9IF9fRElSX18gLiAnL2Nzcy9zdHlsZS5jc3MnOwokY3NzVmVyc2lvbiA9IGZpbGVfZXhpc3RzKCRjc3NQYXRoKSA/IGZpbGVtdGltZSgkY3NzUGF0aCkgOiB0aW1lKCk7Cj8+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTw/cGhwIGVjaG8gKGludCkkY3NzVmVyc2lvbjsgPz4iPgoKCgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zOjMwMCw0MDAsNjAwLDcwMCw4MDAiIHJlbD0ic3R5bGVzaGVldCI+CgoKCjxzY3JpcHQgc3JjPSJqcy92ZW5kb3IvbW9kZXJuaXpyLTIuOC4zLXJlc3BvbmQtMS40LjIubWluLmpzIj48L3NjcmlwdD4KCjwvaGVhZD4KCjxib2R5IGNsYXNzPSJwYWdlLWFkbWluIHRoZW1lLWRhcmsiPgoKCgoKCgoKPGRpdiBpZD0iYWJvdXQiIGNsYXNzPSJwYWdlLXNlY3Rpb24iPgoKPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KCjxkaXYgY2xhc3M9InJvdyI+Cgo8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgoKPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIj4KCjxoMT5Bam91dCBub3V2ZWwgZW1wbG95w6k8L2gxPgoKCgoKCjxoND48L2g0PjxkaXYgY2xhc3M9ImxpbmUtZGVjIj48L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAKCgoKPGNlbnRlcj48Zm9udCBjb2xvcj0id2hpdGUiPgoKCgoKCgoKCgoKCjwhLS0gRm9ybXVsYWlyZSBwb3VyIGFqb3V0ZXIgdW4gZW1wbG95w6kgLS0+Cgo8YnI+Cjxmb250IGNvbG9yPSJibGFjayI+Cjxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgo8IS0tIEFqb3V0ZXIgbGVzIGNoYW1wcyBtYW5xdWFudHMgaWNpIC0tPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibm9tIiBwbGFjZWhvbGRlcj0iTm9tIiByZXF1aXJlZD48YnI+PGJyPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icHJlbm9tIiBwbGFjZWhvbGRlcj0iUHLDqW5vbSIgcmVxdWlyZWQ+PGJyPjxicj4KCjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZGF0ZURlTmFpc3NhbmNlIiBuYW1lPSJkYXRlRGVOYWlzc2FuY2UiIG9uaW5wdXQ9ImZvcm1hdGVyRGF0ZSh0aGlzKSIgaW5wdXRtb2RlPSJudW1lcmljIiBtYXhsZW5ndGg9IjEwIiBwbGFjZWhvbGRlcj0iSkovTU0vQUFBQSI+PGJyPjxicj4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJvbGUiIHBsYWNlaG9sZGVyPSJSb2xlIiA+PGJyPjxicj4KPGlucHV0IHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcGxhY2Vob2xkZXI9IkVtYWlsIiA+PGJyPjxicj4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNvZGVQaW4iIHBsYWNlaG9sZGVyPSJDb2RlIFBpbiIgPjxicj48YnI+Cgo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJBam91dGVyIj4KPC9mb250Pgo8L2Zvcm0+CgoKCgoKCgo8YnI+PGJyPjxicj4KCjxmb250IGNvbG9yPSJ3aGl0ZSI+Cgo8P3BocAppZiAoaXNzZXQoJF9QT1NUWydzdWJtaXQnXSkpIHsKICAgICRkYXRlUGFydHMgPSBleHBsb2RlKCcvJywgJF9QT1NUWydkYXRlRGVOYWlzc2FuY2UnXSk7CiAgICAkZGF0ZURlTmFpc3NhbmNlRm9ybWF0dGVkID0gJGRhdGVQYXJ0c1syXSAuICctJyAuICRkYXRlUGFydHNbMV0gLiAnLScgLiAkZGF0ZVBhcnRzWzBdOwoKICAgIC8vIFLDqWN1cMOpcmVyIGxlcyBkb25uw6llcyBkdSBmb3JtdWxhaXJlCiAgICAkbm9tID0gJF9QT1NUWydub20nXTsKICAgICRwcmVub20gPSAkX1BPU1RbJ3ByZW5vbSddOwogICAgJGRhdGVEZU5haXNzYW5jZSA9ICRfUE9TVFsnZGF0ZURlTmFpc3NhbmNlJ107CiAgICAkcm9sZSA9ICRfUE9TVFsncm9sZSddOwogICAgJGVtYWlsID0gJF9QT1NUWydlbWFpbCddOwogICAgJGNvZGVQaW4gPSAkX1BPU1RbJ2NvZGVQaW4nXTsKICAgIAogICAgLy8gQ29uc3RydWlyZSBldCBleMOpY3V0ZXIgbGEgcmVxdcOqdGUgSU5TRVJUCiAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgKE5vbSwgUHJlbm9tLCBEYXRlRGVOYWlzc2FuY2UsIFJvbGUsIEVtYWlsLCBDb2RlUGluLCBEYXRlRGVDcmVhdGlvbiwgU3RhdHV0KSBWQUxVRVMgKD8sID8sID8sID8sID8sID8sIE5PVygpLCAnYWN0aWYnKSIpOwogICAgJHN0bXQtPmV4ZWN1dGUoWyRub20sICRwcmVub20sICRkYXRlRGVOYWlzc2FuY2VGb3JtYXR0ZWQsICRyb2xlLCAkZW1haWwsICRjb2RlUGluXSk7CiAgICAKICAgIC8vIFJlZGlyaWdlciBhdmVjIHRvYXN0IChhZmZpY2jDqSBzdXIgaW5kZXgucGhwKQogICAgJHRvYXN0TWVzc2FnZSA9IHJhd3VybGVuY29kZSgnRW1wbG95w6kgYWpvdXTDqSBhdmVjIHN1Y2PDqHMnKTsKICAgIGVjaG8gIjxzY3JpcHQ+d2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaW5kZXgucGhwP3RvYXN0PXskdG9hc3RNZXNzYWdlfSZ0b2FzdFR5cGU9c3VjY2Vzcyc7PC9zY3JpcHQ+IjsKfQo/PgoKCgoKCgo8YnI+PGJyPjxicj48YnI+PGJyPgoKPGZvbnQgY29sb3I9ImJsYWNrIj4KCjxidXR0b24gb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaW5kZXgucGhwJzsiPiBSZXRvdXJuZXIgcGFnZSBlbXBsb3nDqXMgPC9idXR0b24+Cgo8L2ZvbnQ+CgoKCgoKPC9mb250PgoKPC9jZW50ZXI+Cgo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KCgoKPHA+PGEgaHJlZj0iaW5kZXgucGhwIj5SZXRvdXIgYWNjdWVpbDwvYT48L3A+Cgo8L2Rpdj4KCgoKCgoKCgoKCgoKCgoKCgoKCjxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+Cgo8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUoJzxzY3JpcHQgc3JjPSJqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMiPjxcL3NjcmlwdD4nKTwvc2NyaXB0PgoKCgo8c2NyaXB0IHNyYz0ianMvdmVuZG9yL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0PgoKCgo8c2NyaXB0IHNyYz0ianMvcGx1Z2lucy5qcyI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0ianMvbWFpbi5qcyI+PC9zY3JpcHQ+CgoKCgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgICAKICAgIC8vIG5hdmlnYXRpb24gY2xpY2sgYWN0aW9ucyAKICAgIAogICAgJCgnLnNjcm9sbC1saW5rJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpewogICAgICAgIAogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgCiAgICAgICAgdmFyIHNlY3Rpb25JRCA9ICQodGhpcykuYXR0cigiZGF0YS1pZCIpOwogICAgICAgIAogICAgICAgIHNjcm9sbFRvSUQoJyMnICsgc2VjdGlvbklELCA3NTApOwogICAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIHNjcm9sbCB0byB0b3AgYWN0aW9uCiAgICAKICAgICQoJy5zY3JvbGwtdG9wJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIAogICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6MH0sICdzbG93Jyk7ICAgICAgICAgCiAgICAgICAgCiAgICB9KTsKICAgIAogICAgLy8gbW9iaWxlIG5hdiB0b2dnbGUKICAgIAogICAgJCgnI25hdi10b2dnbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIAogICAgICAgICQoJyNtYWluLW5hdicpLnRvZ2dsZUNsYXNzKCJvcGVuIik7CiAgICAgICAgCiAgICB9KTsKICAgIAp9KTsKCi8vIHNjcm9sbCBmdW5jdGlvbgoKZnVuY3Rpb24gc2Nyb2xsVG9JRChpZCwgc3BlZWQpewogICAgCiAgICB2YXIgb2ZmU2V0ID0gNTA7CiAgICAKICAgIHZhciB0YXJnZXRPZmZzZXQgPSAkKGlkKS5vZmZzZXQoKS50b3AgLSBvZmZTZXQ7CiAgICAKICAgIHZhciBtYWluTmF2ID0gJCgnI21haW4tbmF2Jyk7CiAgICAKICAgICQoJ2h0bWwsYm9keScpLmFuaW1hdGUoe3Njcm9sbFRvcDp0YXJnZXRPZmZzZXR9LCBzcGVlZCk7CiAgICAKICAgIGlmIChtYWluTmF2Lmhhc0NsYXNzKCJvcGVuIikpIHsKICAgICAgICAKICAgICAgICBtYWluTmF2LmNzcygiaGVpZ2h0IiwgIjFweCIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJjb2xsYXBzZSIpOwogICAgICAgIAogICAgICAgIG1haW5OYXYucmVtb3ZlQ2xhc3MoIm9wZW4iKTsKICAgICAgICAKICAgIH0KICAgIAp9CgppZiAodHlwZW9mIGNvbnNvbGUgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAKICAgIGNvbnNvbGUgPSB7CiAgICAgICAgCiAgICAgICAgbG9nOiBmdW5jdGlvbigpIHsgfQogICAgICAgIAogICAgfTsKICAgIAp9CgoKZnVuY3Rpb24gZm9ybWF0ZXJEYXRlKGlucHV0KSB7CiAgICB2YXIgdmFsZXVyID0gaW5wdXQudmFsdWU7CiAgICB2YXIgY2hpZmZyZXMgPSB2YWxldXIucmVwbGFjZSgvXEQvZywgJycpOyAvLyBTdXBwcmltZSB0b3VzIGxlcyBjYXJhY3TDqHJlcyBub24tbnVtw6lyaXF1ZXMKICAgIAogICAgLy8gQWpvdXRlIGRlcyAnLycgYXByw6hzIGxlIGpvdXIgZXQgbGUgbW9pcwogICAgY2hpZmZyZXMgPSBjaGlmZnJlcy5zdWJzdHJpbmcoMCwgMikgKyAoY2hpZmZyZXMubGVuZ3RoID4gMiA/ICcvJyA6ICcnKSArIGNoaWZmcmVzLnN1YnN0cmluZygyLCA0KSArIChjaGlmZnJlcy5sZW5ndGggPiA0ID8gJy8nIDogJycpICsgY2hpZmZyZXMuc3Vic3RyaW5nKDQsIDgpOwogICAgCiAgICBpbnB1dC52YWx1ZSA9IGNoaWZmcmVzOwp9CgoKPC9zY3JpcHQ+Cgo8L2JvZHk+Cgo8L2h0bWw+"
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 6607,
                "sha1": "d6906f9c89917042c845ba35b47847fec59fa8e7",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvYWRtaW4ucGhwIHwgUHJvdMOoZ2UgbOKAmWFjY8OocyBhZG1pbmlzdHJhdGV1ciB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsLCBwZXJtZXQgbOKAmWFqb3V0IGTigJl1biBzYWxhcmnDqSBldCBjaGFyZ2UgdW5pcXVlbWVudCBkZXMgYXNzZXRzIGxvY2F1eCB2ZXJzaW9ubsOpcyBzYW5zIE1vZGVybml6ci9SZXNwb25kIG5pIEJvb3RzdHJhcCBKUy4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBpbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCwgaW5kZXgucGhwLCBjb25uZXhpb24ucGhwLCBqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMsIGpzL3BsdWdpbnMuanMsIGpzL21haW4uanMgfCBJbXBhY3RlOiDDqXRhdCBkZSBzZXNzaW9uLCBjb29raWUgZOKAmWFwcGFyZWlsLCBhY2PDqHMgw6AgbOKAmWludGVyZmFjZSwgaW5zZXJ0aW9uIEJERCwgcmVkaXJlY3Rpb24sIGludGVyYWN0aW9ucyBVSSBuYXRpdmVzIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoTm9tLCBQcmVub20sIERhdGVEZU5haXNzYW5jZSwgUm9sZSwgRW1haWwsIENvZGVQaW4sIERhdGVEZUNyZWF0aW9uLCBTdGF0dXQpICovCgoKCnNlc3Npb25fc3RhcnQoKTsKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7Cgo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCgoKPHRpdGxlPkFqb3V0IG5vdXZlYXUgc2FsYXJpw6k8L3RpdGxlPgoKPCEtLQoKCgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKCgpodHRwOi8vd3d3LnRvb3BsYXRlLmNvbS92aWV3LzIwODktbWV0ZW9yCgoKCi0tPgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+CgoKCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ib290c3RyYXAtdGhlbWUubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2ZvbnRBd2Vzb21lLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2hlcm8tc2xpZGVyLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3N0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgoKPC9oZWFkPgoKPGJvZHkgY2xhc3M9InBhZ2UtYWRtaW4gdGhlbWUtZGFyayI+CgoKCgoKCgo8ZGl2IGlkPSJhYm91dCIgY2xhc3M9InBhZ2Utc2VjdGlvbiI+Cgo8ZGl2IGNsYXNzPSJjb250YWluZXIiPgoKPGRpdiBjbGFzcz0icm93Ij4KCjxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+Cgo8ZGl2IGNsYXNzPSJzZWN0aW9uLWhlYWRpbmciPgoKPGgxPkFqb3V0IG5vdXZlbCBlbXBsb3nDqTwvaDE+CgoKCgoKPGg0PjwvaDQ+PGRpdiBjbGFzcz0ibGluZS1kZWMiPjwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgIAoKCgo8Y2VudGVyPjxmb250IGNvbG9yPSJ3aGl0ZSI+CgoKCgoKCgoKCgoKPCEtLSBGb3JtdWxhaXJlIHBvdXIgYWpvdXRlciB1biBlbXBsb3nDqSAtLT4KCjxicj4KPGZvbnQgY29sb3I9ImJsYWNrIj4KPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CjwhLS0gQWpvdXRlciBsZXMgY2hhbXBzIG1hbnF1YW50cyBpY2kgLS0+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJub20iIHBsYWNlaG9sZGVyPSJOb20iIHJlcXVpcmVkPjxicj48YnI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwcmVub20iIHBsYWNlaG9sZGVyPSJQcsOpbm9tIiByZXF1aXJlZD48YnI+PGJyPgoKPGlucHV0IHR5cGU9InRleHQiIGlkPSJkYXRlRGVOYWlzc2FuY2UiIG5hbWU9ImRhdGVEZU5haXNzYW5jZSIgb25pbnB1dD0iZm9ybWF0ZXJEYXRlKHRoaXMpIiBpbnB1dG1vZGU9Im51bWVyaWMiIG1heGxlbmd0aD0iMTAiIHBsYWNlaG9sZGVyPSJKSi9NTS9BQUFBIj48YnI+PGJyPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icm9sZSIgcGxhY2Vob2xkZXI9IlJvbGUiID48YnI+PGJyPgo8aW5wdXQgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiBwbGFjZWhvbGRlcj0iRW1haWwiID48YnI+PGJyPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29kZVBpbiIgcGxhY2Vob2xkZXI9IkNvZGUgUGluIiA+PGJyPjxicj4KCjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkFqb3V0ZXIiPgo8L2ZvbnQ+CjwvZm9ybT4KCgoKCgoKCjxicj48YnI+PGJyPgoKPGZvbnQgY29sb3I9IndoaXRlIj4KCjw/cGhwCmlmIChpc3NldCgkX1BPU1RbJ3N1Ym1pdCddKSkgewogICAgJGRhdGVQYXJ0cyA9IGV4cGxvZGUoJy8nLCAkX1BPU1RbJ2RhdGVEZU5haXNzYW5jZSddKTsKICAgICRkYXRlRGVOYWlzc2FuY2VGb3JtYXR0ZWQgPSAkZGF0ZVBhcnRzWzJdIC4gJy0nIC4gJGRhdGVQYXJ0c1sxXSAuICctJyAuICRkYXRlUGFydHNbMF07CgogICAgLy8gUsOpY3Vww6lyZXIgbGVzIGRvbm7DqWVzIGR1IGZvcm11bGFpcmUKICAgICRub20gPSAkX1BPU1RbJ25vbSddOwogICAgJHByZW5vbSA9ICRfUE9TVFsncHJlbm9tJ107CiAgICAkZGF0ZURlTmFpc3NhbmNlID0gJF9QT1NUWydkYXRlRGVOYWlzc2FuY2UnXTsKICAgICRyb2xlID0gJF9QT1NUWydyb2xlJ107CiAgICAkZW1haWwgPSAkX1BPU1RbJ2VtYWlsJ107CiAgICAkY29kZVBpbiA9ICRfUE9TVFsnY29kZVBpbiddOwogICAgCiAgICAvLyBDb25zdHJ1aXJlIGV0IGV4w6ljdXRlciBsYSByZXF1w6p0ZSBJTlNFUlQKICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gel9wdGdfYXFwX3V0aWxpc2F0ZXVycyAoTm9tLCBQcmVub20sIERhdGVEZU5haXNzYW5jZSwgUm9sZSwgRW1haWwsIENvZGVQaW4sIERhdGVEZUNyZWF0aW9uLCBTdGF0dXQpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgTk9XKCksICdhY3RpZicpIik7CiAgICAkc3RtdC0+ZXhlY3V0ZShbJG5vbSwgJHByZW5vbSwgJGRhdGVEZU5haXNzYW5jZUZvcm1hdHRlZCwgJHJvbGUsICRlbWFpbCwgJGNvZGVQaW5dKTsKICAgIAogICAgLy8gUmVkaXJpZ2VyIGF2ZWMgdG9hc3QgKGFmZmljaMOpIHN1ciBpbmRleC5waHApCiAgICAkdG9hc3RNZXNzYWdlID0gcmF3dXJsZW5jb2RlKCdFbXBsb3nDqSBham91dMOpIGF2ZWMgc3VjY8OocycpOwogICAgZWNobyAiPHNjcmlwdD53aW5kb3cubG9jYXRpb24uaHJlZiA9ICdpbmRleC5waHA/dG9hc3Q9eyR0b2FzdE1lc3NhZ2V9JnRvYXN0VHlwZT1zdWNjZXNzJzs8L3NjcmlwdD4iOwp9Cj8+CgoKCgoKCjxicj48YnI+PGJyPjxicj48YnI+Cgo8Zm9udCBjb2xvcj0iYmxhY2siPgoKPGJ1dHRvbiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdpbmRleC5waHAnOyI+IFJldG91cm5lciBwYWdlIGVtcGxvecOpcyA8L2J1dHRvbj4KCjwvZm9udD4KCgoKCgo8L2ZvbnQ+Cgo8L2NlbnRlcj4KCjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgoKCgo8cD48YSBocmVmPSJpbmRleC5waHAiPlJldG91ciBhY2N1ZWlsPC9hPjwvcD4KCjwvZGl2PgoKCgoKCgoKCgoKCgoKCgoKCgoKPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvdmVuZG9yL2pxdWVyeS0xLjExLjIubWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2pzL3BsdWdpbnMuanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvbWFpbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKCgoKCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgCiAgICAvLyBuYXZpZ2F0aW9uIGNsaWNrIGFjdGlvbnMgCiAgICAKICAgICQoJy5zY3JvbGwtbGluaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIAogICAgICAgIHZhciBzZWN0aW9uSUQgPSAkKHRoaXMpLmF0dHIoImRhdGEtaWQiKTsKICAgICAgICAKICAgICAgICBzY3JvbGxUb0lEKCcjJyArIHNlY3Rpb25JRCwgNzUwKTsKICAgICAgICAKICAgIH0pOwogICAgCiAgICAvLyBzY3JvbGwgdG8gdG9wIGFjdGlvbgogICAgCiAgICAkKCcuc2Nyb2xsLXRvcCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgCiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAKICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOjB9LCAnc2xvdycpOyAgICAgICAgIAogICAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIG1vYmlsZSBuYXYgdG9nZ2xlCiAgICAKICAgICQoJyNuYXYtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgCiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAKICAgICAgICAkKCcjbWFpbi1uYXYnKS50b2dnbGVDbGFzcygib3BlbiIpOwogICAgICAgIAogICAgfSk7CiAgICAKfSk7CgovLyBzY3JvbGwgZnVuY3Rpb24KCmZ1bmN0aW9uIHNjcm9sbFRvSUQoaWQsIHNwZWVkKXsKICAgIAogICAgdmFyIG9mZlNldCA9IDUwOwogICAgCiAgICB2YXIgdGFyZ2V0T2Zmc2V0ID0gJChpZCkub2Zmc2V0KCkudG9wIC0gb2ZmU2V0OwogICAgCiAgICB2YXIgbWFpbk5hdiA9ICQoJyNtYWluLW5hdicpOwogICAgCiAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6dGFyZ2V0T2Zmc2V0fSwgc3BlZWQpOwogICAgCiAgICBpZiAobWFpbk5hdi5oYXNDbGFzcygib3BlbiIpKSB7CiAgICAgICAgCiAgICAgICAgbWFpbk5hdi5jc3MoImhlaWdodCIsICIxcHgiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygiY29sbGFwc2UiKTsKICAgICAgICAKICAgICAgICBtYWluTmF2LnJlbW92ZUNsYXNzKCJvcGVuIik7CiAgICAgICAgCiAgICB9CiAgICAKfQoKaWYgKHR5cGVvZiBjb25zb2xlID09PSAidW5kZWZpbmVkIikgewogICAgCiAgICBjb25zb2xlID0gewogICAgICAgIAogICAgICAgIGxvZzogZnVuY3Rpb24oKSB7IH0KICAgICAgICAKICAgIH07CiAgICAKfQoKCmZ1bmN0aW9uIGZvcm1hdGVyRGF0ZShpbnB1dCkgewogICAgdmFyIHZhbGV1ciA9IGlucHV0LnZhbHVlOwogICAgdmFyIGNoaWZmcmVzID0gdmFsZXVyLnJlcGxhY2UoL1xEL2csICcnKTsgLy8gU3VwcHJpbWUgdG91cyBsZXMgY2FyYWN0w6hyZXMgbm9uLW51bcOpcmlxdWVzCiAgICAKICAgIC8vIEFqb3V0ZSBkZXMgJy8nIGFwcsOocyBsZSBqb3VyIGV0IGxlIG1vaXMKICAgIGNoaWZmcmVzID0gY2hpZmZyZXMuc3Vic3RyaW5nKDAsIDIpICsgKGNoaWZmcmVzLmxlbmd0aCA+IDIgPyAnLycgOiAnJykgKyBjaGlmZnJlcy5zdWJzdHJpbmcoMiwgNCkgKyAoY2hpZmZyZXMubGVuZ3RoID4gNCA/ICcvJyA6ICcnKSArIGNoaWZmcmVzLnN1YnN0cmluZyg0LCA4KTsKICAgIAogICAgaW5wdXQudmFsdWUgPSBjaGlmZnJlczsKfQoKCjwvc2NyaXB0PgoKPC9ib2R5PgoKPC9odG1sPg=="
            }
        },
        {
            "path": "pointages/css/tooplate-style.css",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 16415,
                "sha1": "28f9e70eb95b1a44dc27895ecef364aa5278587e",
                "content_b64": "LyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcyB8IETDqWZpbml0IGxhIG1pc2UgZW4gZm9ybWUgZ2xvYmFsZSBkdSBzaXRlIHZpdHJpbmUgZXQgZGUgc2VzIHNlY3Rpb25zIChoZWFkZXIsIGhlcm8sIHBvcnRmb2xpbywgYmxvZywgY29udGFjdCwgZm9vdGVyKSB8IEV4cG9zZTogYXVjdW4gfCBEw6lwZW5kIGRlOiAuLi9pbWcvKi5wbmcsIGJvb3RzdHJhcC5taW4uY3NzIHwgSW1wYWN0ZTogVUksIHJlc3BvbnNpdmUsIG5hdmlnYXRpb24sIG1vZGFsZXMvbGlnaHRib3ggfCBUYWJsZXM6IGF1Y3VuZSAqLwovKgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKaHR0cDovL3d3dy50b29wbGF0ZS5jb20vdmlldy8yMDg5LW1ldGVvcgoKKi8KCiogewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJywgYXJpYWwsIHNhbnMtc2VyaWY7Cn0KdWwgewoJbGlzdC1zdHlsZTogbm9uZTsKfQpwIHsKCWNvbG9yOiAjNWE1YTVhOwoJZm9udC1zaXplOiAxM3B4OwoJbGV0dGVyLXNwYWNpbmc6IDAuMjVweDsKCWxpbmUtaGVpZ2h0OiAyNHB4Owp9Ci5wcmltYXJ5LWJ1dHRvbiBhIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCWJhY2tncm91bmQtY29sb3I6ICNhMmNmOGQ7CglwYWRkaW5nOiAxMnB4IDE4cHg7Cgljb2xvcjogIzAwMDsKCWZvbnQtc2l6ZTogMThweDsKCWZvbnQtd2VpZ2h0IDogYm9sZGVyOwoJbGV0dGVyLXNwYWNpbmc6IDFweDsKCXRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cglib3JkZXItcmFkaXVzOiAyMHB4OwoJdHJhbnNpdGlvbjogYWxsIDAuNXM7CiAgICB3aWR0aDogNTAlOwp9Ci5wcmltYXJ5LWJ1dHRvbiBhOmhvdmVyIHsKCWJhY2tncm91bmQtY29sb3I6ICM1YzlkN2Q7Cn0KLndoaXRlLWJ1dHRvbiBhIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCWJhY2tncm91bmQtY29sb3I6ICNmZmY7CglwYWRkaW5nOiAxMnB4IDE4cHg7Cgljb2xvcjogIzEyMTIxMjsKCWZvbnQtc2l6ZTogMTFweDsKCWZvbnQtd2VpZ2h0OiA1MDA7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJYm9yZGVyLXJhZGl1czogMjBweDsKCXRyYW5zaXRpb246IGFsbCAwLjVzOwp9Ci5kMXsKICB3aWR0aDogNTAlOwogIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOwp9Ci53aGl0ZS1idXR0b24gYTpob3ZlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMTIxMjEyOwoJY29sb3I6ICNmZmY7Cn0KLnNlY3Rpb24taGVhZGluZyBoNCB7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglmb250LXNpemU6IDE3cHg7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJZm9udC13ZWlnaHQ6IDcwMDsKCWNvbG9yOiAjZmZmOwp9Ci5zZWN0aW9uLWhlYWRpbmcgaDEgewoJdGV4dC1hbGlnbjogY2VudGVyOwoJZm9udC1zaXplOiAyNXB4OwoJdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKCWZvbnQtd2VpZ2h0OiA3MDA7Cgljb2xvcjogI2ZmZjsKfQouc2VjdGlvbi1oZWFkaW5nIC5saW5lLWRlYyB7Cgl3aWR0aDogNjBweDsKCWhlaWdodDogM3B4OwoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKCW1hcmdpbjogMCBhdXRvOwp9Ci5saW5lLWRlYzIgewoJd2lkdGg6IDYwcHg7CgloZWlnaHQ6IDNweDsKCWJhY2tncm91bmQtY29sb3I6ICMwMDA7CgltYXJnaW46IDAgYXV0bzsKfQouaGVhZGVyIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDA7CiAgICB6LWluZGV4OiAxMDAwMDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0OwogICAgaGVpZ2h0OiA4MHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsgIAogICAgCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBsaW5lLWhlaWdodDogNDBweDsKfQoKLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj5saT5hIHsKICAgIHRleHQtc2hhZG93OiBub25lOwp9CgoubmF2YmFyLWJyYW5kIHsKCWxpbmUtaGVpZ2h0OiA4MHB4OwoJcGFkZGluZzogMHB4Owp9CgoubmF2YmFyLW5hdj5saT5hIHsKCWNvbG9yOiAjZmZmIWltcG9ydGFudDsKCWZvbnQtc2l6ZTogMTNweDsKCWZvbnQtd2VpZ2h0OiAzMDA7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJdGV4dC1zaGFkb3c6IG5vbmU7CglsaW5lLWhlaWdodDogODBweDsKCXBhZGRpbmc6IDBweDsKCWxldHRlci1zcGFjaW5nOiAwLjVweDsKfQoKLm5hdmJhci1uYXY+bGkgewoJbWFyZ2luLWxlZnQ6IDQ1cHg7Cn0KCi5oZWFkZXIuYWN0aXZlIC5uYXZiYXItbmF2PmxpPmEgewoJZm9udC1zaXplOiAxM3B4OwoJZm9udC13ZWlnaHQ6IDMwMDsKCXRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cgl0ZXh0LXNoYWRvdzogbm9uZTsKCWNvbG9yOiAjMTIxMjEyIWltcG9ydGFudDsKfQoKLmhlYWRlci5hY3RpdmUgewogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjk4KTsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7CiAgICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMjUpOwogICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7Cn0KLm5hdmJhci1icmFuZCAubG9nb3sKCW1hcmdpbi10b3A6IDIycHg7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL3doaXRlX2xvZ28ucG5nKTsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCXdpZHRoOiAxMjVweDsKCWhlaWdodDogMzJweDsKCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Cn0KLmhlYWRlci5hY3RpdmUgLm5hdmJhci1icmFuZCAubG9nb3sKCW1hcmdpbi10b3A6IDIycHg7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2JsYWNrX2xvZ28ucG5nKTsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCXdpZHRoOiAxMjVweDsKCWhlaWdodDogMzJweDsKCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Cn0KI21haW4tbmF2IHsKCWJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwoJYmFja2dyb3VuZC1pbWFnZTogbm9uZSFpbXBvcnRhbnQ7Cn0KLmhlYWRlciAubmF2YmFyLWJyYW5kIHsKICAgIGZvbnQtd2VpZ2h0OiA5MDA7Cn0KLm5hdmJhci1pbnZlcnNlIHsKCWJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CgliYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQouaGVhZGVyIC5uYXZiYXIgewogICAgbWFyZ2luOiAwOwogICAgYm9yZGVyOiBub25lOwp9Ci5wYWdlLXNlY3Rpb24gewogICAgcGFkZGluZzogODBweCAwOwp9Ci5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSB7CgltYXJnaW4tdG9wOiAyMnB4OwogICAgYm9yZGVyLWNvbG9yOiAjYTJjZjhkOwogICAgYmFja2dyb3VuZC1jb2xvcjogI2EyY2Y4ZDsKfQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6aG92ZXIsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjYTJjZjhkOwp9CgoubmF2YmFyLXRvZ2dsZSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBwYWRkaW5nOiA5cHggMTBweDsKICAgIG1hcmdpbi10b3A6IDE1cHghaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CiAgICAuaGVhZGVyIC5uYXZiYXItYnJhbmQgewogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgIH0KICAgIC5uYXZiYXItbmF2IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7CiAgICAucGFnZS1zZWN0aW9uIGgxIHsKICAgICAgICBmb250LXNpemU6IDNlbTsKICAgIH0KICAgIC5wYWdlLXNlY3Rpb24gaDIgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgfQogICAgLnBhZ2Utc2VjdGlvbiBwIHsKICAgICAgICBmb250LXNpemU6IDFlbTsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4OwogICAgfQp9CgoKCi8qIEhFUk8gU0xJREVSICovCgouc2xpZGUtY2FwdGlvbiB7Cgljb2xvcjogI2ZmZjsKfQoKLnNsaWRlLWNhcHRpb24gc3BhbiB7Cglmb250LXNpemU6IDE0cHg7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9Cgouc2xpZGUtY2FwdGlvbiBoMiB7Cglmb250LXNpemU6IDM2cHg7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJZm9udC13ZWlnaHQ6IDkwMDsKfQoKLnNsaWRlLWNhcHRpb24gcCB7Cglmb250LXNpemU6IDEzcHg7CglsZXR0ZXItc3BhY2luZzogMC4yNXB4OwoJbGluZS1oZWlnaHQ6IDI0cHg7Cn0KCnVsLmNkLWhlcm8tc2xpZGVyIHsKCW1hcmdpbi1ib3R0b206IDBweCFpbXBvcnRhbnQ7Cn0KCi8qIFdIQVQgV0UgRE8gKi8KCiNhYm91dCB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMTIxOwoJcGFkZGluZzogMjBweCAwcHg7Cn0KCiNhYm91dCAuc2VjdGlvbi1oZWFkaW5nIHsKCW1hcmdpbi1ib3R0b206IDIwcHg7Cn0KCi5zZXJ2aWNlLWl0ZW0gewoJY3Vyc29yOiBwb2ludGVyOwoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKCXRleHQtYWxpZ246IGNlbnRlcjsKCXBhZGRpbmc6IDMwcHggMjBweDsKCXRyYW5zaXRpb246IGFsbCAwLjdzOwoJYm94LXNoYWRvdzogMHB4IDBweCAxNXB4ICNjZGNkY2Q7Cn0KCi5zZXJ2aWNlLWl0ZW06aG92ZXIgewoJYmFja2dyb3VuZC1jb2xvcjogI2EyY2Y4ZDsKfQoKLnNlcnZpY2UtaXRlbSBoNCB7Cglmb250LXNpemU6IDE2cHg7Cglmb250LXdlaWdodDogNzAwOwoJbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwoJbWFyZ2luLWJvdHRvbTogMTVweDsKCW1hcmdpbi10b3A6IDI1cHg7Cn0KCi5zZXJ2aWNlLWl0ZW06aG92ZXIgaDQgewoJY29sb3I6ICNmZmY7Cn0KCi5zZXJ2aWNlLWl0ZW06aG92ZXIgcCB7Cgljb2xvcjogI2ZmZjsKfQoKLmZpcnN0LXNlcnZpY2UgLmljb24gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9maXJzdC1zZXJ2aWNlLW1haW4ucG5nKTsKCWhlaWdodDogMzJweDsKCXdpZHRoOiAzMnB4OwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouZmlyc3Qtc2VydmljZTpob3ZlciAuaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2ZpcnN0LXNlcnZpY2Utd2hpdGUucG5nKTsKfQoKLnNlY29uZC1zZXJ2aWNlIC5pY29uIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvc2Vjb25kLXNlcnZpY2UtbWFpbi5wbmcpOwoJaGVpZ2h0OiAzMnB4OwoJd2lkdGg6IDIycHg7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi5zZWNvbmQtc2VydmljZTpob3ZlciAuaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL3NlY29uZC1zZXJ2aWNlLXdoaXRlLnBuZyk7Cn0KCi50aGlyZC1zZXJ2aWNlIC5pY29uIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvdGhpcmQtc2VydmljZS1tYWluLnBuZyk7CgloZWlnaHQ6IDMycHg7Cgl3aWR0aDogMzJweDsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRoaXJkLXNlcnZpY2U6aG92ZXIgLmljb24gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy90aGlyZC1zZXJ2aWNlLXdoaXRlLnBuZyk7Cn0KCi5mb3VydGgtc2VydmljZSAuaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2ZvdXJ0aC1zZXJ2aWNlLW1haW4ucG5nKTsKCWhlaWdodDogMzJweDsKCXdpZHRoOiAzMnB4OwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouZm91cnRoLXNlcnZpY2U6aG92ZXIgLmljb24gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9mb3VydGgtc2VydmljZS13aGl0ZS5wbmcpOwp9CgoKI3doYXQtd2UtZG8gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy93aGF0LXdlLWRvLWJnLnBuZyk7Cgl3aWR0aDogMTAwJTsKCWJhY2tncm91bmQtc2l6ZTogY292ZXI7CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwoJcGFkZGluZzogODBweCAwcHg7Cgljb2xvcjogI2ZmZjsKfQoKI3doYXQtd2UtZG8gLnJpZ2h0LWltYWdlIGltZyB7Cgl3aWR0aDogMTAwJTsKCW92ZXJmbG93OiBoaWRkZW47Cn0KCiN3aGF0LXdlLWRvIGg0IHsKCWZvbnQtc2l6ZTogMjRweDsKCWZvbnQtd2VpZ2h0OiA3MDA7CglsZXR0ZXItc3BhY2luZzogMC41cHg7CglsaW5lLWhlaWdodDogMzBweDsKCW1hcmdpbi1ib3R0b206IDI1cHg7Cn0KCiN3aGF0LXdlLWRvIHAgewoJbWFyZ2luLWJvdHRvbTogMzBweDsKCWNvbG9yOiAjZmZmOwp9Cgojd2hhdC13ZS1kbyB1bCBsaSB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgltYXJnaW4tcmlnaHQ6IDE1cHg7CgltYXJnaW4tYm90dG9tOiAxNXB4Owp9CgoKCi8qIFBPUlRGT0xJTyAqLwoKI3BvcnRmb2xpbyB7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5wcm9qZWN0cy1ob2xkZXIgLm1peCB7CiAgZGlzcGxheTogbm9uZTsKfQoKLmZpbHRlci1jYXRlZ29yaWVzIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKICBtYXJnaW4tdG9wOiA2MHB4Owp9CgouZmlsdGVyLWNhdGVnb3JpZXMgdWwgbGkgewogIG1hcmdpbjogMHB4IDEwcHggMTVweCAxMHB4OwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmZpbHRlci1jYXRlZ29yaWVzIHVsIGxpIHNwYW4gewogIGN1cnNvcjogcG9pbnRlcjsKICBjb2xvcjogIzVhNWE1YTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxNHB4OwogIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOwogIGZvbnQtd2VpZ2h0OiA0MDA7Cn0KCi5maWx0ZXItY2F0ZWdvcmllcyB1bCBsaS5hY3RpdmUgc3BhbiB7CiAgY29sb3I6ICNhMmNmOGQ7Cn0KCi5wcm9qZWN0LWl0ZW0gewoJbWFyZ2luLXRvcDogMzBweDsKfQoKLnByb2plY3QtaXRlbSAudGh1bWIgewoJcG9zaXRpb246IHJlbGF0aXZlOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgoucHJvamVjdC1pdGVtIC50aHVtYiBpbWcgewoJd2lkdGg6IDEwMCU7CglvdmVyZmxvdzogaGlkZGVuOwp9CgoucHJvamVjdC1pdGVtIC5ob3Zlci1lZmZlY3QgewoJcG9zaXRpb246IGFic29sdXRlOwoJYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNjIsIDIwNywgMTQxLCAwLjk1KTsKCXdpZHRoOiAxMDAlOwoJdG9wOiAwOwoJYm90dG9tOiAwOwoJb3BhY2l0eTogMDsKCXZpc2liaWxpdHk6IGhpZGRlbjsKCXRyYW5zaXRpb246IGFsbCAwLjVzOwp9CgoucHJvamVjdC1pdGVtIC5ob3Zlci1lZmZlY3QgaSB7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CgltYXJnaW4tdG9wOiAzNSU7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cgl3aWR0aDogNDZweDsKCWhlaWdodDogNDZweDsKCWJhY2tncm91bmQtY29sb3I6ICNmZmY7CglsaW5lLWhlaWdodDogNDZweDsKCWNvbG9yOiAjYTJjZjhkOwoJYm9yZGVyLXJhZGl1czogNTAlOwoJZm9udC1zaXplOiAxOHB4Owp9CgoucHJvamVjdC1pdGVtIC5ob3Zlci1lZmZlY3QgaTpob3ZlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjNWM5ZDdkOwoJY29sb3I6ICNmZmY7Cgl0cmFuc2l0aW9uOiBhbGwgMC41czsKfQoKLnByb2plY3QtaXRlbTpob3ZlciAuaG92ZXItZWZmZWN0IHsKCW9wYWNpdHk6IDE7Cgl2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgoKLyogQkxPRyAqLwoKI2Jsb2cgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9ibG9nLWJnLnBuZyk7CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwoJYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsKCXdpZHRoOiAxMDAlOwp9CgojYmxvZyAuc2VjdGlvbi1oZWFkaW5nICB7CgltYXJnaW4tYm90dG9tOiA2MHB4Owp9CgojYmxvZyAuc2VjdGlvbi1oZWFkaW5nIGg0IHsKCWNvbG9yOiAjZmZmOwp9CgojYmxvZyAuc2VjdGlvbi1oZWFkaW5nIC5saW5lLWRlYyB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9CgojYmxvZyAucG9wLCAucG9wMiwgLnBvcDMgewoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQoKLmJsb2ctaXRlbSB7CgljdXJzb3I6IHBvaW50ZXI7CgltYXJnaW4tYm90dG9tOiAzMHB4Owp9CgouYmxvZy1pdGVtIGltZyB7Cgl3aWR0aDogMTAwJTsKCW92ZXJmbG93OiBoaWRkZW47Cn0KCi5ibG9nLWl0ZW0gLnRodW1iIHsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmJsb2ctaXRlbSAudGV4dC1jb250ZW50IHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCWJvdHRvbTogMDsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsKCXdpZHRoOiAxMDAlOwoJcGFkZGluZzogMTJweCAyMHB4Owp9CgouYmxvZy1pdGVtIC50ZXh0LWNvbnRlbnQgaDQgewoJZm9udC1zaXplOiAxNnB4OwoJZm9udC13ZWlnaHQ6IDcwMDsKCWNvbG9yOiAjZmZmOwoJbGV0dGVyLXNwYWNpbmc6IDAuNXB4Owp9CgouYmxvZy1pdGVtIC50ZXh0LWNvbnRlbnQgc3BhbiB7Cglmb250LXNpemU6IDEycHg7Cgljb2xvcjogI2ZmZjsKfQoKLmJsb2ctaXRlbSAudGV4dC1jb250ZW50IGVtIHsKCWZvbnQtc3R5bGU6IG5vcm1hbDsKCWZvbnQtd2VpZ2h0OiA3MDA7CgltYXJnaW4tcmlnaHQ6IDVweDsKfQoKLnBvcCwgLnBvcDIsIC5wb3AzIHsKCXotaW5kZXg6IDk5OTk7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CglwYWRkaW5nOiAzMHB4OwogICAgZGlzcGxheTpub25lOwogICAgcG9zaXRpb246Zml4ZWQ7CiAgICB0b3A6MjUlOwogICAgbGVmdDoxMC4zJTsKICAgIHdpZHRoOjgwJTsKICAgIGhlaWdodDogYXV0bzsKICAgIGJveC1zaGFkb3c6IDBweCAwcHggMjVweCAjN2E3YTdhOwp9CgoucG9wIHNwYW4sIC5wb3AyIHNwYW4sIC5wb3AzIHNwYW4gewoJbWFyZ2luLWJvdHRvbTogMjBweDsKCWN1cnNvcjogcG9pbnRlcjsKCXdpZHRoOiA0NHB4OwoJaGVpZ2h0OiA0NHB4OwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJbGluZS1oZWlnaHQ6IDQ0cHg7Cgljb2xvcjogI2ZmZjsKCXRleHQtYWxpZ246IGNlbnRlcjsKCWJhY2tncm91bmQtY29sb3I6ICNhMmNmOGQ7Cn0KCi5wb3Agc3Bhbjpob3ZlciwgLnBvcDIgc3Bhbjpob3ZlciwgLnBvcDMgc3Bhbjpob3ZlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjNWM5ZDdkOwoJdHJhbnNpdGlvbjogYWxsIDAuNXM7Cn0KCgoKLyogRlVOIEZBQ1RTICovCgojZnVuLWZhY3RzIHsKCXBhZGRpbmc6IDEwMHB4IDBweDsKCWJhY2tncm91bmQtY29sb3I6ICNmZmY7Cn0KCiNmdW4tZmFjdHMgLmZhY3QtaXRlbSB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0OwoJcGFkZGluZzogMzBweDsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmZhY3QtaXRlbSAuY291bnRlciB7Cglmb250LXNpemU6IDI0cHg7Cglmb250LXdlaWdodDogNzAwOwoJY29sb3I6ICNhMmNmOGQ7Cn0KCi5mYWN0LWl0ZW0gc3BhbiB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgltYXJnaW4tdG9wOiAxMHB4OwoJZm9udC1zdHlsZTogMTNweDsKCXRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CglsZXR0ZXItc3BhY2luZzogMC41cHg7Cgljb2xvcjogIzdhN2E3YTsKfQoKCgovKiBDT05UQUNUIFVTICovCgojY29udGFjdCAuc2VjdGlvbi1oZWFkaW5nIGg0IHsKCWNvbG9yOiAjZmZmOwp9CgojY29udGFjdCAuc2VjdGlvbi1oZWFkaW5nIC5saW5lLWRlYyB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9CgojY29udGFjdCAuc2VjdGlvbi1oZWFkaW5nIHsKCW1hcmdpbi1ib3R0b206IDYwcHg7Cn0KCiNjb250YWN0IHsKCQoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKCXdpZHRoOiAxMDAlOwoJYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsKfQoKI2NvbnRhY3QgLm1hcCBpbWcgewoJd2lkdGg6IDEwMCU7CglvdmVyZmxvdzogaGlkZGVuOwp9CgojY29udGFjdCBpbnB1dCB7Cglib3JkZXItcmFkaXVzOiAwcHg7CglwYWRkaW5nLWxlZnQ6IDE1cHg7Cglmb250LXNpemU6IDEzcHg7Cgljb2xvcjogI2ZmZjsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC4xKTsKCW91dGxpbmU6IG5vbmU7Cglib3JkZXI6IG5vbmU7Cglib3gtc2hhZG93OiBub25lOwoJbGluZS1oZWlnaHQ6IDUwcHg7CgloZWlnaHQ6IDUwcHg7Cgl3aWR0aDogMTAwJTsKCW1hcmdpbi1ib3R0b206IDMwcHg7Cn0KCiNjb250YWN0IHRleHRhcmVhIHsKCWJvcmRlci1yYWRpdXM6IDBweDsKCXBhZGRpbmctbGVmdDogMTVweDsKCWZvbnQtc2l6ZTogMTNweDsKCWNvbG9yOiAjZmZmOwoJYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjEpOwoJb3V0bGluZTogbm9uZTsKCWJvcmRlcjogbm9uZTsKCWJveC1zaGFkb3c6IG5vbmU7CgloZWlnaHQ6IDE2NXB4OwoJbWF4LWhlaWdodDogMjIwcHg7Cgl3aWR0aDogMTAwJTsKCW1hcmdpbi1ib3R0b206IDI1cHg7Cn0KCiNjb250YWN0IGJ1dHRvbiB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDk5OwoJcGFkZGluZzogMTJweCAxOHB4OwoJY29sb3I6ICNmZmY7Cglmb250LXNpemU6IDExcHg7CglsZXR0ZXItc3BhY2luZzogMXB4OwoJZm9udC13ZWlnaHQ6IDkwMDsKCXRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cglib3JkZXItcmFkaXVzOiAyMHB4Owp9CgoKCiNjb250YWN0IGJ1dHRvbjpob3ZlciB7Cgljb2xvcjogI2ZmZjsKCWJhY2tncm91bmQtY29sb3I6ICMwMDAwY2M7Cgl0cmFuc2l0aW9uOiBhbGwgMC4zczsKfQojY29udGFjdDIgYnV0dG9uIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCWJhY2tncm91bmQtY29sb3I6ICM5OTAwMDA7CglwYWRkaW5nOiAxMnB4IDE4cHg7Cgljb2xvcjogI2ZmZjsKCWZvbnQtc2l6ZTogMTFweDsKCWxldHRlci1zcGFjaW5nOiAxcHg7Cglmb250LXdlaWdodDogOTAwOwoJdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKCWJvcmRlci1yYWRpdXM6IDIwcHg7Cn0KCgoKI2NvbnRhY3QyIGJ1dHRvbjpob3ZlciB7Cgljb2xvcjogI2ZmZjsKCWJhY2tncm91bmQtY29sb3I6ICNjYzAwMDA7Cgl0cmFuc2l0aW9uOiBhbGwgMC4zczsKfQoKLyogRk9PVEVSICovCgpmb290ZXIgewoJYmFja2dyb3VuZC1jb2xvcjogIzIwMjYyODsKCXBhZGRpbmc6IDIwcHg7Cn0KCmZvb3RlciBwIHsKCWZvbnQtc2l6ZTogMTJweDsKCWNvbG9yOiAjZmZmOwoJbWFyZ2luLWJvdHRvbTogMHB4OwoJbWFyZ2luLXRvcDogMjBweDsKfQoKZm9vdGVyIGVtIHsKCWZvbnQtc3R5bGU6IG5vcm1hbDsKCWZvbnQtd2VpZ2h0OiA3MDA7Cgljb2xvcjogI2EyY2Y4ZDsKfQoKZm9vdGVyIHVsIHsKCW1hcmdpbi10b3A6IDE1cHg7CglmbG9hdDogcmlnaHQ7Cn0KCmZvb3RlciB1bCBsaSB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgltYXJnaW4tbGVmdDogNXB4Owp9Cgpmb290ZXIgdWwgbGkgYSB7Cglmb250LXNpemU6IDE2cHg7Cgl3aWR0aDogMzZweDsKCWhlaWdodDogMzZweDsKCWxpbmUtaGVpZ2h0OiAzNnB4OwoJdGV4dC1hbGlnbjogY2VudGVyOwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJYmFja2dyb3VuZC1jb2xvcjogI2EyY2Y4ZDsKCWNvbG9yOiAjMjAyNjI4OwoJYm9yZGVyLXJhZGl1czogNTAlOwp9Cgpmb290ZXIgdWwgbGkgYTpob3ZlciB7Cgljb2xvcjogIzIwMjYyODsKCWJhY2tncm91bmQtY29sb3I6ICM1YzlkN2Q7Cgl0cmFuc2l0aW9uOiBhbGwgMC41czsKfQoKCgoKLyogTElHSFQgQk9YICovCgpib2R5OmFmdGVyIHsKICBkaXNwbGF5OiBub25lOwp9Cgpib2R5LmxiLWRpc2FibGUtc2Nyb2xsaW5nIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubGlnaHRib3hPdmVybGF5IHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgei1pbmRleDogOTk5OTk7CiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT04MCk7CiAgb3BhY2l0eTogMC44OwogIGRpc3BsYXk6IG5vbmU7Cn0KCi5saWdodGJveCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIG1hcmdpbi10b3A6IDUlOwogIGxlZnQ6IDA7CiAgd2lkdGg6IDEwMCU7CiAgei1pbmRleDogMTAwMDAwOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBsaW5lLWhlaWdodDogMDsKICBmb250LXdlaWdodDogbm9ybWFsOwp9CgoubGlnaHRib3ggLmxiLWltYWdlIHsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IGF1dG87CiAgbWF4LXdpZHRoOiBpbmhlcml0OwogIG1heC1oZWlnaHQ6IG5vbmU7CiAgYm9yZGVyLXJhZGl1czogM3B4OwoKICAvKiBJbWFnZSBib3JkZXIgKi8KICBib3JkZXI6IDRweCBzb2xpZCB3aGl0ZTsKfQoKLmxpZ2h0Ym94IGEgaW1nIHsKICBib3JkZXI6IG5vbmU7Cn0KCi5sYi1vdXRlckNvbnRhaW5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogICp6b29tOiAxOwogIHdpZHRoOiAyNTBweDsKICBoZWlnaHQ6IDI1MHB4OwogIG1hcmdpbjogMCBhdXRvOwogIGJvcmRlci1yYWRpdXM6IDRweDsKCiAgLyogQmFja2dyb3VuZCBjb2xvciBiZWhpbmQgaW1hZ2UuCiAgICAgVGhpcyBpcyB2aXNpYmxlIGR1cmluZyB0cmFuc2l0aW9ucy4gKi8KICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKfQoKLmxiLW91dGVyQ29udGFpbmVyOmFmdGVyIHsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiB0YWJsZTsKICBjbGVhcjogYm90aDsKfQoKLmxiLWxvYWRlciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogNDMlOwogIGxlZnQ6IDA7CiAgaGVpZ2h0OiAyNSU7CiAgd2lkdGg6IDEwMCU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGxpbmUtaGVpZ2h0OiAwOwp9CgoubGItY2FuY2VsIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMzJweDsKICBoZWlnaHQ6IDMycHg7CiAgbWFyZ2luOiAwIGF1dG87Cn0KCi5sYi1uYXYgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgbGVmdDogMDsKICBoZWlnaHQ6IDEwMCU7CiAgd2lkdGg6IDEwMCU7CiAgei1pbmRleDogMTA7Cn0KCi5sYi1jb250YWluZXIgPiAubmF2IHsKICBsZWZ0OiAwOwp9CgoubGItbmF2IGEgewogIG91dGxpbmU6IG5vbmU7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQVBBQUFQLy8vd0FBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQ1JBRUFPdz09Jyk7Cn0KCi5sYi1wcmV2LCAubGItbmV4dCB7CiAgaGVpZ2h0OiAxMDAlOwogIGN1cnNvcjogcG9pbnRlcjsKICBkaXNwbGF5OiBibG9jazsKfQoKLmxiLW5hdiBhLmxiLXByZXYgewogIHdpZHRoOiAzNCU7CiAgbGVmdDogMDsKICBmbG9hdDogbGVmdDsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTApOwogIG9wYWNpdHk6IDA7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnM7CiAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnM7CiAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzOwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC42czsKfQoKLmxiLW5hdiBhLmxiLXByZXY6aG92ZXIgewogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9MTAwKTsKICBvcGFjaXR5OiAxOwp9CgoubGItbmF2IGEubGItbmV4dCB7CiAgd2lkdGg6IDY0JTsKICByaWdodDogMDsKICBmbG9hdDogcmlnaHQ7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT0wKTsKICBvcGFjaXR5OiAwOwogIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzOwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzOwogIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC42czsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnM7Cn0KCi5sYi1uYXYgYS5sYi1uZXh0OmhvdmVyIHsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTEwMCk7CiAgb3BhY2l0eTogMTsKfQoKLmxiLWRhdGFDb250YWluZXIgewogIG1hcmdpbjogMCBhdXRvOwogIHBhZGRpbmctdG9wOiA1cHg7CiAgKnpvb206IDE7CiAgd2lkdGg6IDEwMCU7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDRweDsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiA0cHg7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OwogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7Cn0KCi5sYi1kYXRhQ29udGFpbmVyOmFmdGVyIHsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiB0YWJsZTsKICBjbGVhcjogYm90aDsKfQoKLmxiLWRhdGEgewogIHBhZGRpbmc6IDAgNHB4OwogIGNvbG9yOiAjY2NjOwp9CgoubGItZGF0YSAubGItZGV0YWlscyB7CiAgd2lkdGg6IDg1JTsKICBmbG9hdDogbGVmdDsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIGxpbmUtaGVpZ2h0OiAxLjFlbTsKfQoKLmxiLWRhdGEgLmxiLWNhcHRpb24gewogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsaW5lLWhlaWdodDogMWVtOwp9CgoubGItZGF0YSAubGItY2FwdGlvbiBhIHsKICBjb2xvcjogIzRhZTsKfQoKLmxiLWRhdGEgLmxiLW51bWJlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgY2xlYXI6IGxlZnQ7CiAgcGFkZGluZy1ib3R0b206IDFlbTsKICBmb250LXNpemU6IDEycHg7CiAgY29sb3I6ICM5OTk5OTk7Cn0KCi5sYi1kYXRhIC5sYi1jbG9zZSB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IHJpZ2h0OwogIHdpZHRoOiAzMHB4OwogIGhlaWdodDogMzBweDsKICB0ZXh0LWFsaWduOiByaWdodDsKICBvdXRsaW5lOiBub25lOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9NzApOwogIG9wYWNpdHk6IDAuNzsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwp9CgoubGItZGF0YSAubGItY2xvc2U6aG92ZXIgewogIGN1cnNvcjogcG9pbnRlcjsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTEwMCk7CiAgb3BhY2l0eTogMTsKfQoKCgovKiBSRVNQT05TSVZFICovCgpAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpewoJI21haW4tbmF2IHsKCQlib3JkZXItY29sb3I6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC45NSk7CgkJbWFyZ2luLXRvcDogMTZweDsKCQliYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuOTUpOwoJCWJveC1zaGFkb3c6IDBweCA1cHggMTBweCAjY2RjZGNkOwoJfQoJLm5hdmJhci1uYXYgewoJCXBhZGRpbmc6IDBweDsKCQltYXJnaW4tdG9wOiAwcHg7CgkJbWFyZ2luLXRvcDogMHB4OwoJfQoJLm5hdmJhci1uYXY+bGkgewoJCW1hcmdpbi1sZWZ0OiAwcHg7CgkJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7Cgl9CgkubmF2YmFyLW5hdj5saTpsYXN0LWNoaWxkIHsKCQlib3JkZXItYm90dG9tOiBub25lOwoJfQoJLm5hdmJhci1uYXY+bGk+YSB7CgkJbGluZS1oZWlnaHQ6IDUwcHg7CgkJY29sb3I6ICMxMjEyMTIhaW1wb3J0YW50OwoJfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpewoJLmNkLWhlcm8gLnNsaWRlLWNhcHRpb24gc3BhbiB7CgkJZm9udC1zaXplOiAxM3B4OwoJfQoKCS5jZC1oZXJvIC5zbGlkZS1jYXB0aW9uIGgyIHsKCQlmb250LXNpemU6IDI4cHg7Cgl9Cn0KCgpAbWVkaWEgKG1heC13aWR0aDogMTAxNXB4KXsKCS5zbGlkZS1jYXB0aW9uIC5jb250ZW50LWNhcHRpb24gcCB7CgkJcGFkZGluZzogMCAxMCU7Cgl9Cgkuc2VydmljZS1pdGVtIHsKCQltYXJnaW4tYm90dG9tOiAzMHB4OwoJfQoJI3doYXQtd2UtZG8gLnJpZ2h0LWltYWdlIHsKCQltYXJnaW4tdG9wOiA2MHB4OwoJfQoJI2Jsb2cgLnBvcCB7CgkJdG9wOiAxNSU7CgkJaGVpZ2h0OiA4MCU7CgkJb3ZlcmZsb3cteTogc2Nyb2xsOwoJfQoJLmZhY3QtaXRlbSB7CgkJbWFyZ2luLWJvdHRvbTogMTVweDsKCX0KCS5tYXAgewoJCW1hcmdpbi1ib3R0b206IDQ1cHg7Cgl9Cglmb290ZXIgewoJCXRleHQtYWxpZ246IGNlbnRlcjsKCX0KCWZvb3RlciB1bCB7CgkJZmxvYXQ6IG5vbmU7Cgl9Cn0="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 16493,
                "sha1": "fd90ed76516a08e5dd9f721e9bbf8a7bb597212c",
                "content_b64": "LyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcyB8IETDqWZpbml0IGxhIG1pc2UgZW4gZm9ybWUgZ2xvYmFsZSBkdSBzaXRlIHZpdHJpbmUgZXQgZGUgc2VzIHNlY3Rpb25zIChoZWFkZXIsIGhlcm8sIHBvcnRmb2xpbywgYmxvZywgY29udGFjdCwgZm9vdGVyKSBlbiBjb21wbMOpbWVudCBkdSBDU1MgQm9vdHN0cmFwIGxvY2FsLCBzYW5zIGTDqXBlbmRhbmNlIEphdmFTY3JpcHQgQm9vdHN0cmFwLiB8IEV4cG9zZTogYXVjdW4gfCBEw6lwZW5kIGRlOiAuLi9pbWcvKi5wbmcsIGJvb3RzdHJhcC5taW4uY3NzIHwgSW1wYWN0ZTogVUksIHJlc3BvbnNpdmUsIG5hdmlnYXRpb24sIG1vZGFsZXMvbGlnaHRib3ggfCBUYWJsZXM6IGF1Y3VuZSAqLwovKgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKaHR0cDovL3d3dy50b29wbGF0ZS5jb20vdmlldy8yMDg5LW1ldGVvcgoKKi8KCiogewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJywgYXJpYWwsIHNhbnMtc2VyaWY7Cn0KdWwgewoJbGlzdC1zdHlsZTogbm9uZTsKfQpwIHsKCWNvbG9yOiAjNWE1YTVhOwoJZm9udC1zaXplOiAxM3B4OwoJbGV0dGVyLXNwYWNpbmc6IDAuMjVweDsKCWxpbmUtaGVpZ2h0OiAyNHB4Owp9Ci5wcmltYXJ5LWJ1dHRvbiBhIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCWJhY2tncm91bmQtY29sb3I6ICNhMmNmOGQ7CglwYWRkaW5nOiAxMnB4IDE4cHg7Cgljb2xvcjogIzAwMDsKCWZvbnQtc2l6ZTogMThweDsKCWZvbnQtd2VpZ2h0IDogYm9sZGVyOwoJbGV0dGVyLXNwYWNpbmc6IDFweDsKCXRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cglib3JkZXItcmFkaXVzOiAyMHB4OwoJdHJhbnNpdGlvbjogYWxsIDAuNXM7CiAgICB3aWR0aDogNTAlOwp9Ci5wcmltYXJ5LWJ1dHRvbiBhOmhvdmVyIHsKCWJhY2tncm91bmQtY29sb3I6ICM1YzlkN2Q7Cn0KLndoaXRlLWJ1dHRvbiBhIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCWJhY2tncm91bmQtY29sb3I6ICNmZmY7CglwYWRkaW5nOiAxMnB4IDE4cHg7Cgljb2xvcjogIzEyMTIxMjsKCWZvbnQtc2l6ZTogMTFweDsKCWZvbnQtd2VpZ2h0OiA1MDA7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJYm9yZGVyLXJhZGl1czogMjBweDsKCXRyYW5zaXRpb246IGFsbCAwLjVzOwp9Ci5kMXsKICB3aWR0aDogNTAlOwogIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOwp9Ci53aGl0ZS1idXR0b24gYTpob3ZlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMTIxMjEyOwoJY29sb3I6ICNmZmY7Cn0KLnNlY3Rpb24taGVhZGluZyBoNCB7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglmb250LXNpemU6IDE3cHg7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJZm9udC13ZWlnaHQ6IDcwMDsKCWNvbG9yOiAjZmZmOwp9Ci5zZWN0aW9uLWhlYWRpbmcgaDEgewoJdGV4dC1hbGlnbjogY2VudGVyOwoJZm9udC1zaXplOiAyNXB4OwoJdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKCWZvbnQtd2VpZ2h0OiA3MDA7Cgljb2xvcjogI2ZmZjsKfQouc2VjdGlvbi1oZWFkaW5nIC5saW5lLWRlYyB7Cgl3aWR0aDogNjBweDsKCWhlaWdodDogM3B4OwoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKCW1hcmdpbjogMCBhdXRvOwp9Ci5saW5lLWRlYzIgewoJd2lkdGg6IDYwcHg7CgloZWlnaHQ6IDNweDsKCWJhY2tncm91bmQtY29sb3I6ICMwMDA7CgltYXJnaW46IDAgYXV0bzsKfQouaGVhZGVyIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDA7CiAgICB6LWluZGV4OiAxMDAwMDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0OwogICAgaGVpZ2h0OiA4MHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsgIAogICAgCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBsaW5lLWhlaWdodDogNDBweDsKfQoKLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj5saT5hIHsKICAgIHRleHQtc2hhZG93OiBub25lOwp9CgoubmF2YmFyLWJyYW5kIHsKCWxpbmUtaGVpZ2h0OiA4MHB4OwoJcGFkZGluZzogMHB4Owp9CgoubmF2YmFyLW5hdj5saT5hIHsKCWNvbG9yOiAjZmZmIWltcG9ydGFudDsKCWZvbnQtc2l6ZTogMTNweDsKCWZvbnQtd2VpZ2h0OiAzMDA7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJdGV4dC1zaGFkb3c6IG5vbmU7CglsaW5lLWhlaWdodDogODBweDsKCXBhZGRpbmc6IDBweDsKCWxldHRlci1zcGFjaW5nOiAwLjVweDsKfQoKLm5hdmJhci1uYXY+bGkgewoJbWFyZ2luLWxlZnQ6IDQ1cHg7Cn0KCi5oZWFkZXIuYWN0aXZlIC5uYXZiYXItbmF2PmxpPmEgewoJZm9udC1zaXplOiAxM3B4OwoJZm9udC13ZWlnaHQ6IDMwMDsKCXRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cgl0ZXh0LXNoYWRvdzogbm9uZTsKCWNvbG9yOiAjMTIxMjEyIWltcG9ydGFudDsKfQoKLmhlYWRlci5hY3RpdmUgewogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjk4KTsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7CiAgICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMjUpOwogICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7Cn0KLm5hdmJhci1icmFuZCAubG9nb3sKCW1hcmdpbi10b3A6IDIycHg7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL3doaXRlX2xvZ28ucG5nKTsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCXdpZHRoOiAxMjVweDsKCWhlaWdodDogMzJweDsKCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Cn0KLmhlYWRlci5hY3RpdmUgLm5hdmJhci1icmFuZCAubG9nb3sKCW1hcmdpbi10b3A6IDIycHg7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2JsYWNrX2xvZ28ucG5nKTsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCXdpZHRoOiAxMjVweDsKCWhlaWdodDogMzJweDsKCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Cn0KI21haW4tbmF2IHsKCWJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwoJYmFja2dyb3VuZC1pbWFnZTogbm9uZSFpbXBvcnRhbnQ7Cn0KLmhlYWRlciAubmF2YmFyLWJyYW5kIHsKICAgIGZvbnQtd2VpZ2h0OiA5MDA7Cn0KLm5hdmJhci1pbnZlcnNlIHsKCWJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CgliYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQouaGVhZGVyIC5uYXZiYXIgewogICAgbWFyZ2luOiAwOwogICAgYm9yZGVyOiBub25lOwp9Ci5wYWdlLXNlY3Rpb24gewogICAgcGFkZGluZzogODBweCAwOwp9Ci5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSB7CgltYXJnaW4tdG9wOiAyMnB4OwogICAgYm9yZGVyLWNvbG9yOiAjYTJjZjhkOwogICAgYmFja2dyb3VuZC1jb2xvcjogI2EyY2Y4ZDsKfQoubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6aG92ZXIsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjYTJjZjhkOwp9CgoubmF2YmFyLXRvZ2dsZSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBwYWRkaW5nOiA5cHggMTBweDsKICAgIG1hcmdpbi10b3A6IDE1cHghaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CiAgICAuaGVhZGVyIC5uYXZiYXItYnJhbmQgewogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgIH0KICAgIC5uYXZiYXItbmF2IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7CiAgICAucGFnZS1zZWN0aW9uIGgxIHsKICAgICAgICBmb250LXNpemU6IDNlbTsKICAgIH0KICAgIC5wYWdlLXNlY3Rpb24gaDIgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgfQogICAgLnBhZ2Utc2VjdGlvbiBwIHsKICAgICAgICBmb250LXNpemU6IDFlbTsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4OwogICAgfQp9CgoKCi8qIEhFUk8gU0xJREVSICovCgouc2xpZGUtY2FwdGlvbiB7Cgljb2xvcjogI2ZmZjsKfQoKLnNsaWRlLWNhcHRpb24gc3BhbiB7Cglmb250LXNpemU6IDE0cHg7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9Cgouc2xpZGUtY2FwdGlvbiBoMiB7Cglmb250LXNpemU6IDM2cHg7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJZm9udC13ZWlnaHQ6IDkwMDsKfQoKLnNsaWRlLWNhcHRpb24gcCB7Cglmb250LXNpemU6IDEzcHg7CglsZXR0ZXItc3BhY2luZzogMC4yNXB4OwoJbGluZS1oZWlnaHQ6IDI0cHg7Cn0KCnVsLmNkLWhlcm8tc2xpZGVyIHsKCW1hcmdpbi1ib3R0b206IDBweCFpbXBvcnRhbnQ7Cn0KCi8qIFdIQVQgV0UgRE8gKi8KCiNhYm91dCB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMTIxOwoJcGFkZGluZzogMjBweCAwcHg7Cn0KCiNhYm91dCAuc2VjdGlvbi1oZWFkaW5nIHsKCW1hcmdpbi1ib3R0b206IDIwcHg7Cn0KCi5zZXJ2aWNlLWl0ZW0gewoJY3Vyc29yOiBwb2ludGVyOwoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKCXRleHQtYWxpZ246IGNlbnRlcjsKCXBhZGRpbmc6IDMwcHggMjBweDsKCXRyYW5zaXRpb246IGFsbCAwLjdzOwoJYm94LXNoYWRvdzogMHB4IDBweCAxNXB4ICNjZGNkY2Q7Cn0KCi5zZXJ2aWNlLWl0ZW06aG92ZXIgewoJYmFja2dyb3VuZC1jb2xvcjogI2EyY2Y4ZDsKfQoKLnNlcnZpY2UtaXRlbSBoNCB7Cglmb250LXNpemU6IDE2cHg7Cglmb250LXdlaWdodDogNzAwOwoJbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwoJbWFyZ2luLWJvdHRvbTogMTVweDsKCW1hcmdpbi10b3A6IDI1cHg7Cn0KCi5zZXJ2aWNlLWl0ZW06aG92ZXIgaDQgewoJY29sb3I6ICNmZmY7Cn0KCi5zZXJ2aWNlLWl0ZW06aG92ZXIgcCB7Cgljb2xvcjogI2ZmZjsKfQoKLmZpcnN0LXNlcnZpY2UgLmljb24gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9maXJzdC1zZXJ2aWNlLW1haW4ucG5nKTsKCWhlaWdodDogMzJweDsKCXdpZHRoOiAzMnB4OwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouZmlyc3Qtc2VydmljZTpob3ZlciAuaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2ZpcnN0LXNlcnZpY2Utd2hpdGUucG5nKTsKfQoKLnNlY29uZC1zZXJ2aWNlIC5pY29uIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvc2Vjb25kLXNlcnZpY2UtbWFpbi5wbmcpOwoJaGVpZ2h0OiAzMnB4OwoJd2lkdGg6IDIycHg7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi5zZWNvbmQtc2VydmljZTpob3ZlciAuaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL3NlY29uZC1zZXJ2aWNlLXdoaXRlLnBuZyk7Cn0KCi50aGlyZC1zZXJ2aWNlIC5pY29uIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvdGhpcmQtc2VydmljZS1tYWluLnBuZyk7CgloZWlnaHQ6IDMycHg7Cgl3aWR0aDogMzJweDsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRoaXJkLXNlcnZpY2U6aG92ZXIgLmljb24gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy90aGlyZC1zZXJ2aWNlLXdoaXRlLnBuZyk7Cn0KCi5mb3VydGgtc2VydmljZSAuaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2ZvdXJ0aC1zZXJ2aWNlLW1haW4ucG5nKTsKCWhlaWdodDogMzJweDsKCXdpZHRoOiAzMnB4OwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouZm91cnRoLXNlcnZpY2U6aG92ZXIgLmljb24gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9mb3VydGgtc2VydmljZS13aGl0ZS5wbmcpOwp9CgoKI3doYXQtd2UtZG8gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy93aGF0LXdlLWRvLWJnLnBuZyk7Cgl3aWR0aDogMTAwJTsKCWJhY2tncm91bmQtc2l6ZTogY292ZXI7CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwoJcGFkZGluZzogODBweCAwcHg7Cgljb2xvcjogI2ZmZjsKfQoKI3doYXQtd2UtZG8gLnJpZ2h0LWltYWdlIGltZyB7Cgl3aWR0aDogMTAwJTsKCW92ZXJmbG93OiBoaWRkZW47Cn0KCiN3aGF0LXdlLWRvIGg0IHsKCWZvbnQtc2l6ZTogMjRweDsKCWZvbnQtd2VpZ2h0OiA3MDA7CglsZXR0ZXItc3BhY2luZzogMC41cHg7CglsaW5lLWhlaWdodDogMzBweDsKCW1hcmdpbi1ib3R0b206IDI1cHg7Cn0KCiN3aGF0LXdlLWRvIHAgewoJbWFyZ2luLWJvdHRvbTogMzBweDsKCWNvbG9yOiAjZmZmOwp9Cgojd2hhdC13ZS1kbyB1bCBsaSB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgltYXJnaW4tcmlnaHQ6IDE1cHg7CgltYXJnaW4tYm90dG9tOiAxNXB4Owp9CgoKCi8qIFBPUlRGT0xJTyAqLwoKI3BvcnRmb2xpbyB7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5wcm9qZWN0cy1ob2xkZXIgLm1peCB7CiAgZGlzcGxheTogbm9uZTsKfQoKLmZpbHRlci1jYXRlZ29yaWVzIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKICBtYXJnaW4tdG9wOiA2MHB4Owp9CgouZmlsdGVyLWNhdGVnb3JpZXMgdWwgbGkgewogIG1hcmdpbjogMHB4IDEwcHggMTVweCAxMHB4OwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmZpbHRlci1jYXRlZ29yaWVzIHVsIGxpIHNwYW4gewogIGN1cnNvcjogcG9pbnRlcjsKICBjb2xvcjogIzVhNWE1YTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxNHB4OwogIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOwogIGZvbnQtd2VpZ2h0OiA0MDA7Cn0KCi5maWx0ZXItY2F0ZWdvcmllcyB1bCBsaS5hY3RpdmUgc3BhbiB7CiAgY29sb3I6ICNhMmNmOGQ7Cn0KCi5wcm9qZWN0LWl0ZW0gewoJbWFyZ2luLXRvcDogMzBweDsKfQoKLnByb2plY3QtaXRlbSAudGh1bWIgewoJcG9zaXRpb246IHJlbGF0aXZlOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgoucHJvamVjdC1pdGVtIC50aHVtYiBpbWcgewoJd2lkdGg6IDEwMCU7CglvdmVyZmxvdzogaGlkZGVuOwp9CgoucHJvamVjdC1pdGVtIC5ob3Zlci1lZmZlY3QgewoJcG9zaXRpb246IGFic29sdXRlOwoJYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNjIsIDIwNywgMTQxLCAwLjk1KTsKCXdpZHRoOiAxMDAlOwoJdG9wOiAwOwoJYm90dG9tOiAwOwoJb3BhY2l0eTogMDsKCXZpc2liaWxpdHk6IGhpZGRlbjsKCXRyYW5zaXRpb246IGFsbCAwLjVzOwp9CgoucHJvamVjdC1pdGVtIC5ob3Zlci1lZmZlY3QgaSB7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CgltYXJnaW4tdG9wOiAzNSU7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cgl3aWR0aDogNDZweDsKCWhlaWdodDogNDZweDsKCWJhY2tncm91bmQtY29sb3I6ICNmZmY7CglsaW5lLWhlaWdodDogNDZweDsKCWNvbG9yOiAjYTJjZjhkOwoJYm9yZGVyLXJhZGl1czogNTAlOwoJZm9udC1zaXplOiAxOHB4Owp9CgoucHJvamVjdC1pdGVtIC5ob3Zlci1lZmZlY3QgaTpob3ZlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjNWM5ZDdkOwoJY29sb3I6ICNmZmY7Cgl0cmFuc2l0aW9uOiBhbGwgMC41czsKfQoKLnByb2plY3QtaXRlbTpob3ZlciAuaG92ZXItZWZmZWN0IHsKCW9wYWNpdHk6IDE7Cgl2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgoKLyogQkxPRyAqLwoKI2Jsb2cgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9ibG9nLWJnLnBuZyk7CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwoJYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsKCXdpZHRoOiAxMDAlOwp9CgojYmxvZyAuc2VjdGlvbi1oZWFkaW5nICB7CgltYXJnaW4tYm90dG9tOiA2MHB4Owp9CgojYmxvZyAuc2VjdGlvbi1oZWFkaW5nIGg0IHsKCWNvbG9yOiAjZmZmOwp9CgojYmxvZyAuc2VjdGlvbi1oZWFkaW5nIC5saW5lLWRlYyB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9CgojYmxvZyAucG9wLCAucG9wMiwgLnBvcDMgewoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQoKLmJsb2ctaXRlbSB7CgljdXJzb3I6IHBvaW50ZXI7CgltYXJnaW4tYm90dG9tOiAzMHB4Owp9CgouYmxvZy1pdGVtIGltZyB7Cgl3aWR0aDogMTAwJTsKCW92ZXJmbG93OiBoaWRkZW47Cn0KCi5ibG9nLWl0ZW0gLnRodW1iIHsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmJsb2ctaXRlbSAudGV4dC1jb250ZW50IHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCWJvdHRvbTogMDsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsKCXdpZHRoOiAxMDAlOwoJcGFkZGluZzogMTJweCAyMHB4Owp9CgouYmxvZy1pdGVtIC50ZXh0LWNvbnRlbnQgaDQgewoJZm9udC1zaXplOiAxNnB4OwoJZm9udC13ZWlnaHQ6IDcwMDsKCWNvbG9yOiAjZmZmOwoJbGV0dGVyLXNwYWNpbmc6IDAuNXB4Owp9CgouYmxvZy1pdGVtIC50ZXh0LWNvbnRlbnQgc3BhbiB7Cglmb250LXNpemU6IDEycHg7Cgljb2xvcjogI2ZmZjsKfQoKLmJsb2ctaXRlbSAudGV4dC1jb250ZW50IGVtIHsKCWZvbnQtc3R5bGU6IG5vcm1hbDsKCWZvbnQtd2VpZ2h0OiA3MDA7CgltYXJnaW4tcmlnaHQ6IDVweDsKfQoKLnBvcCwgLnBvcDIsIC5wb3AzIHsKCXotaW5kZXg6IDk5OTk7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CglwYWRkaW5nOiAzMHB4OwogICAgZGlzcGxheTpub25lOwogICAgcG9zaXRpb246Zml4ZWQ7CiAgICB0b3A6MjUlOwogICAgbGVmdDoxMC4zJTsKICAgIHdpZHRoOjgwJTsKICAgIGhlaWdodDogYXV0bzsKICAgIGJveC1zaGFkb3c6IDBweCAwcHggMjVweCAjN2E3YTdhOwp9CgoucG9wIHNwYW4sIC5wb3AyIHNwYW4sIC5wb3AzIHNwYW4gewoJbWFyZ2luLWJvdHRvbTogMjBweDsKCWN1cnNvcjogcG9pbnRlcjsKCXdpZHRoOiA0NHB4OwoJaGVpZ2h0OiA0NHB4OwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJbGluZS1oZWlnaHQ6IDQ0cHg7Cgljb2xvcjogI2ZmZjsKCXRleHQtYWxpZ246IGNlbnRlcjsKCWJhY2tncm91bmQtY29sb3I6ICNhMmNmOGQ7Cn0KCi5wb3Agc3Bhbjpob3ZlciwgLnBvcDIgc3Bhbjpob3ZlciwgLnBvcDMgc3Bhbjpob3ZlciB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjNWM5ZDdkOwoJdHJhbnNpdGlvbjogYWxsIDAuNXM7Cn0KCgoKLyogRlVOIEZBQ1RTICovCgojZnVuLWZhY3RzIHsKCXBhZGRpbmc6IDEwMHB4IDBweDsKCWJhY2tncm91bmQtY29sb3I6ICNmZmY7Cn0KCiNmdW4tZmFjdHMgLmZhY3QtaXRlbSB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0OwoJcGFkZGluZzogMzBweDsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmZhY3QtaXRlbSAuY291bnRlciB7Cglmb250LXNpemU6IDI0cHg7Cglmb250LXdlaWdodDogNzAwOwoJY29sb3I6ICNhMmNmOGQ7Cn0KCi5mYWN0LWl0ZW0gc3BhbiB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgltYXJnaW4tdG9wOiAxMHB4OwoJZm9udC1zdHlsZTogMTNweDsKCXRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CglsZXR0ZXItc3BhY2luZzogMC41cHg7Cgljb2xvcjogIzdhN2E3YTsKfQoKCgovKiBDT05UQUNUIFVTICovCgojY29udGFjdCAuc2VjdGlvbi1oZWFkaW5nIGg0IHsKCWNvbG9yOiAjZmZmOwp9CgojY29udGFjdCAuc2VjdGlvbi1oZWFkaW5nIC5saW5lLWRlYyB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9CgojY29udGFjdCAuc2VjdGlvbi1oZWFkaW5nIHsKCW1hcmdpbi1ib3R0b206IDYwcHg7Cn0KCiNjb250YWN0IHsKCQoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKCXdpZHRoOiAxMDAlOwoJYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsKfQoKI2NvbnRhY3QgLm1hcCBpbWcgewoJd2lkdGg6IDEwMCU7CglvdmVyZmxvdzogaGlkZGVuOwp9CgojY29udGFjdCBpbnB1dCB7Cglib3JkZXItcmFkaXVzOiAwcHg7CglwYWRkaW5nLWxlZnQ6IDE1cHg7Cglmb250LXNpemU6IDEzcHg7Cgljb2xvcjogI2ZmZjsKCWJhY2tncm91bmQtY29sb3I6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC4xKTsKCW91dGxpbmU6IG5vbmU7Cglib3JkZXI6IG5vbmU7Cglib3gtc2hhZG93OiBub25lOwoJbGluZS1oZWlnaHQ6IDUwcHg7CgloZWlnaHQ6IDUwcHg7Cgl3aWR0aDogMTAwJTsKCW1hcmdpbi1ib3R0b206IDMwcHg7Cn0KCiNjb250YWN0IHRleHRhcmVhIHsKCWJvcmRlci1yYWRpdXM6IDBweDsKCXBhZGRpbmctbGVmdDogMTVweDsKCWZvbnQtc2l6ZTogMTNweDsKCWNvbG9yOiAjZmZmOwoJYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjEpOwoJb3V0bGluZTogbm9uZTsKCWJvcmRlcjogbm9uZTsKCWJveC1zaGFkb3c6IG5vbmU7CgloZWlnaHQ6IDE2NXB4OwoJbWF4LWhlaWdodDogMjIwcHg7Cgl3aWR0aDogMTAwJTsKCW1hcmdpbi1ib3R0b206IDI1cHg7Cn0KCiNjb250YWN0IGJ1dHRvbiB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDk5OwoJcGFkZGluZzogMTJweCAxOHB4OwoJY29sb3I6ICNmZmY7Cglmb250LXNpemU6IDExcHg7CglsZXR0ZXItc3BhY2luZzogMXB4OwoJZm9udC13ZWlnaHQ6IDkwMDsKCXRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cglib3JkZXItcmFkaXVzOiAyMHB4Owp9CgoKCiNjb250YWN0IGJ1dHRvbjpob3ZlciB7Cgljb2xvcjogI2ZmZjsKCWJhY2tncm91bmQtY29sb3I6ICMwMDAwY2M7Cgl0cmFuc2l0aW9uOiBhbGwgMC4zczsKfQojY29udGFjdDIgYnV0dG9uIHsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCWJhY2tncm91bmQtY29sb3I6ICM5OTAwMDA7CglwYWRkaW5nOiAxMnB4IDE4cHg7Cgljb2xvcjogI2ZmZjsKCWZvbnQtc2l6ZTogMTFweDsKCWxldHRlci1zcGFjaW5nOiAxcHg7Cglmb250LXdlaWdodDogOTAwOwoJdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKCWJvcmRlci1yYWRpdXM6IDIwcHg7Cn0KCgoKI2NvbnRhY3QyIGJ1dHRvbjpob3ZlciB7Cgljb2xvcjogI2ZmZjsKCWJhY2tncm91bmQtY29sb3I6ICNjYzAwMDA7Cgl0cmFuc2l0aW9uOiBhbGwgMC4zczsKfQoKLyogRk9PVEVSICovCgpmb290ZXIgewoJYmFja2dyb3VuZC1jb2xvcjogIzIwMjYyODsKCXBhZGRpbmc6IDIwcHg7Cn0KCmZvb3RlciBwIHsKCWZvbnQtc2l6ZTogMTJweDsKCWNvbG9yOiAjZmZmOwoJbWFyZ2luLWJvdHRvbTogMHB4OwoJbWFyZ2luLXRvcDogMjBweDsKfQoKZm9vdGVyIGVtIHsKCWZvbnQtc3R5bGU6IG5vcm1hbDsKCWZvbnQtd2VpZ2h0OiA3MDA7Cgljb2xvcjogI2EyY2Y4ZDsKfQoKZm9vdGVyIHVsIHsKCW1hcmdpbi10b3A6IDE1cHg7CglmbG9hdDogcmlnaHQ7Cn0KCmZvb3RlciB1bCBsaSB7CglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgltYXJnaW4tbGVmdDogNXB4Owp9Cgpmb290ZXIgdWwgbGkgYSB7Cglmb250LXNpemU6IDE2cHg7Cgl3aWR0aDogMzZweDsKCWhlaWdodDogMzZweDsKCWxpbmUtaGVpZ2h0OiAzNnB4OwoJdGV4dC1hbGlnbjogY2VudGVyOwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJYmFja2dyb3VuZC1jb2xvcjogI2EyY2Y4ZDsKCWNvbG9yOiAjMjAyNjI4OwoJYm9yZGVyLXJhZGl1czogNTAlOwp9Cgpmb290ZXIgdWwgbGkgYTpob3ZlciB7Cgljb2xvcjogIzIwMjYyODsKCWJhY2tncm91bmQtY29sb3I6ICM1YzlkN2Q7Cgl0cmFuc2l0aW9uOiBhbGwgMC41czsKfQoKCgoKLyogTElHSFQgQk9YICovCgpib2R5OmFmdGVyIHsKICBkaXNwbGF5OiBub25lOwp9Cgpib2R5LmxiLWRpc2FibGUtc2Nyb2xsaW5nIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubGlnaHRib3hPdmVybGF5IHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgei1pbmRleDogOTk5OTk7CiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT04MCk7CiAgb3BhY2l0eTogMC44OwogIGRpc3BsYXk6IG5vbmU7Cn0KCi5saWdodGJveCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIG1hcmdpbi10b3A6IDUlOwogIGxlZnQ6IDA7CiAgd2lkdGg6IDEwMCU7CiAgei1pbmRleDogMTAwMDAwOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBsaW5lLWhlaWdodDogMDsKICBmb250LXdlaWdodDogbm9ybWFsOwp9CgoubGlnaHRib3ggLmxiLWltYWdlIHsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IGF1dG87CiAgbWF4LXdpZHRoOiBpbmhlcml0OwogIG1heC1oZWlnaHQ6IG5vbmU7CiAgYm9yZGVyLXJhZGl1czogM3B4OwoKICAvKiBJbWFnZSBib3JkZXIgKi8KICBib3JkZXI6IDRweCBzb2xpZCB3aGl0ZTsKfQoKLmxpZ2h0Ym94IGEgaW1nIHsKICBib3JkZXI6IG5vbmU7Cn0KCi5sYi1vdXRlckNvbnRhaW5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogICp6b29tOiAxOwogIHdpZHRoOiAyNTBweDsKICBoZWlnaHQ6IDI1MHB4OwogIG1hcmdpbjogMCBhdXRvOwogIGJvcmRlci1yYWRpdXM6IDRweDsKCiAgLyogQmFja2dyb3VuZCBjb2xvciBiZWhpbmQgaW1hZ2UuCiAgICAgVGhpcyBpcyB2aXNpYmxlIGR1cmluZyB0cmFuc2l0aW9ucy4gKi8KICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKfQoKLmxiLW91dGVyQ29udGFpbmVyOmFmdGVyIHsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiB0YWJsZTsKICBjbGVhcjogYm90aDsKfQoKLmxiLWxvYWRlciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogNDMlOwogIGxlZnQ6IDA7CiAgaGVpZ2h0OiAyNSU7CiAgd2lkdGg6IDEwMCU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGxpbmUtaGVpZ2h0OiAwOwp9CgoubGItY2FuY2VsIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMzJweDsKICBoZWlnaHQ6IDMycHg7CiAgbWFyZ2luOiAwIGF1dG87Cn0KCi5sYi1uYXYgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgbGVmdDogMDsKICBoZWlnaHQ6IDEwMCU7CiAgd2lkdGg6IDEwMCU7CiAgei1pbmRleDogMTA7Cn0KCi5sYi1jb250YWluZXIgPiAubmF2IHsKICBsZWZ0OiAwOwp9CgoubGItbmF2IGEgewogIG91dGxpbmU6IG5vbmU7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQVBBQUFQLy8vd0FBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQ1JBRUFPdz09Jyk7Cn0KCi5sYi1wcmV2LCAubGItbmV4dCB7CiAgaGVpZ2h0OiAxMDAlOwogIGN1cnNvcjogcG9pbnRlcjsKICBkaXNwbGF5OiBibG9jazsKfQoKLmxiLW5hdiBhLmxiLXByZXYgewogIHdpZHRoOiAzNCU7CiAgbGVmdDogMDsKICBmbG9hdDogbGVmdDsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTApOwogIG9wYWNpdHk6IDA7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnM7CiAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnM7CiAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzOwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC42czsKfQoKLmxiLW5hdiBhLmxiLXByZXY6aG92ZXIgewogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9MTAwKTsKICBvcGFjaXR5OiAxOwp9CgoubGItbmF2IGEubGItbmV4dCB7CiAgd2lkdGg6IDY0JTsKICByaWdodDogMDsKICBmbG9hdDogcmlnaHQ7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT0wKTsKICBvcGFjaXR5OiAwOwogIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzOwogIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzOwogIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC42czsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnM7Cn0KCi5sYi1uYXYgYS5sYi1uZXh0OmhvdmVyIHsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTEwMCk7CiAgb3BhY2l0eTogMTsKfQoKLmxiLWRhdGFDb250YWluZXIgewogIG1hcmdpbjogMCBhdXRvOwogIHBhZGRpbmctdG9wOiA1cHg7CiAgKnpvb206IDE7CiAgd2lkdGg6IDEwMCU7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDRweDsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7CiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiA0cHg7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OwogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7Cn0KCi5sYi1kYXRhQ29udGFpbmVyOmFmdGVyIHsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiB0YWJsZTsKICBjbGVhcjogYm90aDsKfQoKLmxiLWRhdGEgewogIHBhZGRpbmc6IDAgNHB4OwogIGNvbG9yOiAjY2NjOwp9CgoubGItZGF0YSAubGItZGV0YWlscyB7CiAgd2lkdGg6IDg1JTsKICBmbG9hdDogbGVmdDsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIGxpbmUtaGVpZ2h0OiAxLjFlbTsKfQoKLmxiLWRhdGEgLmxiLWNhcHRpb24gewogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsaW5lLWhlaWdodDogMWVtOwp9CgoubGItZGF0YSAubGItY2FwdGlvbiBhIHsKICBjb2xvcjogIzRhZTsKfQoKLmxiLWRhdGEgLmxiLW51bWJlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgY2xlYXI6IGxlZnQ7CiAgcGFkZGluZy1ib3R0b206IDFlbTsKICBmb250LXNpemU6IDEycHg7CiAgY29sb3I6ICM5OTk5OTk7Cn0KCi5sYi1kYXRhIC5sYi1jbG9zZSB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxvYXQ6IHJpZ2h0OwogIHdpZHRoOiAzMHB4OwogIGhlaWdodDogMzBweDsKICB0ZXh0LWFsaWduOiByaWdodDsKICBvdXRsaW5lOiBub25lOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9NzApOwogIG9wYWNpdHk6IDAuNzsKICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwp9CgoubGItZGF0YSAubGItY2xvc2U6aG92ZXIgewogIGN1cnNvcjogcG9pbnRlcjsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTEwMCk7CiAgb3BhY2l0eTogMTsKfQoKCgovKiBSRVNQT05TSVZFICovCgpAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpewoJI21haW4tbmF2IHsKCQlib3JkZXItY29sb3I6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC45NSk7CgkJbWFyZ2luLXRvcDogMTZweDsKCQliYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuOTUpOwoJCWJveC1zaGFkb3c6IDBweCA1cHggMTBweCAjY2RjZGNkOwoJfQoJLm5hdmJhci1uYXYgewoJCXBhZGRpbmc6IDBweDsKCQltYXJnaW4tdG9wOiAwcHg7CgkJbWFyZ2luLXRvcDogMHB4OwoJfQoJLm5hdmJhci1uYXY+bGkgewoJCW1hcmdpbi1sZWZ0OiAwcHg7CgkJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7Cgl9CgkubmF2YmFyLW5hdj5saTpsYXN0LWNoaWxkIHsKCQlib3JkZXItYm90dG9tOiBub25lOwoJfQoJLm5hdmJhci1uYXY+bGk+YSB7CgkJbGluZS1oZWlnaHQ6IDUwcHg7CgkJY29sb3I6ICMxMjEyMTIhaW1wb3J0YW50OwoJfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpewoJLmNkLWhlcm8gLnNsaWRlLWNhcHRpb24gc3BhbiB7CgkJZm9udC1zaXplOiAxM3B4OwoJfQoKCS5jZC1oZXJvIC5zbGlkZS1jYXB0aW9uIGgyIHsKCQlmb250LXNpemU6IDI4cHg7Cgl9Cn0KCgpAbWVkaWEgKG1heC13aWR0aDogMTAxNXB4KXsKCS5zbGlkZS1jYXB0aW9uIC5jb250ZW50LWNhcHRpb24gcCB7CgkJcGFkZGluZzogMCAxMCU7Cgl9Cgkuc2VydmljZS1pdGVtIHsKCQltYXJnaW4tYm90dG9tOiAzMHB4OwoJfQoJI3doYXQtd2UtZG8gLnJpZ2h0LWltYWdlIHsKCQltYXJnaW4tdG9wOiA2MHB4OwoJfQoJI2Jsb2cgLnBvcCB7CgkJdG9wOiAxNSU7CgkJaGVpZ2h0OiA4MCU7CgkJb3ZlcmZsb3cteTogc2Nyb2xsOwoJfQoJLmZhY3QtaXRlbSB7CgkJbWFyZ2luLWJvdHRvbTogMTVweDsKCX0KCS5tYXAgewoJCW1hcmdpbi1ib3R0b206IDQ1cHg7Cgl9Cglmb290ZXIgewoJCXRleHQtYWxpZ246IGNlbnRlcjsKCX0KCWZvb3RlciB1bCB7CgkJZmxvYXQ6IG5vbmU7Cgl9Cn0="
            }
        },
        {
            "path": "pointages/index.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 22209,
                "sha1": "546c34eb127e511fac7e6278d28e83f529e69734",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvaW5kZXgucGhwIHwgQWZmaWNoZSBsZSB0YWJsZWF1IGRlIHBvaW50YWdlIGRlcyBzYWxhcmnDqXMgZXQgcHJvdMOoZ2UgbOKAmWFjY8OocyB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsLiB8IEV4cG9zZTogYXNzZXRfdmVyc2lvbiwgb3BlbkVtcGxveWVlTW9kYWwsIGNsb3NlRW1wbG95ZWVNb2RhbCwgc3VibWl0RW1wbG95ZWVQdW5jaCwgZ29Ub0VtcGxveWVlRGV0YWlscyB8IETDqXBlbmQgZGU6IHBvaW50YWdlcy9jb25maWcucGhwLCBpbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAsIGNvbm5leGlvbi5waHAsIGFkbWluLnBocCwgZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAsIGVucmVnaXN0cmVtZW50X2RlcGFydC5waHAsIHBvaW50YWdlLnBocCwganMvdmVuZG9yL2pxdWVyeS0xLjExLjIubWluLmpzLCBqcy92ZW5kb3IvYm9vdHN0cmFwLm1pbi5qcywganMvcGx1Z2lucy5qcywganMvbWFpbi5qcywganMvZHJpdmVyLW1vZGFsLmpzIHwgSW1wYWN0ZTogc2Vzc2lvbiBQSFAsIGNvb2tpZSBk4oCZYXBwYXJlaWwsIHJlZGlyZWN0aW9uIGTigJlhY2PDqHMsIGxlY3R1cmUgZGVzIHBvaW50YWdlcy9lbXBsb3nDqXMsIG1vZGFsZXMgVUksIGFwcGVscyBBSkFYIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoVXNlcklELE5vbSxQcmVub20sU3RhdHV0KSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELFVzZXJJRCxEYXRlSGV1cmVFbnRyZWUsRGF0ZUhldXJlU29ydGllKSAqLwovLyBEw6ltYXJyYWdlIG91IHJlcHJpc2UgZGUgbGEgc2Vzc2lvbgpzZXNzaW9uX3N0YXJ0KCk7CmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwoKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7Cgo/PgoKCjwhRE9DVFlQRSBodG1sPgoKPGh0bWw+Cgo8aGVhZD4KCjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgoKPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KCgoKPHRpdGxlPlBvaW50YWdlcyBTYWxhcmnDqXM8L3RpdGxlPgoKCgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9ImFwcGxlLXRvdWNoLWljb24ucG5nIj4KCgo8P3BocApmdW5jdGlvbiBhc3NldF92ZXJzaW9uKHN0cmluZyAkcmVsYXRpdmVQYXRoKTogc3RyaW5nCnsKICAkZnVsbFBhdGggPSBfX0RJUl9fIC4gJy8nIC4gbHRyaW0oJHJlbGF0aXZlUGF0aCwgJy8nKTsKICAkdmVyc2lvbiA9IGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkgPyBmaWxlbXRpbWUoJGZ1bGxQYXRoKSA6IHRpbWUoKTsKICByZXR1cm4gJHJlbGF0aXZlUGF0aCAuICc/dj0nIC4gKGludCkkdmVyc2lvbjsKfQo/PgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2Jvb3RzdHJhcC5taW4uY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdjc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9mb250QXdlc29tZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9mb250QXdlc29tZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2hlcm8tc2xpZGVyLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdjc3MvdG9vcGxhdGUtc3R5bGUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9zdHlsZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2hvbWUtYnV0dG9ucy5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2RyaXZlci1tb2RhbC5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KCjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1NhbnM6MzAwLDQwMCw2MDAsNzAwLDgwMCIgcmVsPSJzdHlsZXNoZWV0Ij4KCjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignanMvdmVuZG9yL21vZGVybml6ci0yLjguMy1yZXNwb25kLTEuNC4yLm1pbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKCjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignanMvdmVuZG9yL21vZGVybml6ci0yLjguMy1yZXNwb25kLTEuNC4yLm1pbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKPC9oZWFkPgoKPGJvZHkgY2xhc3M9InBhZ2UtaW5kZXggdGhlbWUtZGFyayI+CgoKCjxkaXYgaWQ9ImFib3V0IiBjbGFzcz0iIj4KCjxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGluZyI+CjxoMT5Qb2ludGFnZXMgc2FsYXJpw6lzPC9oMT4KPGRpdiBjbGFzcz0ibGluZS1kZWMiPjwvZGl2Pgo8Y2VudGVyPgo8YnI+Cjxmb250IGNvbG9yPSJibGFjayIgc2l6ZT0iNCIgPgo8c3Ryb25nPgo8P3BocAovLyBSw6ljdXDDqHJlIGxlIGRlcm5pZXIgcG9pbnRhZ2UgZGUgY2hhcXVlIGVtcGxvecOpIHBvdXIgZMOpdGVybWluZXIgcydpbCBlc3QgInBvaW50w6kiCiRjdXJyZW50TW9udGggPSAoaW50KWRhdGUoJ24nKTsKJGN1cnJlbnRZZWFyID0gKGludClkYXRlKCdZJyk7CiRub3dQYXJpcyA9IGRhdGUoJ1ktbS1kIEg6aTpzJyk7Cgokc3RtdCA9ICRwZG8tPnByZXBhcmUoIgogIFNFTEVDVAogICAgdS5Vc2VySUQsCiAgICB1Lk5vbSwKICAgIHUuUHJlbm9tLAogICAgcC5EYXRlSGV1cmVFbnRyZWUsCiAgICBwLkRhdGVIZXVyZVNvcnRpZSwKICAgIG1oLnNlY29uZHNfd29ya2VkLAogICAgbWgubWF4X3B1bmNoX3NlY29uZHMKICBGUk9NIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgdQogIExFRlQgSk9JTiB6X3B0Z19hcXBfcG9pbnRhZ2VzIHAKICAgIE9OIHAuUG9pbnRhZ2VJRCA9ICgKICAgICAgU0VMRUNUIHAyLlBvaW50YWdlSUQKICAgICAgRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIHAyCiAgICAgIFdIRVJFIHAyLlVzZXJJRCA9IHUuVXNlcklECiAgICAgIE9SREVSIEJZIHAyLkRhdGVIZXVyZUVudHJlZSBERVNDLCBwMi5Qb2ludGFnZUlEIERFU0MKICAgICAgTElNSVQgMQogICAgKQogIExFRlQgSk9JTiAoCiAgICBTRUxFQ1QKICAgICAgVXNlcklELAogICAgICBTVU0oCiAgICAgICAgVElNRVNUQU1QRElGRigKICAgICAgICAgIFNFQ09ORCwKICAgICAgICAgIERhdGVIZXVyZUVudHJlZSwKICAgICAgICAgIENPQUxFU0NFKERhdGVIZXVyZVNvcnRpZSwgOm5vd1BhcmlzU3VtKQogICAgICAgICkKICAgICAgKSBBUyBzZWNvbmRzX3dvcmtlZCwKICAgICAgTUFYKAogICAgICAgIFRJTUVTVEFNUERJRkYoCiAgICAgICAgICBTRUNPTkQsCiAgICAgICAgICBEYXRlSGV1cmVFbnRyZWUsCiAgICAgICAgICBDT0FMRVNDRShEYXRlSGV1cmVTb3J0aWUsIDpub3dQYXJpc01heCkKICAgICAgICApCiAgICAgICkgQVMgbWF4X3B1bmNoX3NlY29uZHMKICAgIEZST00gel9wdGdfYXFwX3BvaW50YWdlcwogICAgV0hFUkUgTU9OVEgoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50TW9udGgKICAgICAgQU5EIFlFQVIoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50WWVhcgogICAgR1JPVVAgQlkgVXNlcklECiAgKSBtaCBPTiBtaC5Vc2VySUQgPSB1LlVzZXJJRAogIFdIRVJFIHUuU3RhdHV0ID0gJ2FjdGlmJwoiKTsKJHN0bXQtPmV4ZWN1dGUoWwogICc6bm93UGFyaXNTdW0nID0+ICRub3dQYXJpcywKICAnOm5vd1BhcmlzTWF4JyA9PiAkbm93UGFyaXMsCiAgJzpjdXJyZW50TW9udGgnID0+ICRjdXJyZW50TW9udGgsCiAgJzpjdXJyZW50WWVhcicgPT4gJGN1cnJlbnRZZWFyLApdKTsKJGVtcGxveWVzQWN0aWZzID0gJHN0bXQtPmZldGNoQWxsKFBETzo6RkVUQ0hfQVNTT0MpOwoKZWNobyAnPHRhYmxlIGNsYXNzPSJlbXBsb3llZS1ncmlkIj4nOwokY29tcHRldXIgPSAwOwoKZm9yZWFjaCAoJGVtcGxveWVzQWN0aWZzIGFzICRlbXBsb3llKSB7CiAgLy8gTG9naXF1ZSBzaW1pbGFpcmUgcG91ciBhZmZpY2hlciBsZXMgZW1wbG95w6lzCiAgaWYgKCRjb21wdGV1ciAlIDIgPT0gMCkgewogICAgZWNobyAnPHRyPic7CiAgfQogICRub21SYXcgPSBpc3NldCgkZW1wbG95ZVsnTm9tJ10pID8gKHN0cmluZykkZW1wbG95ZVsnTm9tJ10gOiAnJzsKICAkcHJlbm9tUmF3ID0gaXNzZXQoJGVtcGxveWVbJ1ByZW5vbSddKSA/IChzdHJpbmcpJGVtcGxveWVbJ1ByZW5vbSddIDogJyc7CiAgJG5vbSA9IG1iX3N0cnRvdXBwZXIoJG5vbVJhdywgJ1VURi04Jyk7CiAgJHByZW5vbSA9IG1iX3N0cnRvdXBwZXIoJHByZW5vbVJhdywgJ1VURi04Jyk7CiAgJHByZW5vbUpzID0gaHRtbHNwZWNpYWxjaGFycygKICAgIGpzb25fZW5jb2RlKCRwcmVub21SYXcsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUgfCBKU09OX0hFWF9UQUcgfCBKU09OX0hFWF9BTVAgfCBKU09OX0hFWF9BUE9TIHwgSlNPTl9IRVhfUVVPVCksCiAgICBFTlRfUVVPVEVTLAogICAgJ1VURi04JwogICk7CgogIC8vIFVuIGVtcGxvecOpIGVzdCAicG9pbnTDqSIgcydpbCBhIHVuIGRlcm5pZXIgcG9pbnRhZ2UgZG9udCBEYXRlSGV1cmVTb3J0aWUgZXN0IE5VTEwKICAvLyAoZXQgcXUnaWwgZXhpc3RlIGJpZW4gdW5lIERhdGVIZXVyZUVudHJlZSkuCiAgJGlzUG9pbnRlZCA9ICghZW1wdHkoJGVtcGxveWVbJ0RhdGVIZXVyZUVudHJlZSddKSAmJiAkZW1wbG95ZVsnRGF0ZUhldXJlU29ydGllJ10gPT09IG51bGwpOwoKICAvLyBEw6l0ZWN0aW9uICJwb2ludGFnZSA+IDhIIiA6CiAgLy8gLSB2aWEgbGEgZHVyw6llIG1heCBkZXMgcG9pbnRhZ2VzIGR1IG1vaXMgKG1heF9wdW5jaF9zZWNvbmRzKSwKICAvLyAtIGV0IHZpYSBsZSBkZXJuaWVyIHBvaW50YWdlIChlbiBjb3VycyBvdSB0ZXJtaW7DqSksIG3Dqm1lIHMnaWwgZXN0IGhvcnMgbW9pcyAoY2FzIHJhcmUsIG1haXMgcm9idXN0ZSkuCiAgJG1heFB1bmNoU2Vjb25kcyA9IGlzc2V0KCRlbXBsb3llWydtYXhfcHVuY2hfc2Vjb25kcyddKSA/IChpbnQpJGVtcGxveWVbJ21heF9wdW5jaF9zZWNvbmRzJ10gOiAwOwogICRsYXN0UHVuY2hTZWNvbmRzID0gMDsKICBpZiAoIWVtcHR5KCRlbXBsb3llWydEYXRlSGV1cmVFbnRyZWUnXSkpIHsKICAgICRzdGFydFRzID0gc3RydG90aW1lKCRlbXBsb3llWydEYXRlSGV1cmVFbnRyZWUnXSk7CiAgICAkZW5kVHMgPSAoJGVtcGxveWVbJ0RhdGVIZXVyZVNvcnRpZSddID09PSBudWxsIHx8ICRlbXBsb3llWydEYXRlSGV1cmVTb3J0aWUnXSA9PT0gJycpCiAgICAgID8gc3RydG90aW1lKCRub3dQYXJpcykKICAgICAgOiBzdHJ0b3RpbWUoJGVtcGxveWVbJ0RhdGVIZXVyZVNvcnRpZSddKTsKICAgIGlmICgkc3RhcnRUcyAhPT0gZmFsc2UgJiYgJGVuZFRzICE9PSBmYWxzZSAmJiAkZW5kVHMgPj0gJHN0YXJ0VHMpIHsKICAgICAgJGxhc3RQdW5jaFNlY29uZHMgPSAoaW50KSgkZW5kVHMgLSAkc3RhcnRUcyk7CiAgICB9CiAgfQogICRoYXNQdW5jaE92ZXI4aCA9ICgkbWF4UHVuY2hTZWNvbmRzID49IDI4ODAwKSB8fCAoJGxhc3RQdW5jaFNlY29uZHMgPj0gMjg4MDApOwoKICAkYnRuQ2xhc3MgPSAkaXNQb2ludGVkID8gJ2VtcGxveWVlLWJ0biBzdGF0dXMtcG9pbnRlZCcgOiAnZW1wbG95ZWUtYnRuIHN0YXR1cy1kZXBvaW50ZWQnOwogIGlmICgkaGFzUHVuY2hPdmVyOGgpIHsKICAgICRidG5DbGFzcyAuPSAnIHN0YXR1cy1wcm9ibGVtJzsKICB9CiAgLy8gSWPDtG5lIHVuaXF1ZW1lbnQgcXVhbmQgcG9pbnTDqQogICRpY29uSHRtbCA9ICcnOwogIGlmICgkaXNQb2ludGVkKSB7CiAgICAkaWNvbkh0bWwgPSAnPGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSBzdGF0dXMtaWNvbiIgYXJpYS1oaWRkZW49InRydWUiIHRpdGxlPSJQb2ludMOpIj48L2k+JzsKICB9CgogICRzZWNvbmRzV29ya2VkID0gaXNzZXQoJGVtcGxveWVbJ3NlY29uZHNfd29ya2VkJ10pID8gKGZsb2F0KSRlbXBsb3llWydzZWNvbmRzX3dvcmtlZCddIDogMC4wOwogICRtb250aEhvdXJzID0gJHNlY29uZHNXb3JrZWQgPiAwID8gKCRzZWNvbmRzV29ya2VkIC8gMzYwMCkgOiAwLjA7CiAgJG1vbnRoSG91cnNUZXh0ID0gbnVtYmVyX2Zvcm1hdCgkbW9udGhIb3VycywgMiwgJy4nLCAnJykgLiAnSCc7CiAgJG1vbnRoSG91cnNIdG1sID0gJzxzcGFuIGNsYXNzPSJtb250aC1ob3VycyI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJG1vbnRoSG91cnNUZXh0LCBFTlRfUVVPVEVTLCAnVVRGLTgnKSAuICc8L3NwYW4+JzsKCiAgZWNobyAnPHRkIGNsYXNzPSJlbXBsb3llZS1ncmlkLWNlbGwiPicKICAgICAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IicgLiAkYnRuQ2xhc3MgLiAnIiBvbmNsaWNrPSJvcGVuRW1wbG95ZWVNb2RhbCgnIC4gKGludCkkZW1wbG95ZVsnVXNlcklEJ10gLiAnLCAnIC4gKCRpc1BvaW50ZWQgPyAnMScgOiAnMCcpIC4gJywgJyAuICRwcmVub21KcyAuICcpIj4nCiAgICAgLiAkaWNvbkh0bWwKICAgICAuICc8c3BhbiBjbGFzcz0iZW1wbG95ZWUtbmFtZSI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJG5vbSwgRU5UX1FVT1RFUywgJ1VURi04JykgLiAnPC9zcGFuPicKICAgICAuICc8c3BhbiBjbGFzcz0iZW1wbG95ZWUtZmlyc3RuYW1lIj4nIC4gaHRtbHNwZWNpYWxjaGFycygkcHJlbm9tLCBFTlRfUVVPVEVTLCAnVVRGLTgnKSAuICc8L3NwYW4+JwogICAgIC4gJG1vbnRoSG91cnNIdG1sCiAgICAgLiAnPC9idXR0b24+JwogICAgIC4gJzwvdGQ+JzsKCiAgaWYgKCRjb21wdGV1ciAlIDIgPT0gMSkgewogICAgZWNobyAnPC90cj4nOwogIH0KICAkY29tcHRldXIrKzsKfQogCiBlY2hvICc8L3RhYmxlPic7CiA/PgogCiA8ZGl2IGNsYXNzPSJkcml2ZXItcGhvbmUtYWN0aW9ucyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW46MThweCAwIDZweDsiPgogICA8YnV0dG9uCiAgICAgdHlwZT0iYnV0dG9uIgogICAgIGlkPSJkcml2ZXJQaG9uZUJ1dHRvbiIKICAgICBjbGFzcz0iZHJpdmVyLXBob25lLXRyaWdnZXIiCiAgICAgb25jbGljaz0ib3BlbkRyaXZlclBob25lTW9kYWwoKSIKICAgPgogICAgIEVudm95ZXIgU01TIGxpdnJldXIKICAgPC9idXR0b24+CiA8L2Rpdj4KCiA8L3N0cm9uZz4KIDwvZm9udD4KIDwvY2VudGVyPgogPC9kaXY+CiA8L2Rpdj4KCgo8YnI+PGJyPgoKPHA+PGEgaHJlZj0iYWRtaW4ucGhwIj5HZXN0aW9uIGVtcGxvecOpczwvYT48L3A+PGJyPgoKCgoKCjwvZGl2PgoKCgoKPCEtLSBNb2RhbCBQSU4gKGRlc2lnbiByZWZhaXQpIC0tPgo8ZGl2IGlkPSJtb2RhbEJhY2tncm91bmQiIG9uY2xpY2s9ImNsb3NlUGluTW9kYWwoKSIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pgo8ZGl2IGlkPSJwaW5Nb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9InBpbk1vZGFsVGl0bGUiPgogIDxmb3JtIGlkPSJwaW5Gb3JtIiBvbnN1Ym1pdD0idmVyaWZpZXJQaW4oKTsgcmV0dXJuIGZhbHNlOyI+CiAgICA8aDIgaWQ9InBpbk1vZGFsVGl0bGUiIGNsYXNzPSJwaW4tbW9kYWwtdGl0bGUiPkNvZGUgUElOPC9oMj4KICAgIDxwIGNsYXNzPSJwaW4tbW9kYWwtc3VidGl0bGUiPlNhaXNpc3NleiB2b3RyZSBjb2RlIMOgIDQgY2hpZmZyZXM8L3A+CgogICAgPGRpdiBjbGFzcz0icGluLWlucHV0LXdyYXBwZXIiIG9uY2xpY2s9ImZvY3VzUGluSW5wdXQoKSI+CiAgICAgIDxsYWJlbCBmb3I9InBpbklucHV0IiBjbGFzcz0ic3Itb25seSI+Q29kZSBQSU4gKDQgY2hpZmZyZXMpPC9sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0icGluLWJveGVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjAiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBpbi1ib3giIGRhdGEtaWR4PSIxIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMiI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjMiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGlucHV0CiAgICAgICAgdHlwZT0idGVsIgogICAgICAgIGlkPSJwaW5JbnB1dCIKICAgICAgICBjbGFzcz0icGluLWhpZGRlbi1pbnB1dCIKICAgICAgICBpbnB1dG1vZGU9Im51bWVyaWMiCiAgICAgICAgcGF0dGVybj0iWzAtOV0qIgogICAgICAgIG1heGxlbmd0aD0iNCIKICAgICAgICBhdXRvY29tcGxldGU9Im9mZiIKICAgICAgICBhdXRvY2FwaXRhbGl6ZT0ib2ZmIgogICAgICAgIGF1dG9jb3JyZWN0PSJvZmYiCiAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiCiAgICAgICAgdGl0bGU9IlNldWxlbWVudCBkZXMgY2hpZmZyZXMuIgogICAgICAgIHZhbHVlPSIiCiAgICAgID4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InBpbi1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwaW4tbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VQaW5Nb2RhbCgpIj5Bbm51bGVyPC9idXR0b24+CiAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0icGluLW1vZGFsLWJ0biBjb25maXJtIj5WYWxpZGVyPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Zvcm0+CjwvZGl2PgoKPCEtLSBNb2RhbCBBY3Rpb25zIEVtcGxvecOpIChBcnJpdsOpZS9Ew6lwYXJ0ICsgVm9pciBkw6l0YWlsKSAtLT4KPGRpdiBpZD0iZW1wbG95ZWVNb2RhbEJhY2tncm91bmQiIG9uY2xpY2s9ImNsb3NlRW1wbG95ZWVNb2RhbCgpIj48L2Rpdj4KPGRpdiBpZD0iZW1wbG95ZWVBY3Rpb25Nb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9ImVtcGxveWVlQWN0aW9uVGl0bGUiPgogIDxoMiBpZD0iZW1wbG95ZWVBY3Rpb25UaXRsZSI+QWN0aW9uczwvaDI+CiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJlbXBsb3llZVB1bmNoQnV0dG9uIiBjbGFzcz0iZW1wbG95ZWUtbW9kYWwtYnRuIHB1bmNoIiBvbmNsaWNrPSJzdWJtaXRFbXBsb3llZVB1bmNoKCkiPjwvYnV0dG9uPgogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZW1wbG95ZWUtbW9kYWwtYnRuIGRldGFpbHMiIG9uY2xpY2s9ImdvVG9FbXBsb3llZURldGFpbHMoKSI+Vm9pciBkw6l0YWlsIGRlcyBoZXVyZXM8L2J1dHRvbj4KPC9kaXY+Cgo8IS0tIE1vZGFsIExpdnJldXIgKHPDqWxlY3Rpb24gKyBlbnZvaSBTTVMpIC0tPgo8ZGl2IGlkPSJkcml2ZXJNb2RhbEJhY2tncm91bmQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYmFja2Ryb3AiIG9uY2xpY2s9ImNsb3NlRHJpdmVyUGhvbmVNb2RhbCgpIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CjxkaXYgaWQ9ImRyaXZlclBob25lTW9kYWwiIGNsYXNzPSJkcml2ZXItbW9kYWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJkcml2ZXJQaG9uZU1vZGFsVGl0bGUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICA8Zm9ybSBpZD0iZHJpdmVyUGhvbmVGb3JtIiBvbnN1Ym1pdD0ic3VibWl0RHJpdmVyUGhvbmUoKTsgcmV0dXJuIGZhbHNlOyI+CiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtaGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWhlYWRlci10ZXh0Ij4KICAgICAgICA8aDIgaWQ9ImRyaXZlclBob25lTW9kYWxUaXRsZSIgY2xhc3M9ImRyaXZlci1tb2RhbC10aXRsZSI+RW52b3llciBTTVMgbGl2cmV1cjwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRyaXZlci1tb2RhbC1zdWJ0aXRsZSI+U8OpbGVjdGlvbm5leiB1biBsaXZyZXVyIHBvdXIgbGUgcG9pbnQgZGUgdmVudGUgZGUgbOKAmWFwcGFyZWlsPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtY2xvc2UiIG9uY2xpY2s9ImNsb3NlRHJpdmVyUGhvbmVNb2RhbCgpIiBhcmlhLWxhYmVsPSJGZXJtZXIiPsOXPC9idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJTZWxlY3QiIGNsYXNzPSJkcml2ZXItbGFiZWwiPkxpdnJldXI8L2xhYmVsPgogICAgICA8c2VsZWN0IGlkPSJkcml2ZXJTZWxlY3QiIGNsYXNzPSJkcml2ZXItc2VsZWN0IiByZXF1aXJlZD4KICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPkNoYXJnZW1lbnQgZGVzIGxpdnJldXJz4oCmPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PgogICAgICA8c21hbGwgaWQ9ImRyaXZlclNlbGVjdGVkUGhvbmVIZWxwIiBjbGFzcz0iZHJpdmVyLWhlbHAiPlPDqWxlY3Rpb25uZXogdW4gbGl2cmV1ciBwb3VyIGFmZmljaGVyIHNvbiBudW3DqXJvLjwvc21hbGw+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJQb2ludFZlbnRlIiBjbGFzcz0iZHJpdmVyLWxhYmVsIj5Qb2ludCBkZSB2ZW50ZTwvbGFiZWw+CiAgICAgIDxzZWxlY3QgaWQ9ImRyaXZlclBvaW50VmVudGUiIGNsYXNzPSJkcml2ZXItc2VsZWN0IiBkaXNhYmxlZD4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJsYW5jb24iPkxhbsOnb248L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJwZWxpc3Nhbm5lIj5Qw6lsaXNzYW5uZTwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIGRyaXZlci1tb2RhbC1hY3Rpb25zLXNwbGl0Ij4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIHNlY29uZGFyeSIgb25jbGljaz0ib3BlbkRyaXZlck1hbmFnZU1vZGFsKCkiPkfDqXJlciBsZXMgbGl2cmV1cnM8L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VEcml2ZXJQaG9uZU1vZGFsKCkiPkFubnVsZXI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNvbmZpcm0iPkVudm95ZXIgU01TPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Zvcm0+CjwvZGl2PgoKPCEtLSBNb2RhbCBnZXN0aW9uIGxpdnJldXJzIC0tPgo8ZGl2IGlkPSJkcml2ZXJNYW5hZ2VNb2RhbEJhY2tncm91bmQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYmFja2Ryb3AiIG9uY2xpY2s9ImNsb3NlRHJpdmVyTWFuYWdlTW9kYWwoKSIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pgo8ZGl2IGlkPSJkcml2ZXJNYW5hZ2VNb2RhbCIgY2xhc3M9ImRyaXZlci1tb2RhbCBkcml2ZXItbWFuYWdlLW1vZGFsIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiIGFyaWEtbGFiZWxsZWRieT0iZHJpdmVyTWFuYWdlTW9kYWxUaXRsZSIgYXJpYS1oaWRkZW49InRydWUiPgogIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1oZWFkZXIiPgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWhlYWRlci10ZXh0Ij4KICAgICAgPGgyIGlkPSJkcml2ZXJNYW5hZ2VNb2RhbFRpdGxlIiBjbGFzcz0iZHJpdmVyLW1vZGFsLXRpdGxlIj5Hw6lyZXIgbGVzIGxpdnJldXJzPC9oMj4KICAgICAgPHAgY2xhc3M9ImRyaXZlci1tb2RhbC1zdWJ0aXRsZSI+QWpvdXQsIG1vZGlmaWNhdGlvbiBldCBzdXBwcmVzc2lvbiBwb3VyIGxlIHBvaW50IGRlIHZlbnRlIGNvdXJhbnQ8L3A+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWNsb3NlIiBvbmNsaWNrPSJjbG9zZURyaXZlck1hbmFnZU1vZGFsKCkiIGFyaWEtbGFiZWw9IkZlcm1lciI+w5c8L2J1dHRvbj4KICA8L2Rpdj4KCiAgPGZvcm0gaWQ9ImRyaXZlck1hbmFnZUZvcm0iPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImRyaXZlck1hbmFnZU1vZGUiIHZhbHVlPSJjcmVhdGUiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImRyaXZlckVkaXRPcmlnaW5hbFBob25lIiB2YWx1ZT0iIj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJNYW5hZ2VTZWxlY3QiIGNsYXNzPSJkcml2ZXItbGFiZWwiPkxpdnJldXIgZXhpc3RhbnQ8L2xhYmVsPgogICAgICA8c2VsZWN0IGlkPSJkcml2ZXJNYW5hZ2VTZWxlY3QiIGNsYXNzPSJkcml2ZXItc2VsZWN0Ij4KICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPk5vdXZlYXUgbGl2cmV1cjwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1maWVsZCI+CiAgICAgIDxsYWJlbCBmb3I9ImRyaXZlck1hbmFnZU5hbWUiIGNsYXNzPSJkcml2ZXItbGFiZWwiPk5vbSBhZmZpY2jDqTwvbGFiZWw+CiAgICAgIDxpbnB1dAogICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgaWQ9ImRyaXZlck1hbmFnZU5hbWUiCiAgICAgICAgY2xhc3M9ImRyaXZlci1pbnB1dCIKICAgICAgICBtYXhsZW5ndGg9IjEyMCIKICAgICAgICBwbGFjZWhvbGRlcj0iRXg6IEthcmltIgogICAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIgogICAgICA+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJNYW5hZ2VQaG9uZSIgY2xhc3M9ImRyaXZlci1sYWJlbCI+VMOpbMOpcGhvbmU8L2xhYmVsPgogICAgICA8aW5wdXQKICAgICAgICB0eXBlPSJ0ZWwiCiAgICAgICAgaWQ9ImRyaXZlck1hbmFnZVBob25lIgogICAgICAgIGNsYXNzPSJkcml2ZXItaW5wdXQiCiAgICAgICAgaW5wdXRtb2RlPSJudW1lcmljIgogICAgICAgIHBhdHRlcm49IlswLTldKiIKICAgICAgICBtYXhsZW5ndGg9IjE2IgogICAgICAgIHBsYWNlaG9sZGVyPSJFeDogMDYxODUyOTM3NSIKICAgICAgICBhdXRvY29tcGxldGU9Im9mZiIKICAgICAgICBhdXRvY2FwaXRhbGl6ZT0ib2ZmIgogICAgICAgIGF1dG9jb3JyZWN0PSJvZmYiCiAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiCiAgICAgID4KICAgICAgPHNtYWxsIGNsYXNzPSJkcml2ZXItaGVscCI+Rm9ybWF0IGFjY2VwdMOpIDogMDYxODUyOTM3NSwgMzM2MTg1MjkzNzUgb3UgMDAzMzYxODUyOTM3NS48L3NtYWxsPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWFjdGlvbnMiPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImRyaXZlci1tb2RhbC1idG4gZGFuZ2VyIiBvbmNsaWNrPSJkZWxldGVTZWxlY3RlZERyaXZlcigpIj5TdXBwcmltZXI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNvbmZpcm0iPkVucmVnaXN0cmVyPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VEcml2ZXJNYW5hZ2VNb2RhbCgpIj5GZXJtZXI8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZm9ybT4KPC9kaXY+Cgo8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4xMS4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgoKCgoKCgoKCgo8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4xMS4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgoKPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKCc8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBhZGRzbGFzaGVzKGFzc2V0X3ZlcnNpb24oJ2pzL3ZlbmRvci9qcXVlcnktMS4xMS4yLm1pbi5qcycpKTsgPz4iPjxcL3NjcmlwdD4nKTwvc2NyaXB0PgoKCgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2pzL3ZlbmRvci9ib290c3RyYXAubWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2pzL3ZlbmRvci9ib290c3RyYXAubWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2pzL3BsdWdpbnMuanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KCjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignanMvbWFpbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdqcy9kcml2ZXItbW9kYWwuanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KCgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgCiAgLy8gbmF2aWdhdGlvbiBjbGljayBhY3Rpb25zIAogIAogICQoJy5zY3JvbGwtbGluaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXsKICAgIAogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIAogICAgdmFyIHNlY3Rpb25JRCA9ICQodGhpcykuYXR0cigiZGF0YS1pZCIpOwogICAgCiAgICBzY3JvbGxUb0lEKCcjJyArIHNlY3Rpb25JRCwgNzUwKTsKICAgIAogIH0pOwogIAogIC8vIHNjcm9sbCB0byB0b3AgYWN0aW9uCiAgCiAgJCgnLnNjcm9sbC10b3AnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCkgewogICAgCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgCiAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOjB9LCAnc2xvdycpOyAgICAgICAgIAogICAgCiAgfSk7CiAgCiAgLy8gbW9iaWxlIG5hdiB0b2dnbGUKICAKICAkKCcjbmF2LXRvZ2dsZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgewogICAgCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgCiAgICAkKCcjbWFpbi1uYXYnKS50b2dnbGVDbGFzcygib3BlbiIpOwogICAgCiAgfSk7CiAgCn0pOwoKLy8gc2Nyb2xsIGZ1bmN0aW9uCgpmdW5jdGlvbiBzY3JvbGxUb0lEKGlkLCBzcGVlZCl7CiAgCiAgdmFyIG9mZlNldCA9IDUwOwogIAogIHZhciB0YXJnZXRPZmZzZXQgPSAkKGlkKS5vZmZzZXQoKS50b3AgLSBvZmZTZXQ7CiAgCiAgdmFyIG1haW5OYXYgPSAkKCcjbWFpbi1uYXYnKTsKICAKICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6dGFyZ2V0T2Zmc2V0fSwgc3BlZWQpOwogIAogIGlmIChtYWluTmF2Lmhhc0NsYXNzKCJvcGVuIikpIHsKICAgIAogICAgbWFpbk5hdi5jc3MoImhlaWdodCIsICIxcHgiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygiY29sbGFwc2UiKTsKICAgIAogICAgbWFpbk5hdi5yZW1vdmVDbGFzcygib3BlbiIpOwogICAgCiAgfQogIAp9CgppZiAodHlwZW9mIGNvbnNvbGUgPT09ICJ1bmRlZmluZWQiKSB7CiAgCiAgY29uc29sZSA9IHsKICAgIAogICAgbG9nOiBmdW5jdGlvbigpIHsgfQogICAgCiAgfTsKICAKfQoKCmZ1bmN0aW9uIGFmZmljaGVyTW9kYWwoKSB7CiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJhZG1pbi5waHAiOwp9CgoKLy9mdW5jdGlvbiBhZmZpY2hlck1vZGFsKHBvaW50YWdlSWQpIHsKICAvLyBFbnJlZ2lzdHJleiBsJ0lEIGR1IHBvaW50YWdlIHBvdXIgbCd1dGlsaXNlciBwbHVzIHRhcmQKICAvL3dpbmRvdy5wb2ludGFnZUlkUG91ck1vZGlmaWNhdGlvbiA9IHBvaW50YWdlSWQ7CiAgLy8gQWZmaWNoZXogbGEgZmVuw6p0cmUgbW9kYWxlCiAgLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKLy99CgpmdW5jdGlvbiBzYW5pdGl6ZVBpblZhbHVlKHZhbCkgewogIHJldHVybiBTdHJpbmcodmFsIHx8ICcnKS5yZXBsYWNlKC9cRC9nLCAnJykuc2xpY2UoMCwgNCk7Cn0KCmZ1bmN0aW9uIHVwZGF0ZVBpbkJveGVzKHBpbikgewogIHZhciBib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNwaW5Nb2RhbCAucGluLWJveCcpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgYm94ZXMubGVuZ3RoOyBpKyspIHsKICAgIGJveGVzW2ldLnRleHRDb250ZW50ID0gKGkgPCBwaW4ubGVuZ3RoKSA/ICfimIUnIDogJyc7CiAgfQp9CgpmdW5jdGlvbiBmb2N1c1BpbklucHV0KCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQpIHJldHVybjsKICB0cnkgeyBpbnB1dC5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQp9CgpmdW5jdGlvbiByZXNldFBpbk1vZGFsKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJzsKICB1cGRhdGVQaW5Cb3hlcygnJyk7Cn0KCmZ1bmN0aW9uIG9wZW5QaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKCFtb2RhbCB8fCAhYmcpIHJldHVybjsKCiAgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgYmcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgcmVzZXRQaW5Nb2RhbCgpOwoKICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgIGZvY3VzUGluSW5wdXQoKTsKICB9LCAxMCk7Cn0KCmZ1bmN0aW9uIGNsb3NlUGluTW9kYWwoKSB7CiAgdmFyIG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bpbk1vZGFsJyk7CiAgdmFyIGJnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmFja2dyb3VuZCcpOwogIGlmIChtb2RhbCkgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBpZiAoYmcpIGJnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgcmVzZXRQaW5Nb2RhbCgpOwp9CgovLyBCaW5kIGlucHV0IG9uY2UgKGRpZ2l0cyBvbmx5ICsgc3luYyBVSSBib3hlcykKKGZ1bmN0aW9uIGJpbmRQaW5PbmNlKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQgfHwgaW5wdXQuZ2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJykgPT09ICcxJykgcmV0dXJuOwogIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcsICcxJyk7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgIHZhciBjbGVhbiA9IHNhbml0aXplUGluVmFsdWUoaW5wdXQudmFsdWUpOwogICAgaWYgKGlucHV0LnZhbHVlICE9PSBjbGVhbikgaW5wdXQudmFsdWUgPSBjbGVhbjsKICAgIHVwZGF0ZVBpbkJveGVzKGNsZWFuKTsKICB9KTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgdmFyIGtleSA9IGUua2V5IHx8ICcnOwogICAgaWYgKGtleSA9PT0gJ0VzY2FwZScpIHsKICAgICAgY2xvc2VQaW5Nb2RhbCgpOwogICAgfQogIH0pOwp9KSgpOwoKZnVuY3Rpb24gdmVyaWZpZXJQaW4oKSB7CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICAgIHZhciBwaW4gPSBzYW5pdGl6ZVBpblZhbHVlKGlucHV0ID8gaW5wdXQudmFsdWUgOiAnJyk7CiAgICBpZiAoaW5wdXQgJiYgaW5wdXQudmFsdWUgIT09IHBpbikgaW5wdXQudmFsdWUgPSBwaW47CiAgICB1cGRhdGVQaW5Cb3hlcyhwaW4pOwoKICAgIGlmIChwaW4ubGVuZ3RoICE9PSA0KSB7CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFbnRyZXogdW4gY29kZSBQSU4gw6AgNCBjaGlmZnJlcy4iLCAiZXJyb3IiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWxlcnQoIkVudHJleiB1biBjb2RlIFBJTiDDoCA0IGNoaWZmcmVzLiIpOwogICAgICAgIH0KICAgICAgICB0cnkgeyBmb2N1c1BpbklucHV0KCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHBpbikgewogICAgICAgIC8vIEVudm9pIGR1IGNvZGUgUElOIMOgIHVuIHNjcmlwdCBQSFAgcG91ciB2w6lyaWZpY2F0aW9uCiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VUZXh0ID09ICJPSyIpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJhZG1pbi5waHAiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkNvZGUgUElOIGluY29ycmVjdC4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkNvZGUgUElOIGluY29ycmVjdC4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmVzZXRQaW5Nb2RhbCgpOwogICAgICAgICAgICAgICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9wZW4oIlBPU1QiLCAidmVyaWZpZXJfcGluLnBocCIsIHRydWUpOwogICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgeGhyLnNlbmQoInBpbj0iICsgcGluKTsKICAgIH0KfQoKLy8gLS0tIE1vZGFsIGFjdGlvbnMgZW1wbG95w6kgLS0tCnZhciBzZWxlY3RlZEVtcGxveWVJZCA9IG51bGw7CnZhciBzZWxlY3RlZElzUG9pbnRlZCA9IDA7CnZhciBzZWxlY3RlZEVtcGxveWVQcmVub20gPSAnJzsKCmZ1bmN0aW9uIG9wZW5FbXBsb3llZU1vZGFsKGVtcGxveWVJZCwgaXNQb2ludGVkLCBlbXBsb3llUHJlbm9tKSB7CiAgc2VsZWN0ZWRFbXBsb3llSWQgPSBlbXBsb3llSWQ7CiAgc2VsZWN0ZWRJc1BvaW50ZWQgPSBpc1BvaW50ZWQgPyAxIDogMDsKICBzZWxlY3RlZEVtcGxveWVQcmVub20gPSAodHlwZW9mIGVtcGxveWVQcmVub20gPT09ICdzdHJpbmcnKSA/IGVtcGxveWVQcmVub20gOiAnJzsKCiAgdmFyIHB1bmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlUHVuY2hCdXR0b24nKTsKICBwdW5jaEJ0bi50ZXh0Q29udGVudCA9IChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkgPyAnRMOpcGFydCcgOiAnQXJyaXbDqWUnOwogIGlmIChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkgewogICAgcHVuY2hCdG4uY2xhc3NMaXN0LmFkZCgnaXMtZGVwYXJ0Jyk7CiAgfSBlbHNlIHsKICAgIHB1bmNoQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWRlcGFydCcpOwogIH0KCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlTW9kYWxCYWNrZ3JvdW5kJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlQWN0aW9uTW9kYWwnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKfQoKZnVuY3Rpb24gY2xvc2VFbXBsb3llZU1vZGFsKCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXBsb3llZUFjdGlvbk1vZGFsJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVNb2RhbEJhY2tncm91bmQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIHZhciBwdW5jaEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXBsb3llZVB1bmNoQnV0dG9uJyk7CiAgaWYgKHB1bmNoQnRuKSBwdW5jaEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdpcy1kZXBhcnQnKTsKICBzZWxlY3RlZEVtcGxveWVJZCA9IG51bGw7CiAgc2VsZWN0ZWRJc1BvaW50ZWQgPSAwOwogIHNlbGVjdGVkRW1wbG95ZVByZW5vbSA9ICcnOwp9CgpmdW5jdGlvbiBzdWJtaXRFbXBsb3llZVB1bmNoKCkgewogIGlmICghc2VsZWN0ZWRFbXBsb3llSWQpIHJldHVybjsKCiAgdmFyIHVybCA9IChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkgPyAnZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCcgOiAnZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAnOwogICQuYWpheCh7CiAgICB0eXBlOiAiUE9TVCIsCiAgICB1cmw6IHVybCwKICAgIGRhdGE6IHsgZW1wbG95ZTogc2VsZWN0ZWRFbXBsb3llSWQgfSwKICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgIHZhciBmaXJzdG5hbWVQYXJ0ID0gc2VsZWN0ZWRFbXBsb3llUHJlbm9tID8gKCIgIiArIHNlbGVjdGVkRW1wbG95ZVByZW5vbSkgOiAiIjsKICAgICAgdmFyIG1zZyA9IChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkKICAgICAgICA/ICgiRMOpcGFydCIgKyBmaXJzdG5hbWVQYXJ0ICsgIiBlbnJlZ2lzdHLDqSIpCiAgICAgICAgOiAoIkFycml2w6llIiArIGZpcnN0bmFtZVBhcnQgKyAiIGVucmVnaXN0csOpZSIpOwogICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJpbmRleC5waHA/dG9hc3Q9IiArIGVuY29kZVVSSUNvbXBvbmVudChtc2cpICsgIiZ0b2FzdFR5cGU9c3VjY2VzcyI7CiAgICB9LAogICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIsICJlcnJvciIpOwogICAgICB9IGVsc2UgewogICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KCiBmdW5jdGlvbiBnb1RvRW1wbG95ZWVEZXRhaWxzKCkgewogICBpZiAoIXNlbGVjdGVkRW1wbG95ZUlkKSByZXR1cm47CiAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gInBvaW50YWdlLnBocD9lbXBsb3llPSIgKyBzZWxlY3RlZEVtcGxveWVJZCArICImdmlldz0xIjsKIH0KCjwvc2NyaXB0PgoKPC9ib2R5PgoKPC9odG1sPgogPC9ib2R5PgogCiA8L2h0bWw+"
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 21144,
                "sha1": "e9531fa86e2dee8f602b272137af0763b70bf93b",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvaW5kZXgucGhwIHwgQWZmaWNoZSBsZSB0YWJsZWF1IGRlIHBvaW50YWdlIGRlcyBzYWxhcmnDqXMgZXQgcHJvdMOoZ2UgbOKAmWFjY8OocyB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsIGF2ZWMgYXNzZXRzIGxvY2F1eCB2ZXJzaW9ubsOpcywgc2FucyBNb2Rlcm5penIvUmVzcG9uZCBuaSBCb290c3RyYXAgSlMuIHwgRXhwb3NlOiBvcGVuRW1wbG95ZWVNb2RhbCwgY2xvc2VFbXBsb3llZU1vZGFsLCBzdWJtaXRFbXBsb3llZVB1bmNoLCBnb1RvRW1wbG95ZWVEZXRhaWxzIHwgRMOpcGVuZCBkZTogcG9pbnRhZ2VzL2NvbmZpZy5waHAsIGluY2x1ZGVzL2RldmljZV9hdXRoLnBocCwgaW5jbHVkZXMvYXNzZXRfdmVyc2lvbi5waHAsIGNvbm5leGlvbi5waHAsIGFkbWluLnBocCwgZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAsIGVucmVnaXN0cmVtZW50X2RlcGFydC5waHAsIHBvaW50YWdlLnBocCwganMvdmVuZG9yL2pxdWVyeS0xLjExLjIubWluLmpzLCBqcy9wbHVnaW5zLmpzLCBqcy9tYWluLmpzLCBqcy9kcml2ZXItbW9kYWwuanMgfCBJbXBhY3RlOiBzZXNzaW9uIFBIUCwgY29va2llIGTigJlhcHBhcmVpbCwgcmVkaXJlY3Rpb24gZOKAmWFjY8OocywgbGVjdHVyZSBkZXMgcG9pbnRhZ2VzL2VtcGxvecOpcywgbW9kYWxlcyBVSSBuYXRpdmVzLCBhcHBlbHMgQUpBWCB8IFRhYmxlczogcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyh0b2tlbl9oYXNoLCBhdXRob3JpemVkX2F0LCBsYXN0X3VzZWRfYXQpLCB6X3B0Z19hcXBfdXRpbGlzYXRldXJzKFVzZXJJRCxOb20sUHJlbm9tLFN0YXR1dCksIHpfcHRnX2FxcF9wb2ludGFnZXMoUG9pbnRhZ2VJRCxVc2VySUQsRGF0ZUhldXJlRW50cmVlLERhdGVIZXVyZVNvcnRpZSkgKi8KLy8gRMOpbWFycmFnZSBvdSByZXByaXNlIGRlIGxhIHNlc3Npb24Kc2Vzc2lvbl9zdGFydCgpOwpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCnJlcXVpcmVfb25jZSAiY29uZmlnLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAiOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICIvaW5jbHVkZXMvYXNzZXRfdmVyc2lvbi5waHAiOwpyZXF1aXJlX2RldmljZV9hdXRob3JpemVkKCRwZG8pOwoKPz4KCgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCjx0aXRsZT5Qb2ludGFnZXMgU2FsYXJpw6lzPC90aXRsZT4KCgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9mb250QXdlc29tZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9oZXJvLXNsaWRlci5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy90b29wbGF0ZS1zdHlsZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9zdHlsZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ob21lLWJ1dHRvbnMuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvZHJpdmVyLW1vZGFsLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgoKPC9oZWFkPgoKPGJvZHkgY2xhc3M9InBhZ2UtaW5kZXggdGhlbWUtZGFyayI+CgoKCjxkaXYgaWQ9ImFib3V0IiBjbGFzcz0iIj4KCjxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGluZyI+CjxoMT5Qb2ludGFnZXMgc2FsYXJpw6lzPC9oMT4KPGRpdiBjbGFzcz0ibGluZS1kZWMiPjwvZGl2Pgo8Y2VudGVyPgo8YnI+Cjxmb250IGNvbG9yPSJibGFjayIgc2l6ZT0iNCIgPgo8c3Ryb25nPgo8P3BocAovLyBSw6ljdXDDqHJlIGxlIGRlcm5pZXIgcG9pbnRhZ2UgZGUgY2hhcXVlIGVtcGxvecOpIHBvdXIgZMOpdGVybWluZXIgcydpbCBlc3QgInBvaW50w6kiCiRjdXJyZW50TW9udGggPSAoaW50KWRhdGUoJ24nKTsKJGN1cnJlbnRZZWFyID0gKGludClkYXRlKCdZJyk7CiRub3dQYXJpcyA9IGRhdGUoJ1ktbS1kIEg6aTpzJyk7Cgokc3RtdCA9ICRwZG8tPnByZXBhcmUoIgogIFNFTEVDVAogICAgdS5Vc2VySUQsCiAgICB1Lk5vbSwKICAgIHUuUHJlbm9tLAogICAgcC5EYXRlSGV1cmVFbnRyZWUsCiAgICBwLkRhdGVIZXVyZVNvcnRpZSwKICAgIG1oLnNlY29uZHNfd29ya2VkLAogICAgbWgubWF4X3B1bmNoX3NlY29uZHMKICBGUk9NIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgdQogIExFRlQgSk9JTiB6X3B0Z19hcXBfcG9pbnRhZ2VzIHAKICAgIE9OIHAuUG9pbnRhZ2VJRCA9ICgKICAgICAgU0VMRUNUIHAyLlBvaW50YWdlSUQKICAgICAgRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIHAyCiAgICAgIFdIRVJFIHAyLlVzZXJJRCA9IHUuVXNlcklECiAgICAgIE9SREVSIEJZIHAyLkRhdGVIZXVyZUVudHJlZSBERVNDLCBwMi5Qb2ludGFnZUlEIERFU0MKICAgICAgTElNSVQgMQogICAgKQogIExFRlQgSk9JTiAoCiAgICBTRUxFQ1QKICAgICAgVXNlcklELAogICAgICBTVU0oCiAgICAgICAgVElNRVNUQU1QRElGRigKICAgICAgICAgIFNFQ09ORCwKICAgICAgICAgIERhdGVIZXVyZUVudHJlZSwKICAgICAgICAgIENPQUxFU0NFKERhdGVIZXVyZVNvcnRpZSwgOm5vd1BhcmlzU3VtKQogICAgICAgICkKICAgICAgKSBBUyBzZWNvbmRzX3dvcmtlZCwKICAgICAgTUFYKAogICAgICAgIFRJTUVTVEFNUERJRkYoCiAgICAgICAgICBTRUNPTkQsCiAgICAgICAgICBEYXRlSGV1cmVFbnRyZWUsCiAgICAgICAgICBDT0FMRVNDRShEYXRlSGV1cmVTb3J0aWUsIDpub3dQYXJpc01heCkKICAgICAgICApCiAgICAgICkgQVMgbWF4X3B1bmNoX3NlY29uZHMKICAgIEZST00gel9wdGdfYXFwX3BvaW50YWdlcwogICAgV0hFUkUgTU9OVEgoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50TW9udGgKICAgICAgQU5EIFlFQVIoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50WWVhcgogICAgR1JPVVAgQlkgVXNlcklECiAgKSBtaCBPTiBtaC5Vc2VySUQgPSB1LlVzZXJJRAogIFdIRVJFIHUuU3RhdHV0ID0gJ2FjdGlmJwoiKTsKJHN0bXQtPmV4ZWN1dGUoWwogICc6bm93UGFyaXNTdW0nID0+ICRub3dQYXJpcywKICAnOm5vd1BhcmlzTWF4JyA9PiAkbm93UGFyaXMsCiAgJzpjdXJyZW50TW9udGgnID0+ICRjdXJyZW50TW9udGgsCiAgJzpjdXJyZW50WWVhcicgPT4gJGN1cnJlbnRZZWFyLApdKTsKJGVtcGxveWVzQWN0aWZzID0gJHN0bXQtPmZldGNoQWxsKFBETzo6RkVUQ0hfQVNTT0MpOwoKZWNobyAnPHRhYmxlIGNsYXNzPSJlbXBsb3llZS1ncmlkIj4nOwokY29tcHRldXIgPSAwOwoKZm9yZWFjaCAoJGVtcGxveWVzQWN0aWZzIGFzICRlbXBsb3llKSB7CiAgLy8gTG9naXF1ZSBzaW1pbGFpcmUgcG91ciBhZmZpY2hlciBsZXMgZW1wbG95w6lzCiAgaWYgKCRjb21wdGV1ciAlIDIgPT0gMCkgewogICAgZWNobyAnPHRyPic7CiAgfQogICRub21SYXcgPSBpc3NldCgkZW1wbG95ZVsnTm9tJ10pID8gKHN0cmluZykkZW1wbG95ZVsnTm9tJ10gOiAnJzsKICAkcHJlbm9tUmF3ID0gaXNzZXQoJGVtcGxveWVbJ1ByZW5vbSddKSA/IChzdHJpbmcpJGVtcGxveWVbJ1ByZW5vbSddIDogJyc7CiAgJG5vbSA9IG1iX3N0cnRvdXBwZXIoJG5vbVJhdywgJ1VURi04Jyk7CiAgJHByZW5vbSA9IG1iX3N0cnRvdXBwZXIoJHByZW5vbVJhdywgJ1VURi04Jyk7CiAgJHByZW5vbUpzID0gaHRtbHNwZWNpYWxjaGFycygKICAgIGpzb25fZW5jb2RlKCRwcmVub21SYXcsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUgfCBKU09OX0hFWF9UQUcgfCBKU09OX0hFWF9BTVAgfCBKU09OX0hFWF9BUE9TIHwgSlNPTl9IRVhfUVVPVCksCiAgICBFTlRfUVVPVEVTLAogICAgJ1VURi04JwogICk7CgogIC8vIFVuIGVtcGxvecOpIGVzdCAicG9pbnTDqSIgcydpbCBhIHVuIGRlcm5pZXIgcG9pbnRhZ2UgZG9udCBEYXRlSGV1cmVTb3J0aWUgZXN0IE5VTEwKICAvLyAoZXQgcXUnaWwgZXhpc3RlIGJpZW4gdW5lIERhdGVIZXVyZUVudHJlZSkuCiAgJGlzUG9pbnRlZCA9ICghZW1wdHkoJGVtcGxveWVbJ0RhdGVIZXVyZUVudHJlZSddKSAmJiAkZW1wbG95ZVsnRGF0ZUhldXJlU29ydGllJ10gPT09IG51bGwpOwoKICAvLyBEw6l0ZWN0aW9uICJwb2ludGFnZSA+IDhIIiA6CiAgLy8gLSB2aWEgbGEgZHVyw6llIG1heCBkZXMgcG9pbnRhZ2VzIGR1IG1vaXMgKG1heF9wdW5jaF9zZWNvbmRzKSwKICAvLyAtIGV0IHZpYSBsZSBkZXJuaWVyIHBvaW50YWdlIChlbiBjb3VycyBvdSB0ZXJtaW7DqSksIG3Dqm1lIHMnaWwgZXN0IGhvcnMgbW9pcyAoY2FzIHJhcmUsIG1haXMgcm9idXN0ZSkuCiAgJG1heFB1bmNoU2Vjb25kcyA9IGlzc2V0KCRlbXBsb3llWydtYXhfcHVuY2hfc2Vjb25kcyddKSA/IChpbnQpJGVtcGxveWVbJ21heF9wdW5jaF9zZWNvbmRzJ10gOiAwOwogICRsYXN0UHVuY2hTZWNvbmRzID0gMDsKICBpZiAoIWVtcHR5KCRlbXBsb3llWydEYXRlSGV1cmVFbnRyZWUnXSkpIHsKICAgICRzdGFydFRzID0gc3RydG90aW1lKCRlbXBsb3llWydEYXRlSGV1cmVFbnRyZWUnXSk7CiAgICAkZW5kVHMgPSAoJGVtcGxveWVbJ0RhdGVIZXVyZVNvcnRpZSddID09PSBudWxsIHx8ICRlbXBsb3llWydEYXRlSGV1cmVTb3J0aWUnXSA9PT0gJycpCiAgICAgID8gc3RydG90aW1lKCRub3dQYXJpcykKICAgICAgOiBzdHJ0b3RpbWUoJGVtcGxveWVbJ0RhdGVIZXVyZVNvcnRpZSddKTsKICAgIGlmICgkc3RhcnRUcyAhPT0gZmFsc2UgJiYgJGVuZFRzICE9PSBmYWxzZSAmJiAkZW5kVHMgPj0gJHN0YXJ0VHMpIHsKICAgICAgJGxhc3RQdW5jaFNlY29uZHMgPSAoaW50KSgkZW5kVHMgLSAkc3RhcnRUcyk7CiAgICB9CiAgfQogICRoYXNQdW5jaE92ZXI4aCA9ICgkbWF4UHVuY2hTZWNvbmRzID49IDI4ODAwKSB8fCAoJGxhc3RQdW5jaFNlY29uZHMgPj0gMjg4MDApOwoKICAkYnRuQ2xhc3MgPSAkaXNQb2ludGVkID8gJ2VtcGxveWVlLWJ0biBzdGF0dXMtcG9pbnRlZCcgOiAnZW1wbG95ZWUtYnRuIHN0YXR1cy1kZXBvaW50ZWQnOwogIGlmICgkaGFzUHVuY2hPdmVyOGgpIHsKICAgICRidG5DbGFzcyAuPSAnIHN0YXR1cy1wcm9ibGVtJzsKICB9CiAgLy8gSWPDtG5lIHVuaXF1ZW1lbnQgcXVhbmQgcG9pbnTDqQogICRpY29uSHRtbCA9ICcnOwogIGlmICgkaXNQb2ludGVkKSB7CiAgICAkaWNvbkh0bWwgPSAnPGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSBzdGF0dXMtaWNvbiIgYXJpYS1oaWRkZW49InRydWUiIHRpdGxlPSJQb2ludMOpIj48L2k+JzsKICB9CgogICRzZWNvbmRzV29ya2VkID0gaXNzZXQoJGVtcGxveWVbJ3NlY29uZHNfd29ya2VkJ10pID8gKGZsb2F0KSRlbXBsb3llWydzZWNvbmRzX3dvcmtlZCddIDogMC4wOwogICRtb250aEhvdXJzID0gJHNlY29uZHNXb3JrZWQgPiAwID8gKCRzZWNvbmRzV29ya2VkIC8gMzYwMCkgOiAwLjA7CiAgJG1vbnRoSG91cnNUZXh0ID0gbnVtYmVyX2Zvcm1hdCgkbW9udGhIb3VycywgMiwgJy4nLCAnJykgLiAnSCc7CiAgJG1vbnRoSG91cnNIdG1sID0gJzxzcGFuIGNsYXNzPSJtb250aC1ob3VycyI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJG1vbnRoSG91cnNUZXh0LCBFTlRfUVVPVEVTLCAnVVRGLTgnKSAuICc8L3NwYW4+JzsKCiAgZWNobyAnPHRkIGNsYXNzPSJlbXBsb3llZS1ncmlkLWNlbGwiPicKICAgICAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IicgLiAkYnRuQ2xhc3MgLiAnIiBvbmNsaWNrPSJvcGVuRW1wbG95ZWVNb2RhbCgnIC4gKGludCkkZW1wbG95ZVsnVXNlcklEJ10gLiAnLCAnIC4gKCRpc1BvaW50ZWQgPyAnMScgOiAnMCcpIC4gJywgJyAuICRwcmVub21KcyAuICcpIj4nCiAgICAgLiAkaWNvbkh0bWwKICAgICAuICc8c3BhbiBjbGFzcz0iZW1wbG95ZWUtbmFtZSI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJG5vbSwgRU5UX1FVT1RFUywgJ1VURi04JykgLiAnPC9zcGFuPicKICAgICAuICc8c3BhbiBjbGFzcz0iZW1wbG95ZWUtZmlyc3RuYW1lIj4nIC4gaHRtbHNwZWNpYWxjaGFycygkcHJlbm9tLCBFTlRfUVVPVEVTLCAnVVRGLTgnKSAuICc8L3NwYW4+JwogICAgIC4gJG1vbnRoSG91cnNIdG1sCiAgICAgLiAnPC9idXR0b24+JwogICAgIC4gJzwvdGQ+JzsKCiAgaWYgKCRjb21wdGV1ciAlIDIgPT0gMSkgewogICAgZWNobyAnPC90cj4nOwogIH0KICAkY29tcHRldXIrKzsKfQogCiBlY2hvICc8L3RhYmxlPic7CiA/PgogCiA8ZGl2IGNsYXNzPSJkcml2ZXItcGhvbmUtYWN0aW9ucyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW46MThweCAwIDZweDsiPgogICA8YnV0dG9uCiAgICAgdHlwZT0iYnV0dG9uIgogICAgIGlkPSJkcml2ZXJQaG9uZUJ1dHRvbiIKICAgICBjbGFzcz0iZHJpdmVyLXBob25lLXRyaWdnZXIiCiAgICAgb25jbGljaz0ib3BlbkRyaXZlclBob25lTW9kYWwoKSIKICAgPgogICAgIEVudm95ZXIgU01TIGxpdnJldXIKICAgPC9idXR0b24+CiA8L2Rpdj4KCiA8L3N0cm9uZz4KIDwvZm9udD4KIDwvY2VudGVyPgogPC9kaXY+CiA8L2Rpdj4KCgo8YnI+PGJyPgoKPHA+PGEgaHJlZj0iYWRtaW4ucGhwIj5HZXN0aW9uIGVtcGxvecOpczwvYT48L3A+PGJyPgoKCgoKCjwvZGl2PgoKCgoKPCEtLSBNb2RhbCBQSU4gKGRlc2lnbiByZWZhaXQpIC0tPgo8ZGl2IGlkPSJtb2RhbEJhY2tncm91bmQiIG9uY2xpY2s9ImNsb3NlUGluTW9kYWwoKSIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pgo8ZGl2IGlkPSJwaW5Nb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9InBpbk1vZGFsVGl0bGUiPgogIDxmb3JtIGlkPSJwaW5Gb3JtIiBvbnN1Ym1pdD0idmVyaWZpZXJQaW4oKTsgcmV0dXJuIGZhbHNlOyI+CiAgICA8aDIgaWQ9InBpbk1vZGFsVGl0bGUiIGNsYXNzPSJwaW4tbW9kYWwtdGl0bGUiPkNvZGUgUElOPC9oMj4KICAgIDxwIGNsYXNzPSJwaW4tbW9kYWwtc3VidGl0bGUiPlNhaXNpc3NleiB2b3RyZSBjb2RlIMOgIDQgY2hpZmZyZXM8L3A+CgogICAgPGRpdiBjbGFzcz0icGluLWlucHV0LXdyYXBwZXIiIG9uY2xpY2s9ImZvY3VzUGluSW5wdXQoKSI+CiAgICAgIDxsYWJlbCBmb3I9InBpbklucHV0IiBjbGFzcz0ic3Itb25seSI+Q29kZSBQSU4gKDQgY2hpZmZyZXMpPC9sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0icGluLWJveGVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjAiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBpbi1ib3giIGRhdGEtaWR4PSIxIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMiI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjMiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGlucHV0CiAgICAgICAgdHlwZT0idGVsIgogICAgICAgIGlkPSJwaW5JbnB1dCIKICAgICAgICBjbGFzcz0icGluLWhpZGRlbi1pbnB1dCIKICAgICAgICBpbnB1dG1vZGU9Im51bWVyaWMiCiAgICAgICAgcGF0dGVybj0iWzAtOV0qIgogICAgICAgIG1heGxlbmd0aD0iNCIKICAgICAgICBhdXRvY29tcGxldGU9Im9mZiIKICAgICAgICBhdXRvY2FwaXRhbGl6ZT0ib2ZmIgogICAgICAgIGF1dG9jb3JyZWN0PSJvZmYiCiAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiCiAgICAgICAgdGl0bGU9IlNldWxlbWVudCBkZXMgY2hpZmZyZXMuIgogICAgICAgIHZhbHVlPSIiCiAgICAgID4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InBpbi1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwaW4tbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VQaW5Nb2RhbCgpIj5Bbm51bGVyPC9idXR0b24+CiAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0icGluLW1vZGFsLWJ0biBjb25maXJtIj5WYWxpZGVyPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Zvcm0+CjwvZGl2PgoKPCEtLSBNb2RhbCBBY3Rpb25zIEVtcGxvecOpIChBcnJpdsOpZS9Ew6lwYXJ0ICsgVm9pciBkw6l0YWlsKSAtLT4KPGRpdiBpZD0iZW1wbG95ZWVNb2RhbEJhY2tncm91bmQiIG9uY2xpY2s9ImNsb3NlRW1wbG95ZWVNb2RhbCgpIj48L2Rpdj4KPGRpdiBpZD0iZW1wbG95ZWVBY3Rpb25Nb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9ImVtcGxveWVlQWN0aW9uVGl0bGUiPgogIDxoMiBpZD0iZW1wbG95ZWVBY3Rpb25UaXRsZSI+QWN0aW9uczwvaDI+CiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJlbXBsb3llZVB1bmNoQnV0dG9uIiBjbGFzcz0iZW1wbG95ZWUtbW9kYWwtYnRuIHB1bmNoIiBvbmNsaWNrPSJzdWJtaXRFbXBsb3llZVB1bmNoKCkiPjwvYnV0dG9uPgogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZW1wbG95ZWUtbW9kYWwtYnRuIGRldGFpbHMiIG9uY2xpY2s9ImdvVG9FbXBsb3llZURldGFpbHMoKSI+Vm9pciBkw6l0YWlsIGRlcyBoZXVyZXM8L2J1dHRvbj4KPC9kaXY+Cgo8IS0tIE1vZGFsIExpdnJldXIgKHPDqWxlY3Rpb24gKyBlbnZvaSBTTVMpIC0tPgo8ZGl2IGlkPSJkcml2ZXJNb2RhbEJhY2tncm91bmQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYmFja2Ryb3AiIG9uY2xpY2s9ImNsb3NlRHJpdmVyUGhvbmVNb2RhbCgpIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CjxkaXYgaWQ9ImRyaXZlclBob25lTW9kYWwiIGNsYXNzPSJkcml2ZXItbW9kYWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJkcml2ZXJQaG9uZU1vZGFsVGl0bGUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICA8Zm9ybSBpZD0iZHJpdmVyUGhvbmVGb3JtIiBvbnN1Ym1pdD0ic3VibWl0RHJpdmVyUGhvbmUoKTsgcmV0dXJuIGZhbHNlOyI+CiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtaGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWhlYWRlci10ZXh0Ij4KICAgICAgICA8aDIgaWQ9ImRyaXZlclBob25lTW9kYWxUaXRsZSIgY2xhc3M9ImRyaXZlci1tb2RhbC10aXRsZSI+RW52b3llciBTTVMgbGl2cmV1cjwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRyaXZlci1tb2RhbC1zdWJ0aXRsZSI+U8OpbGVjdGlvbm5leiB1biBsaXZyZXVyIHBvdXIgbGUgcG9pbnQgZGUgdmVudGUgZGUgbOKAmWFwcGFyZWlsPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtY2xvc2UiIG9uY2xpY2s9ImNsb3NlRHJpdmVyUGhvbmVNb2RhbCgpIiBhcmlhLWxhYmVsPSJGZXJtZXIiPsOXPC9idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJTZWxlY3QiIGNsYXNzPSJkcml2ZXItbGFiZWwiPkxpdnJldXI8L2xhYmVsPgogICAgICA8c2VsZWN0IGlkPSJkcml2ZXJTZWxlY3QiIGNsYXNzPSJkcml2ZXItc2VsZWN0IiByZXF1aXJlZD4KICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPkNoYXJnZW1lbnQgZGVzIGxpdnJldXJz4oCmPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PgogICAgICA8c21hbGwgaWQ9ImRyaXZlclNlbGVjdGVkUGhvbmVIZWxwIiBjbGFzcz0iZHJpdmVyLWhlbHAiPlPDqWxlY3Rpb25uZXogdW4gbGl2cmV1ciBwb3VyIGFmZmljaGVyIHNvbiBudW3DqXJvLjwvc21hbGw+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJQb2ludFZlbnRlIiBjbGFzcz0iZHJpdmVyLWxhYmVsIj5Qb2ludCBkZSB2ZW50ZTwvbGFiZWw+CiAgICAgIDxzZWxlY3QgaWQ9ImRyaXZlclBvaW50VmVudGUiIGNsYXNzPSJkcml2ZXItc2VsZWN0IiBkaXNhYmxlZD4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJsYW5jb24iPkxhbsOnb248L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJwZWxpc3Nhbm5lIj5Qw6lsaXNzYW5uZTwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIGRyaXZlci1tb2RhbC1hY3Rpb25zLXNwbGl0Ij4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIHNlY29uZGFyeSIgb25jbGljaz0ib3BlbkRyaXZlck1hbmFnZU1vZGFsKCkiPkfDqXJlciBsZXMgbGl2cmV1cnM8L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VEcml2ZXJQaG9uZU1vZGFsKCkiPkFubnVsZXI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNvbmZpcm0iPkVudm95ZXIgU01TPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Zvcm0+CjwvZGl2PgoKPCEtLSBNb2RhbCBnZXN0aW9uIGxpdnJldXJzIC0tPgo8ZGl2IGlkPSJkcml2ZXJNYW5hZ2VNb2RhbEJhY2tncm91bmQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYmFja2Ryb3AiIG9uY2xpY2s9ImNsb3NlRHJpdmVyTWFuYWdlTW9kYWwoKSIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pgo8ZGl2IGlkPSJkcml2ZXJNYW5hZ2VNb2RhbCIgY2xhc3M9ImRyaXZlci1tb2RhbCBkcml2ZXItbWFuYWdlLW1vZGFsIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiIGFyaWEtbGFiZWxsZWRieT0iZHJpdmVyTWFuYWdlTW9kYWxUaXRsZSIgYXJpYS1oaWRkZW49InRydWUiPgogIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1oZWFkZXIiPgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWhlYWRlci10ZXh0Ij4KICAgICAgPGgyIGlkPSJkcml2ZXJNYW5hZ2VNb2RhbFRpdGxlIiBjbGFzcz0iZHJpdmVyLW1vZGFsLXRpdGxlIj5Hw6lyZXIgbGVzIGxpdnJldXJzPC9oMj4KICAgICAgPHAgY2xhc3M9ImRyaXZlci1tb2RhbC1zdWJ0aXRsZSI+QWpvdXQsIG1vZGlmaWNhdGlvbiBldCBzdXBwcmVzc2lvbiBwb3VyIGxlIHBvaW50IGRlIHZlbnRlIGNvdXJhbnQ8L3A+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWNsb3NlIiBvbmNsaWNrPSJjbG9zZURyaXZlck1hbmFnZU1vZGFsKCkiIGFyaWEtbGFiZWw9IkZlcm1lciI+w5c8L2J1dHRvbj4KICA8L2Rpdj4KCiAgPGZvcm0gaWQ9ImRyaXZlck1hbmFnZUZvcm0iPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImRyaXZlck1hbmFnZU1vZGUiIHZhbHVlPSJjcmVhdGUiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImRyaXZlckVkaXRPcmlnaW5hbFBob25lIiB2YWx1ZT0iIj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJNYW5hZ2VTZWxlY3QiIGNsYXNzPSJkcml2ZXItbGFiZWwiPkxpdnJldXIgZXhpc3RhbnQ8L2xhYmVsPgogICAgICA8c2VsZWN0IGlkPSJkcml2ZXJNYW5hZ2VTZWxlY3QiIGNsYXNzPSJkcml2ZXItc2VsZWN0Ij4KICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPk5vdXZlYXUgbGl2cmV1cjwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1maWVsZCI+CiAgICAgIDxsYWJlbCBmb3I9ImRyaXZlck1hbmFnZU5hbWUiIGNsYXNzPSJkcml2ZXItbGFiZWwiPk5vbSBhZmZpY2jDqTwvbGFiZWw+CiAgICAgIDxpbnB1dAogICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgaWQ9ImRyaXZlck1hbmFnZU5hbWUiCiAgICAgICAgY2xhc3M9ImRyaXZlci1pbnB1dCIKICAgICAgICBtYXhsZW5ndGg9IjEyMCIKICAgICAgICBwbGFjZWhvbGRlcj0iRXg6IEthcmltIgogICAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIgogICAgICA+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJNYW5hZ2VQaG9uZSIgY2xhc3M9ImRyaXZlci1sYWJlbCI+VMOpbMOpcGhvbmU8L2xhYmVsPgogICAgICA8aW5wdXQKICAgICAgICB0eXBlPSJ0ZWwiCiAgICAgICAgaWQ9ImRyaXZlck1hbmFnZVBob25lIgogICAgICAgIGNsYXNzPSJkcml2ZXItaW5wdXQiCiAgICAgICAgaW5wdXRtb2RlPSJudW1lcmljIgogICAgICAgIHBhdHRlcm49IlswLTldKiIKICAgICAgICBtYXhsZW5ndGg9IjE2IgogICAgICAgIHBsYWNlaG9sZGVyPSJFeDogMDYxODUyOTM3NSIKICAgICAgICBhdXRvY29tcGxldGU9Im9mZiIKICAgICAgICBhdXRvY2FwaXRhbGl6ZT0ib2ZmIgogICAgICAgIGF1dG9jb3JyZWN0PSJvZmYiCiAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiCiAgICAgID4KICAgICAgPHNtYWxsIGNsYXNzPSJkcml2ZXItaGVscCI+Rm9ybWF0IGFjY2VwdMOpIDogMDYxODUyOTM3NSwgMzM2MTg1MjkzNzUgb3UgMDAzMzYxODUyOTM3NS48L3NtYWxsPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWFjdGlvbnMiPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImRyaXZlci1tb2RhbC1idG4gZGFuZ2VyIiBvbmNsaWNrPSJkZWxldGVTZWxlY3RlZERyaXZlcigpIj5TdXBwcmltZXI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNvbmZpcm0iPkVucmVnaXN0cmVyPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VEcml2ZXJNYW5hZ2VNb2RhbCgpIj5GZXJtZXI8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZm9ybT4KPC9kaXY+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvcGx1Z2lucy5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy9tYWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2pzL2RyaXZlci1tb2RhbC5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAKICAvLyBuYXZpZ2F0aW9uIGNsaWNrIGFjdGlvbnMgCiAgCiAgJCgnLnNjcm9sbC1saW5rJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpewogICAgCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgCiAgICB2YXIgc2VjdGlvbklEID0gJCh0aGlzKS5hdHRyKCJkYXRhLWlkIik7CiAgICAKICAgIHNjcm9sbFRvSUQoJyMnICsgc2VjdGlvbklELCA3NTApOwogICAgCiAgfSk7CiAgCiAgLy8gc2Nyb2xsIHRvIHRvcCBhY3Rpb24KICAKICAkKCcuc2Nyb2xsLXRvcCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAKICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6MH0sICdzbG93Jyk7ICAgICAgICAgCiAgICAKICB9KTsKICAKICAvLyBtb2JpbGUgbmF2IHRvZ2dsZQogIAogICQoJyNuYXYtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAKICAgICQoJyNtYWluLW5hdicpLnRvZ2dsZUNsYXNzKCJvcGVuIik7CiAgICAKICB9KTsKICAKfSk7CgovLyBzY3JvbGwgZnVuY3Rpb24KCmZ1bmN0aW9uIHNjcm9sbFRvSUQoaWQsIHNwZWVkKXsKICAKICB2YXIgb2ZmU2V0ID0gNTA7CiAgCiAgdmFyIHRhcmdldE9mZnNldCA9ICQoaWQpLm9mZnNldCgpLnRvcCAtIG9mZlNldDsKICAKICB2YXIgbWFpbk5hdiA9ICQoJyNtYWluLW5hdicpOwogIAogICQoJ2h0bWwsYm9keScpLmFuaW1hdGUoe3Njcm9sbFRvcDp0YXJnZXRPZmZzZXR9LCBzcGVlZCk7CiAgCiAgaWYgKG1haW5OYXYuaGFzQ2xhc3MoIm9wZW4iKSkgewogICAgCiAgICBtYWluTmF2LmNzcygiaGVpZ2h0IiwgIjFweCIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJjb2xsYXBzZSIpOwogICAgCiAgICBtYWluTmF2LnJlbW92ZUNsYXNzKCJvcGVuIik7CiAgICAKICB9CiAgCn0KCmlmICh0eXBlb2YgY29uc29sZSA9PT0gInVuZGVmaW5lZCIpIHsKICAKICBjb25zb2xlID0gewogICAgCiAgICBsb2c6IGZ1bmN0aW9uKCkgeyB9CiAgICAKICB9OwogIAp9CgoKZnVuY3Rpb24gYWZmaWNoZXJNb2RhbCgpIHsKICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImFkbWluLnBocCI7Cn0KCgovL2Z1bmN0aW9uIGFmZmljaGVyTW9kYWwocG9pbnRhZ2VJZCkgewogIC8vIEVucmVnaXN0cmV6IGwnSUQgZHUgcG9pbnRhZ2UgcG91ciBsJ3V0aWxpc2VyIHBsdXMgdGFyZAogIC8vd2luZG93LnBvaW50YWdlSWRQb3VyTW9kaWZpY2F0aW9uID0gcG9pbnRhZ2VJZDsKICAvLyBBZmZpY2hleiBsYSBmZW7DqnRyZSBtb2RhbGUKICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwovL30KCmZ1bmN0aW9uIHNhbml0aXplUGluVmFsdWUodmFsKSB7CiAgcmV0dXJuIFN0cmluZyh2YWwgfHwgJycpLnJlcGxhY2UoL1xEL2csICcnKS5zbGljZSgwLCA0KTsKfQoKZnVuY3Rpb24gdXBkYXRlUGluQm94ZXMocGluKSB7CiAgdmFyIGJveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3Bpbk1vZGFsIC5waW4tYm94Jyk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3hlcy5sZW5ndGg7IGkrKykgewogICAgYm94ZXNbaV0udGV4dENvbnRlbnQgPSAoaSA8IHBpbi5sZW5ndGgpID8gJ+KYhScgOiAnJzsKICB9Cn0KCmZ1bmN0aW9uIGZvY3VzUGluSW5wdXQoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKCFpbnB1dCkgcmV0dXJuOwogIHRyeSB7IGlucHV0LmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9Cn0KCmZ1bmN0aW9uIHJlc2V0UGluTW9kYWwoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKGlucHV0KSBpbnB1dC52YWx1ZSA9ICcnOwogIHVwZGF0ZVBpbkJveGVzKCcnKTsKfQoKZnVuY3Rpb24gb3BlblBpbk1vZGFsKCkgewogIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpOwogIHZhciBiZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJhY2tncm91bmQnKTsKICBpZiAoIW1vZGFsIHx8ICFiZykgcmV0dXJuOwoKICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBiZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICByZXNldFBpbk1vZGFsKCk7CgogIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgZm9jdXNQaW5JbnB1dCgpOwogIH0sIDEwKTsKfQoKZnVuY3Rpb24gY2xvc2VQaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKG1vZGFsKSBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGlmIChiZykgYmcuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICByZXNldFBpbk1vZGFsKCk7Cn0KCi8vIEJpbmQgaW5wdXQgb25jZSAoZGlnaXRzIG9ubHkgKyBzeW5jIFVJIGJveGVzKQooZnVuY3Rpb24gYmluZFBpbk9uY2UoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKCFpbnB1dCB8fCBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnKSA9PT0gJzEnKSByZXR1cm47CiAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJywgJzEnKTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgdmFyIGNsZWFuID0gc2FuaXRpemVQaW5WYWx1ZShpbnB1dC52YWx1ZSk7CiAgICBpZiAoaW5wdXQudmFsdWUgIT09IGNsZWFuKSBpbnB1dC52YWx1ZSA9IGNsZWFuOwogICAgdXBkYXRlUGluQm94ZXMoY2xlYW4pOwogIH0pOwogIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICB2YXIga2V5ID0gZS5rZXkgfHwgJyc7CiAgICBpZiAoa2V5ID09PSAnRXNjYXBlJykgewogICAgICBjbG9zZVBpbk1vZGFsKCk7CiAgICB9CiAgfSk7Cn0pKCk7CgpmdW5jdGlvbiB2ZXJpZmllclBpbigpIHsKICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogICAgdmFyIHBpbiA9IHNhbml0aXplUGluVmFsdWUoaW5wdXQgPyBpbnB1dC52YWx1ZSA6ICcnKTsKICAgIGlmIChpbnB1dCAmJiBpbnB1dC52YWx1ZSAhPT0gcGluKSBpbnB1dC52YWx1ZSA9IHBpbjsKICAgIHVwZGF0ZVBpbkJveGVzKHBpbik7CgogICAgaWYgKHBpbi5sZW5ndGggIT09IDQpIHsKICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVudHJleiB1biBjb2RlIFBJTiDDoCA0IGNoaWZmcmVzLiIsICJlcnJvciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhbGVydCgiRW50cmV6IHVuIGNvZGUgUElOIMOgIDQgY2hpZmZyZXMuIik7CiAgICAgICAgfQogICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocGluKSB7CiAgICAgICAgLy8gRW52b2kgZHUgY29kZSBQSU4gw6AgdW4gc2NyaXB0IFBIUCBwb3VyIHbDqXJpZmljYXRpb24KICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXNwb25zZVRleHQgPT0gIk9LIikgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImFkbWluLnBocCI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIsICJlcnJvciIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXNldFBpbk1vZGFsKCk7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgZm9jdXNQaW5JbnB1dCgpOyB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB4aHIub3BlbigiUE9TVCIsICJ2ZXJpZmllcl9waW4ucGhwIiwgdHJ1ZSk7CiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKICAgICAgICB4aHIuc2VuZCgicGluPSIgKyBwaW4pOwogICAgfQp9CgovLyAtLS0gTW9kYWwgYWN0aW9ucyBlbXBsb3nDqSAtLS0KdmFyIHNlbGVjdGVkRW1wbG95ZUlkID0gbnVsbDsKdmFyIHNlbGVjdGVkSXNQb2ludGVkID0gMDsKdmFyIHNlbGVjdGVkRW1wbG95ZVByZW5vbSA9ICcnOwoKZnVuY3Rpb24gb3BlbkVtcGxveWVlTW9kYWwoZW1wbG95ZUlkLCBpc1BvaW50ZWQsIGVtcGxveWVQcmVub20pIHsKICBzZWxlY3RlZEVtcGxveWVJZCA9IGVtcGxveWVJZDsKICBzZWxlY3RlZElzUG9pbnRlZCA9IGlzUG9pbnRlZCA/IDEgOiAwOwogIHNlbGVjdGVkRW1wbG95ZVByZW5vbSA9ICh0eXBlb2YgZW1wbG95ZVByZW5vbSA9PT0gJ3N0cmluZycpID8gZW1wbG95ZVByZW5vbSA6ICcnOwoKICB2YXIgcHVuY2hCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVQdW5jaEJ1dHRvbicpOwogIHB1bmNoQnRuLnRleHRDb250ZW50ID0gKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKSA/ICdEw6lwYXJ0JyA6ICdBcnJpdsOpZSc7CiAgaWYgKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKSB7CiAgICBwdW5jaEJ0bi5jbGFzc0xpc3QuYWRkKCdpcy1kZXBhcnQnKTsKICB9IGVsc2UgewogICAgcHVuY2hCdG4uY2xhc3NMaXN0LnJlbW92ZSgnaXMtZGVwYXJ0Jyk7CiAgfQoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVNb2RhbEJhY2tncm91bmQnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVBY3Rpb25Nb2RhbCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwp9CgpmdW5jdGlvbiBjbG9zZUVtcGxveWVlTW9kYWwoKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlQWN0aW9uTW9kYWwnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXBsb3llZU1vZGFsQmFja2dyb3VuZCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgdmFyIHB1bmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlUHVuY2hCdXR0b24nKTsKICBpZiAocHVuY2hCdG4pIHB1bmNoQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWRlcGFydCcpOwogIHNlbGVjdGVkRW1wbG95ZUlkID0gbnVsbDsKICBzZWxlY3RlZElzUG9pbnRlZCA9IDA7CiAgc2VsZWN0ZWRFbXBsb3llUHJlbm9tID0gJyc7Cn0KCmZ1bmN0aW9uIHN1Ym1pdEVtcGxveWVlUHVuY2goKSB7CiAgaWYgKCFzZWxlY3RlZEVtcGxveWVJZCkgcmV0dXJuOwoKICB2YXIgdXJsID0gKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKSA/ICdlbnJlZ2lzdHJlbWVudF9kZXBhcnQucGhwJyA6ICdlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCc7CiAgJC5hamF4KHsKICAgIHR5cGU6ICJQT1NUIiwKICAgIHVybDogdXJsLAogICAgZGF0YTogeyBlbXBsb3llOiBzZWxlY3RlZEVtcGxveWVJZCB9LAogICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgdmFyIGZpcnN0bmFtZVBhcnQgPSBzZWxlY3RlZEVtcGxveWVQcmVub20gPyAoIiAiICsgc2VsZWN0ZWRFbXBsb3llUHJlbm9tKSA6ICIiOwogICAgICB2YXIgbXNnID0gKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKQogICAgICAgID8gKCJEw6lwYXJ0IiArIGZpcnN0bmFtZVBhcnQgKyAiIGVucmVnaXN0csOpIikKICAgICAgICA6ICgiQXJyaXbDqWUiICsgZmlyc3RuYW1lUGFydCArICIgZW5yZWdpc3Ryw6llIik7CiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImluZGV4LnBocD90b2FzdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAiJnRvYXN0VHlwZT1zdWNjZXNzIjsKICAgIH0sCiAgICBlcnJvcjogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIiwgImVycm9yIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxlcnQoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIik7CiAgICAgIH0KICAgIH0KICB9KTsKfQoKIGZ1bmN0aW9uIGdvVG9FbXBsb3llZURldGFpbHMoKSB7CiAgIGlmICghc2VsZWN0ZWRFbXBsb3llSWQpIHJldHVybjsKICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAicG9pbnRhZ2UucGhwP2VtcGxveWU9IiArIHNlbGVjdGVkRW1wbG95ZUlkICsgIiZ2aWV3PTEiOwogfQoKPC9zY3JpcHQ+Cgo8L2JvZHk+Cgo8L2h0bWw+"
            }
        },
        {
            "path": "pointages/js/driver-modal.js",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 18432,
                "sha1": "9d96ad21c47e667794579464e00ea7c6cd887760",
                "content_b64": "LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvanMvZHJpdmVyLW1vZGFsLmpzIHwgR8OocmUgbOKAmW91dmVydHVyZSBkZXMgbW9kYWxlcyBsaXZyZXVyLCBsZSBjaGFyZ2VtZW50IEpTT04gcGFyIHBvaW50IGRlIHZlbnRlLCBs4oCZZW52b2kgU01TIGV0IGzigJlhZG1pbmlzdHJhdGlvbiBkZXMgbGl2cmV1cnMuIHwgRXhwb3NlOiBvcGVuRHJpdmVyUGhvbmVNb2RhbCwgY2xvc2VEcml2ZXJQaG9uZU1vZGFsLCBzdWJtaXREcml2ZXJQaG9uZSwgb3BlbkRyaXZlck1hbmFnZU1vZGFsLCBjbG9zZURyaXZlck1hbmFnZU1vZGFsLCBzYXZlRHJpdmVyTWFuYWdlckZvcm0sIGRlbGV0ZVNlbGVjdGVkRHJpdmVyIHwgRMOpcGVuZCBkZTogalF1ZXJ5LCBhcGkvbGl2cmV1cnMucGhwLCBlbnJlZ2lzdHJlcl9saXZyZXVyLnBocCwgd2luZG93LmFwcERldmljZVBvaW50VmVudGUsIHdpbmRvdy5vcGVuRGV2aWNlUG9zQ2hvb3Nlciwgd2luZG93LnNob3dUb2FzdCB8IEltcGFjdGU6IFVJIG1vZGFsZXMsIG5hdmlnYXRpb24gdmVycyBpbmRleC5waHAgYXZlYyB0b2FzdCwgw6l0YXQgZGUgc8OpbGVjdGlvbiBkZXMgbGl2cmV1cnMgfCBUYWJsZXM6IGF1Y3VuZSAqLwovKiBNb2RhbGVzIExpdnJldXIgOiBlbnZvaSBTTVMgKyBnZXN0aW9uIEpTT04gcGFyIHBvaW50IGRlIHZlbnRlICAgICAgICAgICAgICAqLwovKiBEw6lwZW5kYW5jZXM6IGpRdWVyeSAoZMOpasOgIHByw6lzZW50IHN1ciBsYSBwYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQpIHsKICAndXNlIHN0cmljdCc7CgogIHZhciBCR19JRCA9ICdkcml2ZXJNb2RhbEJhY2tncm91bmQnOwogIHZhciBNT0RBTF9JRCA9ICdkcml2ZXJQaG9uZU1vZGFsJzsKICB2YXIgRk9STV9JRCA9ICdkcml2ZXJQaG9uZUZvcm0nOwogIHZhciBEUklWRVJfU0VMRUNUX0lEID0gJ2RyaXZlclNlbGVjdCc7CiAgdmFyIERSSVZFUl9TRUxFQ1RFRF9QSE9ORV9IRUxQX0lEID0gJ2RyaXZlclNlbGVjdGVkUGhvbmVIZWxwJzsKICB2YXIgUFZfSUQgPSAnZHJpdmVyUG9pbnRWZW50ZSc7CiAgdmFyIE1BTkFHRV9CR19JRCA9ICdkcml2ZXJNYW5hZ2VNb2RhbEJhY2tncm91bmQnOwogIHZhciBNQU5BR0VfTU9EQUxfSUQgPSAnZHJpdmVyTWFuYWdlTW9kYWwnOwogIHZhciBNQU5BR0VfRk9STV9JRCA9ICdkcml2ZXJNYW5hZ2VGb3JtJzsKICB2YXIgTUFOQUdFX1NFTEVDVF9JRCA9ICdkcml2ZXJNYW5hZ2VTZWxlY3QnOwogIHZhciBNQU5BR0VfTU9ERV9JRCA9ICdkcml2ZXJNYW5hZ2VNb2RlJzsKICB2YXIgTUFOQUdFX09SSUdJTkFMX1BIT05FX0lEID0gJ2RyaXZlckVkaXRPcmlnaW5hbFBob25lJzsKICB2YXIgTUFOQUdFX05BTUVfSUQgPSAnZHJpdmVyTWFuYWdlTmFtZSc7CiAgdmFyIE1BTkFHRV9QSE9ORV9JRCA9ICdkcml2ZXJNYW5hZ2VQaG9uZSc7CiAgdmFyIE1BTkFHRV9UUklHR0VSX1NFTEVDVE9SID0gJy5kcml2ZXItbW9kYWwtYnRuLnNlY29uZGFyeSc7CiAgdmFyIEFQSV9VUkwgPSAnYXBpL2xpdnJldXJzLnBocCc7CiAgdmFyIGRyaXZlckNhY2hlID0gewogICAgbGFuY29uOiBbXSwKICAgIHBlbGlzc2FubmU6IFtdCiAgfTsKCiAgZnVuY3Rpb24gJChpZCkgewogICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICB9CgogIGZ1bmN0aW9uIHNhZmVUb2FzdChtc2csIHR5cGUpIHsKICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgewogICAgICB3aW5kb3cuc2hvd1RvYXN0KG1zZywgdHlwZSB8fCAnaW5mbycpOwogICAgICByZXR1cm47CiAgICB9CiAgICB3aW5kb3cuYWxlcnQobXNnKTsKICB9CgogIGZ1bmN0aW9uIHNhbml0aXplRGlnaXRzKHZhbCkgewogICAgcmV0dXJuIFN0cmluZyh2YWwgfHwgJycpLnJlcGxhY2UoL1xEL2csICcnKTsKICB9CgogIGZ1bmN0aW9uIG5vcm1hbGl6ZURyaXZlclBob25lKHJhdykgewogICAgdmFyIHYgPSBTdHJpbmcocmF3IHx8ICcnKS50cmltKCk7CiAgICBpZiAoIXYpIHJldHVybiAnJzsKCiAgICB2YXIgZGlnaXRzID0gc2FuaXRpemVEaWdpdHModik7CgogICAgLy8gMDAzM1hYWFhYWFhYWCA9PiAzM1hYWFhYWFhYWAogICAgaWYgKGRpZ2l0cy5pbmRleE9mKCcwMDMzJykgPT09IDApIHsKICAgICAgZGlnaXRzID0gJzMzJyArIGRpZ2l0cy5zbGljZSg0KTsKICAgIH0KICAgIC8vIDBYWFhYWFhYWFggKDEwIGNoaWZmcmVzKSA9PiAzM1hYWFhYWFhYWAogICAgaWYgKGRpZ2l0cy5sZW5ndGggPT09IDEwICYmIGRpZ2l0cy5jaGFyQXQoMCkgPT09ICcwJykgewogICAgICBkaWdpdHMgPSAnMzMnICsgZGlnaXRzLnNsaWNlKDEpOwogICAgfQogICAgLy8gVmFsaWRhdGlvbiBtaW5pbWFsZSBGUjogMzMgKyA5IGNoaWZmcmVzCiAgICBpZiAoIS9eMzNcZHs5fSQvLnRlc3QoZGlnaXRzKSkgcmV0dXJuICcnOwogICAgcmV0dXJuIGRpZ2l0czsKICB9CgogIGZ1bmN0aW9uIGdldFBvaW50VmVudGUoKSB7CiAgICB2YXIgcHYgPSAkKFBWX0lEKTsKICAgIHZhciBkZXZpY2VQb3NBcGkgPSB3aW5kb3cuYXBwRGV2aWNlUG9pbnRWZW50ZSB8fCBudWxsOwogICAgdmFyIHBvaW50VmVudGUgPSBwdiA/IFN0cmluZyhwdi52YWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6ICcnOwoKICAgIGlmICghcG9pbnRWZW50ZSAmJiBkZXZpY2VQb3NBcGkgJiYgdHlwZW9mIGRldmljZVBvc0FwaS5nZXQgPT09ICdmdW5jdGlvbicpIHsKICAgICAgcG9pbnRWZW50ZSA9IGRldmljZVBvc0FwaS5nZXQoKSB8fCAnJzsKICAgIH0KCiAgICBpZiAocG9pbnRWZW50ZSAhPT0gJ2xhbmNvbicgJiYgcG9pbnRWZW50ZSAhPT0gJ3BlbGlzc2FubmUnKSB7CiAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICByZXR1cm4gcG9pbnRWZW50ZTsKICB9CgogIGZ1bmN0aW9uIGdldFBvaW50VmVudGVMYWJlbChwb2ludFZlbnRlKSB7CiAgICByZXR1cm4gcG9pbnRWZW50ZSA9PT0gJ3BlbGlzc2FubmUnID8gJ1DDqWxpc3Nhbm5lJyA6ICdMYW7Dp29uJzsKICB9CgogIGZ1bmN0aW9uIGdldERyaXZlcnNGb3JQb2ludFZlbnRlKHBvaW50VmVudGUpIHsKICAgIGlmIChwb2ludFZlbnRlICE9PSAnbGFuY29uJyAmJiBwb2ludFZlbnRlICE9PSAncGVsaXNzYW5uZScpIHJldHVybiBbXTsKICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRyaXZlckNhY2hlW3BvaW50VmVudGVdKSA/IGRyaXZlckNhY2hlW3BvaW50VmVudGVdIDogW107CiAgfQoKICBmdW5jdGlvbiBmaW5kRHJpdmVyQnlQaG9uZShwb2ludFZlbnRlLCBwaG9uZSkgewogICAgdmFyIGxpc3QgPSBnZXREcml2ZXJzRm9yUG9pbnRWZW50ZShwb2ludFZlbnRlKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKFN0cmluZyhsaXN0W2ldLnRlbGVwaG9uZSB8fCAnJykgPT09IFN0cmluZyhwaG9uZSB8fCAnJykpIHsKICAgICAgICByZXR1cm4gbGlzdFtpXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVTZWxlY3RlZERyaXZlckhlbHAoKSB7CiAgICB2YXIgcG9pbnRWZW50ZSA9IGdldFBvaW50VmVudGUoKTsKICAgIHZhciBzZWxlY3QgPSAkKERSSVZFUl9TRUxFQ1RfSUQpOwogICAgdmFyIGhlbHAgPSAkKERSSVZFUl9TRUxFQ1RFRF9QSE9ORV9IRUxQX0lEKTsKICAgIHZhciBkcml2ZXI7CiAgICBpZiAoIWhlbHAgfHwgIXNlbGVjdCkgcmV0dXJuOwoKICAgIGRyaXZlciA9IGZpbmREcml2ZXJCeVBob25lKHBvaW50VmVudGUsIHNlbGVjdC52YWx1ZSk7CiAgICBpZiAoIWRyaXZlcikgewogICAgICBoZWxwLnRleHRDb250ZW50ID0gJ1PDqWxlY3Rpb25uZXogdW4gbGl2cmV1ciBwb3VyIGFmZmljaGVyIHNvbiBudW3DqXJvLic7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBoZWxwLnRleHRDb250ZW50ID0gJ051bcOpcm8gc8OpbGVjdGlvbm7DqSA6ICsnICsgU3RyaW5nKGRyaXZlci50ZWxlcGhvbmUgfHwgJycpOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyRHJpdmVyU2VsZWN0KHBvaW50VmVudGUpIHsKICAgIHZhciBzZWxlY3QgPSAkKERSSVZFUl9TRUxFQ1RfSUQpOwogICAgdmFyIGxpc3QgPSBnZXREcml2ZXJzRm9yUG9pbnRWZW50ZShwb2ludFZlbnRlKTsKICAgIHZhciBpOwogICAgdmFyIG9wdGlvbjsKCiAgICBpZiAoIXNlbGVjdCkgcmV0dXJuOwogICAgc2VsZWN0LmlubmVySFRNTCA9ICcnOwoKICAgIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgb3B0aW9uLnZhbHVlID0gJyc7CiAgICBvcHRpb24udGV4dENvbnRlbnQgPSBsaXN0Lmxlbmd0aCA/ICdDaG9pc2lyIHVuIGxpdnJldXInIDogJ0F1Y3VuIGxpdnJldXIgZW5yZWdpc3Ryw6knOwogICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CgogICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgIG9wdGlvbi52YWx1ZSA9IGxpc3RbaV0udGVsZXBob25lOwogICAgICBvcHRpb24udGV4dENvbnRlbnQgPSBsaXN0W2ldLm5vbSArICcgLSArJyArIGxpc3RbaV0udGVsZXBob25lOwogICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgIH0KCiAgICB1cGRhdGVTZWxlY3RlZERyaXZlckhlbHAoKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckRyaXZlck1hbmFnZXJTZWxlY3QocG9pbnRWZW50ZSkgewogICAgdmFyIHNlbGVjdCA9ICQoTUFOQUdFX1NFTEVDVF9JRCk7CiAgICB2YXIgbGlzdCA9IGdldERyaXZlcnNGb3JQb2ludFZlbnRlKHBvaW50VmVudGUpOwogICAgdmFyIGk7CiAgICB2YXIgb3B0aW9uOwoKICAgIGlmICghc2VsZWN0KSByZXR1cm47CiAgICBzZWxlY3QuaW5uZXJIVE1MID0gJyc7CgogICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICBvcHRpb24udmFsdWUgPSAnJzsKICAgIG9wdGlvbi50ZXh0Q29udGVudCA9ICdOb3V2ZWF1IGxpdnJldXInOwogICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7CgogICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgIG9wdGlvbi52YWx1ZSA9IGxpc3RbaV0udGVsZXBob25lOwogICAgICBvcHRpb24udGV4dENvbnRlbnQgPSBsaXN0W2ldLm5vbSArICcgLSArJyArIGxpc3RbaV0udGVsZXBob25lOwogICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHJlc2V0RHJpdmVyTWFuYWdlckZvcm0oKSB7CiAgICB2YXIgbW9kZSA9ICQoTUFOQUdFX01PREVfSUQpOwogICAgdmFyIG9yaWdpbmFsUGhvbmUgPSAkKE1BTkFHRV9PUklHSU5BTF9QSE9ORV9JRCk7CiAgICB2YXIgbmFtZUlucHV0ID0gJChNQU5BR0VfTkFNRV9JRCk7CiAgICB2YXIgcGhvbmVJbnB1dCA9ICQoTUFOQUdFX1BIT05FX0lEKTsKICAgIHZhciBzZWxlY3QgPSAkKE1BTkFHRV9TRUxFQ1RfSUQpOwoKICAgIGlmIChtb2RlKSBtb2RlLnZhbHVlID0gJ2NyZWF0ZSc7CiAgICBpZiAob3JpZ2luYWxQaG9uZSkgb3JpZ2luYWxQaG9uZS52YWx1ZSA9ICcnOwogICAgaWYgKG5hbWVJbnB1dCkgbmFtZUlucHV0LnZhbHVlID0gJyc7CiAgICBpZiAocGhvbmVJbnB1dCkgcGhvbmVJbnB1dC52YWx1ZSA9ICcnOwogICAgaWYgKHNlbGVjdCkgc2VsZWN0LnZhbHVlID0gJyc7CiAgfQoKICBmdW5jdGlvbiBmaWxsRHJpdmVyTWFuYWdlckZvcm0ocG9pbnRWZW50ZSwgcGhvbmUpIHsKICAgIHZhciBkcml2ZXIgPSBmaW5kRHJpdmVyQnlQaG9uZShwb2ludFZlbnRlLCBwaG9uZSk7CiAgICB2YXIgbW9kZSA9ICQoTUFOQUdFX01PREVfSUQpOwogICAgdmFyIG9yaWdpbmFsUGhvbmUgPSAkKE1BTkFHRV9PUklHSU5BTF9QSE9ORV9JRCk7CiAgICB2YXIgbmFtZUlucHV0ID0gJChNQU5BR0VfTkFNRV9JRCk7CiAgICB2YXIgcGhvbmVJbnB1dCA9ICQoTUFOQUdFX1BIT05FX0lEKTsKCiAgICBpZiAoIWRyaXZlcikgewogICAgICByZXNldERyaXZlck1hbmFnZXJGb3JtKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAobW9kZSkgbW9kZS52YWx1ZSA9ICd1cGRhdGUnOwogICAgaWYgKG9yaWdpbmFsUGhvbmUpIG9yaWdpbmFsUGhvbmUudmFsdWUgPSBTdHJpbmcoZHJpdmVyLnRlbGVwaG9uZSB8fCAnJyk7CiAgICBpZiAobmFtZUlucHV0KSBuYW1lSW5wdXQudmFsdWUgPSBTdHJpbmcoZHJpdmVyLm5vbSB8fCAnJyk7CiAgICBpZiAocGhvbmVJbnB1dCkgcGhvbmVJbnB1dC52YWx1ZSA9ICcwJyArIFN0cmluZyhkcml2ZXIudGVsZXBob25lIHx8ICcnKS5yZXBsYWNlKC9eMzMvLCAnJyk7CiAgfQoKICBmdW5jdGlvbiBmZXRjaERyaXZlcnMocG9pbnRWZW50ZSwgb25Eb25lKSB7CiAgICBpZiAoIXdpbmRvdy5qUXVlcnkgfHwgIXdpbmRvdy5qUXVlcnkuYWpheCkgewogICAgICBzYWZlVG9hc3QoJ0VycmV1cjogalF1ZXJ5IGluZGlzcG9uaWJsZS4nLCAnZXJyb3InKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdpbmRvdy5qUXVlcnkuYWpheCh7CiAgICAgIHR5cGU6ICdHRVQnLAogICAgICB1cmw6IEFQSV9VUkwsCiAgICAgIGRhdGFUeXBlOiAnanNvbicsCiAgICAgIGNhY2hlOiBmYWxzZSwKICAgICAgZGF0YTogeyBwb2ludF92ZW50ZTogcG9pbnRWZW50ZSB9LAogICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwKSB7CiAgICAgICAgaWYgKCFyZXNwIHx8ICFyZXNwLm9rIHx8ICFyZXNwLmRhdGEpIHsKICAgICAgICAgIHNhZmVUb2FzdCgocmVzcCAmJiByZXNwLmVycm9yKSA/IHJlc3AuZXJyb3IgOiAnSW1wb3NzaWJsZSBkZSBjaGFyZ2VyIGxlcyBsaXZyZXVycy4nLCAnZXJyb3InKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGRyaXZlckNhY2hlW3BvaW50VmVudGVdID0gQXJyYXkuaXNBcnJheShyZXNwLmRhdGEuZHJpdmVycykgPyByZXNwLmRhdGEuZHJpdmVycyA6IFtdOwogICAgICAgIHJlbmRlckRyaXZlclNlbGVjdChwb2ludFZlbnRlKTsKICAgICAgICByZW5kZXJEcml2ZXJNYW5hZ2VyU2VsZWN0KHBvaW50VmVudGUpOwoKICAgICAgICBpZiAodHlwZW9mIG9uRG9uZSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgb25Eb25lKGRyaXZlckNhY2hlW3BvaW50VmVudGVdKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICBzYWZlVG9hc3QoJ0VycmV1ciByw6lzZWF1IGxvcnMgZHUgY2hhcmdlbWVudCBkZXMgbGl2cmV1cnMuJywgJ2Vycm9yJyk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gaXNNYW5hZ2VPcGVuKCkgewogICAgdmFyIG1vZGFsID0gJChNQU5BR0VfTU9EQUxfSUQpOwogICAgcmV0dXJuICEhKG1vZGFsICYmIG1vZGFsLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycpOwogIH0KCiAgZnVuY3Rpb24gZW5zdXJlTWFuYWdlTW9kYWxNb3VudGVkQXRCb2R5KCkgewogICAgdmFyIGJnID0gJChNQU5BR0VfQkdfSUQpOwogICAgdmFyIG1vZGFsID0gJChNQU5BR0VfTU9EQUxfSUQpOwoKICAgIGlmIChiZyAmJiBiZy5wYXJlbnROb2RlICE9PSBkb2N1bWVudC5ib2R5KSB7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYmcpOwogICAgfQogICAgaWYgKG1vZGFsICYmIG1vZGFsLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmJvZHkpIHsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzdG9wRXZlbnRQcm9wYWdhdGlvbihlKSB7CiAgICBpZiAoZSkgZS5zdG9wUHJvcGFnYXRpb24oKTsKICB9CgogIGZ1bmN0aW9uIGlzT3BlbigpIHsKICAgIHZhciBtb2RhbCA9ICQoTU9EQUxfSUQpOwogICAgcmV0dXJuICEhKG1vZGFsICYmIG1vZGFsLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycpOwogIH0KCiAgZnVuY3Rpb24gb3Blbk1vZGFsKCkgewogICAgdmFyIGJnID0gJChCR19JRCk7CiAgICB2YXIgbW9kYWwgPSAkKE1PREFMX0lEKTsKICAgIHZhciBkZXZpY2VQb3NBcGkgPSB3aW5kb3cuYXBwRGV2aWNlUG9pbnRWZW50ZSB8fCBudWxsOwogICAgdmFyIHNhdmVkUG9pbnRWZW50ZSA9ICcnOwogICAgdmFyIHB2ID0gJChQVl9JRCk7CiAgICBpZiAoIWJnIHx8ICFtb2RhbCkgcmV0dXJuOwoKICAgIGlmIChkZXZpY2VQb3NBcGkgJiYgdHlwZW9mIGRldmljZVBvc0FwaS5nZXQgPT09ICdmdW5jdGlvbicpIHsKICAgICAgc2F2ZWRQb2ludFZlbnRlID0gZGV2aWNlUG9zQXBpLmdldCgpOwogICAgfQogICAgaWYgKCFzYXZlZFBvaW50VmVudGUpIHsKICAgICAgc2FmZVRvYXN0KCdWZXVpbGxleiBk4oCZYWJvcmQgZMOpZmluaXIgbGUgcG9pbnQgZGUgdmVudGUgcGFyIGTDqWZhdXQgZGUgbOKAmWFwcGFyZWlsLicsICdlcnJvcicpOwogICAgICBpZiAodHlwZW9mIHdpbmRvdy5vcGVuRGV2aWNlUG9zQ2hvb3NlciA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHdpbmRvdy5vcGVuRGV2aWNlUG9zQ2hvb3NlcigpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChwdikgcHYudmFsdWUgPSBzYXZlZFBvaW50VmVudGU7CgogICAgYmcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoJ2lzLXZpc2libGUnKTsKICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsKICAgIGJnLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsKICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbW9kYWwtb3Blbi1kcml2ZXInKTsKCiAgICBmZXRjaERyaXZlcnMoc2F2ZWRQb2ludFZlbnRlLCBmdW5jdGlvbihkcml2ZXJzKSB7CiAgICAgIGlmICghZHJpdmVycy5sZW5ndGgpIHsKICAgICAgICBzYWZlVG9hc3QoJ0F1Y3VuIGxpdnJldXIgZW5yZWdpc3Ryw6kgcG91ciAnICsgZ2V0UG9pbnRWZW50ZUxhYmVsKHNhdmVkUG9pbnRWZW50ZSkgKyAnLicsICdpbmZvJyk7CiAgICAgIH0KICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgdHJ5IHsgaWYgKCQoRFJJVkVSX1NFTEVDVF9JRCkpICQoRFJJVkVSX1NFTEVDVF9JRCkuZm9jdXMoKTsgfSBjYXRjaCAoZSkge30KICAgICAgfSwgMTApOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBjbG9zZU1vZGFsKCkgewogICAgdmFyIGJnID0gJChCR19JRCk7CiAgICB2YXIgbW9kYWwgPSAkKE1PREFMX0lEKTsKCiAgICBpZiAoaXNNYW5hZ2VPcGVuKCkpIHsKICAgICAgY2xvc2VNYW5hZ2VNb2RhbCgpOwogICAgfQogICAgaWYgKG1vZGFsKSB7CiAgICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXZpc2libGUnKTsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICB9CiAgICBpZiAoYmcpIHsKICAgICAgYmcuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgYmcuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICB9CiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ21vZGFsLW9wZW4tZHJpdmVyJyk7CiAgfQoKICBmdW5jdGlvbiBzdWJtaXRNb2RhbCgpIHsKICAgIHZhciBwb2ludFZlbnRlID0gZ2V0UG9pbnRWZW50ZSgpOwogICAgdmFyIHNlbGVjdCA9ICQoRFJJVkVSX1NFTEVDVF9JRCk7CiAgICB2YXIgcGhvbmUgPSBzZWxlY3QgPyBTdHJpbmcoc2VsZWN0LnZhbHVlIHx8ICcnKSA6ICcnOwoKICAgIGlmICghcG9pbnRWZW50ZSkgewogICAgICBzYWZlVG9hc3QoJ1BvaW50IGRlIHZlbnRlIGludmFsaWRlLicsICdlcnJvcicpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFwaG9uZSkgewogICAgICBzYWZlVG9hc3QoJ1ZldWlsbGV6IHPDqWxlY3Rpb25uZXIgdW4gbGl2cmV1ci4nLCAnZXJyb3InKTsKICAgICAgdHJ5IHsgaWYgKHNlbGVjdCkgc2VsZWN0LmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIXdpbmRvdy5qUXVlcnkgfHwgIXdpbmRvdy5qUXVlcnkuYWpheCkgewogICAgICBzYWZlVG9hc3QoJ0VycmV1cjogalF1ZXJ5IGluZGlzcG9uaWJsZSBwb3VyIGzigJllbnZvaS4nLCAnZXJyb3InKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdpbmRvdy5qUXVlcnkuYWpheCh7CiAgICAgIHR5cGU6ICdQT1NUJywKICAgICAgdXJsOiAnZW5yZWdpc3RyZXJfbGl2cmV1ci5waHAnLAogICAgICBkYXRhVHlwZTogJ2pzb24nLAogICAgICBkYXRhOiB7IHBob25lOiBwaG9uZSwgcG9pbnRfdmVudGU6IHBvaW50VmVudGUgfSwKICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcCkgewogICAgICAgIGlmIChyZXNwICYmIHJlc3Aub2spIHsKICAgICAgICAgIGNsb3NlTW9kYWwoKTsKICAgICAgICAgIHZhciBwdkxhYmVsID0gKHBvaW50VmVudGUgPT09ICdwZWxpc3Nhbm5lJykgPyAnUMOpbGlzc2FubmUnIDogJ0xhbsOnb24nOwogICAgICAgICAgdmFyIGRyaXZlciA9IGZpbmREcml2ZXJCeVBob25lKHBvaW50VmVudGUsIHBob25lKTsKICAgICAgICAgIHZhciBkcml2ZXJOYW1lID0gZHJpdmVyID8gZHJpdmVyLm5vbSA6IHBob25lOwogICAgICAgICAgdmFyIG1zZyA9ICdTTVMgZW4gYXR0ZW50ZSA6ICcgKyBkcml2ZXJOYW1lICsgJyAoKycgKyBwaG9uZSArICcsICcgKyBwdkxhYmVsICsgJyknOwogICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaW5kZXgucGhwP3RvYXN0PScgKyBlbmNvZGVVUklDb21wb25lbnQobXNnKSArICcmdG9hc3RUeXBlPXN1Y2Nlc3MnOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgZXJyID0gKHJlc3AgJiYgcmVzcC5lcnJvcikgPyByZXNwLmVycm9yIDogIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgbGl2cmV1ci4iOwogICAgICAgIHNhZmVUb2FzdChlcnIsICdlcnJvcicpOwogICAgICB9LAogICAgICBlcnJvcjogZnVuY3Rpb24oKSB7CiAgICAgICAgc2FmZVRvYXN0KCJFcnJldXIgcsOpc2VhdSBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgbGl2cmV1ci4iLCAnZXJyb3InKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBvcGVuTWFuYWdlTW9kYWwoKSB7CiAgICB2YXIgYmcgPSAkKE1BTkFHRV9CR19JRCk7CiAgICB2YXIgbW9kYWwgPSAkKE1BTkFHRV9NT0RBTF9JRCk7CiAgICB2YXIgcG9pbnRWZW50ZSA9IGdldFBvaW50VmVudGUoKTsKCiAgICBpZiAoIWJnIHx8ICFtb2RhbCkgcmV0dXJuOwoKICAgIGVuc3VyZU1hbmFnZU1vZGFsTW91bnRlZEF0Qm9keSgpOwogICAgaWYgKCFwb2ludFZlbnRlKSB7CiAgICAgIHNhZmVUb2FzdCgnUG9pbnQgZGUgdmVudGUgaW52YWxpZGUuJywgJ2Vycm9yJyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICByZW5kZXJEcml2ZXJNYW5hZ2VyU2VsZWN0KHBvaW50VmVudGUpOwogICAgcmVzZXREcml2ZXJNYW5hZ2VyRm9ybSgpOwoKICAgIGJnLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdpcy12aXNpYmxlJyk7CiAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7CiAgICBiZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7CiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2RyaXZlci1tYW5hZ2UtbW9kYWwtb3BlbicpOwoKICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICB0cnkgeyBpZiAoJChNQU5BR0VfU0VMRUNUX0lEKSkgJChNQU5BR0VfU0VMRUNUX0lEKS5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQogICAgfSwgMTApOwogIH0KCiAgZnVuY3Rpb24gY2xvc2VNYW5hZ2VNb2RhbCgpIHsKICAgIHZhciBiZyA9ICQoTUFOQUdFX0JHX0lEKTsKICAgIHZhciBtb2RhbCA9ICQoTUFOQUdFX01PREFMX0lEKTsKICAgIGlmIChtb2RhbCkgewogICAgICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBtb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdpcy12aXNpYmxlJyk7CiAgICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOwogICAgfQogICAgaWYgKGJnKSB7CiAgICAgIGJnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIGJnLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOwogICAgfQogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdkcml2ZXItbWFuYWdlLW1vZGFsLW9wZW4nKTsKICAgIHJlc2V0RHJpdmVyTWFuYWdlckZvcm0oKTsKCiAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgdmFyIHRyaWdnZXI7CiAgICAgIGlmICghaXNPcGVuKCkpIHJldHVybjsKICAgICAgdHJpZ2dlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoTUFOQUdFX1RSSUdHRVJfU0VMRUNUT1IpOwogICAgICB0cnkgewogICAgICAgIGlmICh0cmlnZ2VyKSB0cmlnZ2VyLmZvY3VzKCk7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICB9LCAxMCk7CiAgfQoKICBmdW5jdGlvbiBzYXZlRHJpdmVyTWFuYWdlckZvcm0oKSB7CiAgICB2YXIgcG9pbnRWZW50ZSA9IGdldFBvaW50VmVudGUoKTsKICAgIHZhciBtb2RlID0gJChNQU5BR0VfTU9ERV9JRCk7CiAgICB2YXIgb3JpZ2luYWxQaG9uZSA9ICQoTUFOQUdFX09SSUdJTkFMX1BIT05FX0lEKTsKICAgIHZhciBuYW1lSW5wdXQgPSAkKE1BTkFHRV9OQU1FX0lEKTsKICAgIHZhciBwaG9uZUlucHV0ID0gJChNQU5BR0VfUEhPTkVfSUQpOwogICAgdmFyIG5hbWUgPSBuYW1lSW5wdXQgPyBTdHJpbmcobmFtZUlucHV0LnZhbHVlIHx8ICcnKS50cmltKCkgOiAnJzsKICAgIHZhciBwaG9uZSA9IG5vcm1hbGl6ZURyaXZlclBob25lKHBob25lSW5wdXQgPyBwaG9uZUlucHV0LnZhbHVlIDogJycpOwogICAgdmFyIHBheWxvYWQ7CgogICAgaWYgKCFwb2ludFZlbnRlKSB7CiAgICAgIHNhZmVUb2FzdCgnUG9pbnQgZGUgdmVudGUgaW52YWxpZGUuJywgJ2Vycm9yJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghbmFtZSkgewogICAgICBzYWZlVG9hc3QoJ0xlIG5vbSBkdSBsaXZyZXVyIGVzdCBvYmxpZ2F0b2lyZS4nLCAnZXJyb3InKTsKICAgICAgdHJ5IHsgaWYgKG5hbWVJbnB1dCkgbmFtZUlucHV0LmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghcGhvbmUpIHsKICAgICAgc2FmZVRvYXN0KCdOdW3DqXJvIGludmFsaWRlLiBFeGVtcGxlOiAwNjE4NTI5Mzc1LicsICdlcnJvcicpOwogICAgICB0cnkgeyBpZiAocGhvbmVJbnB1dCkgcGhvbmVJbnB1dC5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQogICAgICByZXR1cm47CiAgICB9CgogICAgcGF5bG9hZCA9IHsKICAgICAgYWN0aW9uOiAobW9kZSAmJiBtb2RlLnZhbHVlID09PSAndXBkYXRlJykgPyAndXBkYXRlJyA6ICdjcmVhdGUnLAogICAgICBwb2ludF92ZW50ZTogcG9pbnRWZW50ZSwKICAgICAgbm9tOiBuYW1lLAogICAgICB0ZWxlcGhvbmU6IHBob25lLAogICAgICBvcmlnaW5hbF9waG9uZTogb3JpZ2luYWxQaG9uZSA/IFN0cmluZyhvcmlnaW5hbFBob25lLnZhbHVlIHx8ICcnKSA6ICcnCiAgICB9OwoKICAgIHdpbmRvdy5qUXVlcnkuYWpheCh7CiAgICAgIHR5cGU6ICdQT1NUJywKICAgICAgdXJsOiBBUElfVVJMLAogICAgICBkYXRhVHlwZTogJ2pzb24nLAogICAgICBkYXRhOiBwYXlsb2FkLAogICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwKSB7CiAgICAgICAgaWYgKCFyZXNwIHx8ICFyZXNwLm9rKSB7CiAgICAgICAgICBzYWZlVG9hc3QoKHJlc3AgJiYgcmVzcC5lcnJvcikgPyByZXNwLmVycm9yIDogJ0ltcG9zc2libGUgZOKAmWVucmVnaXN0cmVyIGxlIGxpdnJldXIuJywgJ2Vycm9yJyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHNhZmVUb2FzdCgnTGl2cmV1ciBlbnJlZ2lzdHLDqS4nLCAnc3VjY2VzcycpOwogICAgICAgIGZldGNoRHJpdmVycyhwb2ludFZlbnRlLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHJlbmRlckRyaXZlclNlbGVjdChwb2ludFZlbnRlKTsKICAgICAgICAgIHJlbmRlckRyaXZlck1hbmFnZXJTZWxlY3QocG9pbnRWZW50ZSk7CiAgICAgICAgICByZXNldERyaXZlck1hbmFnZXJGb3JtKCk7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHsKICAgICAgICB2YXIgcmVzcCA9IHhociAmJiB4aHIucmVzcG9uc2VKU09OID8geGhyLnJlc3BvbnNlSlNPTiA6IG51bGw7CiAgICAgICAgdmFyIG1zZyA9IChyZXNwICYmIHJlc3AuZXJyb3IpID8gcmVzcC5lcnJvciA6ICdFcnJldXIgcsOpc2VhdSBsb3JzIGRlIGzigJllbnJlZ2lzdHJlbWVudC4nOwogICAgICAgIHNhZmVUb2FzdChtc2csICdlcnJvcicpOwogICAgICB9CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGRlbGV0ZURyaXZlcigpIHsKICAgIHZhciBwb2ludFZlbnRlID0gZ2V0UG9pbnRWZW50ZSgpOwogICAgdmFyIHNlbGVjdCA9ICQoTUFOQUdFX1NFTEVDVF9JRCk7CiAgICB2YXIgcGhvbmUgPSBzZWxlY3QgPyBTdHJpbmcoc2VsZWN0LnZhbHVlIHx8ICcnKSA6ICcnOwoKICAgIGlmICghcG9pbnRWZW50ZSkgewogICAgICBzYWZlVG9hc3QoJ1BvaW50IGRlIHZlbnRlIGludmFsaWRlLicsICdlcnJvcicpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXBob25lKSB7CiAgICAgIHNhZmVUb2FzdCgnU8OpbGVjdGlvbm5leiB1biBsaXZyZXVyIMOgIHN1cHByaW1lci4nLCAnZXJyb3InKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdpbmRvdy5qUXVlcnkuYWpheCh7CiAgICAgIHR5cGU6ICdQT1NUJywKICAgICAgdXJsOiBBUElfVVJMLAogICAgICBkYXRhVHlwZTogJ2pzb24nLAogICAgICBkYXRhOiB7CiAgICAgICAgYWN0aW9uOiAnZGVsZXRlJywKICAgICAgICBwb2ludF92ZW50ZTogcG9pbnRWZW50ZSwKICAgICAgICB0ZWxlcGhvbmU6IHBob25lCiAgICAgIH0sCiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3ApIHsKICAgICAgICBpZiAoIXJlc3AgfHwgIXJlc3Aub2spIHsKICAgICAgICAgIHNhZmVUb2FzdCgocmVzcCAmJiByZXNwLmVycm9yKSA/IHJlc3AuZXJyb3IgOiAnSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGUgbGl2cmV1ci4nLCAnZXJyb3InKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2FmZVRvYXN0KCdMaXZyZXVyIHN1cHByaW3DqS4nLCAnc3VjY2VzcycpOwogICAgICAgIGZldGNoRHJpdmVycyhwb2ludFZlbnRlLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHJlbmRlckRyaXZlclNlbGVjdChwb2ludFZlbnRlKTsKICAgICAgICAgIHJlbmRlckRyaXZlck1hbmFnZXJTZWxlY3QocG9pbnRWZW50ZSk7CiAgICAgICAgICByZXNldERyaXZlck1hbmFnZXJGb3JtKCk7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICBzYWZlVG9hc3QoJ0VycmV1ciByw6lzZWF1IGxvcnMgZGUgbGEgc3VwcHJlc3Npb24uJywgJ2Vycm9yJyk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gYmluZE9uY2UoKSB7CiAgICB2YXIgZm9ybSA9ICQoRk9STV9JRCk7CiAgICB2YXIgbW9kYWwgPSAkKE1PREFMX0lEKTsKICAgIHZhciBiZyA9ICQoQkdfSUQpOwogICAgdmFyIHNlbGVjdCA9ICQoRFJJVkVSX1NFTEVDVF9JRCk7CiAgICB2YXIgbWFuYWdlRm9ybSA9ICQoTUFOQUdFX0ZPUk1fSUQpOwogICAgdmFyIG1hbmFnZVNlbGVjdCA9ICQoTUFOQUdFX1NFTEVDVF9JRCk7CiAgICB2YXIgbWFuYWdlUGhvbmUgPSAkKE1BTkFHRV9QSE9ORV9JRCk7CiAgICB2YXIgbWFuYWdlQmcgPSAkKE1BTkFHRV9CR19JRCk7CiAgICBpZiAoIWZvcm0gfHwgIW1vZGFsIHx8ICFiZyB8fCAhc2VsZWN0IHx8ICFtYW5hZ2VGb3JtIHx8ICFtYW5hZ2VTZWxlY3QgfHwgIW1hbmFnZUJnKSByZXR1cm47CiAgICBlbnN1cmVNYW5hZ2VNb2RhbE1vdW50ZWRBdEJvZHkoKTsKCiAgICBpZiAobW9kYWwuZ2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJykgPT09ICcxJykgcmV0dXJuOwogICAgbW9kYWwuc2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJywgJzEnKTsKCiAgICBpZiAobWFuYWdlUGhvbmUpIHsKICAgICAgbWFuYWdlUGhvbmUuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgY2xlYW4gPSBzYW5pdGl6ZURpZ2l0cyhtYW5hZ2VQaG9uZS52YWx1ZSkuc2xpY2UoMCwgMTYpOwogICAgICAgIGlmIChtYW5hZ2VQaG9uZS52YWx1ZSAhPT0gY2xlYW4pIG1hbmFnZVBob25lLnZhbHVlID0gY2xlYW47CiAgICAgIH0pOwogICAgfQoKICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgdXBkYXRlU2VsZWN0ZWREcml2ZXJIZWxwKCk7CiAgICB9KTsKCiAgICBtYW5hZ2VTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgIGZpbGxEcml2ZXJNYW5hZ2VyRm9ybShnZXRQb2ludFZlbnRlKCksIG1hbmFnZVNlbGVjdC52YWx1ZSk7CiAgICB9KTsKCiAgICAvLyBFU0MgY2xvc2UKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICAgIHZhciBrZXkgPSBlLmtleSB8fCAnJzsKICAgICAgaWYgKGtleSAhPT0gJ0VzY2FwZScpIHJldHVybjsKICAgICAgaWYgKGlzTWFuYWdlT3BlbigpKSB7CiAgICAgICAgY2xvc2VNYW5hZ2VNb2RhbCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoaXNPcGVuKCkpIGNsb3NlTW9kYWwoKTsKICAgIH0pOwoKICAgIGJnLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgIGlmICghaXNPcGVuKCkpIHJldHVybjsKICAgICAgY2xvc2VNb2RhbCgpOwogICAgfSk7CiAgICBtYW5hZ2VCZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICBjbG9zZU1hbmFnZU1vZGFsKCk7CiAgICB9KTsKCiAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BFdmVudFByb3BhZ2F0aW9uKTsKICAgIG1hbmFnZUJnLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgIGNsb3NlTWFuYWdlTW9kYWwoKTsKICAgIH0pOwogICAgJChNQU5BR0VfTU9EQUxfSUQpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3RvcEV2ZW50UHJvcGFnYXRpb24pOwogICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BFdmVudFByb3BhZ2F0aW9uKTsKICAgIG1hbmFnZUZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdG9wRXZlbnRQcm9wYWdhdGlvbik7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBzdWJtaXRNb2RhbCgpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKICAgIG1hbmFnZUZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24oZSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHNhdmVEcml2ZXJNYW5hZ2VyRm9ybSgpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKICB9CgogIHdpbmRvdy5vcGVuRHJpdmVyUGhvbmVNb2RhbCA9IGZ1bmN0aW9uKCkgeyBvcGVuTW9kYWwoKTsgfTsKICB3aW5kb3cuY2xvc2VEcml2ZXJQaG9uZU1vZGFsID0gZnVuY3Rpb24oKSB7IGNsb3NlTW9kYWwoKTsgfTsKICB3aW5kb3cuc3VibWl0RHJpdmVyUGhvbmUgPSBmdW5jdGlvbigpIHsgc3VibWl0TW9kYWwoKTsgfTsKICB3aW5kb3cub3BlbkRyaXZlck1hbmFnZU1vZGFsID0gZnVuY3Rpb24oKSB7IG9wZW5NYW5hZ2VNb2RhbCgpOyB9OwogIHdpbmRvdy5jbG9zZURyaXZlck1hbmFnZU1vZGFsID0gZnVuY3Rpb24oKSB7IGNsb3NlTWFuYWdlTW9kYWwoKTsgfTsKICB3aW5kb3cuc2F2ZURyaXZlck1hbmFnZXJGb3JtID0gZnVuY3Rpb24oKSB7IHNhdmVEcml2ZXJNYW5hZ2VyRm9ybSgpOyB9OwogIHdpbmRvdy5kZWxldGVTZWxlY3RlZERyaXZlciA9IGZ1bmN0aW9uKCkgeyBkZWxldGVEcml2ZXIoKTsgfTsKCiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGJpbmRPbmNlKTsKICB9IGVsc2UgewogICAgYmluZE9uY2UoKTsKICB9Cgp9KSh3aW5kb3csIGRvY3VtZW50KTsK"
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 18464,
                "sha1": "93fe5e17ad4d741bcea9a4fcf2b46fe3da602f6b",
                "content_b64": "LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvanMvZHJpdmVyLW1vZGFsLmpzIHwgR8OocmUgbOKAmW91dmVydHVyZSBkZXMgbW9kYWxlcyBsaXZyZXVyIG5hdGl2ZXMsIGxlIGNoYXJnZW1lbnQgSlNPTiBwYXIgcG9pbnQgZGUgdmVudGUsIGzigJllbnZvaSBTTVMgZXQgbOKAmWFkbWluaXN0cmF0aW9uIGRlcyBsaXZyZXVycyBzYW5zIEJvb3RzdHJhcCBKUy4gfCBFeHBvc2U6IG9wZW5Ecml2ZXJQaG9uZU1vZGFsLCBjbG9zZURyaXZlclBob25lTW9kYWwsIHN1Ym1pdERyaXZlclBob25lLCBvcGVuRHJpdmVyTWFuYWdlTW9kYWwsIGNsb3NlRHJpdmVyTWFuYWdlTW9kYWwsIHNhdmVEcml2ZXJNYW5hZ2VyRm9ybSwgZGVsZXRlU2VsZWN0ZWREcml2ZXIgfCBEw6lwZW5kIGRlOiBqUXVlcnkgbG9jYWwsIGFwaS9saXZyZXVycy5waHAsIGVucmVnaXN0cmVyX2xpdnJldXIucGhwLCB3aW5kb3cuYXBwRGV2aWNlUG9pbnRWZW50ZSwgd2luZG93Lm9wZW5EZXZpY2VQb3NDaG9vc2VyLCB3aW5kb3cuc2hvd1RvYXN0IHwgSW1wYWN0ZTogVUkgbW9kYWxlcywgbmF2aWdhdGlvbiB2ZXJzIGluZGV4LnBocCBhdmVjIHRvYXN0LCDDqXRhdCBkZSBzw6lsZWN0aW9uIGRlcyBsaXZyZXVycyB8IFRhYmxlczogYXVjdW5lICovCi8qIE1vZGFsZXMgTGl2cmV1ciA6IGVudm9pIFNNUyArIGdlc3Rpb24gSlNPTiBwYXIgcG9pbnQgZGUgdmVudGUgICAgICAgICAgICAgICovCi8qIETDqXBlbmRhbmNlczogalF1ZXJ5IChkw6lqw6AgcHLDqXNlbnQgc3VyIGxhIHBhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwooZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCkgewogICd1c2Ugc3RyaWN0JzsKCiAgdmFyIEJHX0lEID0gJ2RyaXZlck1vZGFsQmFja2dyb3VuZCc7CiAgdmFyIE1PREFMX0lEID0gJ2RyaXZlclBob25lTW9kYWwnOwogIHZhciBGT1JNX0lEID0gJ2RyaXZlclBob25lRm9ybSc7CiAgdmFyIERSSVZFUl9TRUxFQ1RfSUQgPSAnZHJpdmVyU2VsZWN0JzsKICB2YXIgRFJJVkVSX1NFTEVDVEVEX1BIT05FX0hFTFBfSUQgPSAnZHJpdmVyU2VsZWN0ZWRQaG9uZUhlbHAnOwogIHZhciBQVl9JRCA9ICdkcml2ZXJQb2ludFZlbnRlJzsKICB2YXIgTUFOQUdFX0JHX0lEID0gJ2RyaXZlck1hbmFnZU1vZGFsQmFja2dyb3VuZCc7CiAgdmFyIE1BTkFHRV9NT0RBTF9JRCA9ICdkcml2ZXJNYW5hZ2VNb2RhbCc7CiAgdmFyIE1BTkFHRV9GT1JNX0lEID0gJ2RyaXZlck1hbmFnZUZvcm0nOwogIHZhciBNQU5BR0VfU0VMRUNUX0lEID0gJ2RyaXZlck1hbmFnZVNlbGVjdCc7CiAgdmFyIE1BTkFHRV9NT0RFX0lEID0gJ2RyaXZlck1hbmFnZU1vZGUnOwogIHZhciBNQU5BR0VfT1JJR0lOQUxfUEhPTkVfSUQgPSAnZHJpdmVyRWRpdE9yaWdpbmFsUGhvbmUnOwogIHZhciBNQU5BR0VfTkFNRV9JRCA9ICdkcml2ZXJNYW5hZ2VOYW1lJzsKICB2YXIgTUFOQUdFX1BIT05FX0lEID0gJ2RyaXZlck1hbmFnZVBob25lJzsKICB2YXIgTUFOQUdFX1RSSUdHRVJfU0VMRUNUT1IgPSAnLmRyaXZlci1tb2RhbC1idG4uc2Vjb25kYXJ5JzsKICB2YXIgQVBJX1VSTCA9ICdhcGkvbGl2cmV1cnMucGhwJzsKICB2YXIgZHJpdmVyQ2FjaGUgPSB7CiAgICBsYW5jb246IFtdLAogICAgcGVsaXNzYW5uZTogW10KICB9OwoKICBmdW5jdGlvbiAkKGlkKSB7CiAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogIH0KCiAgZnVuY3Rpb24gc2FmZVRvYXN0KG1zZywgdHlwZSkgewogICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAnZnVuY3Rpb24nKSB7CiAgICAgIHdpbmRvdy5zaG93VG9hc3QobXNnLCB0eXBlIHx8ICdpbmZvJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHdpbmRvdy5hbGVydChtc2cpOwogIH0KCiAgZnVuY3Rpb24gc2FuaXRpemVEaWdpdHModmFsKSB7CiAgICByZXR1cm4gU3RyaW5nKHZhbCB8fCAnJykucmVwbGFjZSgvXEQvZywgJycpOwogIH0KCiAgZnVuY3Rpb24gbm9ybWFsaXplRHJpdmVyUGhvbmUocmF3KSB7CiAgICB2YXIgdiA9IFN0cmluZyhyYXcgfHwgJycpLnRyaW0oKTsKICAgIGlmICghdikgcmV0dXJuICcnOwoKICAgIHZhciBkaWdpdHMgPSBzYW5pdGl6ZURpZ2l0cyh2KTsKCiAgICAvLyAwMDMzWFhYWFhYWFhYID0+IDMzWFhYWFhYWFhYCiAgICBpZiAoZGlnaXRzLmluZGV4T2YoJzAwMzMnKSA9PT0gMCkgewogICAgICBkaWdpdHMgPSAnMzMnICsgZGlnaXRzLnNsaWNlKDQpOwogICAgfQogICAgLy8gMFhYWFhYWFhYWCAoMTAgY2hpZmZyZXMpID0+IDMzWFhYWFhYWFhYCiAgICBpZiAoZGlnaXRzLmxlbmd0aCA9PT0gMTAgJiYgZGlnaXRzLmNoYXJBdCgwKSA9PT0gJzAnKSB7CiAgICAgIGRpZ2l0cyA9ICczMycgKyBkaWdpdHMuc2xpY2UoMSk7CiAgICB9CiAgICAvLyBWYWxpZGF0aW9uIG1pbmltYWxlIEZSOiAzMyArIDkgY2hpZmZyZXMKICAgIGlmICghL14zM1xkezl9JC8udGVzdChkaWdpdHMpKSByZXR1cm4gJyc7CiAgICByZXR1cm4gZGlnaXRzOwogIH0KCiAgZnVuY3Rpb24gZ2V0UG9pbnRWZW50ZSgpIHsKICAgIHZhciBwdiA9ICQoUFZfSUQpOwogICAgdmFyIGRldmljZVBvc0FwaSA9IHdpbmRvdy5hcHBEZXZpY2VQb2ludFZlbnRlIHx8IG51bGw7CiAgICB2YXIgcG9pbnRWZW50ZSA9IHB2ID8gU3RyaW5nKHB2LnZhbHVlIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogJyc7CgogICAgaWYgKCFwb2ludFZlbnRlICYmIGRldmljZVBvc0FwaSAmJiB0eXBlb2YgZGV2aWNlUG9zQXBpLmdldCA9PT0gJ2Z1bmN0aW9uJykgewogICAgICBwb2ludFZlbnRlID0gZGV2aWNlUG9zQXBpLmdldCgpIHx8ICcnOwogICAgfQoKICAgIGlmIChwb2ludFZlbnRlICE9PSAnbGFuY29uJyAmJiBwb2ludFZlbnRlICE9PSAncGVsaXNzYW5uZScpIHsKICAgICAgcmV0dXJuICcnOwogICAgfQoKICAgIHJldHVybiBwb2ludFZlbnRlOwogIH0KCiAgZnVuY3Rpb24gZ2V0UG9pbnRWZW50ZUxhYmVsKHBvaW50VmVudGUpIHsKICAgIHJldHVybiBwb2ludFZlbnRlID09PSAncGVsaXNzYW5uZScgPyAnUMOpbGlzc2FubmUnIDogJ0xhbsOnb24nOwogIH0KCiAgZnVuY3Rpb24gZ2V0RHJpdmVyc0ZvclBvaW50VmVudGUocG9pbnRWZW50ZSkgewogICAgaWYgKHBvaW50VmVudGUgIT09ICdsYW5jb24nICYmIHBvaW50VmVudGUgIT09ICdwZWxpc3Nhbm5lJykgcmV0dXJuIFtdOwogICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZHJpdmVyQ2FjaGVbcG9pbnRWZW50ZV0pID8gZHJpdmVyQ2FjaGVbcG9pbnRWZW50ZV0gOiBbXTsKICB9CgogIGZ1bmN0aW9uIGZpbmREcml2ZXJCeVBob25lKHBvaW50VmVudGUsIHBob25lKSB7CiAgICB2YXIgbGlzdCA9IGdldERyaXZlcnNGb3JQb2ludFZlbnRlKHBvaW50VmVudGUpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoU3RyaW5nKGxpc3RbaV0udGVsZXBob25lIHx8ICcnKSA9PT0gU3RyaW5nKHBob25lIHx8ICcnKSkgewogICAgICAgIHJldHVybiBsaXN0W2ldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGVkRHJpdmVySGVscCgpIHsKICAgIHZhciBwb2ludFZlbnRlID0gZ2V0UG9pbnRWZW50ZSgpOwogICAgdmFyIHNlbGVjdCA9ICQoRFJJVkVSX1NFTEVDVF9JRCk7CiAgICB2YXIgaGVscCA9ICQoRFJJVkVSX1NFTEVDVEVEX1BIT05FX0hFTFBfSUQpOwogICAgdmFyIGRyaXZlcjsKICAgIGlmICghaGVscCB8fCAhc2VsZWN0KSByZXR1cm47CgogICAgZHJpdmVyID0gZmluZERyaXZlckJ5UGhvbmUocG9pbnRWZW50ZSwgc2VsZWN0LnZhbHVlKTsKICAgIGlmICghZHJpdmVyKSB7CiAgICAgIGhlbHAudGV4dENvbnRlbnQgPSAnU8OpbGVjdGlvbm5leiB1biBsaXZyZXVyIHBvdXIgYWZmaWNoZXIgc29uIG51bcOpcm8uJzsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGhlbHAudGV4dENvbnRlbnQgPSAnTnVtw6lybyBzw6lsZWN0aW9ubsOpIDogKycgKyBTdHJpbmcoZHJpdmVyLnRlbGVwaG9uZSB8fCAnJyk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJEcml2ZXJTZWxlY3QocG9pbnRWZW50ZSkgewogICAgdmFyIHNlbGVjdCA9ICQoRFJJVkVSX1NFTEVDVF9JRCk7CiAgICB2YXIgbGlzdCA9IGdldERyaXZlcnNGb3JQb2ludFZlbnRlKHBvaW50VmVudGUpOwogICAgdmFyIGk7CiAgICB2YXIgb3B0aW9uOwoKICAgIGlmICghc2VsZWN0KSByZXR1cm47CiAgICBzZWxlY3QuaW5uZXJIVE1MID0gJyc7CgogICAgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICBvcHRpb24udmFsdWUgPSAnJzsKICAgIG9wdGlvbi50ZXh0Q29udGVudCA9IGxpc3QubGVuZ3RoID8gJ0Nob2lzaXIgdW4gbGl2cmV1cicgOiAnQXVjdW4gbGl2cmV1ciBlbnJlZ2lzdHLDqSc7CiAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgb3B0aW9uLnZhbHVlID0gbGlzdFtpXS50ZWxlcGhvbmU7CiAgICAgIG9wdGlvbi50ZXh0Q29udGVudCA9IGxpc3RbaV0ubm9tICsgJyAtICsnICsgbGlzdFtpXS50ZWxlcGhvbmU7CiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgfQoKICAgIHVwZGF0ZVNlbGVjdGVkRHJpdmVySGVscCgpOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyRHJpdmVyTWFuYWdlclNlbGVjdChwb2ludFZlbnRlKSB7CiAgICB2YXIgc2VsZWN0ID0gJChNQU5BR0VfU0VMRUNUX0lEKTsKICAgIHZhciBsaXN0ID0gZ2V0RHJpdmVyc0ZvclBvaW50VmVudGUocG9pbnRWZW50ZSk7CiAgICB2YXIgaTsKICAgIHZhciBvcHRpb247CgogICAgaWYgKCFzZWxlY3QpIHJldHVybjsKICAgIHNlbGVjdC5pbm5lckhUTUwgPSAnJzsKCiAgICBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgIG9wdGlvbi52YWx1ZSA9ICcnOwogICAgb3B0aW9uLnRleHRDb250ZW50ID0gJ05vdXZlYXUgbGl2cmV1cic7CiAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgb3B0aW9uLnZhbHVlID0gbGlzdFtpXS50ZWxlcGhvbmU7CiAgICAgIG9wdGlvbi50ZXh0Q29udGVudCA9IGxpc3RbaV0ubm9tICsgJyAtICsnICsgbGlzdFtpXS50ZWxlcGhvbmU7CiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVzZXREcml2ZXJNYW5hZ2VyRm9ybSgpIHsKICAgIHZhciBtb2RlID0gJChNQU5BR0VfTU9ERV9JRCk7CiAgICB2YXIgb3JpZ2luYWxQaG9uZSA9ICQoTUFOQUdFX09SSUdJTkFMX1BIT05FX0lEKTsKICAgIHZhciBuYW1lSW5wdXQgPSAkKE1BTkFHRV9OQU1FX0lEKTsKICAgIHZhciBwaG9uZUlucHV0ID0gJChNQU5BR0VfUEhPTkVfSUQpOwogICAgdmFyIHNlbGVjdCA9ICQoTUFOQUdFX1NFTEVDVF9JRCk7CgogICAgaWYgKG1vZGUpIG1vZGUudmFsdWUgPSAnY3JlYXRlJzsKICAgIGlmIChvcmlnaW5hbFBob25lKSBvcmlnaW5hbFBob25lLnZhbHVlID0gJyc7CiAgICBpZiAobmFtZUlucHV0KSBuYW1lSW5wdXQudmFsdWUgPSAnJzsKICAgIGlmIChwaG9uZUlucHV0KSBwaG9uZUlucHV0LnZhbHVlID0gJyc7CiAgICBpZiAoc2VsZWN0KSBzZWxlY3QudmFsdWUgPSAnJzsKICB9CgogIGZ1bmN0aW9uIGZpbGxEcml2ZXJNYW5hZ2VyRm9ybShwb2ludFZlbnRlLCBwaG9uZSkgewogICAgdmFyIGRyaXZlciA9IGZpbmREcml2ZXJCeVBob25lKHBvaW50VmVudGUsIHBob25lKTsKICAgIHZhciBtb2RlID0gJChNQU5BR0VfTU9ERV9JRCk7CiAgICB2YXIgb3JpZ2luYWxQaG9uZSA9ICQoTUFOQUdFX09SSUdJTkFMX1BIT05FX0lEKTsKICAgIHZhciBuYW1lSW5wdXQgPSAkKE1BTkFHRV9OQU1FX0lEKTsKICAgIHZhciBwaG9uZUlucHV0ID0gJChNQU5BR0VfUEhPTkVfSUQpOwoKICAgIGlmICghZHJpdmVyKSB7CiAgICAgIHJlc2V0RHJpdmVyTWFuYWdlckZvcm0oKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChtb2RlKSBtb2RlLnZhbHVlID0gJ3VwZGF0ZSc7CiAgICBpZiAob3JpZ2luYWxQaG9uZSkgb3JpZ2luYWxQaG9uZS52YWx1ZSA9IFN0cmluZyhkcml2ZXIudGVsZXBob25lIHx8ICcnKTsKICAgIGlmIChuYW1lSW5wdXQpIG5hbWVJbnB1dC52YWx1ZSA9IFN0cmluZyhkcml2ZXIubm9tIHx8ICcnKTsKICAgIGlmIChwaG9uZUlucHV0KSBwaG9uZUlucHV0LnZhbHVlID0gJzAnICsgU3RyaW5nKGRyaXZlci50ZWxlcGhvbmUgfHwgJycpLnJlcGxhY2UoL14zMy8sICcnKTsKICB9CgogIGZ1bmN0aW9uIGZldGNoRHJpdmVycyhwb2ludFZlbnRlLCBvbkRvbmUpIHsKICAgIGlmICghd2luZG93LmpRdWVyeSB8fCAhd2luZG93LmpRdWVyeS5hamF4KSB7CiAgICAgIHNhZmVUb2FzdCgnRXJyZXVyOiBqUXVlcnkgaW5kaXNwb25pYmxlLicsICdlcnJvcicpOwogICAgICByZXR1cm47CiAgICB9CgogICAgd2luZG93LmpRdWVyeS5hamF4KHsKICAgICAgdHlwZTogJ0dFVCcsCiAgICAgIHVybDogQVBJX1VSTCwKICAgICAgZGF0YVR5cGU6ICdqc29uJywKICAgICAgY2FjaGU6IGZhbHNlLAogICAgICBkYXRhOiB7IHBvaW50X3ZlbnRlOiBwb2ludFZlbnRlIH0sCiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3ApIHsKICAgICAgICBpZiAoIXJlc3AgfHwgIXJlc3Aub2sgfHwgIXJlc3AuZGF0YSkgewogICAgICAgICAgc2FmZVRvYXN0KChyZXNwICYmIHJlc3AuZXJyb3IpID8gcmVzcC5lcnJvciA6ICdJbXBvc3NpYmxlIGRlIGNoYXJnZXIgbGVzIGxpdnJldXJzLicsICdlcnJvcicpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZHJpdmVyQ2FjaGVbcG9pbnRWZW50ZV0gPSBBcnJheS5pc0FycmF5KHJlc3AuZGF0YS5kcml2ZXJzKSA/IHJlc3AuZGF0YS5kcml2ZXJzIDogW107CiAgICAgICAgcmVuZGVyRHJpdmVyU2VsZWN0KHBvaW50VmVudGUpOwogICAgICAgIHJlbmRlckRyaXZlck1hbmFnZXJTZWxlY3QocG9pbnRWZW50ZSk7CgogICAgICAgIGlmICh0eXBlb2Ygb25Eb25lID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICBvbkRvbmUoZHJpdmVyQ2FjaGVbcG9pbnRWZW50ZV0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgIHNhZmVUb2FzdCgnRXJyZXVyIHLDqXNlYXUgbG9ycyBkdSBjaGFyZ2VtZW50IGRlcyBsaXZyZXVycy4nLCAnZXJyb3InKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBpc01hbmFnZU9wZW4oKSB7CiAgICB2YXIgbW9kYWwgPSAkKE1BTkFHRV9NT0RBTF9JRCk7CiAgICByZXR1cm4gISEobW9kYWwgJiYgbW9kYWwuc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyk7CiAgfQoKICBmdW5jdGlvbiBlbnN1cmVNYW5hZ2VNb2RhbE1vdW50ZWRBdEJvZHkoKSB7CiAgICB2YXIgYmcgPSAkKE1BTkFHRV9CR19JRCk7CiAgICB2YXIgbW9kYWwgPSAkKE1BTkFHRV9NT0RBTF9JRCk7CgogICAgaWYgKGJnICYmIGJnLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmJvZHkpIHsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiZyk7CiAgICB9CiAgICBpZiAobW9kYWwgJiYgbW9kYWwucGFyZW50Tm9kZSAhPT0gZG9jdW1lbnQuYm9keSkgewogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1vZGFsKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHN0b3BFdmVudFByb3BhZ2F0aW9uKGUpIHsKICAgIGlmIChlKSBlLnN0b3BQcm9wYWdhdGlvbigpOwogIH0KCiAgZnVuY3Rpb24gaXNPcGVuKCkgewogICAgdmFyIG1vZGFsID0gJChNT0RBTF9JRCk7CiAgICByZXR1cm4gISEobW9kYWwgJiYgbW9kYWwuc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyk7CiAgfQoKICBmdW5jdGlvbiBvcGVuTW9kYWwoKSB7CiAgICB2YXIgYmcgPSAkKEJHX0lEKTsKICAgIHZhciBtb2RhbCA9ICQoTU9EQUxfSUQpOwogICAgdmFyIGRldmljZVBvc0FwaSA9IHdpbmRvdy5hcHBEZXZpY2VQb2ludFZlbnRlIHx8IG51bGw7CiAgICB2YXIgc2F2ZWRQb2ludFZlbnRlID0gJyc7CiAgICB2YXIgcHYgPSAkKFBWX0lEKTsKICAgIGlmICghYmcgfHwgIW1vZGFsKSByZXR1cm47CgogICAgaWYgKGRldmljZVBvc0FwaSAmJiB0eXBlb2YgZGV2aWNlUG9zQXBpLmdldCA9PT0gJ2Z1bmN0aW9uJykgewogICAgICBzYXZlZFBvaW50VmVudGUgPSBkZXZpY2VQb3NBcGkuZ2V0KCk7CiAgICB9CiAgICBpZiAoIXNhdmVkUG9pbnRWZW50ZSkgewogICAgICBzYWZlVG9hc3QoJ1ZldWlsbGV6IGTigJlhYm9yZCBkw6lmaW5pciBsZSBwb2ludCBkZSB2ZW50ZSBwYXIgZMOpZmF1dCBkZSBs4oCZYXBwYXJlaWwuJywgJ2Vycm9yJyk7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93Lm9wZW5EZXZpY2VQb3NDaG9vc2VyID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgd2luZG93Lm9wZW5EZXZpY2VQb3NDaG9vc2VyKCk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHB2KSBwdi52YWx1ZSA9IHNhdmVkUG9pbnRWZW50ZTsKCiAgICBiZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgnaXMtdmlzaWJsZScpOwogICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICdmYWxzZScpOwogICAgYmcuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICdmYWxzZScpOwogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdtb2RhbC1vcGVuLWRyaXZlcicpOwoKICAgIGZldGNoRHJpdmVycyhzYXZlZFBvaW50VmVudGUsIGZ1bmN0aW9uKGRyaXZlcnMpIHsKICAgICAgaWYgKCFkcml2ZXJzLmxlbmd0aCkgewogICAgICAgIHNhZmVUb2FzdCgnQXVjdW4gbGl2cmV1ciBlbnJlZ2lzdHLDqSBwb3VyICcgKyBnZXRQb2ludFZlbnRlTGFiZWwoc2F2ZWRQb2ludFZlbnRlKSArICcuJywgJ2luZm8nKTsKICAgICAgfQogICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICB0cnkgeyBpZiAoJChEUklWRVJfU0VMRUNUX0lEKSkgJChEUklWRVJfU0VMRUNUX0lEKS5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQogICAgICB9LCAxMCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGNsb3NlTW9kYWwoKSB7CiAgICB2YXIgYmcgPSAkKEJHX0lEKTsKICAgIHZhciBtb2RhbCA9ICQoTU9EQUxfSUQpOwoKICAgIGlmIChpc01hbmFnZU9wZW4oKSkgewogICAgICBjbG9zZU1hbmFnZU1vZGFsKCk7CiAgICB9CiAgICBpZiAobW9kYWwpIHsKICAgICAgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgbW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgnaXMtdmlzaWJsZScpOwogICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgIH0KICAgIGlmIChiZykgewogICAgICBiZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBiZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgIH0KICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbW9kYWwtb3Blbi1kcml2ZXInKTsKICB9CgogIGZ1bmN0aW9uIHN1Ym1pdE1vZGFsKCkgewogICAgdmFyIHBvaW50VmVudGUgPSBnZXRQb2ludFZlbnRlKCk7CiAgICB2YXIgc2VsZWN0ID0gJChEUklWRVJfU0VMRUNUX0lEKTsKICAgIHZhciBwaG9uZSA9IHNlbGVjdCA/IFN0cmluZyhzZWxlY3QudmFsdWUgfHwgJycpIDogJyc7CgogICAgaWYgKCFwb2ludFZlbnRlKSB7CiAgICAgIHNhZmVUb2FzdCgnUG9pbnQgZGUgdmVudGUgaW52YWxpZGUuJywgJ2Vycm9yJyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIXBob25lKSB7CiAgICAgIHNhZmVUb2FzdCgnVmV1aWxsZXogc8OpbGVjdGlvbm5lciB1biBsaXZyZXVyLicsICdlcnJvcicpOwogICAgICB0cnkgeyBpZiAoc2VsZWN0KSBzZWxlY3QuZm9jdXMoKTsgfSBjYXRjaCAoZSkge30KICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghd2luZG93LmpRdWVyeSB8fCAhd2luZG93LmpRdWVyeS5hamF4KSB7CiAgICAgIHNhZmVUb2FzdCgnRXJyZXVyOiBqUXVlcnkgaW5kaXNwb25pYmxlIHBvdXIgbOKAmWVudm9pLicsICdlcnJvcicpOwogICAgICByZXR1cm47CiAgICB9CgogICAgd2luZG93LmpRdWVyeS5hamF4KHsKICAgICAgdHlwZTogJ1BPU1QnLAogICAgICB1cmw6ICdlbnJlZ2lzdHJlcl9saXZyZXVyLnBocCcsCiAgICAgIGRhdGFUeXBlOiAnanNvbicsCiAgICAgIGRhdGE6IHsgcGhvbmU6IHBob25lLCBwb2ludF92ZW50ZTogcG9pbnRWZW50ZSB9LAogICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwKSB7CiAgICAgICAgaWYgKHJlc3AgJiYgcmVzcC5vaykgewogICAgICAgICAgY2xvc2VNb2RhbCgpOwogICAgICAgICAgdmFyIHB2TGFiZWwgPSAocG9pbnRWZW50ZSA9PT0gJ3BlbGlzc2FubmUnKSA/ICdQw6lsaXNzYW5uZScgOiAnTGFuw6dvbic7CiAgICAgICAgICB2YXIgZHJpdmVyID0gZmluZERyaXZlckJ5UGhvbmUocG9pbnRWZW50ZSwgcGhvbmUpOwogICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXIgPyBkcml2ZXIubm9tIDogcGhvbmU7CiAgICAgICAgICB2YXIgbXNnID0gJ1NNUyBlbiBhdHRlbnRlIDogJyArIGRyaXZlck5hbWUgKyAnICgrJyArIHBob25lICsgJywgJyArIHB2TGFiZWwgKyAnKSc7CiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdpbmRleC5waHA/dG9hc3Q9JyArIGVuY29kZVVSSUNvbXBvbmVudChtc2cpICsgJyZ0b2FzdFR5cGU9c3VjY2Vzcyc7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBlcnIgPSAocmVzcCAmJiByZXNwLmVycm9yKSA/IHJlc3AuZXJyb3IgOiAiRXJyZXVyIGxvcnMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkdSBsaXZyZXVyLiI7CiAgICAgICAgc2FmZVRvYXN0KGVyciwgJ2Vycm9yJyk7CiAgICAgIH0sCiAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICBzYWZlVG9hc3QoIkVycmV1ciByw6lzZWF1IGxvcnMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkdSBsaXZyZXVyLiIsICdlcnJvcicpOwogICAgICB9CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIG9wZW5NYW5hZ2VNb2RhbCgpIHsKICAgIHZhciBiZyA9ICQoTUFOQUdFX0JHX0lEKTsKICAgIHZhciBtb2RhbCA9ICQoTUFOQUdFX01PREFMX0lEKTsKICAgIHZhciBwb2ludFZlbnRlID0gZ2V0UG9pbnRWZW50ZSgpOwoKICAgIGlmICghYmcgfHwgIW1vZGFsKSByZXR1cm47CgogICAgZW5zdXJlTWFuYWdlTW9kYWxNb3VudGVkQXRCb2R5KCk7CiAgICBpZiAoIXBvaW50VmVudGUpIHsKICAgICAgc2FmZVRvYXN0KCdQb2ludCBkZSB2ZW50ZSBpbnZhbGlkZS4nLCAnZXJyb3InKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJlbmRlckRyaXZlck1hbmFnZXJTZWxlY3QocG9pbnRWZW50ZSk7CiAgICByZXNldERyaXZlck1hbmFnZXJGb3JtKCk7CgogICAgYmcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoJ2lzLXZpc2libGUnKTsKICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsKICAgIGJnLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsKICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZHJpdmVyLW1hbmFnZS1tb2RhbC1vcGVuJyk7CgogICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7IGlmICgkKE1BTkFHRV9TRUxFQ1RfSUQpKSAkKE1BTkFHRV9TRUxFQ1RfSUQpLmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICB9LCAxMCk7CiAgfQoKICBmdW5jdGlvbiBjbG9zZU1hbmFnZU1vZGFsKCkgewogICAgdmFyIGJnID0gJChNQU5BR0VfQkdfSUQpOwogICAgdmFyIG1vZGFsID0gJChNQU5BR0VfTU9EQUxfSUQpOwogICAgaWYgKG1vZGFsKSB7CiAgICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXZpc2libGUnKTsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICB9CiAgICBpZiAoYmcpIHsKICAgICAgYmcuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgYmcuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICB9CiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2RyaXZlci1tYW5hZ2UtbW9kYWwtb3BlbicpOwogICAgcmVzZXREcml2ZXJNYW5hZ2VyRm9ybSgpOwoKICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICB2YXIgdHJpZ2dlcjsKICAgICAgaWYgKCFpc09wZW4oKSkgcmV0dXJuOwogICAgICB0cmlnZ2VyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihNQU5BR0VfVFJJR0dFUl9TRUxFQ1RPUik7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHRyaWdnZXIpIHRyaWdnZXIuZm9jdXMoKTsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0sIDEwKTsKICB9CgogIGZ1bmN0aW9uIHNhdmVEcml2ZXJNYW5hZ2VyRm9ybSgpIHsKICAgIHZhciBwb2ludFZlbnRlID0gZ2V0UG9pbnRWZW50ZSgpOwogICAgdmFyIG1vZGUgPSAkKE1BTkFHRV9NT0RFX0lEKTsKICAgIHZhciBvcmlnaW5hbFBob25lID0gJChNQU5BR0VfT1JJR0lOQUxfUEhPTkVfSUQpOwogICAgdmFyIG5hbWVJbnB1dCA9ICQoTUFOQUdFX05BTUVfSUQpOwogICAgdmFyIHBob25lSW5wdXQgPSAkKE1BTkFHRV9QSE9ORV9JRCk7CiAgICB2YXIgbmFtZSA9IG5hbWVJbnB1dCA/IFN0cmluZyhuYW1lSW5wdXQudmFsdWUgfHwgJycpLnRyaW0oKSA6ICcnOwogICAgdmFyIHBob25lID0gbm9ybWFsaXplRHJpdmVyUGhvbmUocGhvbmVJbnB1dCA/IHBob25lSW5wdXQudmFsdWUgOiAnJyk7CiAgICB2YXIgcGF5bG9hZDsKCiAgICBpZiAoIXBvaW50VmVudGUpIHsKICAgICAgc2FmZVRvYXN0KCdQb2ludCBkZSB2ZW50ZSBpbnZhbGlkZS4nLCAnZXJyb3InKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFuYW1lKSB7CiAgICAgIHNhZmVUb2FzdCgnTGUgbm9tIGR1IGxpdnJldXIgZXN0IG9ibGlnYXRvaXJlLicsICdlcnJvcicpOwogICAgICB0cnkgeyBpZiAobmFtZUlucHV0KSBuYW1lSW5wdXQuZm9jdXMoKTsgfSBjYXRjaCAoZSkge30KICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFwaG9uZSkgewogICAgICBzYWZlVG9hc3QoJ051bcOpcm8gaW52YWxpZGUuIEV4ZW1wbGU6IDA2MTg1MjkzNzUuJywgJ2Vycm9yJyk7CiAgICAgIHRyeSB7IGlmIChwaG9uZUlucHV0KSBwaG9uZUlucHV0LmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBwYXlsb2FkID0gewogICAgICBhY3Rpb246IChtb2RlICYmIG1vZGUudmFsdWUgPT09ICd1cGRhdGUnKSA/ICd1cGRhdGUnIDogJ2NyZWF0ZScsCiAgICAgIHBvaW50X3ZlbnRlOiBwb2ludFZlbnRlLAogICAgICBub206IG5hbWUsCiAgICAgIHRlbGVwaG9uZTogcGhvbmUsCiAgICAgIG9yaWdpbmFsX3Bob25lOiBvcmlnaW5hbFBob25lID8gU3RyaW5nKG9yaWdpbmFsUGhvbmUudmFsdWUgfHwgJycpIDogJycKICAgIH07CgogICAgd2luZG93LmpRdWVyeS5hamF4KHsKICAgICAgdHlwZTogJ1BPU1QnLAogICAgICB1cmw6IEFQSV9VUkwsCiAgICAgIGRhdGFUeXBlOiAnanNvbicsCiAgICAgIGRhdGE6IHBheWxvYWQsCiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3ApIHsKICAgICAgICBpZiAoIXJlc3AgfHwgIXJlc3Aub2spIHsKICAgICAgICAgIHNhZmVUb2FzdCgocmVzcCAmJiByZXNwLmVycm9yKSA/IHJlc3AuZXJyb3IgOiAnSW1wb3NzaWJsZSBk4oCZZW5yZWdpc3RyZXIgbGUgbGl2cmV1ci4nLCAnZXJyb3InKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2FmZVRvYXN0KCdMaXZyZXVyIGVucmVnaXN0csOpLicsICdzdWNjZXNzJyk7CiAgICAgICAgZmV0Y2hEcml2ZXJzKHBvaW50VmVudGUsIGZ1bmN0aW9uKCkgewogICAgICAgICAgcmVuZGVyRHJpdmVyU2VsZWN0KHBvaW50VmVudGUpOwogICAgICAgICAgcmVuZGVyRHJpdmVyTWFuYWdlclNlbGVjdChwb2ludFZlbnRlKTsKICAgICAgICAgIHJlc2V0RHJpdmVyTWFuYWdlckZvcm0oKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhocikgewogICAgICAgIHZhciByZXNwID0geGhyICYmIHhoci5yZXNwb25zZUpTT04gPyB4aHIucmVzcG9uc2VKU09OIDogbnVsbDsKICAgICAgICB2YXIgbXNnID0gKHJlc3AgJiYgcmVzcC5lcnJvcikgPyByZXNwLmVycm9yIDogJ0VycmV1ciByw6lzZWF1IGxvcnMgZGUgbOKAmWVucmVnaXN0cmVtZW50Lic7CiAgICAgICAgc2FmZVRvYXN0KG1zZywgJ2Vycm9yJyk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gZGVsZXRlRHJpdmVyKCkgewogICAgdmFyIHBvaW50VmVudGUgPSBnZXRQb2ludFZlbnRlKCk7CiAgICB2YXIgc2VsZWN0ID0gJChNQU5BR0VfU0VMRUNUX0lEKTsKICAgIHZhciBwaG9uZSA9IHNlbGVjdCA/IFN0cmluZyhzZWxlY3QudmFsdWUgfHwgJycpIDogJyc7CgogICAgaWYgKCFwb2ludFZlbnRlKSB7CiAgICAgIHNhZmVUb2FzdCgnUG9pbnQgZGUgdmVudGUgaW52YWxpZGUuJywgJ2Vycm9yJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghcGhvbmUpIHsKICAgICAgc2FmZVRvYXN0KCdTw6lsZWN0aW9ubmV6IHVuIGxpdnJldXIgw6Agc3VwcHJpbWVyLicsICdlcnJvcicpOwogICAgICByZXR1cm47CiAgICB9CgogICAgd2luZG93LmpRdWVyeS5hamF4KHsKICAgICAgdHlwZTogJ1BPU1QnLAogICAgICB1cmw6IEFQSV9VUkwsCiAgICAgIGRhdGFUeXBlOiAnanNvbicsCiAgICAgIGRhdGE6IHsKICAgICAgICBhY3Rpb246ICdkZWxldGUnLAogICAgICAgIHBvaW50X3ZlbnRlOiBwb2ludFZlbnRlLAogICAgICAgIHRlbGVwaG9uZTogcGhvbmUKICAgICAgfSwKICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcCkgewogICAgICAgIGlmICghcmVzcCB8fCAhcmVzcC5vaykgewogICAgICAgICAgc2FmZVRvYXN0KChyZXNwICYmIHJlc3AuZXJyb3IpID8gcmVzcC5lcnJvciA6ICdJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsZSBsaXZyZXVyLicsICdlcnJvcicpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzYWZlVG9hc3QoJ0xpdnJldXIgc3VwcHJpbcOpLicsICdzdWNjZXNzJyk7CiAgICAgICAgZmV0Y2hEcml2ZXJzKHBvaW50VmVudGUsIGZ1bmN0aW9uKCkgewogICAgICAgICAgcmVuZGVyRHJpdmVyU2VsZWN0KHBvaW50VmVudGUpOwogICAgICAgICAgcmVuZGVyRHJpdmVyTWFuYWdlclNlbGVjdChwb2ludFZlbnRlKTsKICAgICAgICAgIHJlc2V0RHJpdmVyTWFuYWdlckZvcm0oKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgIHNhZmVUb2FzdCgnRXJyZXVyIHLDqXNlYXUgbG9ycyBkZSBsYSBzdXBwcmVzc2lvbi4nLCAnZXJyb3InKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBiaW5kT25jZSgpIHsKICAgIHZhciBmb3JtID0gJChGT1JNX0lEKTsKICAgIHZhciBtb2RhbCA9ICQoTU9EQUxfSUQpOwogICAgdmFyIGJnID0gJChCR19JRCk7CiAgICB2YXIgc2VsZWN0ID0gJChEUklWRVJfU0VMRUNUX0lEKTsKICAgIHZhciBtYW5hZ2VGb3JtID0gJChNQU5BR0VfRk9STV9JRCk7CiAgICB2YXIgbWFuYWdlU2VsZWN0ID0gJChNQU5BR0VfU0VMRUNUX0lEKTsKICAgIHZhciBtYW5hZ2VQaG9uZSA9ICQoTUFOQUdFX1BIT05FX0lEKTsKICAgIHZhciBtYW5hZ2VCZyA9ICQoTUFOQUdFX0JHX0lEKTsKICAgIGlmICghZm9ybSB8fCAhbW9kYWwgfHwgIWJnIHx8ICFzZWxlY3QgfHwgIW1hbmFnZUZvcm0gfHwgIW1hbmFnZVNlbGVjdCB8fCAhbWFuYWdlQmcpIHJldHVybjsKICAgIGVuc3VyZU1hbmFnZU1vZGFsTW91bnRlZEF0Qm9keSgpOwoKICAgIGlmIChtb2RhbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnKSA9PT0gJzEnKSByZXR1cm47CiAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnLCAnMScpOwoKICAgIGlmIChtYW5hZ2VQaG9uZSkgewogICAgICBtYW5hZ2VQaG9uZS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjbGVhbiA9IHNhbml0aXplRGlnaXRzKG1hbmFnZVBob25lLnZhbHVlKS5zbGljZSgwLCAxNik7CiAgICAgICAgaWYgKG1hbmFnZVBob25lLnZhbHVlICE9PSBjbGVhbikgbWFuYWdlUGhvbmUudmFsdWUgPSBjbGVhbjsKICAgICAgfSk7CiAgICB9CgogICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICB1cGRhdGVTZWxlY3RlZERyaXZlckhlbHAoKTsKICAgIH0pOwoKICAgIG1hbmFnZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgZmlsbERyaXZlck1hbmFnZXJGb3JtKGdldFBvaW50VmVudGUoKSwgbWFuYWdlU2VsZWN0LnZhbHVlKTsKICAgIH0pOwoKICAgIC8vIEVTQyBjbG9zZQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgICAgdmFyIGtleSA9IGUua2V5IHx8ICcnOwogICAgICBpZiAoa2V5ICE9PSAnRXNjYXBlJykgcmV0dXJuOwogICAgICBpZiAoaXNNYW5hZ2VPcGVuKCkpIHsKICAgICAgICBjbG9zZU1hbmFnZU1vZGFsKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChpc09wZW4oKSkgY2xvc2VNb2RhbCgpOwogICAgfSk7CgogICAgYmcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKCFpc09wZW4oKSkgcmV0dXJuOwogICAgICBjbG9zZU1vZGFsKCk7CiAgICB9KTsKICAgIG1hbmFnZUJnLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgIGNsb3NlTWFuYWdlTW9kYWwoKTsKICAgIH0pOwoKICAgIG1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3RvcEV2ZW50UHJvcGFnYXRpb24pOwogICAgbWFuYWdlQmcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgY2xvc2VNYW5hZ2VNb2RhbCgpOwogICAgfSk7CiAgICAkKE1BTkFHRV9NT0RBTF9JRCkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdG9wRXZlbnRQcm9wYWdhdGlvbik7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3RvcEV2ZW50UHJvcGFnYXRpb24pOwogICAgbWFuYWdlRm9ybS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BFdmVudFByb3BhZ2F0aW9uKTsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24oZSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHN1Ym1pdE1vZGFsKCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwogICAgbWFuYWdlRm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgc2F2ZURyaXZlck1hbmFnZXJGb3JtKCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwogIH0KCiAgd2luZG93Lm9wZW5Ecml2ZXJQaG9uZU1vZGFsID0gZnVuY3Rpb24oKSB7IG9wZW5Nb2RhbCgpOyB9OwogIHdpbmRvdy5jbG9zZURyaXZlclBob25lTW9kYWwgPSBmdW5jdGlvbigpIHsgY2xvc2VNb2RhbCgpOyB9OwogIHdpbmRvdy5zdWJtaXREcml2ZXJQaG9uZSA9IGZ1bmN0aW9uKCkgeyBzdWJtaXRNb2RhbCgpOyB9OwogIHdpbmRvdy5vcGVuRHJpdmVyTWFuYWdlTW9kYWwgPSBmdW5jdGlvbigpIHsgb3Blbk1hbmFnZU1vZGFsKCk7IH07CiAgd2luZG93LmNsb3NlRHJpdmVyTWFuYWdlTW9kYWwgPSBmdW5jdGlvbigpIHsgY2xvc2VNYW5hZ2VNb2RhbCgpOyB9OwogIHdpbmRvdy5zYXZlRHJpdmVyTWFuYWdlckZvcm0gPSBmdW5jdGlvbigpIHsgc2F2ZURyaXZlck1hbmFnZXJGb3JtKCk7IH07CiAgd2luZG93LmRlbGV0ZVNlbGVjdGVkRHJpdmVyID0gZnVuY3Rpb24oKSB7IGRlbGV0ZURyaXZlcigpOyB9OwoKICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgYmluZE9uY2UpOwogIH0gZWxzZSB7CiAgICBiaW5kT25jZSgpOwogIH0KCn0pKHdpbmRvdywgZG9jdW1lbnQpOwo="
            }
        },
        {
            "path": "pointages/js/main.js",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 20813,
                "sha1": "b79d2d6c61cafbc8a267fa352e40bfc09cbcb0a6",
                "content_b64": "LyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvanMvbWFpbi5qcyB8IEfDqHJlIGxlcyBpbnRlcmFjdGlvbnMgVUkgZ2xvYmFsZXMsIGxlcyB0b2FzdHMsIGxlcyBtb2RhbGVzIGRlIGNvbmZpcm1hdGlvbiBldCBsZSBjaG9peCBkdSBwb2ludCBkZSB2ZW50ZSBwYXIgZMOpZmF1dC4gfCBFeHBvc2U6IHNob3dUb2FzdCwgY29uc3VtZVRvYXN0RnJvbVVybCwgc2hvd0NvbmZpcm1Nb2RhbCwgYXBwRGV2aWNlUG9pbnRWZW50ZSwgb3BlbkRldmljZVBvc0Nob29zZXIgfCBEw6lwZW5kIGRlOiBqUXVlcnksIHdpbmRvdy5sb2NhbFN0b3JhZ2UsIHdpbmRvdy5oaXN0b3J5LCBDdXN0b21FdmVudCwgZG9jdW1lbnQuYm9keS5wYWdlLWluZGV4IHwgSW1wYWN0ZTogVUksIMOpdGF0IGxvY2FsIGRlIGzigJlhcHAsIG5hdmlnYXRpb24gdmlhIHF1ZXJ5IHBhcmFtcywgw6l2w6luZW1lbnRzIERPTSB8IFRhYmxlczogYXVjdW5lICovCi8qIAoKVGVtcGxhdGUgMjA4OSBNZXRlb3IKCmh0dHA6Ly93d3cudG9vcGxhdGUuY29tL3ZpZXcvMjA4OS1tZXRlb3IKCiovCgpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCQpIHsKCgkndXNlIHN0cmljdCc7CgoKICAgICAgICAkKCcuY291bnRlcicpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLAogICAgICAgICAgICAgIGNvdW50VG8gPSAkdGhpcy5hdHRyKCdkYXRhLWNvdW50Jyk7CiAgICAgICAgICAKICAgICAgICAgICQoeyBjb3VudE51bTogJHRoaXMudGV4dCgpfSkuYW5pbWF0ZSh7CiAgICAgICAgICAgIGNvdW50TnVtOiBjb3VudFRvCiAgICAgICAgICB9LAoKICAgICAgICAgIHsKCiAgICAgICAgICAgIGR1cmF0aW9uOiA4MDAwLAogICAgICAgICAgICBlYXNpbmc6J2xpbmVhcicsCiAgICAgICAgICAgIHN0ZXA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICR0aGlzLnRleHQoTWF0aC5mbG9vcih0aGlzLmNvdW50TnVtKSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAkdGhpcy50ZXh0KHRoaXMuY291bnROdW0pOwogICAgICAgICAgICAgIC8vYWxlcnQoJ2ZpbmlzaGVkJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICB9KTsgIAogICAgICAgICAgCiAgICAgICAgfSk7CgoKCiAgICAgICAgJCgiLmIxIikuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCIucG9wIikuZmFkZUluKDMwMCk7CiAgICAgICAgICAgIAogICAgICAgIH0pOwoJCQoJCSQoIi5iMiIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJCgiLnBvcDIiKS5mYWRlSW4oMzAwKTsKICAgICAgICAgICAgCiAgICAgICAgfSk7CgkJCgkJJCgiLmIzIikuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCIucG9wMyIpLmZhZGVJbigzMDApOwogICAgICAgICAgICAKICAgICAgICB9KTsKCiAgICAgICAgJCgiLnBvcCA+IHNwYW4sIC5wb3AiKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICQoIi5wb3AiKS5mYWRlT3V0KDMwMCk7CiAgICAgICAgfSk7CgkJCgkJJCgiLnBvcDIgPiBzcGFuLCAucG9wMiIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJCgiLnBvcDIiKS5mYWRlT3V0KDMwMCk7CiAgICAgICAgfSk7CgkJCgkJJCgiLnBvcDMgPiBzcGFuLCAucG9wMyIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJCgiLnBvcDMiKS5mYWRlT3V0KDMwMCk7CiAgICAgICAgfSk7CgoKICAgICAgICAkKHdpbmRvdykub24oInNjcm9sbCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZigkKHdpbmRvdykuc2Nyb2xsVG9wKCkgPiAxMDApIHsKICAgICAgICAgICAgICAgICQoIi5oZWFkZXIiKS5hZGRDbGFzcygiYWN0aXZlIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvL3JlbW92ZSB0aGUgYmFja2dyb3VuZCBwcm9wZXJ0eSBzbyBpdCBjb21lcyB0cmFuc3BhcmVudCBhZ2FpbiAoZGVmaW5lZCBpbiB5b3VyIGNzcykKICAgICAgICAgICAgICAgJCgiLmhlYWRlciIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKCgkvKioqKioqKioqKioqKiogTWl4aXR1cCAoRmlsdGVyIFByb2plY3RzKSAqKioqKioqKioqKioqKioqKioqKiovCiAgICAJJCgnLnByb2plY3RzLWhvbGRlcicpLm1peGl0dXAoewogICAgICAgICAgICBlZmZlY3RzOiBbJ2ZhZGUnLCdncmF5c2NhbGUnXSwKICAgICAgICAgICAgZWFzaW5nOiAnc25hcCcsCiAgICAgICAgICAgIHRyYW5zaXRpb25TcGVlZDogNDAwCiAgICAgICAgfSk7Cgp9KTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIEFwcCBVSSBoZWxwZXJzOiBUb2FzdHMgKyBNb2RhbGUgZGUgY29uZmlybWF0aW9uIChzYW5zIEJvb3RzdHJhcCBUb2FzdCkgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwooZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgJCkgewogICd1c2Ugc3RyaWN0JzsKCiAgdmFyIFRPQVNUX0NPTlRBSU5FUl9JRCA9ICdhcHBUb2FzdENvbnRhaW5lcic7CiAgdmFyIENPTkZJUk1fQkFDS0RST1BfSUQgPSAnYXBwQ29uZmlybUJhY2tkcm9wJzsKICB2YXIgQ09ORklSTV9NT0RBTF9JRCA9ICdhcHBDb25maXJtTW9kYWwnOwogIHZhciBERVZJQ0VfUE9TX1NUT1JBR0VfS0VZID0gJ2RlZmF1bHRQb2ludFZlbnRlRGV2aWNlJzsKICB2YXIgREVWSUNFX1BPU19NT0RBTF9JRCA9ICdkZXZpY2VQb3NNb2RhbCc7CiAgdmFyIERFVklDRV9QT1NfQkFDS0RST1BfSUQgPSAnZGV2aWNlUG9zQmFja2Ryb3AnOwogIHZhciBERVZJQ0VfUE9TX0FMTE9XRURfVkFMVUVTID0gWydsYW5jb24nLCAncGVsaXNzYW5uZSddOwoKICBmdW5jdGlvbiBlbnN1cmVUb2FzdENvbnRhaW5lcigpIHsKICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChUT0FTVF9DT05UQUlORVJfSUQpOwogICAgaWYgKGNvbnRhaW5lcikgcmV0dXJuIGNvbnRhaW5lcjsKCiAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGNvbnRhaW5lci5pZCA9IFRPQVNUX0NPTlRBSU5FUl9JRDsKICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnYXBwLXRvYXN0LWNvbnRhaW5lcic7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICByZXR1cm4gY29udGFpbmVyOwogIH0KCiAgZnVuY3Rpb24gc2FmZVN0cmluZyh2YWwpIHsKICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiAnJzsKICAgIHJldHVybiBTdHJpbmcodmFsKTsKICB9CgogIGZ1bmN0aW9uIG5vcm1hbGl6ZVRvYXN0VHlwZSh0eXBlKSB7CiAgICB2YXIgdCA9ICh0eXBlIHx8ICdpbmZvJykudG9Mb3dlckNhc2UoKTsKICAgIGlmICh0ICE9PSAnc3VjY2VzcycgJiYgdCAhPT0gJ2Vycm9yJyAmJiB0ICE9PSAnaW5mbycpIHQgPSAnaW5mbyc7CiAgICByZXR1cm4gdDsKICB9CgogIGZ1bmN0aW9uIHNob3dUb2FzdEludGVybmFsKG1lc3NhZ2UsIHR5cGUsIG9wdGlvbnMpIHsKICAgIHZhciBtc2cgPSBzYWZlU3RyaW5nKG1lc3NhZ2UpLnRyaW0oKTsKICAgIGlmICghbXNnKSByZXR1cm47CgogICAgdmFyIHRvYXN0VHlwZSA9IG5vcm1hbGl6ZVRvYXN0VHlwZSh0eXBlKTsKICAgIHZhciBvcHRzID0gb3B0aW9ucyB8fCB7fTsKICAgIHZhciBkdXJhdGlvbiA9IHR5cGVvZiBvcHRzLmR1cmF0aW9uID09PSAnbnVtYmVyJyA/IG9wdHMuZHVyYXRpb24gOiAzMjAwOwogICAgdmFyIGNlbnRlcmVkSW5mb01lc3NhZ2UgPSAnRGVtYW5kZXIgYXUgRk9VIGRlIHLDqWFjdGl2ZXInOwoKICAgIHZhciBjb250YWluZXIgPSBlbnN1cmVUb2FzdENvbnRhaW5lcigpOwogICAgdmFyIHRvYXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB0b2FzdC5jbGFzc05hbWUgPSAnYXBwLXRvYXN0ICcgKyB0b2FzdFR5cGU7CiAgICBpZiAobXNnID09PSBjZW50ZXJlZEluZm9NZXNzYWdlKSB7CiAgICAgIHRvYXN0LmNsYXNzTmFtZSArPSAnIGFwcC10b2FzdC1jZW50ZXJlZC1tZXNzYWdlJzsKICAgIH0KCiAgICB2YXIgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgdGV4dC5jbGFzc05hbWUgPSAnYXBwLXRvYXN0LW1lc3NhZ2UnOwogICAgdGV4dC50ZXh0Q29udGVudCA9IG1zZzsKCiAgICB0b2FzdC5hcHBlbmRDaGlsZCh0ZXh0KTsKICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b2FzdCk7CgogICAgdmFyIGNsb3NlZCA9IGZhbHNlOwogICAgdmFyIHRpbWVvdXRJZCA9IG51bGw7CgogICAgZnVuY3Rpb24gY2xvc2VUb2FzdCgpIHsKICAgICAgaWYgKGNsb3NlZCkgcmV0dXJuOwogICAgICBjbG9zZWQgPSB0cnVlOwogICAgICBpZiAodGltZW91dElkKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7CiAgICAgIHRvYXN0LmNsYXNzTmFtZSA9IHRvYXN0LmNsYXNzTmFtZS5yZXBsYWNlKC9cYmlzLXZpc2libGVcYi9nLCAnJykudHJpbSgpOwogICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBpZiAodG9hc3QgJiYgdG9hc3QucGFyZW50Tm9kZSkgdG9hc3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0b2FzdCk7CiAgICAgIH0sIDIyMCk7CiAgICB9CgogICAgLy8gT3B0aW9ubmVsOiB0YXAvY2xpYyBzdXIgbGUgdG9hc3QgcG91ciBsZSBmZXJtZXIsIHNhbnMgYm91dG9uIGTDqWRpw6kKICAgIHRvYXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNsb3NlVG9hc3QoKTsKICAgIH0pOwoKICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICB0b2FzdC5jbGFzc05hbWUgKz0gJyBpcy12aXNpYmxlJzsKICAgIH0sIDEwKTsKCiAgICBpZiAoZHVyYXRpb24gPiAwKSB7CiAgICAgIHRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIGNsb3NlVG9hc3QoKTsKICAgICAgfSwgZHVyYXRpb24pOwogICAgfQogIH0KCiAgd2luZG93LnNob3dUb2FzdCA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHR5cGUsIG9wdGlvbnMpIHsKICAgIHNob3dUb2FzdEludGVybmFsKG1lc3NhZ2UsIHR5cGUsIG9wdGlvbnMpOwogIH07CgogIGZ1bmN0aW9uIG5vcm1hbGl6ZVBvaW50VmVudGUodmFsdWUpIHsKICAgIHZhciBub3JtYWxpemVkID0gc2FmZVN0cmluZyh2YWx1ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IERFVklDRV9QT1NfQUxMT1dFRF9WQUxVRVMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKG5vcm1hbGl6ZWQgPT09IERFVklDRV9QT1NfQUxMT1dFRF9WQUxVRVNbaV0pIHJldHVybiBub3JtYWxpemVkOwogICAgfQogICAgcmV0dXJuICcnOwogIH0KCiAgZnVuY3Rpb24gZ2V0RGVmYXVsdFBvaW50VmVudGVMYWJlbCh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSAncGVsaXNzYW5uZScgPyAnUMOpbGlzc2FubmUnIDogJ0xhbsOnb24nOwogIH0KCiAgZnVuY3Rpb24gZ2V0RGVmYXVsdFBvaW50VmVudGUoKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gbm9ybWFsaXplUG9pbnRWZW50ZSh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oREVWSUNFX1BPU19TVE9SQUdFX0tFWSkpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gJyc7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBkaXNwYXRjaERlZmF1bHRQb2ludFZlbnRlQ2hhbmdlZCh2YWx1ZSkgewogICAgdHJ5IHsKICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RlZmF1bHQtcG9pbnQtdmVudGU6Y2hhbmdlZCcsIHsKICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHZhbHVlIHx8ICcnIH0KICAgICAgfSkpOwogICAgfSBjYXRjaCAoZSkgewogICAgICB2YXIgZXZ0OwogICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHsKICAgICAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTsKICAgICAgICBldnQuaW5pdEV2ZW50KCdkZWZhdWx0LXBvaW50LXZlbnRlOmNoYW5nZWQnLCB0cnVlLCB0cnVlKTsKICAgICAgICBldnQuZGV0YWlsID0geyB2YWx1ZTogdmFsdWUgfHwgJycgfTsKICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHNldERlZmF1bHRQb2ludFZlbnRlKHZhbHVlKSB7CiAgICB2YXIgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBvaW50VmVudGUodmFsdWUpOwogICAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4gZmFsc2U7CiAgICB0cnkgewogICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oREVWSUNFX1BPU19TVE9SQUdFX0tFWSwgbm9ybWFsaXplZCk7CiAgICAgIGRpc3BhdGNoRGVmYXVsdFBvaW50VmVudGVDaGFuZ2VkKG5vcm1hbGl6ZWQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgZnVuY3Rpb24gY2xlYXJEZWZhdWx0UG9pbnRWZW50ZSgpIHsKICAgIHZhciBoYWRWYWx1ZSA9IGZhbHNlOwogICAgdHJ5IHsKICAgICAgaGFkVmFsdWUgPSAhIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShERVZJQ0VfUE9TX1NUT1JBR0VfS0VZKTsKICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKERFVklDRV9QT1NfU1RPUkFHRV9LRVkpOwogICAgfSBjYXRjaCAoZSkge30KICAgIGlmIChoYWRWYWx1ZSkgewogICAgICBkaXNwYXRjaERlZmF1bHRQb2ludFZlbnRlQ2hhbmdlZCgnJyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjbGVhckFwcExvY2FsRGF0YSgpIHsKICAgIHRyeSB7CiAgICAgIGNsZWFyRGVmYXVsdFBvaW50VmVudGUoKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGhhc0FwcExvY2FsRGF0YSgpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiAhIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShERVZJQ0VfUE9TX1NUT1JBR0VfS0VZKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgd2luZG93LmFwcERldmljZVBvaW50VmVudGUgPSB7CiAgICBzdG9yYWdlS2V5OiBERVZJQ0VfUE9TX1NUT1JBR0VfS0VZLAogICAgZ2V0OiBnZXREZWZhdWx0UG9pbnRWZW50ZSwKICAgIHNldDogc2V0RGVmYXVsdFBvaW50VmVudGUsCiAgICBjbGVhcjogY2xlYXJEZWZhdWx0UG9pbnRWZW50ZSwKICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplUG9pbnRWZW50ZSwKICAgIGxhYmVsOiBnZXREZWZhdWx0UG9pbnRWZW50ZUxhYmVsLAogICAgY2xlYXJBbGw6IGNsZWFyQXBwTG9jYWxEYXRhLAogICAgaGFzU3RvcmVkRGF0YTogaGFzQXBwTG9jYWxEYXRhCiAgfTsKCiAgZnVuY3Rpb24gZ2V0UXVlcnlQYXJhbShuYW1lKSB7CiAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoIHx8ICcnOwogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgnWz8mXScgKyBuYW1lICsgJz0oW14mXSopJywgJ2knKTsKICAgIHZhciBtYXRjaCA9IHJlLmV4ZWMocXVlcnkpOwogICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2hbMV0pIHJldHVybiBudWxsOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFsxXS5yZXBsYWNlKC9cKy9nLCAnICcpKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG1hdGNoWzFdOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVtb3ZlUXVlcnlQYXJhbXMocGFyYW1OYW1lcykgewogICAgaWYgKCF3aW5kb3cuaGlzdG9yeSB8fCAhd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKSByZXR1cm47CiAgICB2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgdmFyIGhhc2hJbmRleCA9IGhyZWYuaW5kZXhPZignIycpOwogICAgdmFyIGhhc2ggPSAnJzsKICAgIGlmIChoYXNoSW5kZXggPj0gMCkgewogICAgICBoYXNoID0gaHJlZi5zdWJzdHJpbmcoaGFzaEluZGV4KTsKICAgICAgaHJlZiA9IGhyZWYuc3Vic3RyaW5nKDAsIGhhc2hJbmRleCk7CiAgICB9CgogICAgdmFyIHFJbmRleCA9IGhyZWYuaW5kZXhPZignPycpOwogICAgaWYgKHFJbmRleCA8IDApIHJldHVybjsKCiAgICB2YXIgYmFzZSA9IGhyZWYuc3Vic3RyaW5nKDAsIHFJbmRleCk7CiAgICB2YXIgcXVlcnkgPSBocmVmLnN1YnN0cmluZyhxSW5kZXggKyAxKTsKICAgIHZhciBwYXJ0cyA9IHF1ZXJ5LnNwbGl0KCcmJyk7CiAgICB2YXIga2VwdCA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgcCA9IHBhcnRzW2ldOwogICAgICBpZiAoIXApIGNvbnRpbnVlOwogICAgICB2YXIga2V5ID0gcC5zcGxpdCgnPScpWzBdOwogICAgICB2YXIgc2hvdWxkUmVtb3ZlID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyYW1OYW1lcy5sZW5ndGg7IGorKykgewogICAgICAgIGlmIChrZXkgPT09IHBhcmFtTmFtZXNbal0pIHsKICAgICAgICAgIHNob3VsZFJlbW92ZSA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFzaG91bGRSZW1vdmUpIGtlcHQucHVzaChwKTsKICAgIH0KICAgIHZhciBuZXdVcmwgPSBiYXNlICsgKGtlcHQubGVuZ3RoID8gJz8nICsga2VwdC5qb2luKCcmJykgOiAnJykgKyBoYXNoOwogICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgbmV3VXJsKTsKICB9CgogIHdpbmRvdy5jb25zdW1lVG9hc3RGcm9tVXJsID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgdG9hc3RNc2cgPSBnZXRRdWVyeVBhcmFtKCd0b2FzdCcpOwogICAgaWYgKCF0b2FzdE1zZykgcmV0dXJuOwogICAgdmFyIHRvYXN0VHlwZSA9IGdldFF1ZXJ5UGFyYW0oJ3RvYXN0VHlwZScpIHx8ICdpbmZvJzsKICAgIHNob3dUb2FzdEludGVybmFsKHRvYXN0TXNnLCB0b2FzdFR5cGUsIHsgZHVyYXRpb246IDM2MDAgfSk7CiAgICByZW1vdmVRdWVyeVBhcmFtcyhbJ3RvYXN0JywgJ3RvYXN0VHlwZSddKTsKICB9OwoKICB2YXIgY29uZmlybVN0YXRlID0gewogICAgaXNPcGVuOiBmYWxzZSwKICAgIGNhbGxiYWNrOiBudWxsCiAgfTsKCiAgdmFyIGNvbmZpcm1FbHMgPSBudWxsOwoKICBmdW5jdGlvbiBjbG9zZUNvbmZpcm0ocmVzdWx0KSB7CiAgICBpZiAoIWNvbmZpcm1FbHMpIHJldHVybjsKICAgIGNvbmZpcm1TdGF0ZS5pc09wZW4gPSBmYWxzZTsKICAgIGNvbmZpcm1FbHMuYmFja2Ryb3Auc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIGNvbmZpcm1FbHMubW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCiAgICB2YXIgY2IgPSBjb25maXJtU3RhdGUuY2FsbGJhY2s7CiAgICBjb25maXJtU3RhdGUuY2FsbGJhY2sgPSBudWxsOwogICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykgY2IoISFyZXN1bHQpOwogIH0KCiAgZnVuY3Rpb24gZW5zdXJlQ29uZmlybU1vZGFsKCkgewogICAgaWYgKGNvbmZpcm1FbHMpIHJldHVybiBjb25maXJtRWxzOwoKICAgIHZhciBiYWNrZHJvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKENPTkZJUk1fQkFDS0RST1BfSUQpOwogICAgaWYgKCFiYWNrZHJvcCkgewogICAgICBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBiYWNrZHJvcC5pZCA9IENPTkZJUk1fQkFDS0RST1BfSUQ7CiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9ICdhcHAtbW9kYWwtYmFja2Ryb3AnOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJhY2tkcm9wKTsKICAgIH0KCiAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChDT05GSVJNX01PREFMX0lEKTsKICAgIHZhciB0aXRsZUVsLCBtZXNzYWdlRWwsIGNhbmNlbEJ0biwgY29uZmlybUJ0bjsKCiAgICBpZiAoIW1vZGFsKSB7CiAgICAgIG1vZGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIG1vZGFsLmlkID0gQ09ORklSTV9NT0RBTF9JRDsKICAgICAgbW9kYWwuY2xhc3NOYW1lID0gJ2FwcC1tb2RhbCc7CiAgICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgJ3RydWUnKTsKCiAgICAgIHRpdGxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpOwogICAgICB0aXRsZUVsLmlkID0gJ2FwcENvbmZpcm1UaXRsZSc7CiAgICAgIHRpdGxlRWwudGV4dENvbnRlbnQgPSAnQ29uZmlybWF0aW9uJzsKCiAgICAgIG1lc3NhZ2VFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKICAgICAgbWVzc2FnZUVsLmlkID0gJ2FwcENvbmZpcm1NZXNzYWdlJzsKICAgICAgbWVzc2FnZUVsLnRleHRDb250ZW50ID0gJyc7CgogICAgICB2YXIgYWN0aW9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBhY3Rpb25zLmNsYXNzTmFtZSA9ICdhcHAtbW9kYWwtYWN0aW9ucyc7CgogICAgICBjYW5jZWxCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgICAgY2FuY2VsQnRuLnR5cGUgPSAnYnV0dG9uJzsKICAgICAgY2FuY2VsQnRuLmNsYXNzTmFtZSA9ICdhcHAtbW9kYWwtYnRuIGNhbmNlbCc7CiAgICAgIGNhbmNlbEJ0bi5pZCA9ICdhcHBDb25maXJtQ2FuY2VsJzsKICAgICAgY2FuY2VsQnRuLnRleHRDb250ZW50ID0gJ0FubnVsZXInOwoKICAgICAgY29uZmlybUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgICBjb25maXJtQnRuLnR5cGUgPSAnYnV0dG9uJzsKICAgICAgY29uZmlybUJ0bi5jbGFzc05hbWUgPSAnYXBwLW1vZGFsLWJ0biBjb25maXJtJzsKICAgICAgY29uZmlybUJ0bi5pZCA9ICdhcHBDb25maXJtT2snOwogICAgICBjb25maXJtQnRuLnRleHRDb250ZW50ID0gJ09LJzsKCiAgICAgIGFjdGlvbnMuYXBwZW5kQ2hpbGQoY2FuY2VsQnRuKTsKICAgICAgYWN0aW9ucy5hcHBlbmRDaGlsZChjb25maXJtQnRuKTsKCiAgICAgIG1vZGFsLmFwcGVuZENoaWxkKHRpdGxlRWwpOwogICAgICBtb2RhbC5hcHBlbmRDaGlsZChtZXNzYWdlRWwpOwogICAgICBtb2RhbC5hcHBlbmRDaGlsZChhY3Rpb25zKTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbCk7CiAgICB9IGVsc2UgewogICAgICB0aXRsZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcENvbmZpcm1UaXRsZScpOwogICAgICBtZXNzYWdlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXBwQ29uZmlybU1lc3NhZ2UnKTsKICAgICAgY2FuY2VsQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcENvbmZpcm1DYW5jZWwnKTsKICAgICAgY29uZmlybUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBDb25maXJtT2snKTsKICAgIH0KCiAgICBjb25maXJtRWxzID0gewogICAgICBiYWNrZHJvcDogYmFja2Ryb3AsCiAgICAgIG1vZGFsOiBtb2RhbCwKICAgICAgdGl0bGVFbDogdGl0bGVFbCwKICAgICAgbWVzc2FnZUVsOiBtZXNzYWdlRWwsCiAgICAgIGNhbmNlbEJ0bjogY2FuY2VsQnRuLAogICAgICBjb25maXJtQnRuOiBjb25maXJtQnRuCiAgICB9OwoKICAgIGlmIChtb2RhbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnKSAhPT0gJzEnKSB7CiAgICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcsICcxJyk7CgogICAgICBiYWNrZHJvcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghY29uZmlybVN0YXRlLmlzT3BlbikgcmV0dXJuOwogICAgICAgIGNsb3NlQ29uZmlybShmYWxzZSk7CiAgICAgIH0pOwogICAgICBjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNsb3NlQ29uZmlybShmYWxzZSk7CiAgICAgIH0pOwogICAgICBjb25maXJtQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjbG9zZUNvbmZpcm0odHJ1ZSk7CiAgICAgIH0pOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgICAgIGlmICghY29uZmlybVN0YXRlLmlzT3BlbikgcmV0dXJuOwogICAgICAgIHZhciBrZXkgPSBlLmtleUNvZGUgfHwgZS53aGljaDsKICAgICAgICBpZiAoa2V5ID09PSAyNykgewogICAgICAgICAgY2xvc2VDb25maXJtKGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiBjb25maXJtRWxzOwogIH0KCiAgd2luZG93LnNob3dDb25maXJtTW9kYWwgPSBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykgewogICAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9OwogICAgdmFyIGNiID0gY2FsbGJhY2s7CgogICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygd2luZG93LlByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgIHJldHVybiBuZXcgd2luZG93LlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkgewogICAgICAgIHdpbmRvdy5zaG93Q29uZmlybU1vZGFsKG9wdHMsIGZ1bmN0aW9uKHJlc3VsdCkgeyByZXNvbHZlKCEhcmVzdWx0KTsgfSk7CiAgICAgIH0pOwogICAgfQoKICAgIHZhciBlbHMgPSBlbnN1cmVDb25maXJtTW9kYWwoKTsKICAgIGNvbmZpcm1TdGF0ZS5pc09wZW4gPSB0cnVlOwogICAgY29uZmlybVN0YXRlLmNhbGxiYWNrID0gdHlwZW9mIGNiID09PSAnZnVuY3Rpb24nID8gY2IgOiBudWxsOwoKICAgIGVscy50aXRsZUVsLnRleHRDb250ZW50ID0gc2FmZVN0cmluZyhvcHRzLnRpdGxlIHx8ICdDb25maXJtYXRpb24nKTsKICAgIGVscy5tZXNzYWdlRWwudGV4dENvbnRlbnQgPSBzYWZlU3RyaW5nKG9wdHMubWVzc2FnZSB8fCAnJyk7CiAgICBlbHMuY29uZmlybUJ0bi50ZXh0Q29udGVudCA9IHNhZmVTdHJpbmcob3B0cy5jb25maXJtVGV4dCB8fCAnT0snKTsKICAgIGVscy5jYW5jZWxCdG4udGV4dENvbnRlbnQgPSBzYWZlU3RyaW5nKG9wdHMuY2FuY2VsVGV4dCB8fCAnQW5udWxlcicpOwoKICAgIGVscy5iYWNrZHJvcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGVscy5tb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCiAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgdHJ5IHsgZWxzLmNvbmZpcm1CdG4uZm9jdXMoKTsgfSBjYXRjaCAoZSkge30KICAgIH0sIDEwKTsKICB9OwoKICB2YXIgZGV2aWNlUG9zRWxzID0gbnVsbDsKICB2YXIgZGV2aWNlUG9zU3RhdGUgPSB7CiAgICBpc09wZW46IGZhbHNlCiAgfTsKCiAgZnVuY3Rpb24gaXNJbmRleFBhZ2UoKSB7CiAgICByZXR1cm4gISEoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygncGFnZS1pbmRleCcpKTsKICB9CgogIGZ1bmN0aW9uIGVuc3VyZURldmljZVBvc01vZGFsKCkgewogICAgaWYgKGRldmljZVBvc0VscykgcmV0dXJuIGRldmljZVBvc0VsczsKCiAgICB2YXIgYmFja2Ryb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChERVZJQ0VfUE9TX0JBQ0tEUk9QX0lEKTsKICAgIGlmICghYmFja2Ryb3ApIHsKICAgICAgYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgYmFja2Ryb3AuaWQgPSBERVZJQ0VfUE9TX0JBQ0tEUk9QX0lEOwogICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSAnZGV2aWNlLXBvcy1iYWNrZHJvcCc7CiAgICAgIGJhY2tkcm9wLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJhY2tkcm9wKTsKICAgIH0KCiAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChERVZJQ0VfUE9TX01PREFMX0lEKTsKICAgIGlmICghbW9kYWwpIHsKICAgICAgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgbW9kYWwuaWQgPSBERVZJQ0VfUE9TX01PREFMX0lEOwogICAgICBtb2RhbC5jbGFzc05hbWUgPSAnZGV2aWNlLXBvcy1tb2RhbCc7CiAgICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgJ3RydWUnKTsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCAnZGV2aWNlUG9zVGl0bGUnKTsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgJ2RldmljZVBvc01lc3NhZ2UnKTsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICAgIG1vZGFsLmlubmVySFRNTCA9ICcnCiAgICAgICAgKyAnPGgzIGlkPSJkZXZpY2VQb3NUaXRsZSI+UG9pbnQgZGUgdmVudGUgcGFyIGTDqWZhdXQ8L2gzPicKICAgICAgICArICc8cCBpZD0iZGV2aWNlUG9zTWVzc2FnZSI+U8OpbGVjdGlvbm5leiBsZSBwb2ludCBkZSB2ZW50ZSBwYXIgZMOpZmF1dCBkZSBjZXQgYXBwYXJlaWwgYXZhbnQgZGUgY29udGludWVyLjwvcD4nCiAgICAgICAgKyAnPGZvcm0gaWQ9ImRldmljZVBvc0Zvcm0iPicKICAgICAgICArICcgIDxsYWJlbCBjbGFzcz0iZGV2aWNlLXBvcy1sYWJlbCIgZm9yPSJkZXZpY2VQb3NTZWxlY3QiPlBvaW50IGRlIHZlbnRlPC9sYWJlbD4nCiAgICAgICAgKyAnICA8c2VsZWN0IGlkPSJkZXZpY2VQb3NTZWxlY3QiIGNsYXNzPSJkZXZpY2UtcG9zLXNlbGVjdCIgcmVxdWlyZWQ+JwogICAgICAgICsgJyAgICA8b3B0aW9uIHZhbHVlPSIiPkNob2lzaXIgdW4gcG9pbnQgZGUgdmVudGU8L29wdGlvbj4nCiAgICAgICAgKyAnICAgIDxvcHRpb24gdmFsdWU9ImxhbmNvbiI+TGFuw6dvbjwvb3B0aW9uPicKICAgICAgICArICcgICAgPG9wdGlvbiB2YWx1ZT0icGVsaXNzYW5uZSI+UMOpbGlzc2FubmU8L29wdGlvbj4nCiAgICAgICAgKyAnICA8L3NlbGVjdD4nCiAgICAgICAgKyAnICA8ZGl2IGNsYXNzPSJkZXZpY2UtcG9zLWFjdGlvbnMiPicKICAgICAgICArICcgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJkZXZpY2UtcG9zLWJ0biBjb25maXJtIj5FbnJlZ2lzdHJlcjwvYnV0dG9uPicKICAgICAgICArICcgIDwvZGl2PicKICAgICAgICArICc8L2Zvcm0+JzsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbCk7CiAgICB9CgogICAgZGV2aWNlUG9zRWxzID0gewogICAgICBiYWNrZHJvcDogYmFja2Ryb3AsCiAgICAgIG1vZGFsOiBtb2RhbCwKICAgICAgZm9ybTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldmljZVBvc0Zvcm0nKSwKICAgICAgc2VsZWN0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV2aWNlUG9zU2VsZWN0JykKICAgIH07CgogICAgaWYgKG1vZGFsLmdldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcpICE9PSAnMScpIHsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJywgJzEnKTsKCiAgICAgIGlmIChkZXZpY2VQb3NFbHMuZm9ybSkgewogICAgICAgIGRldmljZVBvc0Vscy5mb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIHZhciBzYXZlZFZhbHVlOwogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgc2F2ZWRWYWx1ZSA9IG5vcm1hbGl6ZVBvaW50VmVudGUoZGV2aWNlUG9zRWxzLnNlbGVjdCA/IGRldmljZVBvc0Vscy5zZWxlY3QudmFsdWUgOiAnJyk7CiAgICAgICAgICBpZiAoIXNhdmVkVmFsdWUpIHsKICAgICAgICAgICAgc2hvd1RvYXN0SW50ZXJuYWwoJ1ZldWlsbGV6IHPDqWxlY3Rpb25uZXIgdW4gcG9pbnQgZGUgdmVudGUuJywgJ2Vycm9yJywgeyBkdXJhdGlvbjogMzIwMCB9KTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICghc2V0RGVmYXVsdFBvaW50VmVudGUoc2F2ZWRWYWx1ZSkpIHsKICAgICAgICAgICAgc2hvd1RvYXN0SW50ZXJuYWwoJ0ltcG9zc2libGUgZOKAmWVucmVnaXN0cmVyIGxlIHBvaW50IGRlIHZlbnRlIHN1ciBjZXQgYXBwYXJlaWwuJywgJ2Vycm9yJywgeyBkdXJhdGlvbjogMzYwMCB9KTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQoKICAgICAgICAgIGhpZGVEZXZpY2VQb3NNb2RhbCgpOwogICAgICAgICAgc2hvd1RvYXN0SW50ZXJuYWwoJ1BvaW50IGRlIHZlbnRlIHBhciBkw6lmYXV0IGVucmVnaXN0csOpIDogJyArIGdldERlZmF1bHRQb2ludFZlbnRlTGFiZWwoc2F2ZWRWYWx1ZSkgKyAnLicsICdzdWNjZXNzJywgeyBkdXJhdGlvbjogMjYwMCB9KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBkZXZpY2VQb3NFbHM7CiAgfQoKICBmdW5jdGlvbiBzaG93RGV2aWNlUG9zTW9kYWwoZm9yY2VPcGVuKSB7CiAgICB2YXIgZWxzID0gZW5zdXJlRGV2aWNlUG9zTW9kYWwoKTsKICAgIHZhciBjdXJyZW50VmFsdWUgPSBnZXREZWZhdWx0UG9pbnRWZW50ZSgpOwoKICAgIGlmICghZm9yY2VPcGVuICYmIGN1cnJlbnRWYWx1ZSkgcmV0dXJuOwoKICAgIGRldmljZVBvc1N0YXRlLmlzT3BlbiA9IHRydWU7CiAgICBpZiAoZWxzLnNlbGVjdCkgewogICAgICBlbHMuc2VsZWN0LnZhbHVlID0gY3VycmVudFZhbHVlIHx8ICcnOwogICAgfQoKICAgIGVscy5iYWNrZHJvcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGVscy5tb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGVscy5iYWNrZHJvcC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7CiAgICBlbHMubW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICdmYWxzZScpOwogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdkZXZpY2UtcG9zLW1vZGFsLW9wZW4nKTsKCiAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgdHJ5IHsgaWYgKGVscy5zZWxlY3QpIGVscy5zZWxlY3QuZm9jdXMoKTsgfSBjYXRjaCAoZSkge30KICAgIH0sIDEwKTsKICB9CgogIGZ1bmN0aW9uIGhpZGVEZXZpY2VQb3NNb2RhbCgpIHsKICAgIHZhciBlbHMgPSBlbnN1cmVEZXZpY2VQb3NNb2RhbCgpOwogICAgZGV2aWNlUG9zU3RhdGUuaXNPcGVuID0gZmFsc2U7CiAgICBlbHMuYmFja2Ryb3Auc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIGVscy5tb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgZWxzLmJhY2tkcm9wLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOwogICAgZWxzLm1vZGFsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOwogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdkZXZpY2UtcG9zLW1vZGFsLW9wZW4nKTsKICB9CgogIGZ1bmN0aW9uIG9wZW5EZXZpY2VQb3NDaG9vc2VyKGZvcmNlT3BlbikgewogICAgc2hvd0RldmljZVBvc01vZGFsKCEhZm9yY2VPcGVuKTsKICB9CgogIGZ1bmN0aW9uIGVuc3VyZURldmljZVBvc0NoYW5nZVNob3J0Y3V0KCkgewogICAgdmFyIGV4aXN0aW5nQnRuOwogICAgdmFyIGV4aXN0aW5nUmVzZXRCdG47CiAgICB2YXIgaGVhZGluZzsKICAgIHZhciBidG47CiAgICB2YXIgcmVzZXRCdG47CiAgICB2YXIgZGlzYWJsZWRSZXNldE1lc3NhZ2UgPSAnRGVtYW5kZXIgYXUgRk9VIGRlIHLDqWFjdGl2ZXInOwoKICAgIGlmICghaXNJbmRleFBhZ2UoKSkgcmV0dXJuOwoKICAgIGV4aXN0aW5nQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldmljZVBvc1F1aWNrQ2hhbmdlJyk7CiAgICBleGlzdGluZ1Jlc2V0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldmljZUxvY2FsRGF0YVJlc2V0Jyk7CiAgICBpZiAoZXhpc3RpbmdCdG4gJiYgZXhpc3RpbmdSZXNldEJ0bikgcmV0dXJuOwoKICAgIGhlYWRpbmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VjdGlvbi1oZWFkaW5nJyk7CiAgICBpZiAoIWhlYWRpbmcgfHwgIWhlYWRpbmcucGFyZW50Tm9kZSkgcmV0dXJuOwoKICAgIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgYnRuLnR5cGUgPSAnYnV0dG9uJzsKICAgIGJ0bi5pZCA9ICdkZXZpY2VQb3NRdWlja0NoYW5nZSc7CiAgICBidG4uY2xhc3NOYW1lID0gJ2RldmljZS1wb3MtcXVpY2stY2hhbmdlJzsKICAgIGJ0bi50ZXh0Q29udGVudCA9ICdQRFYgYXBwYXJlaWwgOiAnICsgKGdldERlZmF1bHRQb2ludFZlbnRlKCkgPyBnZXREZWZhdWx0UG9pbnRWZW50ZUxhYmVsKGdldERlZmF1bHRQb2ludFZlbnRlKCkpIDogJ25vbiBkw6lmaW5pJyk7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgb3BlbkRldmljZVBvc0Nob29zZXIodHJ1ZSk7CiAgICB9KTsKICAgIGhlYWRpbmcucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYnRuLCBoZWFkaW5nLm5leHRTaWJsaW5nKTsKCiAgICByZXNldEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgcmVzZXRCdG4udHlwZSA9ICdidXR0b24nOwogICAgcmVzZXRCdG4uaWQgPSAnZGV2aWNlTG9jYWxEYXRhUmVzZXQnOwogICAgcmVzZXRCdG4uY2xhc3NOYW1lID0gJ2RldmljZS1wb3MtcmVzZXQgaXMtZGlzYWJsZWQnOwogICAgcmVzZXRCdG4udGV4dENvbnRlbnQgPSAnU3VwcHJpbWVyIGxlcyBkb25uw6llcyBsb2NhbGVzJzsKICAgIHJlc2V0QnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7CiAgICByZXNldEJ0bi5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgZGlzYWJsZWRSZXNldE1lc3NhZ2UpOwogICAgcmVzZXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgc2hvd1RvYXN0SW50ZXJuYWwoZGlzYWJsZWRSZXNldE1lc3NhZ2UsICdpbmZvJywgeyBkdXJhdGlvbjogMjgwMCB9KTsKICAgIH0pOwogICAgcmVzZXRCdG4uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgICAgdmFyIGtleSA9IGUua2V5IHx8ICcnOwogICAgICBpZiAoa2V5ICE9PSAnRW50ZXInICYmIGtleSAhPT0gJyAnKSByZXR1cm47CgogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIHNob3dUb2FzdEludGVybmFsKGRpc2FibGVkUmVzZXRNZXNzYWdlLCAnaW5mbycsIHsgZHVyYXRpb246IDI4MDAgfSk7CiAgICB9KTsKCiAgICBidG4uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIHJlc2V0QnRuKTsKICB9CgogIGZ1bmN0aW9uIHJlZnJlc2hEZXZpY2VQb3NRdWlja0NoYW5nZUxhYmVsKCkgewogICAgdmFyIGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXZpY2VQb3NRdWlja0NoYW5nZScpOwogICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGdldERlZmF1bHRQb2ludFZlbnRlKCk7CiAgICBpZiAoIWJ0bikgcmV0dXJuOwogICAgYnRuLnRleHRDb250ZW50ID0gJ1BEViBhcHBhcmVpbCA6ICcgKyAoY3VycmVudFZhbHVlID8gZ2V0RGVmYXVsdFBvaW50VmVudGVMYWJlbChjdXJyZW50VmFsdWUpIDogJ25vbiBkw6lmaW5pJyk7CiAgfQoKICB3aW5kb3cub3BlbkRldmljZVBvc0Nob29zZXIgPSBmdW5jdGlvbigpIHsKICAgIG9wZW5EZXZpY2VQb3NDaG9vc2VyKHRydWUpOwogIH07CgogICQoZnVuY3Rpb24oKSB7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5jb25zdW1lVG9hc3RGcm9tVXJsID09PSAnZnVuY3Rpb24nKSB7CiAgICAgIHdpbmRvdy5jb25zdW1lVG9hc3RGcm9tVXJsKCk7CiAgICB9CgogICAgaWYgKHdpbmRvdy5fX2ZsYXNoVG9hc3QgJiYgd2luZG93Ll9fZmxhc2hUb2FzdC5tZXNzYWdlKSB7CiAgICAgIHNob3dUb2FzdEludGVybmFsKHdpbmRvdy5fX2ZsYXNoVG9hc3QubWVzc2FnZSwgd2luZG93Ll9fZmxhc2hUb2FzdC50eXBlIHx8ICdpbmZvJywgeyBkdXJhdGlvbjogd2luZG93Ll9fZmxhc2hUb2FzdC5kdXJhdGlvbiB8fCAzNjAwIH0pOwogICAgICBpZiAod2luZG93Ll9fZmxhc2hUb2FzdC5yZWRpcmVjdCkgewogICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB3aW5kb3cuX19mbGFzaFRvYXN0LnJlZGlyZWN0OwogICAgICAgIH0sIDkwMCk7CiAgICAgIH0KICAgICAgdHJ5IHsgZGVsZXRlIHdpbmRvdy5fX2ZsYXNoVG9hc3Q7IH0gY2F0Y2ggKGUpIHt9CiAgICB9CgogICAgaWYgKGlzSW5kZXhQYWdlKCkpIHsKICAgICAgZW5zdXJlRGV2aWNlUG9zTW9kYWwoKTsKICAgICAgZW5zdXJlRGV2aWNlUG9zQ2hhbmdlU2hvcnRjdXQoKTsKICAgICAgcmVmcmVzaERldmljZVBvc1F1aWNrQ2hhbmdlTGFiZWwoKTsKCiAgICAgIGlmICghZ2V0RGVmYXVsdFBvaW50VmVudGUoKSkgewogICAgICAgIHNob3dEZXZpY2VQb3NNb2RhbChmYWxzZSk7CiAgICAgIH0KCiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RlZmF1bHQtcG9pbnQtdmVudGU6Y2hhbmdlZCcsIGZ1bmN0aW9uKCkgewogICAgICAgIHJlZnJlc2hEZXZpY2VQb3NRdWlja0NoYW5nZUxhYmVsKCk7CiAgICAgIH0pOwogICAgfQogIH0pOwoKfSkod2luZG93LCBkb2N1bWVudCwgalF1ZXJ5KTs="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 20845,
                "sha1": "850d8541b6cecbb823ee39441fe27788a6b58c6c",
                "content_b64": "LyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvanMvbWFpbi5qcyB8IEfDqHJlIGxlcyBpbnRlcmFjdGlvbnMgVUkgZ2xvYmFsZXMsIGxlcyB0b2FzdHMsIGxlcyBtb2RhbGVzIG5hdGl2ZXMgZGUgY29uZmlybWF0aW9uIGV0IGxlIGNob2l4IGR1IHBvaW50IGRlIHZlbnRlIHBhciBkw6lmYXV0IHNhbnMgQm9vdHN0cmFwIEpTLiB8IEV4cG9zZTogc2hvd1RvYXN0LCBjb25zdW1lVG9hc3RGcm9tVXJsLCBzaG93Q29uZmlybU1vZGFsLCBhcHBEZXZpY2VQb2ludFZlbnRlLCBvcGVuRGV2aWNlUG9zQ2hvb3NlciB8IETDqXBlbmQgZGU6IGpRdWVyeSBsb2NhbCwgd2luZG93LmxvY2FsU3RvcmFnZSwgd2luZG93Lmhpc3RvcnksIEN1c3RvbUV2ZW50LCBkb2N1bWVudC5ib2R5LnBhZ2UtaW5kZXggfCBJbXBhY3RlOiBVSSwgw6l0YXQgbG9jYWwgZGUgbOKAmWFwcCwgbmF2aWdhdGlvbiB2aWEgcXVlcnkgcGFyYW1zLCDDqXbDqW5lbWVudHMgRE9NIHwgVGFibGVzOiBhdWN1bmUgKi8KLyogCgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKaHR0cDovL3d3dy50b29wbGF0ZS5jb20vdmlldy8yMDg5LW1ldGVvcgoKKi8KCmpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCkgewoKCSd1c2Ugc3RyaWN0JzsKCgogICAgICAgICQoJy5jb3VudGVyJykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksCiAgICAgICAgICAgICAgY291bnRUbyA9ICR0aGlzLmF0dHIoJ2RhdGEtY291bnQnKTsKICAgICAgICAgIAogICAgICAgICAgJCh7IGNvdW50TnVtOiAkdGhpcy50ZXh0KCl9KS5hbmltYXRlKHsKICAgICAgICAgICAgY291bnROdW06IGNvdW50VG8KICAgICAgICAgIH0sCgogICAgICAgICAgewoKICAgICAgICAgICAgZHVyYXRpb246IDgwMDAsCiAgICAgICAgICAgIGVhc2luZzonbGluZWFyJywKICAgICAgICAgICAgc3RlcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgJHRoaXMudGV4dChNYXRoLmZsb29yKHRoaXMuY291bnROdW0pKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICR0aGlzLnRleHQodGhpcy5jb3VudE51bSk7CiAgICAgICAgICAgICAgLy9hbGVydCgnZmluaXNoZWQnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIH0pOyAgCiAgICAgICAgICAKICAgICAgICB9KTsKCgoKICAgICAgICAkKCIuYjEiKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICQoIi5wb3AiKS5mYWRlSW4oMzAwKTsKICAgICAgICAgICAgCiAgICAgICAgfSk7CgkJCgkJJCgiLmIyIikuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCIucG9wMiIpLmZhZGVJbigzMDApOwogICAgICAgICAgICAKICAgICAgICB9KTsKCQkKCQkkKCIuYjMiKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICQoIi5wb3AzIikuZmFkZUluKDMwMCk7CiAgICAgICAgICAgIAogICAgICAgIH0pOwoKICAgICAgICAkKCIucG9wID4gc3BhbiwgLnBvcCIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJCgiLnBvcCIpLmZhZGVPdXQoMzAwKTsKICAgICAgICB9KTsKCQkKCQkkKCIucG9wMiA+IHNwYW4sIC5wb3AyIikuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCIucG9wMiIpLmZhZGVPdXQoMzAwKTsKICAgICAgICB9KTsKCQkKCQkkKCIucG9wMyA+IHNwYW4sIC5wb3AzIikuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCIucG9wMyIpLmZhZGVPdXQoMzAwKTsKICAgICAgICB9KTsKCgogICAgICAgICQod2luZG93KS5vbigic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmKCQod2luZG93KS5zY3JvbGxUb3AoKSA+IDEwMCkgewogICAgICAgICAgICAgICAgJCgiLmhlYWRlciIpLmFkZENsYXNzKCJhY3RpdmUiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBiYWNrZ3JvdW5kIHByb3BlcnR5IHNvIGl0IGNvbWVzIHRyYW5zcGFyZW50IGFnYWluIChkZWZpbmVkIGluIHlvdXIgY3NzKQogICAgICAgICAgICAgICAkKCIuaGVhZGVyIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgoKCS8qKioqKioqKioqKioqKiBNaXhpdHVwIChGaWx0ZXIgUHJvamVjdHMpICoqKioqKioqKioqKioqKioqKioqKi8KICAgIAkkKCcucHJvamVjdHMtaG9sZGVyJykubWl4aXR1cCh7CiAgICAgICAgICAgIGVmZmVjdHM6IFsnZmFkZScsJ2dyYXlzY2FsZSddLAogICAgICAgICAgICBlYXNpbmc6ICdzbmFwJywKICAgICAgICAgICAgdHJhbnNpdGlvblNwZWVkOiA0MDAKICAgICAgICB9KTsKCn0pOwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogQXBwIFVJIGhlbHBlcnM6IFRvYXN0cyArIE1vZGFsZSBkZSBjb25maXJtYXRpb24gKHNhbnMgQm9vdHN0cmFwIFRvYXN0KSAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCihmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50LCAkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICB2YXIgVE9BU1RfQ09OVEFJTkVSX0lEID0gJ2FwcFRvYXN0Q29udGFpbmVyJzsKICB2YXIgQ09ORklSTV9CQUNLRFJPUF9JRCA9ICdhcHBDb25maXJtQmFja2Ryb3AnOwogIHZhciBDT05GSVJNX01PREFMX0lEID0gJ2FwcENvbmZpcm1Nb2RhbCc7CiAgdmFyIERFVklDRV9QT1NfU1RPUkFHRV9LRVkgPSAnZGVmYXVsdFBvaW50VmVudGVEZXZpY2UnOwogIHZhciBERVZJQ0VfUE9TX01PREFMX0lEID0gJ2RldmljZVBvc01vZGFsJzsKICB2YXIgREVWSUNFX1BPU19CQUNLRFJPUF9JRCA9ICdkZXZpY2VQb3NCYWNrZHJvcCc7CiAgdmFyIERFVklDRV9QT1NfQUxMT1dFRF9WQUxVRVMgPSBbJ2xhbmNvbicsICdwZWxpc3Nhbm5lJ107CgogIGZ1bmN0aW9uIGVuc3VyZVRvYXN0Q29udGFpbmVyKCkgewogICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFRPQVNUX0NPTlRBSU5FUl9JRCk7CiAgICBpZiAoY29udGFpbmVyKSByZXR1cm4gY29udGFpbmVyOwoKICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgY29udGFpbmVyLmlkID0gVE9BU1RfQ09OVEFJTkVSX0lEOwogICAgY29udGFpbmVyLmNsYXNzTmFtZSA9ICdhcHAtdG9hc3QtY29udGFpbmVyJzsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKICAgIHJldHVybiBjb250YWluZXI7CiAgfQoKICBmdW5jdGlvbiBzYWZlU3RyaW5nKHZhbCkgewogICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykgcmV0dXJuICcnOwogICAgcmV0dXJuIFN0cmluZyh2YWwpOwogIH0KCiAgZnVuY3Rpb24gbm9ybWFsaXplVG9hc3RUeXBlKHR5cGUpIHsKICAgIHZhciB0ID0gKHR5cGUgfHwgJ2luZm8nKS50b0xvd2VyQ2FzZSgpOwogICAgaWYgKHQgIT09ICdzdWNjZXNzJyAmJiB0ICE9PSAnZXJyb3InICYmIHQgIT09ICdpbmZvJykgdCA9ICdpbmZvJzsKICAgIHJldHVybiB0OwogIH0KCiAgZnVuY3Rpb24gc2hvd1RvYXN0SW50ZXJuYWwobWVzc2FnZSwgdHlwZSwgb3B0aW9ucykgewogICAgdmFyIG1zZyA9IHNhZmVTdHJpbmcobWVzc2FnZSkudHJpbSgpOwogICAgaWYgKCFtc2cpIHJldHVybjsKCiAgICB2YXIgdG9hc3RUeXBlID0gbm9ybWFsaXplVG9hc3RUeXBlKHR5cGUpOwogICAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9OwogICAgdmFyIGR1cmF0aW9uID0gdHlwZW9mIG9wdHMuZHVyYXRpb24gPT09ICdudW1iZXInID8gb3B0cy5kdXJhdGlvbiA6IDMyMDA7CiAgICB2YXIgY2VudGVyZWRJbmZvTWVzc2FnZSA9ICdEZW1hbmRlciBhdSBGT1UgZGUgcsOpYWN0aXZlcic7CgogICAgdmFyIGNvbnRhaW5lciA9IGVuc3VyZVRvYXN0Q29udGFpbmVyKCk7CiAgICB2YXIgdG9hc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHRvYXN0LmNsYXNzTmFtZSA9ICdhcHAtdG9hc3QgJyArIHRvYXN0VHlwZTsKICAgIGlmIChtc2cgPT09IGNlbnRlcmVkSW5mb01lc3NhZ2UpIHsKICAgICAgdG9hc3QuY2xhc3NOYW1lICs9ICcgYXBwLXRvYXN0LWNlbnRlcmVkLW1lc3NhZ2UnOwogICAgfQoKICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB0ZXh0LmNsYXNzTmFtZSA9ICdhcHAtdG9hc3QtbWVzc2FnZSc7CiAgICB0ZXh0LnRleHRDb250ZW50ID0gbXNnOwoKICAgIHRvYXN0LmFwcGVuZENoaWxkKHRleHQpOwogICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRvYXN0KTsKCiAgICB2YXIgY2xvc2VkID0gZmFsc2U7CiAgICB2YXIgdGltZW91dElkID0gbnVsbDsKCiAgICBmdW5jdGlvbiBjbG9zZVRvYXN0KCkgewogICAgICBpZiAoY2xvc2VkKSByZXR1cm47CiAgICAgIGNsb3NlZCA9IHRydWU7CiAgICAgIGlmICh0aW1lb3V0SWQpIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKTsKICAgICAgdG9hc3QuY2xhc3NOYW1lID0gdG9hc3QuY2xhc3NOYW1lLnJlcGxhY2UoL1xiaXMtdmlzaWJsZVxiL2csICcnKS50cmltKCk7CiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0b2FzdCAmJiB0b2FzdC5wYXJlbnROb2RlKSB0b2FzdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRvYXN0KTsKICAgICAgfSwgMjIwKTsKICAgIH0KCiAgICAvLyBPcHRpb25uZWw6IHRhcC9jbGljIHN1ciBsZSB0b2FzdCBwb3VyIGxlIGZlcm1lciwgc2FucyBib3V0b24gZMOpZGnDqQogICAgdG9hc3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgY2xvc2VUb2FzdCgpOwogICAgfSk7CgogICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgIHRvYXN0LmNsYXNzTmFtZSArPSAnIGlzLXZpc2libGUnOwogICAgfSwgMTApOwoKICAgIGlmIChkdXJhdGlvbiA+IDApIHsKICAgICAgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgY2xvc2VUb2FzdCgpOwogICAgICB9LCBkdXJhdGlvbik7CiAgICB9CiAgfQoKICB3aW5kb3cuc2hvd1RvYXN0ID0gZnVuY3Rpb24obWVzc2FnZSwgdHlwZSwgb3B0aW9ucykgewogICAgc2hvd1RvYXN0SW50ZXJuYWwobWVzc2FnZSwgdHlwZSwgb3B0aW9ucyk7CiAgfTsKCiAgZnVuY3Rpb24gbm9ybWFsaXplUG9pbnRWZW50ZSh2YWx1ZSkgewogICAgdmFyIG5vcm1hbGl6ZWQgPSBzYWZlU3RyaW5nKHZhbHVlKS50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgREVWSUNFX1BPU19BTExPV0VEX1ZBTFVFUy5sZW5ndGg7IGkrKykgewogICAgICBpZiAobm9ybWFsaXplZCA9PT0gREVWSUNFX1BPU19BTExPV0VEX1ZBTFVFU1tpXSkgcmV0dXJuIG5vcm1hbGl6ZWQ7CiAgICB9CiAgICByZXR1cm4gJyc7CiAgfQoKICBmdW5jdGlvbiBnZXREZWZhdWx0UG9pbnRWZW50ZUxhYmVsKHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgPT09ICdwZWxpc3Nhbm5lJyA/ICdQw6lsaXNzYW5uZScgOiAnTGFuw6dvbic7CiAgfQoKICBmdW5jdGlvbiBnZXREZWZhdWx0UG9pbnRWZW50ZSgpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBub3JtYWxpemVQb2ludFZlbnRlKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShERVZJQ0VfUE9TX1NUT1JBR0VfS0VZKSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiAnJzsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGRpc3BhdGNoRGVmYXVsdFBvaW50VmVudGVDaGFuZ2VkKHZhbHVlKSB7CiAgICB0cnkgewogICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZGVmYXVsdC1wb2ludC12ZW50ZTpjaGFuZ2VkJywgewogICAgICAgIGRldGFpbDogeyB2YWx1ZTogdmFsdWUgfHwgJycgfQogICAgICB9KSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHZhciBldnQ7CiAgICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkgewogICAgICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpOwogICAgICAgIGV2dC5pbml0RXZlbnQoJ2RlZmF1bHQtcG9pbnQtdmVudGU6Y2hhbmdlZCcsIHRydWUsIHRydWUpOwogICAgICAgIGV2dC5kZXRhaWwgPSB7IHZhbHVlOiB2YWx1ZSB8fCAnJyB9OwogICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gc2V0RGVmYXVsdFBvaW50VmVudGUodmFsdWUpIHsKICAgIHZhciBub3JtYWxpemVkID0gbm9ybWFsaXplUG9pbnRWZW50ZSh2YWx1ZSk7CiAgICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiBmYWxzZTsKICAgIHRyeSB7CiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShERVZJQ0VfUE9TX1NUT1JBR0VfS0VZLCBub3JtYWxpemVkKTsKICAgICAgZGlzcGF0Y2hEZWZhdWx0UG9pbnRWZW50ZUNoYW5nZWQobm9ybWFsaXplZCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjbGVhckRlZmF1bHRQb2ludFZlbnRlKCkgewogICAgdmFyIGhhZFZhbHVlID0gZmFsc2U7CiAgICB0cnkgewogICAgICBoYWRWYWx1ZSA9ICEhd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKERFVklDRV9QT1NfU1RPUkFHRV9LRVkpOwogICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oREVWSUNFX1BPU19TVE9SQUdFX0tFWSk7CiAgICB9IGNhdGNoIChlKSB7fQogICAgaWYgKGhhZFZhbHVlKSB7CiAgICAgIGRpc3BhdGNoRGVmYXVsdFBvaW50VmVudGVDaGFuZ2VkKCcnKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGNsZWFyQXBwTG9jYWxEYXRhKCkgewogICAgdHJ5IHsKICAgICAgY2xlYXJEZWZhdWx0UG9pbnRWZW50ZSgpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaGFzQXBwTG9jYWxEYXRhKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuICEhd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKERFVklDRV9QT1NfU1RPUkFHRV9LRVkpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICB3aW5kb3cuYXBwRGV2aWNlUG9pbnRWZW50ZSA9IHsKICAgIHN0b3JhZ2VLZXk6IERFVklDRV9QT1NfU1RPUkFHRV9LRVksCiAgICBnZXQ6IGdldERlZmF1bHRQb2ludFZlbnRlLAogICAgc2V0OiBzZXREZWZhdWx0UG9pbnRWZW50ZSwKICAgIGNsZWFyOiBjbGVhckRlZmF1bHRQb2ludFZlbnRlLAogICAgbm9ybWFsaXplOiBub3JtYWxpemVQb2ludFZlbnRlLAogICAgbGFiZWw6IGdldERlZmF1bHRQb2ludFZlbnRlTGFiZWwsCiAgICBjbGVhckFsbDogY2xlYXJBcHBMb2NhbERhdGEsCiAgICBoYXNTdG9yZWREYXRhOiBoYXNBcHBMb2NhbERhdGEKICB9OwoKICBmdW5jdGlvbiBnZXRRdWVyeVBhcmFtKG5hbWUpIHsKICAgIHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggfHwgJyc7CiAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKCdbPyZdJyArIG5hbWUgKyAnPShbXiZdKiknLCAnaScpOwogICAgdmFyIG1hdGNoID0gcmUuZXhlYyhxdWVyeSk7CiAgICBpZiAoIW1hdGNoIHx8ICFtYXRjaFsxXSkgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzFdLnJlcGxhY2UoL1wrL2csICcgJykpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gbWF0Y2hbMV07CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZW1vdmVRdWVyeVBhcmFtcyhwYXJhbU5hbWVzKSB7CiAgICBpZiAoIXdpbmRvdy5oaXN0b3J5IHx8ICF3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUpIHJldHVybjsKICAgIHZhciBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICB2YXIgaGFzaEluZGV4ID0gaHJlZi5pbmRleE9mKCcjJyk7CiAgICB2YXIgaGFzaCA9ICcnOwogICAgaWYgKGhhc2hJbmRleCA+PSAwKSB7CiAgICAgIGhhc2ggPSBocmVmLnN1YnN0cmluZyhoYXNoSW5kZXgpOwogICAgICBocmVmID0gaHJlZi5zdWJzdHJpbmcoMCwgaGFzaEluZGV4KTsKICAgIH0KCiAgICB2YXIgcUluZGV4ID0gaHJlZi5pbmRleE9mKCc/Jyk7CiAgICBpZiAocUluZGV4IDwgMCkgcmV0dXJuOwoKICAgIHZhciBiYXNlID0gaHJlZi5zdWJzdHJpbmcoMCwgcUluZGV4KTsKICAgIHZhciBxdWVyeSA9IGhyZWYuc3Vic3RyaW5nKHFJbmRleCArIDEpOwogICAgdmFyIHBhcnRzID0gcXVlcnkuc3BsaXQoJyYnKTsKICAgIHZhciBrZXB0ID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBwID0gcGFydHNbaV07CiAgICAgIGlmICghcCkgY29udGludWU7CiAgICAgIHZhciBrZXkgPSBwLnNwbGl0KCc9JylbMF07CiAgICAgIHZhciBzaG91bGRSZW1vdmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJhbU5hbWVzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgaWYgKGtleSA9PT0gcGFyYW1OYW1lc1tqXSkgewogICAgICAgICAgc2hvdWxkUmVtb3ZlID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXNob3VsZFJlbW92ZSkga2VwdC5wdXNoKHApOwogICAgfQogICAgdmFyIG5ld1VybCA9IGJhc2UgKyAoa2VwdC5sZW5ndGggPyAnPycgKyBrZXB0LmpvaW4oJyYnKSA6ICcnKSArIGhhc2g7CiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGRvY3VtZW50LnRpdGxlLCBuZXdVcmwpOwogIH0KCiAgd2luZG93LmNvbnN1bWVUb2FzdEZyb21VcmwgPSBmdW5jdGlvbigpIHsKICAgIHZhciB0b2FzdE1zZyA9IGdldFF1ZXJ5UGFyYW0oJ3RvYXN0Jyk7CiAgICBpZiAoIXRvYXN0TXNnKSByZXR1cm47CiAgICB2YXIgdG9hc3RUeXBlID0gZ2V0UXVlcnlQYXJhbSgndG9hc3RUeXBlJykgfHwgJ2luZm8nOwogICAgc2hvd1RvYXN0SW50ZXJuYWwodG9hc3RNc2csIHRvYXN0VHlwZSwgeyBkdXJhdGlvbjogMzYwMCB9KTsKICAgIHJlbW92ZVF1ZXJ5UGFyYW1zKFsndG9hc3QnLCAndG9hc3RUeXBlJ10pOwogIH07CgogIHZhciBjb25maXJtU3RhdGUgPSB7CiAgICBpc09wZW46IGZhbHNlLAogICAgY2FsbGJhY2s6IG51bGwKICB9OwoKICB2YXIgY29uZmlybUVscyA9IG51bGw7CgogIGZ1bmN0aW9uIGNsb3NlQ29uZmlybShyZXN1bHQpIHsKICAgIGlmICghY29uZmlybUVscykgcmV0dXJuOwogICAgY29uZmlybVN0YXRlLmlzT3BlbiA9IGZhbHNlOwogICAgY29uZmlybUVscy5iYWNrZHJvcC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgY29uZmlybUVscy5tb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoKICAgIHZhciBjYiA9IGNvbmZpcm1TdGF0ZS5jYWxsYmFjazsKICAgIGNvbmZpcm1TdGF0ZS5jYWxsYmFjayA9IG51bGw7CiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSBjYighIXJlc3VsdCk7CiAgfQoKICBmdW5jdGlvbiBlbnN1cmVDb25maXJtTW9kYWwoKSB7CiAgICBpZiAoY29uZmlybUVscykgcmV0dXJuIGNvbmZpcm1FbHM7CgogICAgdmFyIGJhY2tkcm9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQ09ORklSTV9CQUNLRFJPUF9JRCk7CiAgICBpZiAoIWJhY2tkcm9wKSB7CiAgICAgIGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGJhY2tkcm9wLmlkID0gQ09ORklSTV9CQUNLRFJPUF9JRDsKICAgICAgYmFja2Ryb3AuY2xhc3NOYW1lID0gJ2FwcC1tb2RhbC1iYWNrZHJvcCc7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYmFja2Ryb3ApOwogICAgfQoKICAgIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKENPTkZJUk1fTU9EQUxfSUQpOwogICAgdmFyIHRpdGxlRWwsIG1lc3NhZ2VFbCwgY2FuY2VsQnRuLCBjb25maXJtQnRuOwoKICAgIGlmICghbW9kYWwpIHsKICAgICAgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgbW9kYWwuaWQgPSBDT05GSVJNX01PREFMX0lEOwogICAgICBtb2RhbC5jbGFzc05hbWUgPSAnYXBwLW1vZGFsJzsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpOwogICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCAndHJ1ZScpOwoKICAgICAgdGl0bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gzJyk7CiAgICAgIHRpdGxlRWwuaWQgPSAnYXBwQ29uZmlybVRpdGxlJzsKICAgICAgdGl0bGVFbC50ZXh0Q29udGVudCA9ICdDb25maXJtYXRpb24nOwoKICAgICAgbWVzc2FnZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOwogICAgICBtZXNzYWdlRWwuaWQgPSAnYXBwQ29uZmlybU1lc3NhZ2UnOwogICAgICBtZXNzYWdlRWwudGV4dENvbnRlbnQgPSAnJzsKCiAgICAgIHZhciBhY3Rpb25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGFjdGlvbnMuY2xhc3NOYW1lID0gJ2FwcC1tb2RhbC1hY3Rpb25zJzsKCiAgICAgIGNhbmNlbEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgICBjYW5jZWxCdG4udHlwZSA9ICdidXR0b24nOwogICAgICBjYW5jZWxCdG4uY2xhc3NOYW1lID0gJ2FwcC1tb2RhbC1idG4gY2FuY2VsJzsKICAgICAgY2FuY2VsQnRuLmlkID0gJ2FwcENvbmZpcm1DYW5jZWwnOwogICAgICBjYW5jZWxCdG4udGV4dENvbnRlbnQgPSAnQW5udWxlcic7CgogICAgICBjb25maXJtQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgIGNvbmZpcm1CdG4udHlwZSA9ICdidXR0b24nOwogICAgICBjb25maXJtQnRuLmNsYXNzTmFtZSA9ICdhcHAtbW9kYWwtYnRuIGNvbmZpcm0nOwogICAgICBjb25maXJtQnRuLmlkID0gJ2FwcENvbmZpcm1Payc7CiAgICAgIGNvbmZpcm1CdG4udGV4dENvbnRlbnQgPSAnT0snOwoKICAgICAgYWN0aW9ucy5hcHBlbmRDaGlsZChjYW5jZWxCdG4pOwogICAgICBhY3Rpb25zLmFwcGVuZENoaWxkKGNvbmZpcm1CdG4pOwoKICAgICAgbW9kYWwuYXBwZW5kQ2hpbGQodGl0bGVFbCk7CiAgICAgIG1vZGFsLmFwcGVuZENoaWxkKG1lc3NhZ2VFbCk7CiAgICAgIG1vZGFsLmFwcGVuZENoaWxkKGFjdGlvbnMpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1vZGFsKTsKICAgIH0gZWxzZSB7CiAgICAgIHRpdGxlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXBwQ29uZmlybVRpdGxlJyk7CiAgICAgIG1lc3NhZ2VFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBDb25maXJtTWVzc2FnZScpOwogICAgICBjYW5jZWxCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXBwQ29uZmlybUNhbmNlbCcpOwogICAgICBjb25maXJtQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcENvbmZpcm1PaycpOwogICAgfQoKICAgIGNvbmZpcm1FbHMgPSB7CiAgICAgIGJhY2tkcm9wOiBiYWNrZHJvcCwKICAgICAgbW9kYWw6IG1vZGFsLAogICAgICB0aXRsZUVsOiB0aXRsZUVsLAogICAgICBtZXNzYWdlRWw6IG1lc3NhZ2VFbCwKICAgICAgY2FuY2VsQnRuOiBjYW5jZWxCdG4sCiAgICAgIGNvbmZpcm1CdG46IGNvbmZpcm1CdG4KICAgIH07CgogICAgaWYgKG1vZGFsLmdldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcpICE9PSAnMScpIHsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJywgJzEnKTsKCiAgICAgIGJhY2tkcm9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCFjb25maXJtU3RhdGUuaXNPcGVuKSByZXR1cm47CiAgICAgICAgY2xvc2VDb25maXJtKGZhbHNlKTsKICAgICAgfSk7CiAgICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY2xvc2VDb25maXJtKGZhbHNlKTsKICAgICAgfSk7CiAgICAgIGNvbmZpcm1CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNsb3NlQ29uZmlybSh0cnVlKTsKICAgICAgfSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKCFjb25maXJtU3RhdGUuaXNPcGVuKSByZXR1cm47CiAgICAgICAgdmFyIGtleSA9IGUua2V5Q29kZSB8fCBlLndoaWNoOwogICAgICAgIGlmIChrZXkgPT09IDI3KSB7CiAgICAgICAgICBjbG9zZUNvbmZpcm0oZmFsc2UpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIGNvbmZpcm1FbHM7CiAgfQoKICB3aW5kb3cuc2hvd0NvbmZpcm1Nb2RhbCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKSB7CiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307CiAgICB2YXIgY2IgPSBjYWxsYmFjazsKCiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB3aW5kb3cuUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7CiAgICAgICAgd2luZG93LnNob3dDb25maXJtTW9kYWwob3B0cywgZnVuY3Rpb24ocmVzdWx0KSB7IHJlc29sdmUoISFyZXN1bHQpOyB9KTsKICAgICAgfSk7CiAgICB9CgogICAgdmFyIGVscyA9IGVuc3VyZUNvbmZpcm1Nb2RhbCgpOwogICAgY29uZmlybVN0YXRlLmlzT3BlbiA9IHRydWU7CiAgICBjb25maXJtU3RhdGUuY2FsbGJhY2sgPSB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgPyBjYiA6IG51bGw7CgogICAgZWxzLnRpdGxlRWwudGV4dENvbnRlbnQgPSBzYWZlU3RyaW5nKG9wdHMudGl0bGUgfHwgJ0NvbmZpcm1hdGlvbicpOwogICAgZWxzLm1lc3NhZ2VFbC50ZXh0Q29udGVudCA9IHNhZmVTdHJpbmcob3B0cy5tZXNzYWdlIHx8ICcnKTsKICAgIGVscy5jb25maXJtQnRuLnRleHRDb250ZW50ID0gc2FmZVN0cmluZyhvcHRzLmNvbmZpcm1UZXh0IHx8ICdPSycpOwogICAgZWxzLmNhbmNlbEJ0bi50ZXh0Q29udGVudCA9IHNhZmVTdHJpbmcob3B0cy5jYW5jZWxUZXh0IHx8ICdBbm51bGVyJyk7CgogICAgZWxzLmJhY2tkcm9wLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgZWxzLm1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwoKICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICB0cnkgeyBlbHMuY29uZmlybUJ0bi5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQogICAgfSwgMTApOwogIH07CgogIHZhciBkZXZpY2VQb3NFbHMgPSBudWxsOwogIHZhciBkZXZpY2VQb3NTdGF0ZSA9IHsKICAgIGlzT3BlbjogZmFsc2UKICB9OwoKICBmdW5jdGlvbiBpc0luZGV4UGFnZSgpIHsKICAgIHJldHVybiAhIShkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdwYWdlLWluZGV4JykpOwogIH0KCiAgZnVuY3Rpb24gZW5zdXJlRGV2aWNlUG9zTW9kYWwoKSB7CiAgICBpZiAoZGV2aWNlUG9zRWxzKSByZXR1cm4gZGV2aWNlUG9zRWxzOwoKICAgIHZhciBiYWNrZHJvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKERFVklDRV9QT1NfQkFDS0RST1BfSUQpOwogICAgaWYgKCFiYWNrZHJvcCkgewogICAgICBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBiYWNrZHJvcC5pZCA9IERFVklDRV9QT1NfQkFDS0RST1BfSUQ7CiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9ICdkZXZpY2UtcG9zLWJhY2tkcm9wJzsKICAgICAgYmFja2Ryb3Auc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYmFja2Ryb3ApOwogICAgfQoKICAgIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKERFVklDRV9QT1NfTU9EQUxfSUQpOwogICAgaWYgKCFtb2RhbCkgewogICAgICBtb2RhbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBtb2RhbC5pZCA9IERFVklDRV9QT1NfTU9EQUxfSUQ7CiAgICAgIG1vZGFsLmNsYXNzTmFtZSA9ICdkZXZpY2UtcG9zLW1vZGFsJzsKICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpOwogICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCAndHJ1ZScpOwogICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsICdkZXZpY2VQb3NUaXRsZScpOwogICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCAnZGV2aWNlUG9zTWVzc2FnZScpOwogICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgICAgbW9kYWwuaW5uZXJIVE1MID0gJycKICAgICAgICArICc8aDMgaWQ9ImRldmljZVBvc1RpdGxlIj5Qb2ludCBkZSB2ZW50ZSBwYXIgZMOpZmF1dDwvaDM+JwogICAgICAgICsgJzxwIGlkPSJkZXZpY2VQb3NNZXNzYWdlIj5Tw6lsZWN0aW9ubmV6IGxlIHBvaW50IGRlIHZlbnRlIHBhciBkw6lmYXV0IGRlIGNldCBhcHBhcmVpbCBhdmFudCBkZSBjb250aW51ZXIuPC9wPicKICAgICAgICArICc8Zm9ybSBpZD0iZGV2aWNlUG9zRm9ybSI+JwogICAgICAgICsgJyAgPGxhYmVsIGNsYXNzPSJkZXZpY2UtcG9zLWxhYmVsIiBmb3I9ImRldmljZVBvc1NlbGVjdCI+UG9pbnQgZGUgdmVudGU8L2xhYmVsPicKICAgICAgICArICcgIDxzZWxlY3QgaWQ9ImRldmljZVBvc1NlbGVjdCIgY2xhc3M9ImRldmljZS1wb3Mtc2VsZWN0IiByZXF1aXJlZD4nCiAgICAgICAgKyAnICAgIDxvcHRpb24gdmFsdWU9IiI+Q2hvaXNpciB1biBwb2ludCBkZSB2ZW50ZTwvb3B0aW9uPicKICAgICAgICArICcgICAgPG9wdGlvbiB2YWx1ZT0ibGFuY29uIj5MYW7Dp29uPC9vcHRpb24+JwogICAgICAgICsgJyAgICA8b3B0aW9uIHZhbHVlPSJwZWxpc3Nhbm5lIj5Qw6lsaXNzYW5uZTwvb3B0aW9uPicKICAgICAgICArICcgIDwvc2VsZWN0PicKICAgICAgICArICcgIDxkaXYgY2xhc3M9ImRldmljZS1wb3MtYWN0aW9ucyI+JwogICAgICAgICsgJyAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImRldmljZS1wb3MtYnRuIGNvbmZpcm0iPkVucmVnaXN0cmVyPC9idXR0b24+JwogICAgICAgICsgJyAgPC9kaXY+JwogICAgICAgICsgJzwvZm9ybT4nOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1vZGFsKTsKICAgIH0KCiAgICBkZXZpY2VQb3NFbHMgPSB7CiAgICAgIGJhY2tkcm9wOiBiYWNrZHJvcCwKICAgICAgbW9kYWw6IG1vZGFsLAogICAgICBmb3JtOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV2aWNlUG9zRm9ybScpLAogICAgICBzZWxlY3Q6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXZpY2VQb3NTZWxlY3QnKQogICAgfTsKCiAgICBpZiAobW9kYWwuZ2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJykgIT09ICcxJykgewogICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnLCAnMScpOwoKICAgICAgaWYgKGRldmljZVBvc0Vscy5mb3JtKSB7CiAgICAgICAgZGV2aWNlUG9zRWxzLmZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24oZSkgewogICAgICAgICAgdmFyIHNhdmVkVmFsdWU7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBzYXZlZFZhbHVlID0gbm9ybWFsaXplUG9pbnRWZW50ZShkZXZpY2VQb3NFbHMuc2VsZWN0ID8gZGV2aWNlUG9zRWxzLnNlbGVjdC52YWx1ZSA6ICcnKTsKICAgICAgICAgIGlmICghc2F2ZWRWYWx1ZSkgewogICAgICAgICAgICBzaG93VG9hc3RJbnRlcm5hbCgnVmV1aWxsZXogc8OpbGVjdGlvbm5lciB1biBwb2ludCBkZSB2ZW50ZS4nLCAnZXJyb3InLCB7IGR1cmF0aW9uOiAzMjAwIH0pOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCFzZXREZWZhdWx0UG9pbnRWZW50ZShzYXZlZFZhbHVlKSkgewogICAgICAgICAgICBzaG93VG9hc3RJbnRlcm5hbCgnSW1wb3NzaWJsZSBk4oCZZW5yZWdpc3RyZXIgbGUgcG9pbnQgZGUgdmVudGUgc3VyIGNldCBhcHBhcmVpbC4nLCAnZXJyb3InLCB7IGR1cmF0aW9uOiAzNjAwIH0pOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CgogICAgICAgICAgaGlkZURldmljZVBvc01vZGFsKCk7CiAgICAgICAgICBzaG93VG9hc3RJbnRlcm5hbCgnUG9pbnQgZGUgdmVudGUgcGFyIGTDqWZhdXQgZW5yZWdpc3Ryw6kgOiAnICsgZ2V0RGVmYXVsdFBvaW50VmVudGVMYWJlbChzYXZlZFZhbHVlKSArICcuJywgJ3N1Y2Nlc3MnLCB7IGR1cmF0aW9uOiAyNjAwIH0pOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGRldmljZVBvc0VsczsKICB9CgogIGZ1bmN0aW9uIHNob3dEZXZpY2VQb3NNb2RhbChmb3JjZU9wZW4pIHsKICAgIHZhciBlbHMgPSBlbnN1cmVEZXZpY2VQb3NNb2RhbCgpOwogICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGdldERlZmF1bHRQb2ludFZlbnRlKCk7CgogICAgaWYgKCFmb3JjZU9wZW4gJiYgY3VycmVudFZhbHVlKSByZXR1cm47CgogICAgZGV2aWNlUG9zU3RhdGUuaXNPcGVuID0gdHJ1ZTsKICAgIGlmIChlbHMuc2VsZWN0KSB7CiAgICAgIGVscy5zZWxlY3QudmFsdWUgPSBjdXJyZW50VmFsdWUgfHwgJyc7CiAgICB9CgogICAgZWxzLmJhY2tkcm9wLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgZWxzLm1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgZWxzLmJhY2tkcm9wLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsKICAgIGVscy5tb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7CiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2RldmljZS1wb3MtbW9kYWwtb3BlbicpOwoKICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICB0cnkgeyBpZiAoZWxzLnNlbGVjdCkgZWxzLnNlbGVjdC5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQogICAgfSwgMTApOwogIH0KCiAgZnVuY3Rpb24gaGlkZURldmljZVBvc01vZGFsKCkgewogICAgdmFyIGVscyA9IGVuc3VyZURldmljZVBvc01vZGFsKCk7CiAgICBkZXZpY2VQb3NTdGF0ZS5pc09wZW4gPSBmYWxzZTsKICAgIGVscy5iYWNrZHJvcC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgZWxzLm1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBlbHMuYmFja2Ryb3Auc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICBlbHMubW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7CiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2RldmljZS1wb3MtbW9kYWwtb3BlbicpOwogIH0KCiAgZnVuY3Rpb24gb3BlbkRldmljZVBvc0Nob29zZXIoZm9yY2VPcGVuKSB7CiAgICBzaG93RGV2aWNlUG9zTW9kYWwoISFmb3JjZU9wZW4pOwogIH0KCiAgZnVuY3Rpb24gZW5zdXJlRGV2aWNlUG9zQ2hhbmdlU2hvcnRjdXQoKSB7CiAgICB2YXIgZXhpc3RpbmdCdG47CiAgICB2YXIgZXhpc3RpbmdSZXNldEJ0bjsKICAgIHZhciBoZWFkaW5nOwogICAgdmFyIGJ0bjsKICAgIHZhciByZXNldEJ0bjsKICAgIHZhciBkaXNhYmxlZFJlc2V0TWVzc2FnZSA9ICdEZW1hbmRlciBhdSBGT1UgZGUgcsOpYWN0aXZlcic7CgogICAgaWYgKCFpc0luZGV4UGFnZSgpKSByZXR1cm47CgogICAgZXhpc3RpbmdCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV2aWNlUG9zUXVpY2tDaGFuZ2UnKTsKICAgIGV4aXN0aW5nUmVzZXRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV2aWNlTG9jYWxEYXRhUmVzZXQnKTsKICAgIGlmIChleGlzdGluZ0J0biAmJiBleGlzdGluZ1Jlc2V0QnRuKSByZXR1cm47CgogICAgaGVhZGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWN0aW9uLWhlYWRpbmcnKTsKICAgIGlmICghaGVhZGluZyB8fCAhaGVhZGluZy5wYXJlbnROb2RlKSByZXR1cm47CgogICAgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICBidG4udHlwZSA9ICdidXR0b24nOwogICAgYnRuLmlkID0gJ2RldmljZVBvc1F1aWNrQ2hhbmdlJzsKICAgIGJ0bi5jbGFzc05hbWUgPSAnZGV2aWNlLXBvcy1xdWljay1jaGFuZ2UnOwogICAgYnRuLnRleHRDb250ZW50ID0gJ1BEViBhcHBhcmVpbCA6ICcgKyAoZ2V0RGVmYXVsdFBvaW50VmVudGUoKSA/IGdldERlZmF1bHRQb2ludFZlbnRlTGFiZWwoZ2V0RGVmYXVsdFBvaW50VmVudGUoKSkgOiAnbm9uIGTDqWZpbmknKTsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBvcGVuRGV2aWNlUG9zQ2hvb3Nlcih0cnVlKTsKICAgIH0pOwogICAgaGVhZGluZy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShidG4sIGhlYWRpbmcubmV4dFNpYmxpbmcpOwoKICAgIHJlc2V0QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICByZXNldEJ0bi50eXBlID0gJ2J1dHRvbic7CiAgICByZXNldEJ0bi5pZCA9ICdkZXZpY2VMb2NhbERhdGFSZXNldCc7CiAgICByZXNldEJ0bi5jbGFzc05hbWUgPSAnZGV2aWNlLXBvcy1yZXNldCBpcy1kaXNhYmxlZCc7CiAgICByZXNldEJ0bi50ZXh0Q29udGVudCA9ICdTdXBwcmltZXIgbGVzIGRvbm7DqWVzIGxvY2FsZXMnOwogICAgcmVzZXRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTsKICAgIHJlc2V0QnRuLnNldEF0dHJpYnV0ZSgndGl0bGUnLCBkaXNhYmxlZFJlc2V0TWVzc2FnZSk7CiAgICByZXNldEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBzaG93VG9hc3RJbnRlcm5hbChkaXNhYmxlZFJlc2V0TWVzc2FnZSwgJ2luZm8nLCB7IGR1cmF0aW9uOiAyODAwIH0pOwogICAgfSk7CiAgICByZXNldEJ0bi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgICB2YXIga2V5ID0gZS5rZXkgfHwgJyc7CiAgICAgIGlmIChrZXkgIT09ICdFbnRlcicgJiYga2V5ICE9PSAnICcpIHJldHVybjsKCiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgc2hvd1RvYXN0SW50ZXJuYWwoZGlzYWJsZWRSZXNldE1lc3NhZ2UsICdpbmZvJywgeyBkdXJhdGlvbjogMjgwMCB9KTsKICAgIH0pOwoKICAgIGJ0bi5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2FmdGVyZW5kJywgcmVzZXRCdG4pOwogIH0KCiAgZnVuY3Rpb24gcmVmcmVzaERldmljZVBvc1F1aWNrQ2hhbmdlTGFiZWwoKSB7CiAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldmljZVBvc1F1aWNrQ2hhbmdlJyk7CiAgICB2YXIgY3VycmVudFZhbHVlID0gZ2V0RGVmYXVsdFBvaW50VmVudGUoKTsKICAgIGlmICghYnRuKSByZXR1cm47CiAgICBidG4udGV4dENvbnRlbnQgPSAnUERWIGFwcGFyZWlsIDogJyArIChjdXJyZW50VmFsdWUgPyBnZXREZWZhdWx0UG9pbnRWZW50ZUxhYmVsKGN1cnJlbnRWYWx1ZSkgOiAnbm9uIGTDqWZpbmknKTsKICB9CgogIHdpbmRvdy5vcGVuRGV2aWNlUG9zQ2hvb3NlciA9IGZ1bmN0aW9uKCkgewogICAgb3BlbkRldmljZVBvc0Nob29zZXIodHJ1ZSk7CiAgfTsKCiAgJChmdW5jdGlvbigpIHsKICAgIGlmICh0eXBlb2Ygd2luZG93LmNvbnN1bWVUb2FzdEZyb21VcmwgPT09ICdmdW5jdGlvbicpIHsKICAgICAgd2luZG93LmNvbnN1bWVUb2FzdEZyb21VcmwoKTsKICAgIH0KCiAgICBpZiAod2luZG93Ll9fZmxhc2hUb2FzdCAmJiB3aW5kb3cuX19mbGFzaFRvYXN0Lm1lc3NhZ2UpIHsKICAgICAgc2hvd1RvYXN0SW50ZXJuYWwod2luZG93Ll9fZmxhc2hUb2FzdC5tZXNzYWdlLCB3aW5kb3cuX19mbGFzaFRvYXN0LnR5cGUgfHwgJ2luZm8nLCB7IGR1cmF0aW9uOiB3aW5kb3cuX19mbGFzaFRvYXN0LmR1cmF0aW9uIHx8IDM2MDAgfSk7CiAgICAgIGlmICh3aW5kb3cuX19mbGFzaFRvYXN0LnJlZGlyZWN0KSB7CiAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5fX2ZsYXNoVG9hc3QucmVkaXJlY3Q7CiAgICAgICAgfSwgOTAwKTsKICAgICAgfQogICAgICB0cnkgeyBkZWxldGUgd2luZG93Ll9fZmxhc2hUb2FzdDsgfSBjYXRjaCAoZSkge30KICAgIH0KCiAgICBpZiAoaXNJbmRleFBhZ2UoKSkgewogICAgICBlbnN1cmVEZXZpY2VQb3NNb2RhbCgpOwogICAgICBlbnN1cmVEZXZpY2VQb3NDaGFuZ2VTaG9ydGN1dCgpOwogICAgICByZWZyZXNoRGV2aWNlUG9zUXVpY2tDaGFuZ2VMYWJlbCgpOwoKICAgICAgaWYgKCFnZXREZWZhdWx0UG9pbnRWZW50ZSgpKSB7CiAgICAgICAgc2hvd0RldmljZVBvc01vZGFsKGZhbHNlKTsKICAgICAgfQoKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZGVmYXVsdC1wb2ludC12ZW50ZTpjaGFuZ2VkJywgZnVuY3Rpb24oKSB7CiAgICAgICAgcmVmcmVzaERldmljZVBvc1F1aWNrQ2hhbmdlTGFiZWwoKTsKICAgICAgfSk7CiAgICB9CiAgfSk7Cgp9KSh3aW5kb3csIGRvY3VtZW50LCBqUXVlcnkpOw=="
            }
        },
        {
            "path": "pointages/modif_pointage.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 6039,
                "sha1": "69023f590ae15ed673716eca31cd4852132b2375",
                "content_b64": "PD9waHAKc2Vzc2lvbl9zdGFydCgpOwovKiBkb2MtcHJvamVjdCB8IHBvaW50YWdlcy9tb2RpZl9wb2ludGFnZS5waHAgfCBHw6hyZSBs4oCZYWNjw6hzIHPDqWN1cmlzw6kgcGFyIGFwcGFyZWlsIGV0IGzigJlhZmZpY2hhZ2UgZHUgZm9ybXVsYWlyZSBkZSBtb2RpZmljYXRpb24gZOKAmXVuIHBvaW50YWdlIGV4aXN0YW50LiB8IEV4cG9zZTogYXVjdW4gfCBEw6lwZW5kIGRlOiBjb25maWcucGhwLCBpbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAsIHRyYWl0ZW1lbnRfbW9kaWZfcG9pbnRhZ2UucGhwLCBpbmRleC5waHAsIGNvbm5leGlvbi5waHAsIHBvaW50YWdlLnBocCB8IEltcGFjdGU6IHNlc3Npb24gUEhQLCBjb29raWUgZOKAmWFwcGFyZWlsLCBhZmZpY2hhZ2UgVUksIHJlZGlyZWN0aW9uIGTigJlhY2PDqHMgfCBUYWJsZXM6IHBvc19kZXZpY2VfYXV0aG9yaXphdGlvbnModG9rZW5faGFzaCwgYXV0aG9yaXplZF9hdCwgbGFzdF91c2VkX2F0KSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELCBVc2VySUQsIERhdGVIZXVyZUVudHJlZSwgRGF0ZUhldXJlU29ydGllKSwgel9wdGdfYXFwX3V0aWxpc2F0ZXVycyhVc2VySUQsIE5vbSwgUHJlbm9tKSAqLwoKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7CgpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCiRwb2ludGFnZSA9IG51bGw7CiRlbXBsb3llID0gbnVsbDsKJHVzZXJJZCA9IG51bGw7CgpmdW5jdGlvbiBmb3JtYXREYXRldGltZUxvY2FsKCR2YWx1ZSkgewogICAgJHJhdyA9IGlzX3N0cmluZygkdmFsdWUpID8gdHJpbSgkdmFsdWUpIDogJyc7CiAgICBpZiAoJHJhdyA9PT0gJycpIHJldHVybiAnJzsKICAgIHRyeSB7CiAgICAgICAgJGR0ID0gbmV3IERhdGVUaW1lKCRyYXcpOwogICAgICAgICRkdC0+c2V0VGltZXpvbmUobmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJykpOwogICAgICAgIHJldHVybiAkZHQtPmZvcm1hdCgnWS1tLWRcVEg6aScpOwogICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9CgppZiAoaXNzZXQoJF9HRVRbJ3BvaW50YWdlSWQnXSkpIHsKICAgICRwb2ludGFnZUlkID0gKGludCkkX0dFVFsncG9pbnRhZ2VJZCddOwoKICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlcyBpbmZvcm1hdGlvbnMgZGUgcG9pbnRhZ2UKICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFBvaW50YWdlSUQgPSA6cG9pbnRhZ2VJZCIpOwogICAgJHN0bXQtPmV4ZWN1dGUoWyc6cG9pbnRhZ2VJZCcgPT4gJHBvaW50YWdlSWRdKTsKICAgICRwb2ludGFnZSA9ICRzdG10LT5mZXRjaChQRE86OkZFVENIX0FTU09DKTsKCiAgICBpZiAoJHBvaW50YWdlICYmIGlzc2V0KCRwb2ludGFnZVsnVXNlcklEJ10pKSB7CiAgICAgICAgJHVzZXJJZCA9IChpbnQpJHBvaW50YWdlWydVc2VySUQnXTsKICAgICAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCBOb20sIFByZW5vbSBGUk9NIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCBMSU1JVCAxIik7CiAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkdXNlcklkXSk7CiAgICAgICAgJGVtcGxveWUgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CiAgICB9Cn0KCiRlbnRyZWVWYWx1ZSA9ICRwb2ludGFnZSA/IGZvcm1hdERhdGV0aW1lTG9jYWwoJHBvaW50YWdlWydEYXRlSGV1cmVFbnRyZWUnXSA/PyAnJykgOiAnJzsKJHNvcnRpZVZhbHVlID0gJHBvaW50YWdlID8gZm9ybWF0RGF0ZXRpbWVMb2NhbCgkcG9pbnRhZ2VbJ0RhdGVIZXVyZVNvcnRpZSddID8/ICcnKSA6ICcnOwoKJGVtcGxveWVlRnVsbE5hbWUgPSAnJzsKaWYgKGlzX2FycmF5KCRlbXBsb3llKSkgewogICAgJG5vbSA9IGlzc2V0KCRlbXBsb3llWydOb20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydOb20nXSA6ICcnOwogICAgJHByZW5vbSA9IGlzc2V0KCRlbXBsb3llWydQcmVub20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydQcmVub20nXSA6ICcnOwogICAgJGVtcGxveWVlRnVsbE5hbWUgPSB0cmltKCRub20gLiAnICcgLiAkcHJlbm9tKTsKfQo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+Cgo8dGl0bGU+TW9kaWZpY2F0aW9uIHBvaW50YWdlPC90aXRsZT4KCjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgoKPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KCjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iYXBwbGUtdG91Y2gtaWNvbi5wbmciPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYm9vdHN0cmFwLm1pbi5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvZm9udEF3ZXNvbWUuY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2hlcm8tc2xpZGVyLmNzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy90b29wbGF0ZS1zdHlsZS5jc3MiPgoKPD9waHAKJGNzc1BhdGggPSBfX0RJUl9fIC4gJy9jc3Mvc3R5bGUuY3NzJzsKJGNzc1ZlcnNpb24gPSBmaWxlX2V4aXN0cygkY3NzUGF0aCkgPyBmaWxlbXRpbWUoJGNzc1BhdGgpIDogdGltZSgpOwokbW9kaWZDc3NQYXRoID0gX19ESVJfXyAuICcvY3NzL21vZGlmLXBvaW50YWdlLmNzcyc7CiRtb2RpZkNzc1ZlcnNpb24gPSBmaWxlX2V4aXN0cygkbW9kaWZDc3NQYXRoKSA/IGZpbGVtdGltZSgkbW9kaWZDc3NQYXRoKSA6IHRpbWUoKTsKPz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc3R5bGUuY3NzP3Y9PD9waHAgZWNobyAoaW50KSRjc3NWZXJzaW9uOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL21vZGlmLXBvaW50YWdlLmNzcz92PTw/cGhwIGVjaG8gKGludCkkbW9kaWZDc3NWZXJzaW9uOyA/PiI+Cgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zOjMwMCw0MDAsNjAwLDcwMCw4MDAiIHJlbD0ic3R5bGVzaGVldCI+Cgo8c2NyaXB0IHNyYz0ianMvdmVuZG9yL21vZGVybml6ci0yLjguMy1yZXNwb25kLTEuNC4yLm1pbi5qcyI+PC9zY3JpcHQ+Cgo8L2hlYWQ+Cgo8Ym9keSBjbGFzcz0icGFnZS1tb2RpZi1wb2ludGFnZSB0aGVtZS1kYXJrIj4KCjxtYWluIGNsYXNzPSJwdGctcGFnZSIgcm9sZT0ibWFpbiI+CiAgPGRpdiBjbGFzcz0icHRnLWNhcmQiPgogICAgPGhlYWRlciBjbGFzcz0icHRnLWhlYWRlciI+CiAgICAgIDxoMT5Nb2RpZmljYXRpb24gZOKAmXVuIHBvaW50YWdlPC9oMT4KICAgICAgPD9waHAgaWYgKCRlbXBsb3llZUZ1bGxOYW1lICE9PSAnJyk6ID8+CiAgICAgICAgPHAgY2xhc3M9InB0Zy1zdWJ0aXRsZSI+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRlbXBsb3llZUZ1bGxOYW1lLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz48L3A+CiAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9oZWFkZXI+CgogICAgPD9waHAgaWYgKCEkcG9pbnRhZ2UpOiA/PgogICAgICA8ZGl2IGNsYXNzPSJwdGctYWxlcnQiIHJvbGU9InN0YXR1cyI+CiAgICAgICAgUG9pbnRhZ2UgaW50cm91dmFibGUgKG91IGlkZW50aWZpYW50IG1hbnF1YW50KS4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InB0Zy1hY3Rpb25zIj4KICAgICAgICA8YSBjbGFzcz0icHRnLWJ0biBzZWNvbmRhcnkiIGhyZWY9ImluZGV4LnBocCI+UmV0b3VyIGFjY3VlaWw8L2E+CiAgICAgIDwvZGl2PgogICAgPD9waHAgZWxzZTogPz4KICAgICAgPGZvcm0gY2xhc3M9InB0Zy1mb3JtIiBhY3Rpb249InRyYWl0ZW1lbnRfbW9kaWZfcG9pbnRhZ2UucGhwIiBtZXRob2Q9InBvc3QiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwb2ludGFnZUlkIiB2YWx1ZT0iPD9waHAgZWNobyAoaW50KSRwb2ludGFnZVsnUG9pbnRhZ2VJRCddOyA/PiI+CgogICAgICAgIDxkaXYgY2xhc3M9InB0Zy1maWVsZCI+CiAgICAgICAgICA8bGFiZWwgZm9yPSJEYXRlSGV1cmVFbnRyZWUiPkRhdGUgLyBoZXVyZSBk4oCZZW50csOpZTwvbGFiZWw+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgaWQ9IkRhdGVIZXVyZUVudHJlZSIKICAgICAgICAgICAgdHlwZT0iZGF0ZXRpbWUtbG9jYWwiCiAgICAgICAgICAgIG5hbWU9IkRhdGVIZXVyZUVudHJlZSIKICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZW50cmVlVmFsdWUsIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiIKICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgID4KICAgICAgICAgIDxwIGNsYXNzPSJwdGctaGVscCI+Rm9ybWF0IGxvY2FsIChFdXJvcGUvUGFyaXMpLjwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHRnLWZpZWxkIj4KICAgICAgICAgIDxsYWJlbCBmb3I9IkRhdGVIZXVyZVNvcnRpZSI+RGF0ZSAvIGhldXJlIGRlIHNvcnRpZTwvbGFiZWw+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgaWQ9IkRhdGVIZXVyZVNvcnRpZSIKICAgICAgICAgICAgdHlwZT0iZGF0ZXRpbWUtbG9jYWwiCiAgICAgICAgICAgIG5hbWU9IkRhdGVIZXVyZVNvcnRpZSIKICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc29ydGllVmFsdWUsIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiIKICAgICAgICAgID4KICAgICAgICAgIDxwIGNsYXNzPSJwdGctaGVscCI+TGFpc3NleiB2aWRlIHNpIGxlIHBvaW50YWdlIGRvaXQgcmVzdGVyIOKAnGVuIGNvdXJz4oCdLjwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHRnLWFjdGlvbnMiPgogICAgICAgICAgPD9waHAgaWYgKGlzX2ludCgkdXNlcklkKSB8fCBpc19udW1lcmljKCR1c2VySWQpKTogPz4KICAgICAgICAgICAgPGEgY2xhc3M9InB0Zy1idG4gc2Vjb25kYXJ5IiBocmVmPSJwb2ludGFnZS5waHA/ZW1wbG95ZT08P3BocCBlY2hvIChpbnQpJHVzZXJJZDsgPz4mdmlldz0xIj5Bbm51bGVyPC9hPgogICAgICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICAgICAgPGEgY2xhc3M9InB0Zy1idG4gc2Vjb25kYXJ5IiBocmVmPSJpbmRleC5waHAiPkFubnVsZXI8L2E+CiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0icHRnLWJ0biBwcmltYXJ5Ij5WYWxpZGVyPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZm9ybT4KICAgIDw/cGhwIGVuZGlmOyA/PgogIDwvZGl2Pgo8L21haW4+Cgo8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMy41LjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgnPHNjcmlwdCBzcmM9ImpzL3ZlbmRvci9qcXVlcnktMS4xMS4yLm1pbi5qcyI+PFwvc2NyaXB0PicpPC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJqcy92ZW5kb3IvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJqcy9wbHVnaW5zLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9ImpzL21haW4uanMiPjwvc2NyaXB0PgoKPC9ib2R5Pgo8L2h0bWw+CiAgICAgICAgICAgIAogICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgIAogICAgICAgICAgICA8L2h0bWw+"
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 6260,
                "sha1": "7079f445a548d5fc0c6bece1b753c0074bf03540",
                "content_b64": "PD9waHAKc2Vzc2lvbl9zdGFydCgpOwovKiBkb2MtcHJvamVjdCB8IHBvaW50YWdlcy9tb2RpZl9wb2ludGFnZS5waHAgfCBHw6hyZSBs4oCZYWNjw6hzIHPDqWN1cmlzw6kgcGFyIGFwcGFyZWlsIGV0IGzigJlhZmZpY2hhZ2UgZHUgZm9ybXVsYWlyZSBkZSBtb2RpZmljYXRpb24gZOKAmXVuIHBvaW50YWdlIGV4aXN0YW50IGF2ZWMgYXNzZXRzIGxvY2F1eCB2ZXJzaW9ubsOpcyBzYW5zIE1vZGVybml6ci9SZXNwb25kIG5pIEJvb3RzdHJhcCBKUy4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBpbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCwgdHJhaXRlbWVudF9tb2RpZl9wb2ludGFnZS5waHAsIGluZGV4LnBocCwgY29ubmV4aW9uLnBocCwgcG9pbnRhZ2UucGhwLCBqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMsIGpzL3BsdWdpbnMuanMsIGpzL21haW4uanMgfCBJbXBhY3RlOiBzZXNzaW9uIFBIUCwgY29va2llIGTigJlhcHBhcmVpbCwgYWZmaWNoYWdlIFVJLCByZWRpcmVjdGlvbiBk4oCZYWNjw6hzLCB0b2FzdHMgaW50ZXJuZXMgfCBUYWJsZXM6IHBvc19kZXZpY2VfYXV0aG9yaXphdGlvbnModG9rZW5faGFzaCwgYXV0aG9yaXplZF9hdCwgbGFzdF91c2VkX2F0KSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELCBVc2VySUQsIERhdGVIZXVyZUVudHJlZSwgRGF0ZUhldXJlU29ydGllKSwgel9wdGdfYXFwX3V0aWxpc2F0ZXVycyhVc2VySUQsIE5vbSwgUHJlbm9tKSAqLwoKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7CgpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCiRwb2ludGFnZSA9IG51bGw7CiRlbXBsb3llID0gbnVsbDsKJHVzZXJJZCA9IG51bGw7CgpmdW5jdGlvbiBmb3JtYXREYXRldGltZUxvY2FsKCR2YWx1ZSkgewogICAgJHJhdyA9IGlzX3N0cmluZygkdmFsdWUpID8gdHJpbSgkdmFsdWUpIDogJyc7CiAgICBpZiAoJHJhdyA9PT0gJycpIHJldHVybiAnJzsKICAgIHRyeSB7CiAgICAgICAgJGR0ID0gbmV3IERhdGVUaW1lKCRyYXcpOwogICAgICAgICRkdC0+c2V0VGltZXpvbmUobmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJykpOwogICAgICAgIHJldHVybiAkZHQtPmZvcm1hdCgnWS1tLWRcVEg6aScpOwogICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9CgppZiAoaXNzZXQoJF9HRVRbJ3BvaW50YWdlSWQnXSkpIHsKICAgICRwb2ludGFnZUlkID0gKGludCkkX0dFVFsncG9pbnRhZ2VJZCddOwoKICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlcyBpbmZvcm1hdGlvbnMgZGUgcG9pbnRhZ2UKICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFBvaW50YWdlSUQgPSA6cG9pbnRhZ2VJZCIpOwogICAgJHN0bXQtPmV4ZWN1dGUoWyc6cG9pbnRhZ2VJZCcgPT4gJHBvaW50YWdlSWRdKTsKICAgICRwb2ludGFnZSA9ICRzdG10LT5mZXRjaChQRE86OkZFVENIX0FTU09DKTsKCiAgICBpZiAoJHBvaW50YWdlICYmIGlzc2V0KCRwb2ludGFnZVsnVXNlcklEJ10pKSB7CiAgICAgICAgJHVzZXJJZCA9IChpbnQpJHBvaW50YWdlWydVc2VySUQnXTsKICAgICAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCBOb20sIFByZW5vbSBGUk9NIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCBMSU1JVCAxIik7CiAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkdXNlcklkXSk7CiAgICAgICAgJGVtcGxveWUgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CiAgICB9Cn0KCiRlbnRyZWVWYWx1ZSA9ICRwb2ludGFnZSA/IGZvcm1hdERhdGV0aW1lTG9jYWwoJHBvaW50YWdlWydEYXRlSGV1cmVFbnRyZWUnXSA/PyAnJykgOiAnJzsKJHNvcnRpZVZhbHVlID0gJHBvaW50YWdlID8gZm9ybWF0RGF0ZXRpbWVMb2NhbCgkcG9pbnRhZ2VbJ0RhdGVIZXVyZVNvcnRpZSddID8/ICcnKSA6ICcnOwoKJGVtcGxveWVlRnVsbE5hbWUgPSAnJzsKaWYgKGlzX2FycmF5KCRlbXBsb3llKSkgewogICAgJG5vbSA9IGlzc2V0KCRlbXBsb3llWydOb20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydOb20nXSA6ICcnOwogICAgJHByZW5vbSA9IGlzc2V0KCRlbXBsb3llWydQcmVub20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydQcmVub20nXSA6ICcnOwogICAgJGVtcGxveWVlRnVsbE5hbWUgPSB0cmltKCRub20gLiAnICcgLiAkcHJlbm9tKTsKfQo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+Cgo8dGl0bGU+TW9kaWZpY2F0aW9uIHBvaW50YWdlPC90aXRsZT4KCjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgoKPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KCjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iYXBwbGUtdG91Y2gtaWNvbi5wbmciPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ib290c3RyYXAubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvZm9udEF3ZXNvbWUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvaGVyby1zbGlkZXIuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvdG9vcGxhdGUtc3R5bGUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3Mvc3R5bGUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvbW9kaWYtcG9pbnRhZ2UuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+Cgo8L2hlYWQ+Cgo8Ym9keSBjbGFzcz0icGFnZS1tb2RpZi1wb2ludGFnZSB0aGVtZS1kYXJrIj4KCjxtYWluIGNsYXNzPSJwdGctcGFnZSIgcm9sZT0ibWFpbiI+CiAgPGRpdiBjbGFzcz0icHRnLWNhcmQiPgogICAgPGhlYWRlciBjbGFzcz0icHRnLWhlYWRlciI+CiAgICAgIDxoMT5Nb2RpZmljYXRpb24gZOKAmXVuIHBvaW50YWdlPC9oMT4KICAgICAgPD9waHAgaWYgKCRlbXBsb3llZUZ1bGxOYW1lICE9PSAnJyk6ID8+CiAgICAgICAgPHAgY2xhc3M9InB0Zy1zdWJ0aXRsZSI+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRlbXBsb3llZUZ1bGxOYW1lLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz48L3A+CiAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9oZWFkZXI+CgogICAgPD9waHAgaWYgKCEkcG9pbnRhZ2UpOiA/PgogICAgICA8ZGl2IGNsYXNzPSJwdGctYWxlcnQiIHJvbGU9InN0YXR1cyI+CiAgICAgICAgUG9pbnRhZ2UgaW50cm91dmFibGUgKG91IGlkZW50aWZpYW50IG1hbnF1YW50KS4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InB0Zy1hY3Rpb25zIj4KICAgICAgICA8YSBjbGFzcz0icHRnLWJ0biBzZWNvbmRhcnkiIGhyZWY9ImluZGV4LnBocCI+UmV0b3VyIGFjY3VlaWw8L2E+CiAgICAgIDwvZGl2PgogICAgPD9waHAgZWxzZTogPz4KICAgICAgPGZvcm0gY2xhc3M9InB0Zy1mb3JtIiBhY3Rpb249InRyYWl0ZW1lbnRfbW9kaWZfcG9pbnRhZ2UucGhwIiBtZXRob2Q9InBvc3QiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwb2ludGFnZUlkIiB2YWx1ZT0iPD9waHAgZWNobyAoaW50KSRwb2ludGFnZVsnUG9pbnRhZ2VJRCddOyA/PiI+CgogICAgICAgIDxkaXYgY2xhc3M9InB0Zy1maWVsZCI+CiAgICAgICAgICA8bGFiZWwgZm9yPSJEYXRlSGV1cmVFbnRyZWUiPkRhdGUgLyBoZXVyZSBk4oCZZW50csOpZTwvbGFiZWw+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgaWQ9IkRhdGVIZXVyZUVudHJlZSIKICAgICAgICAgICAgdHlwZT0iZGF0ZXRpbWUtbG9jYWwiCiAgICAgICAgICAgIG5hbWU9IkRhdGVIZXVyZUVudHJlZSIKICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZW50cmVlVmFsdWUsIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiIKICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgID4KICAgICAgICAgIDxwIGNsYXNzPSJwdGctaGVscCI+Rm9ybWF0IGxvY2FsIChFdXJvcGUvUGFyaXMpLjwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHRnLWZpZWxkIj4KICAgICAgICAgIDxsYWJlbCBmb3I9IkRhdGVIZXVyZVNvcnRpZSI+RGF0ZSAvIGhldXJlIGRlIHNvcnRpZTwvbGFiZWw+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgaWQ9IkRhdGVIZXVyZVNvcnRpZSIKICAgICAgICAgICAgdHlwZT0iZGF0ZXRpbWUtbG9jYWwiCiAgICAgICAgICAgIG5hbWU9IkRhdGVIZXVyZVNvcnRpZSIKICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc29ydGllVmFsdWUsIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiIKICAgICAgICAgID4KICAgICAgICAgIDxwIGNsYXNzPSJwdGctaGVscCI+TGFpc3NleiB2aWRlIHNpIGxlIHBvaW50YWdlIGRvaXQgcmVzdGVyIOKAnGVuIGNvdXJz4oCdLjwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHRnLWFjdGlvbnMiPgogICAgICAgICAgPD9waHAgaWYgKGlzX2ludCgkdXNlcklkKSB8fCBpc19udW1lcmljKCR1c2VySWQpKTogPz4KICAgICAgICAgICAgPGEgY2xhc3M9InB0Zy1idG4gc2Vjb25kYXJ5IiBocmVmPSJwb2ludGFnZS5waHA/ZW1wbG95ZT08P3BocCBlY2hvIChpbnQpJHVzZXJJZDsgPz4mdmlldz0xIj5Bbm51bGVyPC9hPgogICAgICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICAgICAgPGEgY2xhc3M9InB0Zy1idG4gc2Vjb25kYXJ5IiBocmVmPSJpbmRleC5waHAiPkFubnVsZXI8L2E+CiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0icHRnLWJ0biBwcmltYXJ5Ij5WYWxpZGVyPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZm9ybT4KICAgIDw/cGhwIGVuZGlmOyA/PgogIDwvZGl2Pgo8L21haW4+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvcGx1Z2lucy5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy9tYWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+Cgo8L2JvZHk+CjwvaHRtbD4="
            }
        },
        {
            "path": "pointages/pointage.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 21002,
                "sha1": "fb4cc13eb2c401f4ccf913d3c8e7888be6b2e42e",
                "content_b64": "PD9waHAKCi8qIGRvYy1wcm9qZWN0IHwgcG9pbnRhZ2VzL3BvaW50YWdlLnBocCB8IEFmZmljaGUsIHPDqWN1cmlzZSBldCBwaWxvdGUgbOKAmWludGVyZmFjZSBkZSBwb2ludGFnZSBhdmVjIGF1dG9yaXNhdGlvbiBwZXJtYW5lbnRlIHBhciBhcHBhcmVpbC4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBjb25uZXhpb24ucGhwLCBlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCwgZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCwgc29ydGlyX2VtcGxveWUucGhwLCBtb2RpZl9wb2ludGFnZS5waHAgfCBJbXBhY3RlOiBzZXNzaW9uIFBIUCwgY29va2llIGTigJlhcHBhcmVpbCwgcmVkaXJlY3Rpb25zLCBhZmZpY2hhZ2UgVUksIEFKQVgsIHBvaW50YWdlcyBlbiBiYXNlIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoVXNlcklELCBOb20sIFByZW5vbSksIHpfcHRnX2FxcF9wb2ludGFnZXMoUG9pbnRhZ2VJRCwgVXNlcklELCBEYXRlSGV1cmVFbnRyZWUsIERhdGVIZXVyZVNvcnRpZSkgKi8KCgovLyBEw6ltYXJyYWdlIG91IHJlcHJpc2UgZGUgbGEgc2Vzc2lvbgpzZXNzaW9uX3N0YXJ0KCk7CnJlcXVpcmVfb25jZSAiY29uZmlnLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAiOwpyZXF1aXJlX2RldmljZV9hdXRob3JpemVkKCRwZG8pOwoKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnRXVyb3BlL1BhcmlzJyk7CgovLyBSw6ljdXDDqXJhdGlvbiBkZSBsJ0lEIGRlIGwnZW1wbG95w6kKJGVtcGxveWVJZCA9IGlzc2V0KCRfR0VUWydlbXBsb3llJ10pID8gaW50dmFsKCRfR0VUWydlbXBsb3llJ10pIDogbnVsbDsKJHZpZXdPbmx5ID0gKGlzc2V0KCRfR0VUWyd2aWV3J10pICYmICRfR0VUWyd2aWV3J10gPT09ICcxJyk7CgovLyBSw6ljdXDDqXJhdGlvbiBkZXMgaW5mb3JtYXRpb25zIGRlIGwnZW1wbG95w6kgZGVwdWlzIGxhIEJERAokc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCBOb20sIFByZW5vbSBGUk9NIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCIpOwokc3RtdC0+ZXhlY3V0ZShbJzp1c2VySUQnID0+ICRlbXBsb3llSWRdKTsKJGVtcGxveWUgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CgovLyBSw6ljdXDDqXJhdGlvbiBkdSBkZXJuaWVyIHBvaW50YWdlIGRlIGwnZW1wbG95w6kKJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIHpfcHRnX2FxcF9wb2ludGFnZXMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCBPUkRFUiBCWSBEYXRlSGV1cmVFbnRyZWUgREVTQywgUG9pbnRhZ2VJRCBERVNDIExJTUlUIDEiKTsKJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkXSk7CiRsYXN0UG9pbnRhZ2UgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CgokaXNXb3JraW5nID0gJGxhc3RQb2ludGFnZSAmJiAkbGFzdFBvaW50YWdlWydEYXRlSGV1cmVTb3J0aWUnXSA9PT0gbnVsbDsKCj8+CjwhRE9DVFlQRSBodG1sPgoKPGh0bWw+Cgo8aGVhZD4KCjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgoKPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KCgoKCgo8dGl0bGU+UG9pbnRhZ2VzIHNhbGFyacOpczwvdGl0bGU+Cgo8IS0tCgoKClRlbXBsYXRlIDIwODkgTWV0ZW9yCgoKCmh0dHA6Ly93d3cudG9vcGxhdGUuY29tL3ZpZXcvMjA4OS1tZXRlb3IKCgoKLS0+Cgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9ImFwcGxlLXRvdWNoLWljb24ucG5nIj4KCgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYm9vdHN0cmFwLm1pbi5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvZm9udEF3ZXNvbWUuY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2ZvbnRBd2Vzb21lLmNzcyI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2hlcm8tc2xpZGVyLmNzcyI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcyI+Cjw/cGhwCiRjc3NQYXRoID0gX19ESVJfXyAuICcvY3NzL3N0eWxlLmNzcyc7CiRjc3NWZXJzaW9uID0gZmlsZV9leGlzdHMoJGNzc1BhdGgpID8gZmlsZW10aW1lKCRjc3NQYXRoKSA6IHRpbWUoKTsKPz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc3R5bGUuY3NzP3Y9PD9waHAgZWNobyAoaW50KSRjc3NWZXJzaW9uOyA/PiI+CgoKCjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1NhbnM6MzAwLDQwMCw2MDAsNzAwLDgwMCIgcmVsPSJzdHlsZXNoZWV0Ij4KCgoKPHNjcmlwdCBzcmM9ImpzL3ZlbmRvci9tb2Rlcm5penItMi44LjMtcmVzcG9uZC0xLjQuMi5taW4uanMiPjwvc2NyaXB0PgoKPC9oZWFkPgoKCgo8Ym9keSBjbGFzcz0icGFnZS1wb2ludGFnZSB0aGVtZS1kYXJrIj4KCgoKCjxkaXYgaWQ9ImFib3V0IiBjbGFzcz0icGFnZS1zZWN0aW9uIj4KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KPGRpdiBjbGFzcz0icm93Ij4KPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIj4KPGgxPlBvaW50YWdlcyA8P3BocCBlY2hvICRlbXBsb3llWydOb20nXSAuICIgIiAuICRlbXBsb3llWydQcmVub20nXTsgPz48L2gxPgo8ZGl2IGNsYXNzPSJsaW5lLWRlYyI+PC9kaXY+CjxjZW50ZXI+Cjxmb250IGNvbG9yPSJ3aGl0ZSI+Cjxicj4KPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJiYWNrSG9tZUJ1dHRvbiIgY2xhc3M9ImJ0biIgb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWY9J2luZGV4LnBocCc7Ij5SZXRvdXIgYWNjdWVpbDwvYnV0dG9uPgo8YnI+Cjw/cGhwIGlmICghJHZpZXdPbmx5KTogPz4KICAgIDw/cGhwIGlmICghJGlzV29ya2luZyk6ID8+CiAgICAgICAgPGZvcm0gaWQ9ImNvbnRhY3QiPgogICAgICAgIDxidXR0b24gZGF0YS1lbXBsb3llPSI8P3BocCBlY2hvICRlbXBsb3llSWQ7ID8+IiBpZD0iYXJyaXZhbEJ1dHRvbiIgY2xhc3M9ImJ0biI+QXJyaXbDqWU8L2J1dHRvbj4KICAgICAgICA8L2Zvcm0+CiAgICA8P3BocCBlbHNlOiA/PgogICAgICAgIDxmb3JtIGlkPSJjb250YWN0MiI+CiAgICAgICAgPGJ1dHRvbiBkYXRhLWVtcGxveWU9Ijw/cGhwIGVjaG8gJGVtcGxveWVJZDsgPz4iIGlkPSJkZXBhcnR1cmVCdXR0b24iIGNsYXNzPSJidG4iPkTDqXBhcnQ8L2J1dHRvbj4KICAgICAgICA8L2Zvcm0+CiAgICA8P3BocCBlbmRpZjsgPz4KPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPCEtLSBBdXRyZSBjb250ZW51Li4uIC0tPgogICAgICAgIDwvZm9udD4KICAgICAgICA8L2NlbnRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICAKICAgICAgICA8YnI+PGJyPiAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWRlYyI+PC9kaXY+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICA8Y2VudGVyPgogICAgICAgIDw/cGhwCiAgICAgICAgLy8gUsOpY3Vww6lyYXRpb24gZGUgbCdJRCBkZSBsJ2VtcGxvecOpCiAgICAgICAgJGVtcGxveWVJZCA9IGlzc2V0KCRfR0VUWydlbXBsb3llJ10pID8gaW50dmFsKCRfR0VUWydlbXBsb3llJ10pIDogbnVsbDsKICAgICAgICAKICAgICAgICAvLyBJbml0aWFsaXNhdGlvbiBkZXMgdmFyaWFibGVzIHBvdXIgbGUgdGFibGVhdQogICAgICAgICR0b3RhbF9ob3VycyA9IDA7CiAgICAgICAgJHRhYmxlX3Jvd3MgPSAiIjsKICAgICAgICAKICAgICAgICAkY3VycmVudF9tb250aCA9IGRhdGUoJ20nKTsKICAgICAgICAkY3VycmVudF95ZWFyID0gZGF0ZSgnWScpOwogICAgICAgIGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwogICAgICAgIAogICAgICAgIAogICAgICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlcyBwb2ludGFnZXMgZGUgbCdlbXBsb3nDqSBkZXB1aXMgbGEgQkRECiAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgUG9pbnRhZ2VJRCwgVU5JWF9USU1FU1RBTVAoRGF0ZUhldXJlRW50cmVlKSBBUyBFbnRyZWVUaW1lc3RhbXAsIFVOSVhfVElNRVNUQU1QKERhdGVIZXVyZVNvcnRpZSkgQVMgU29ydGllVGltZXN0YW1wIEZST00gel9wdGdfYXFwX3BvaW50YWdlcyBXSEVSRSBVc2VySUQgPSA6dXNlcklEIEFORCBNT05USChEYXRlSGV1cmVFbnRyZWUpID0gOmN1cnJlbnRNb250aCBBTkQgWUVBUihEYXRlSGV1cmVFbnRyZWUpID0gOmN1cnJlbnRZZWFyIik7CiAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkLCAnOmN1cnJlbnRNb250aCcgPT4gJGN1cnJlbnRfbW9udGgsICc6Y3VycmVudFllYXInID0+ICRjdXJyZW50X3llYXJdKTsKICAgICAgICAkcG9pbnRhZ2VzID0gJHN0bXQtPmZldGNoQWxsKFBETzo6RkVUQ0hfQVNTT0MpOwogICAgICAgIAogICAgICAgIGZvcmVhY2ggKCRwb2ludGFnZXMgYXMgJHBvaW50YWdlKSB7CiAgICAgICAgICAgIC8vIENyw6lhdGlvbiBkZSBsJ29iamV0IERhdGVUaW1lIHBvdXIgbCdoZXVyZSBkJ2Fycml2w6llCiAgICAgICAgICAgICRhcnJpdmFsX3RpbWUgPSBEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgnVScsICRwb2ludGFnZVsnRW50cmVlVGltZXN0YW1wJ10pOwogICAgICAgICAgICAkYXJyaXZhbF90aW1lLT5zZXRUaW1lem9uZShuZXcgRGF0ZVRpbWVab25lKCdFdXJvcGUvUGFyaXMnKSk7CiAgICAgICAgICAgICRkYXRlX2Rpc3BsYXkgPSAkYXJyaXZhbF90aW1lLT5mb3JtYXQoJ1ktbS1kJyk7CiAgICAgICAgICAgICRhcnJpdmFsX3RpbWVfZGlzcGxheSA9ICRhcnJpdmFsX3RpbWUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBHw6lyZXIgbGUgY2FzIG/DuSBsZSBwb2ludGFnZSBkZSBzb3J0aWUgbidlc3QgcGFzIGVuY29yZSBkw6lmaW5pCiAgICAgICAgICAgIGlmIChlbXB0eSgkcG9pbnRhZ2VbJ1NvcnRpZVRpbWVzdGFtcCddKSkgewogICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lX2Rpc3BsYXkgPSAiRW4gY291cnMiOwogICAgICAgICAgICAgICAgJHdvcmtfaG91cnNfZGlzcGxheSA9ICJFbiBjb3VycyI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBDcsOpYXRpb24gZGUgbCdvYmpldCBEYXRlVGltZSBwb3VyIGwnaGV1cmUgZGUgZMOpcGFydAogICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lID0gRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1UnLCAkcG9pbnRhZ2VbJ1NvcnRpZVRpbWVzdGFtcCddKTsKICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZS0+c2V0VGltZXpvbmUobmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJykpOwogICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lX2Rpc3BsYXkgPSAkZGVwYXJ0dXJlX3RpbWUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIENhbGN1bCBkZXMgaGV1cmVzIHRyYXZhaWxsw6llcwogICAgICAgICAgICAgICAgJHdvcmtfc2Vjb25kcyA9ICRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10gLSAkcG9pbnRhZ2VbJ0VudHJlZVRpbWVzdGFtcCddOwogICAgICAgICAgICAgICAgJHdvcmtfaG91cnMgPSAkd29ya19zZWNvbmRzIC8gMzYwMDsKICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzX2Rpc3BsYXkgPSBudW1iZXJfZm9ybWF0KCR3b3JrX2hvdXJzLCAyKTsKICAgICAgICAgICAgICAgICR0b3RhbF9ob3VycyArPSAkd29ya19ob3VyczsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQWpvdXQgZGUgbGEgbGlnbmUgZGFucyBsZSB0YWJsZWF1CiAgICAgICAgICAgICR0YWJsZV9yb3dzIC49ICI8dHIgZGF0YS1wb2ludGFnZS1pZD0nIi4kcG9pbnRhZ2VbJ1BvaW50YWdlSUQnXS4iJyBkYXRhLWVudHJlZS10aW1lc3RhbXA9JyIuJHBvaW50YWdlWydFbnRyZWVUaW1lc3RhbXAnXS4iJyBkYXRhLXNvcnRpZS10aW1lc3RhbXA9JyIuJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXS4iJyBvbmNsaWNrPSdhZmZpY2hlck1vZGFsKHRoaXMpJz48dGQ+eyRkYXRlX2Rpc3BsYXl9PC90ZD48dGQ+eyRhcnJpdmFsX3RpbWVfZGlzcGxheX08L3RkPjx0ZD57JGRlcGFydHVyZV90aW1lX2Rpc3BsYXl9PC90ZD48dGQ+JHdvcmtfaG91cnNfZGlzcGxheTwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAvLyBBZmZpY2hhZ2UgZHUgdGFibGVhdSBkZXMgcG9pbnRhZ2VzCiAgICAgICAgZWNobyAiPHRhYmxlPiI7CiAgICAgICAgZWNobyAiPHRyPjx0aD5EYXRlPC90aD48dGg+SGV1cmUgZCdhcnJpdsOpZTwvdGg+PHRoPkhldXJlIGRlIGTDqXBhcnQ8L3RoPjx0aD5Ob21icmUgZCdoZXVyZXM8L3RoPjwvdHI+IjsKICAgICAgICBlY2hvICR0YWJsZV9yb3dzOwogICAgICAgIGVjaG8gIjwvdGFibGU+IjsKICAgICAgICAKICAgICAgICA/PgogICAgICAgIAogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+CiAgICAgICAgPD9waHAKICAgICAgICAvLyBBZmZpY2hhZ2UgZHUgdG90YWwgZCdoZXVyZXMgdHJhdmFpbGzDqWVzCiAgICAgICAgZWNobyAiVG90YWwgZCdoZXVyZXMgdHJhdmFpbGzDqWVzIDogIiAuIG51bWJlcl9mb3JtYXQoJHRvdGFsX2hvdXJzLCAyKTsKICAgICAgICA/PgogICAgICAgIDwvZm9udD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8YnI+PGJyPjxicj4KICAgICAgICA8Zm9udCBjb2xvcj0id2hpdGUiPgogICAgICAgIDxoND5BZmZpY2hhZ2Ugc3VyIGRhdGVzIHPDqWxlY3Rpb25uw6llczwvaDQ+CiAgICAgICAgPC9mb250PgogICAgICAgIAogICAgICAgIDxicj4KICAgICAgICA8ZGl2IGNsYXNzPSJkMSI+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibWFwIj4KICAgICAgICAKICAgICAgICA8Zm9ybSBpZD0iY29udGFjdCIgbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CiAgICAgICAgCiAgICAgICAgPGZvbnQgY29sb3I9IndoaXRlIj4gRGF0ZSBkZSBkw6lidXQgOiA8L2ZvbnQ+PGZvbnQgY29sb3I9ImJsYWNrIj48aW5wdXQgdHlwZT0iZGF0ZSIgbmFtZT0ic3RhcnRfZGF0ZSIgcmVxdWlyZWQ+PC9mb250Pjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGZvbnQgY29sb3I9IndoaXRlIj5EYXRlIGRlIGZpbiA6IDwvZm9udD48Zm9udCBjb2xvcj0iYmxhY2siPjxpbnB1dCB0eXBlPSJkYXRlIiBuYW1lPSJlbmRfZGF0ZSIgcmVxdWlyZWQ+PC9mb250Pjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGZvbnQgY29sb3I9ImJsYWNrIj48aW5wdXQgY2xhc3M9ImJ0biIgaWQ9ImZvcm0tc3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJBZmZpY2hlciBsYSBzw6lsZWN0aW9uIj48L2ZvbnQ+CiAgICAgICAgCiAgICAgICAgPC9mb3JtPgogICAgICAgIAogICAgICAgIDwvZGl2PjwvZGl2Pjxicj48YnI+PGJyPjxicj48YnI+PGJyPgogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPD9waHAKICAgICAgICAvLyBWw6lyaWZpY2F0aW9uIGRlIGxhIHNvdW1pc3Npb24gZHUgZm9ybXVsYWlyZQogICAgICAgIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAnUE9TVCcgJiYgaXNzZXQoJF9HRVRbJ2VtcGxveWUnXSkpIHsKICAgICAgICAgICAgJGVtcGxveWVJZCA9IGludHZhbCgkX0dFVFsnZW1wbG95ZSddKTsKICAgICAgICAgICAgJHN0YXJ0X2RhdGUgPSAkX1BPU1RbJ3N0YXJ0X2RhdGUnXTsKICAgICAgICAgICAgJGVuZF9kYXRlID0gJF9QT1NUWydlbmRfZGF0ZSddOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ29udmVyc2lvbiBkZXMgZGF0ZXMgZW4gZm9ybWF0IFktbS1kCiAgICAgICAgICAgICRzdGFydF9kYXRlX2Zvcm1hdHRlZCA9IGRhdGUoJ1ktbS1kJywgc3RydG90aW1lKCRzdGFydF9kYXRlKSk7CiAgICAgICAgICAgICRlbmRfZGF0ZV9mb3JtYXR0ZWQgPSBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgkZW5kX2RhdGUgLiAnICsxIGRheScpKTsKICAgICAgICAgICAgCiAgICAgICAgICAgICR0b3RhbF9ob3VycyA9IDA7CiAgICAgICAgICAgICR0YWJsZV9yb3dzID0gIiI7CiAgICAgICAgICAgIGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gUmVxdcOqdGUgcG91ciBvYnRlbmlyIGxlcyBwb2ludGFnZXMgZW50cmUgbGVzIGRhdGVzIHNww6ljaWZpw6llcwogICAgICAgICAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCBQb2ludGFnZUlELCBVTklYX1RJTUVTVEFNUChEYXRlSGV1cmVFbnRyZWUpIEFTIEVudHJlZVRpbWVzdGFtcCwgVU5JWF9USU1FU1RBTVAoRGF0ZUhldXJlU29ydGllKSBBUyBTb3J0aWVUaW1lc3RhbXAgRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQgQU5EIERhdGVIZXVyZUVudHJlZSBCRVRXRUVOIDpzdGFydERhdGUgQU5EIDplbmREYXRlIik7CiAgICAgICAgICAgIAogICAgICAgICAgICAkc3RtdC0+ZXhlY3V0ZShbJzp1c2VySUQnID0+ICRlbXBsb3llSWQsICc6c3RhcnREYXRlJyA9PiAkc3RhcnRfZGF0ZV9mb3JtYXR0ZWQsICc6ZW5kRGF0ZScgPT4gJGVuZF9kYXRlX2Zvcm1hdHRlZF0pOwogICAgICAgICAgICAkcG9pbnRhZ2VzID0gJHN0bXQtPmZldGNoQWxsKFBETzo6RkVUQ0hfQVNTT0MpOwogICAgICAgICAgICBpZiAoISRzdG10LT5leGVjdXRlKCkpIHsKICAgICAgICAgICAgICAgIHByaW50X3IoJHN0bXQtPmVycm9ySW5mbygpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgZm9yZWFjaCAoJHBvaW50YWdlcyBhcyAkcG9pbnRhZ2UpIHsKICAgICAgICAgICAgICAgIC8vIENyw6lhdGlvbiBkZSBsJ29iamV0IERhdGVUaW1lIHBvdXIgbCdoZXVyZSBkJ2Fycml2w6llCiAgICAgICAgICAgICAgICAkYXJyaXZhbF90aW1lID0gRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1UnLCAkcG9pbnRhZ2VbJ0VudHJlZVRpbWVzdGFtcCddKTsKICAgICAgICAgICAgICAgICRhcnJpdmFsX3RpbWUtPnNldFRpbWV6b25lKG5ldyBEYXRlVGltZVpvbmUoJ0V1cm9wZS9QYXJpcycpKTsKICAgICAgICAgICAgICAgICRkYXRlX2Rpc3BsYXkgPSAkYXJyaXZhbF90aW1lLT5mb3JtYXQoJ1ktbS1kJyk7CiAgICAgICAgICAgICAgICAkYXJyaXZhbF90aW1lX2Rpc3BsYXkgPSAkYXJyaXZhbF90aW1lLT5mb3JtYXQoJ0g6aScpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBHw6lyZXIgbGUgY2FzIG/DuSBsZSBwb2ludGFnZSBkZSBzb3J0aWUgbidlc3QgcGFzIGVuY29yZSBkw6lmaW5pCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkZGVwYXJ0dXJlX3RpbWVfZGlzcGxheSA9ICJFbiBjb3VycyI7CiAgICAgICAgICAgICAgICAgICAgJHdvcmtfaG91cnNfZGlzcGxheSA9ICJFbiBjb3VycyI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIENyw6lhdGlvbiBkZSBsJ29iamV0IERhdGVUaW1lIHBvdXIgbCdoZXVyZSBkZSBkw6lwYXJ0CiAgICAgICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lID0gRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1UnLCAkcG9pbnRhZ2VbJ1NvcnRpZVRpbWVzdGFtcCddKTsKICAgICAgICAgICAgICAgICAgICAkZGVwYXJ0dXJlX3RpbWUtPnNldFRpbWV6b25lKG5ldyBEYXRlVGltZVpvbmUoJ0V1cm9wZS9QYXJpcycpKTsKICAgICAgICAgICAgICAgICAgICAkZGVwYXJ0dXJlX3RpbWVfZGlzcGxheSA9ICRkZXBhcnR1cmVfdGltZS0+Zm9ybWF0KCdIOmknKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWwgZGVzIGhldXJlcyB0cmF2YWlsbMOpZXMKICAgICAgICAgICAgICAgICAgICAkd29ya19zZWNvbmRzID0gJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSAtICRwb2ludGFnZVsnRW50cmVlVGltZXN0YW1wJ107CiAgICAgICAgICAgICAgICAgICAgJHdvcmtfaG91cnMgPSAkd29ya19zZWNvbmRzIC8gMzYwMDsKICAgICAgICAgICAgICAgICAgICAkd29ya19ob3Vyc19kaXNwbGF5ID0gbnVtYmVyX2Zvcm1hdCgkd29ya19ob3VycywgMik7CiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX2hvdXJzICs9ICR3b3JrX2hvdXJzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBBam91dCBkZSBsYSBsaWduZSBkYW5zIGxlIHRhYmxlYXUKICAgICAgICAgICAgICAgICR0YWJsZV9yb3dzIC49ICI8dHIgZGF0YS1wb2ludGFnZS1pZD0nIi4kcG9pbnRhZ2VbJ1BvaW50YWdlSUQnXS4iJyBkYXRhLWVudHJlZS10aW1lc3RhbXA9JyIuJHBvaW50YWdlWydFbnRyZWVUaW1lc3RhbXAnXS4iJyBkYXRhLXNvcnRpZS10aW1lc3RhbXA9JyIuJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXS4iJyBvbmNsaWNrPSdhZmZpY2hlck1vZGFsKHRoaXMpJz48dGQ+eyRkYXRlX2Rpc3BsYXl9PC90ZD48dGQ+eyRhcnJpdmFsX3RpbWVfZGlzcGxheX08L3RkPjx0ZD57JGRlcGFydHVyZV90aW1lX2Rpc3BsYXl9PC90ZD48dGQ+JHdvcmtfaG91cnNfZGlzcGxheTwvdGQ+PC90cj4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFmZmljaGFnZSBkdSB0YWJsZWF1CiAgICAgICAgICAgIGVjaG8gIjx0YWJsZT48dHI+PHRoPkRhdGU8L3RoPjx0aD5IZXVyZSBkJ2Fycml2w6llPC90aD48dGg+SGV1cmUgZGUgZMOpcGFydDwvdGg+PHRoPk5vbWJyZSBkJ2hldXJlczwvdGg+PC90cj4kdGFibGVfcm93czwvdGFibGU+IjsKICAgICAgICAgICAgZWNobyAiVG90YWwgZCdoZXVyZXMgdHJhdmFpbGzDqWVzIDogIiAuIG51bWJlcl9mb3JtYXQoJHRvdGFsX2hvdXJzLCAyKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICA/PgogICAgICAgIAogICAgICAgIAogICAgICAgIDxicj48YnI+PGJyPgogICAgICAgIAogICAgICAgIDxwPjxhIGhyZWY9IiMiIG9uY2xpY2s9InByb21wdEV4aXRQaW4oKSI+U29ydGlyIEVtcGxvecOpPC9hPjwvcD4KICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICAKICAgICAgICA8L2Rpdj48L2Rpdj4KICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L2NlbnRlcj4KICAgICAgICAKICAgICAgICAKICAgICAgICA8IS0tIE1vZGFsIFBJTiAoZGVzaWduIHJlZmFpdCkgLS0+CiAgICAgICAgPGRpdiBpZD0ibW9kYWxCYWNrZ3JvdW5kIiBvbmNsaWNrPSJjbG9zZVBpbk1vZGFsKCkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJwaW5Nb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9InBpbk1vZGFsVGl0bGUiPgogICAgICAgICAgPGZvcm0gaWQ9InBpbkZvcm0iIG9uc3VibWl0PSJ2ZXJpZmllclBpbigpOyByZXR1cm4gZmFsc2U7Ij4KICAgICAgICAgICAgPGgyIGlkPSJwaW5Nb2RhbFRpdGxlIiBjbGFzcz0icGluLW1vZGFsLXRpdGxlIj5Db2RlIFBJTjwvaDI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwaW4tbW9kYWwtc3VidGl0bGUiPlNhaXNpc3NleiB2b3RyZSBjb2RlIMOgIDQgY2hpZmZyZXM8L3A+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4taW5wdXQtd3JhcHBlciIgb25jbGljaz0iZm9jdXNQaW5JbnB1dCgpIj4KICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJwaW5JbnB1dCIgY2xhc3M9InNyLW9ubHkiPkNvZGUgUElOICg0IGNoaWZmcmVzKTwvbGFiZWw+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveGVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMiI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMyI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICB0eXBlPSJ0ZWwiCiAgICAgICAgICAgICAgICBpZD0icGluSW5wdXQiCiAgICAgICAgICAgICAgICBjbGFzcz0icGluLWhpZGRlbi1pbnB1dCIKICAgICAgICAgICAgICAgIGlucHV0bW9kZT0ibnVtZXJpYyIKICAgICAgICAgICAgICAgIHBhdHRlcm49IlswLTldKiIKICAgICAgICAgICAgICAgIG1heGxlbmd0aD0iNCIKICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIgogICAgICAgICAgICAgICAgYXV0b2NhcGl0YWxpemU9Im9mZiIKICAgICAgICAgICAgICAgIGF1dG9jb3JyZWN0PSJvZmYiCiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSIKICAgICAgICAgICAgICAgIHRpdGxlPSJTZXVsZW1lbnQgZGVzIGNoaWZmcmVzLiIKICAgICAgICAgICAgICAgIHZhbHVlPSIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBpbi1tb2RhbC1hY3Rpb25zIj4KICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InBpbi1tb2RhbC1idG4gY2FuY2VsIiBvbmNsaWNrPSJjbG9zZVBpbk1vZGFsKCkiPkFubnVsZXI8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9InBpbi1tb2RhbC1idG4gY29uZmlybSI+VmFsaWRlcjwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZm9ybT4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8c2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8zLjUuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0ianMvdmVuZG9yL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIDxzY3JpcHQgc3JjPSJqcy9wbHVnaW5zLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0ianMvbWFpbi5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgCgoKICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgogICAgICAgIHZhciBlbXBsb3llZUZpcnN0TmFtZSA9IDw/cGhwIGVjaG8ganNvbl9lbmNvZGUoKCRlbXBsb3llICYmIGlzc2V0KCRlbXBsb3llWydQcmVub20nXSkpID8gKHN0cmluZykkZW1wbG95ZVsnUHJlbm9tJ10gOiAnJywgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSB8IEpTT05fSEVYX1RBRyB8IEpTT05fSEVYX0FNUCB8IEpTT05fSEVYX0FQT1MgfCBKU09OX0hFWF9RVU9UKTsgPz47CiAgICAgICAgZnVuY3Rpb24gYnVpbGRQdW5jaFRvYXN0KGFjdGlvbikgeyB2YXIgcCA9IGVtcGxveWVlRmlyc3ROYW1lID8gKCIgIiArIGVtcGxveWVlRmlyc3ROYW1lKSA6ICIiOyByZXR1cm4gKGFjdGlvbiA9PT0gImRlcGFydCIpID8gKCJEw6lwYXJ0IiArIHAgKyAiIGVucmVnaXN0csOpIikgOiAoIkFycml2w6llIiArIHAgKyAiIGVucmVnaXN0csOpZSIpOyB9CgogICAgICAgICQoIiNhcnJpdmFsQnV0dG9uIikuY2xpY2soZnVuY3Rpb24oZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGxldCBlbXBsb3llID0gJCh0aGlzKS5kYXRhKCdlbXBsb3llJyk7CiAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAgICAgICB1cmw6ICJlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7ZW1wbG95ZTogZW1wbG95ZX0sCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBtc2cgPSBidWlsZFB1bmNoVG9hc3QoImFycml2ZWUiKTsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJpbmRleC5waHA/dG9hc3Q9IiArIGVuY29kZVVSSUNvbXBvbmVudChtc2cpICsgIiZ0b2FzdFR5cGU9c3VjY2VzcyI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiRXJyZXVyIGxvcnMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkdSBwb2ludGFnZS4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAKICAgICAgICAkKCIjZGVwYXJ0dXJlQnV0dG9uIikuY2xpY2soZnVuY3Rpb24oZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGxldCBlbXBsb3llID0gJCh0aGlzKS5kYXRhKCdlbXBsb3llJyk7CiAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAgICAgICB1cmw6ICJlbnJlZ2lzdHJlbWVudF9kZXBhcnQucGhwIiwKICAgICAgICAgICAgICAgIGRhdGE6IHtlbXBsb3llOiBlbXBsb3llfSwKICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9IGJ1aWxkUHVuY2hUb2FzdCgiZGVwYXJ0Iik7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiaW5kZXgucGhwP3RvYXN0PSIgKyBlbmNvZGVVUklDb21wb25lbnQobXNnKSArICImdG9hc3RUeXBlPXN1Y2Nlc3MiOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIiwgImVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgdmFyIGFjdGlvbkNvbnRleHQgPSAiIjsgLy8gVmFyaWFibGUgZ2xvYmFsZSBwb3VyIHN0b2NrZXIgbGUgY29udGV4dGUgZGUgbCdhY3Rpb24KCmZ1bmN0aW9uIHNhbml0aXplUGluVmFsdWUodmFsKSB7CiAgcmV0dXJuIFN0cmluZyh2YWwgfHwgJycpLnJlcGxhY2UoL1xEL2csICcnKS5zbGljZSgwLCA0KTsKfQoKZnVuY3Rpb24gdXBkYXRlUGluQm94ZXMocGluKSB7CiAgdmFyIGJveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3Bpbk1vZGFsIC5waW4tYm94Jyk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3hlcy5sZW5ndGg7IGkrKykgewogICAgYm94ZXNbaV0udGV4dENvbnRlbnQgPSAoaSA8IHBpbi5sZW5ndGgpID8gJ+KYhScgOiAnJzsKICB9Cn0KCmZ1bmN0aW9uIGZvY3VzUGluSW5wdXQoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKCFpbnB1dCkgcmV0dXJuOwogIHRyeSB7IGlucHV0LmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9Cn0KCmZ1bmN0aW9uIHJlc2V0UGluTW9kYWwoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKGlucHV0KSBpbnB1dC52YWx1ZSA9ICcnOwogIHVwZGF0ZVBpbkJveGVzKCcnKTsKfQoKZnVuY3Rpb24gb3BlblBpbk1vZGFsKCkgewogIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpOwogIHZhciBiZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJhY2tncm91bmQnKTsKICBpZiAoIW1vZGFsIHx8ICFiZykgcmV0dXJuOwogIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogIGJnLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogIHJlc2V0UGluTW9kYWwoKTsKICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgZm9jdXNQaW5JbnB1dCgpOyB9LCAxMCk7Cn0KCmZ1bmN0aW9uIGNsb3NlUGluTW9kYWwoKSB7CiAgdmFyIG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bpbk1vZGFsJyk7CiAgdmFyIGJnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmFja2dyb3VuZCcpOwogIGlmIChtb2RhbCkgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBpZiAoYmcpIGJnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgcmVzZXRQaW5Nb2RhbCgpOwp9CgovLyBCaW5kIGlucHV0IG9uY2UgKGRpZ2l0cyBvbmx5ICsgc3luYyBVSSBib3hlcykKKGZ1bmN0aW9uIGJpbmRQaW5PbmNlKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQgfHwgaW5wdXQuZ2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJykgPT09ICcxJykgcmV0dXJuOwogIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcsICcxJyk7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgIHZhciBjbGVhbiA9IHNhbml0aXplUGluVmFsdWUoaW5wdXQudmFsdWUpOwogICAgaWYgKGlucHV0LnZhbHVlICE9PSBjbGVhbikgaW5wdXQudmFsdWUgPSBjbGVhbjsKICAgIHVwZGF0ZVBpbkJveGVzKGNsZWFuKTsKICB9KTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgdmFyIGtleSA9IGUua2V5IHx8ICcnOwogICAgaWYgKGtleSA9PT0gJ0VzY2FwZScpIHsKICAgICAgY2xvc2VQaW5Nb2RhbCgpOwogICAgfQogIH0pOwp9KSgpOwoKZnVuY3Rpb24gYWZmaWNoZXJNb2RhbChlbGVtZW50KSB7CiAgICB2YXIgcG9pbnRhZ2VJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBvaW50YWdlLWlkJyk7CiAgICB3aW5kb3cucG9pbnRhZ2VJZFBvdXJNb2RpZmljYXRpb24gPSBwb2ludGFnZUlkOwogICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAibW9kaWZfcG9pbnRhZ2UucGhwP3BvaW50YWdlSWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChwb2ludGFnZUlkKTsKfQoKZnVuY3Rpb24gdmVyaWZpZXJQaW4oKSB7CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICAgIHZhciBwaW4gPSBzYW5pdGl6ZVBpblZhbHVlKGlucHV0ID8gaW5wdXQudmFsdWUgOiAnJyk7CiAgICBpZiAoaW5wdXQgJiYgaW5wdXQudmFsdWUgIT09IHBpbikgaW5wdXQudmFsdWUgPSBwaW47CiAgICB1cGRhdGVQaW5Cb3hlcyhwaW4pOwoKICAgIGlmIChwaW4ubGVuZ3RoICE9PSA0KSB7CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFbnRyZXogdW4gY29kZSBQSU4gw6AgNCBjaGlmZnJlcy4iLCAiZXJyb3IiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWxlcnQoIkVudHJleiB1biBjb2RlIFBJTiDDoCA0IGNoaWZmcmVzLiIpOwogICAgICAgIH0KICAgICAgICB0cnkgeyBmb2N1c1BpbklucHV0KCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHBpbikgewogICAgICAgIC8vIEVudm9pIGR1IGNvZGUgUElOIMOgIHVuIHNjcmlwdCBQSFAgcG91ciB2w6lyaWZpY2F0aW9uCiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VUZXh0ID09ICJPSyIpIHsKICAgICAgICAgICAgICAgICAgICAvLyBFeMOpY3V0ZXIgbCdhY3Rpb24gZW4gZm9uY3Rpb24gZHUgY29udGV4dGUKICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uQ29udGV4dCA9PT0gIm1vZGlmaWNhdGlvblBvaW50YWdlIikgewogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJtb2RpZl9wb2ludGFnZS5waHA/cG9pbnRhZ2VJZD0iICsgd2luZG93LnBvaW50YWdlSWRQb3VyTW9kaWZpY2F0aW9uOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uQ29udGV4dCA9PT0gInNvcnRpZUVtcGxveWUiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRpckVtcGxveWUod2luZG93LnBvaW50YWdlSWRQb3VyU29ydGllKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIsICJlcnJvciIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXNldFBpbk1vZGFsKCk7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgZm9jdXNQaW5JbnB1dCgpOyB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB4aHIub3BlbigiUE9TVCIsICJ2ZXJpZmllcl9waW4ucGhwIiwgdHJ1ZSk7CiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKICAgICAgICB4aHIuc2VuZCgicGluPSIgKyBwaW4pOwogICAgfQp9CgpmdW5jdGlvbiBwcm9tcHRFeGl0UGluKCkgewogICAgd2luZG93LnBvaW50YWdlSWRQb3VyU29ydGllID0gPD9waHAgZWNobyAkZW1wbG95ZUlkOyA/PjsKICAgIHNvcnRpckVtcGxveWUod2luZG93LnBvaW50YWdlSWRQb3VyU29ydGllKTsKfQoKZnVuY3Rpb24gc29ydGlyRW1wbG95ZShlbXBsb3llSWQpIHsKICAgICQuYWpheCh7CiAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgIHVybDogInNvcnRpcl9lbXBsb3llLnBocCIsIC8vIFNjcmlwdCBQSFAgcG91ciBzb3J0aXIgbCdlbXBsb3nDqQogICAgICAgIGRhdGE6IHtlbXBsb3llOiBlbXBsb3llSWR9LAogICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIHZhciBtc2cgPSAiU3RhdHV0IGRlIGwnZW1wbG95w6kgbWlzIMOgIGpvdXIuIjsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiaW5kZXgucGhwP3RvYXN0PSIgKyBlbmNvZGVVUklDb21wb25lbnQobXNnKSArICImdG9hc3RUeXBlPXN1Y2Nlc3MiOwogICAgICAgIH0sCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXIgZHUgc3RhdHV0IGVtcGxvecOpLiIsICJlcnJvciIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXIgZHUgc3RhdHV0IGVtcGxvecOpLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cn0KCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDwvYm9keT4KICAgICAgICAgICAgCiAgICAgICAgICAgIDwvaHRtbD4="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 21480,
                "sha1": "8494f3c5d174b38d0f4ff29871209011ca5b26fd",
                "content_b64": "PD9waHAKCi8qIGRvYy1wcm9qZWN0IHwgcG9pbnRhZ2VzL3BvaW50YWdlLnBocCB8IEFmZmljaGUsIHPDqWN1cmlzZSBldCBwaWxvdGUgbOKAmWludGVyZmFjZSBkZSBwb2ludGFnZSBhdmVjIGF1dG9yaXNhdGlvbiBwZXJtYW5lbnRlIHBhciBhcHBhcmVpbCBldCBhc3NldHMgbG9jYXV4IHZlcnNpb25uw6lzIHNhbnMgTW9kZXJuaXpyL1Jlc3BvbmQgbmkgQm9vdHN0cmFwIEpTLiB8IEV4cG9zZTogYXVjdW4gfCBEw6lwZW5kIGRlOiBjb25maWcucGhwLCBpbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAsIGluY2x1ZGVzL2Fzc2V0X3ZlcnNpb24ucGhwLCBjb25uZXhpb24ucGhwLCBlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCwgZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCwgc29ydGlyX2VtcGxveWUucGhwLCBtb2RpZl9wb2ludGFnZS5waHAsIGpzL3ZlbmRvci9qcXVlcnktMS4xMS4yLm1pbi5qcywganMvcGx1Z2lucy5qcywganMvbWFpbi5qcyB8IEltcGFjdGU6IHNlc3Npb24gUEhQLCBjb29raWUgZOKAmWFwcGFyZWlsLCByZWRpcmVjdGlvbnMsIGFmZmljaGFnZSBVSSwgQUpBWCwgcG9pbnRhZ2VzIGVuIGJhc2UsIHRvYXN0cyBpbnRlcm5lcyB8IFRhYmxlczogcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyh0b2tlbl9oYXNoLCBhdXRob3JpemVkX2F0LCBsYXN0X3VzZWRfYXQpLCB6X3B0Z19hcXBfdXRpbGlzYXRldXJzKFVzZXJJRCwgTm9tLCBQcmVub20pLCB6X3B0Z19hcXBfcG9pbnRhZ2VzKFBvaW50YWdlSUQsIFVzZXJJRCwgRGF0ZUhldXJlRW50cmVlLCBEYXRlSGV1cmVTb3J0aWUpICovCgoKLy8gRMOpbWFycmFnZSBvdSByZXByaXNlIGRlIGxhIHNlc3Npb24Kc2Vzc2lvbl9zdGFydCgpOwpyZXF1aXJlX29uY2UgImNvbmZpZy5waHAiOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICIvaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2Fzc2V0X3ZlcnNpb24ucGhwIjsKcmVxdWlyZV9kZXZpY2VfYXV0aG9yaXplZCgkcGRvKTsKCmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwoKLy8gUsOpY3Vww6lyYXRpb24gZGUgbCdJRCBkZSBsJ2VtcGxvecOpCiRlbXBsb3llSWQgPSBpc3NldCgkX0dFVFsnZW1wbG95ZSddKSA/IGludHZhbCgkX0dFVFsnZW1wbG95ZSddKSA6IG51bGw7CiR2aWV3T25seSA9IChpc3NldCgkX0dFVFsndmlldyddKSAmJiAkX0dFVFsndmlldyddID09PSAnMScpOwoKLy8gUsOpY3Vww6lyYXRpb24gZGVzIGluZm9ybWF0aW9ucyBkZSBsJ2VtcGxvecOpIGRlcHVpcyBsYSBCREQKJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgTm9tLCBQcmVub20gRlJPTSB6X3B0Z19hcXBfdXRpbGlzYXRldXJzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQiKTsKJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkXSk7CiRlbXBsb3llID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwoKLy8gUsOpY3Vww6lyYXRpb24gZHUgZGVybmllciBwb2ludGFnZSBkZSBsJ2VtcGxvecOpCiRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQgT1JERVIgQlkgRGF0ZUhldXJlRW50cmVlIERFU0MsIFBvaW50YWdlSUQgREVTQyBMSU1JVCAxIik7CiRzdG10LT5leGVjdXRlKFsnOnVzZXJJRCcgPT4gJGVtcGxveWVJZF0pOwokbGFzdFBvaW50YWdlID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwoKJGlzV29ya2luZyA9ICRsYXN0UG9pbnRhZ2UgJiYgJGxhc3RQb2ludGFnZVsnRGF0ZUhldXJlU29ydGllJ10gPT09IG51bGw7Cgo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCgoKPHRpdGxlPlBvaW50YWdlcyBzYWxhcmnDqXM8L3RpdGxlPgoKPCEtLQoKCgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKCgpodHRwOi8vd3d3LnRvb3BsYXRlLmNvbS92aWV3LzIwODktbWV0ZW9yCgoKCi0tPgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+CgoKCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ib290c3RyYXAtdGhlbWUubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2ZvbnRBd2Vzb21lLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2hlcm8tc2xpZGVyLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3N0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgoKPC9oZWFkPgoKCgo8Ym9keSBjbGFzcz0icGFnZS1wb2ludGFnZSB0aGVtZS1kYXJrIj4KCgoKCjxkaXYgaWQ9ImFib3V0IiBjbGFzcz0icGFnZS1zZWN0aW9uIj4KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KPGRpdiBjbGFzcz0icm93Ij4KPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIj4KPGgxPlBvaW50YWdlcyA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoKCRlbXBsb3llWydOb20nXSA/PyAnJykgLiAiICIgLiAoJGVtcGxveWVbJ1ByZW5vbSddID8/ICcnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+PC9oMT4KPGRpdiBjbGFzcz0ibGluZS1kZWMiPjwvZGl2Pgo8Y2VudGVyPgo8Zm9udCBjb2xvcj0id2hpdGUiPgo8YnI+CjxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYmFja0hvbWVCdXR0b24iIGNsYXNzPSJidG4iIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5ocmVmPSdpbmRleC5waHAnOyI+UmV0b3VyIGFjY3VlaWw8L2J1dHRvbj4KPGJyPgo8P3BocCBpZiAoISR2aWV3T25seSk6ID8+CiAgICA8P3BocCBpZiAoISRpc1dvcmtpbmcpOiA/PgogICAgICAgIDxmb3JtIGlkPSJjb250YWN0Ij4KICAgICAgICA8YnV0dG9uIGRhdGEtZW1wbG95ZT0iPD9waHAgZWNobyAkZW1wbG95ZUlkOyA/PiIgaWQ9ImFycml2YWxCdXR0b24iIGNsYXNzPSJidG4iPkFycml2w6llPC9idXR0b24+CiAgICAgICAgPC9mb3JtPgogICAgPD9waHAgZWxzZTogPz4KICAgICAgICA8Zm9ybSBpZD0iY29udGFjdDIiPgogICAgICAgIDxidXR0b24gZGF0YS1lbXBsb3llPSI8P3BocCBlY2hvICRlbXBsb3llSWQ7ID8+IiBpZD0iZGVwYXJ0dXJlQnV0dG9uIiBjbGFzcz0iYnRuIj5Ew6lwYXJ0PC9idXR0b24+CiAgICAgICAgPC9mb3JtPgogICAgPD9waHAgZW5kaWY7ID8+Cjw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwhLS0gQXV0cmUgY29udGVudS4uLiAtLT4KICAgICAgICA8L2ZvbnQ+CiAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPGJyPjxicj4gCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1kZWMiPjwvZGl2PgogICAgICAgIAogICAgICAgIDxicj48YnI+CiAgICAgICAgPGNlbnRlcj4KICAgICAgICA8P3BocAogICAgICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlIGwnSUQgZGUgbCdlbXBsb3nDqQogICAgICAgICRlbXBsb3llSWQgPSBpc3NldCgkX0dFVFsnZW1wbG95ZSddKSA/IGludHZhbCgkX0dFVFsnZW1wbG95ZSddKSA6IG51bGw7CiAgICAgICAgCiAgICAgICAgLy8gSW5pdGlhbGlzYXRpb24gZGVzIHZhcmlhYmxlcyBwb3VyIGxlIHRhYmxlYXUKICAgICAgICAkdG90YWxfaG91cnMgPSAwOwogICAgICAgICR0YWJsZV9yb3dzID0gIiI7CiAgICAgICAgCiAgICAgICAgJGN1cnJlbnRfbW9udGggPSBkYXRlKCdtJyk7CiAgICAgICAgJGN1cnJlbnRfeWVhciA9IGRhdGUoJ1knKTsKICAgICAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKICAgICAgICAKICAgICAgICAKICAgICAgICAvLyBSw6ljdXDDqXJhdGlvbiBkZXMgcG9pbnRhZ2VzIGRlIGwnZW1wbG95w6kgZGVwdWlzIGxhIEJERAogICAgICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUIFBvaW50YWdlSUQsIFVOSVhfVElNRVNUQU1QKERhdGVIZXVyZUVudHJlZSkgQVMgRW50cmVlVGltZXN0YW1wLCBVTklYX1RJTUVTVEFNUChEYXRlSGV1cmVTb3J0aWUpIEFTIFNvcnRpZVRpbWVzdGFtcCBGUk9NIHpfcHRnX2FxcF9wb2ludGFnZXMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCBBTkQgTU9OVEgoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50TW9udGggQU5EIFlFQVIoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50WWVhciIpOwogICAgICAgICRzdG10LT5leGVjdXRlKFsnOnVzZXJJRCcgPT4gJGVtcGxveWVJZCwgJzpjdXJyZW50TW9udGgnID0+ICRjdXJyZW50X21vbnRoLCAnOmN1cnJlbnRZZWFyJyA9PiAkY3VycmVudF95ZWFyXSk7CiAgICAgICAgJHBvaW50YWdlcyA9ICRzdG10LT5mZXRjaEFsbChQRE86OkZFVENIX0FTU09DKTsKICAgICAgICAKICAgICAgICBmb3JlYWNoICgkcG9pbnRhZ2VzIGFzICRwb2ludGFnZSkgewogICAgICAgICAgICAvLyBDcsOpYXRpb24gZGUgbCdvYmpldCBEYXRlVGltZSBwb3VyIGwnaGV1cmUgZCdhcnJpdsOpZQogICAgICAgICAgICAkYXJyaXZhbF90aW1lID0gRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1UnLCAkcG9pbnRhZ2VbJ0VudHJlZVRpbWVzdGFtcCddKTsKICAgICAgICAgICAgJGFycml2YWxfdGltZS0+c2V0VGltZXpvbmUobmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJykpOwogICAgICAgICAgICAkZGF0ZV9kaXNwbGF5ID0gJGFycml2YWxfdGltZS0+Zm9ybWF0KCdZLW0tZCcpOwogICAgICAgICAgICAkYXJyaXZhbF90aW1lX2Rpc3BsYXkgPSAkYXJyaXZhbF90aW1lLT5mb3JtYXQoJ0g6aScpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gR8OpcmVyIGxlIGNhcyBvw7kgbGUgcG9pbnRhZ2UgZGUgc29ydGllIG4nZXN0IHBhcyBlbmNvcmUgZMOpZmluaQogICAgICAgICAgICBpZiAoZW1wdHkoJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSkpIHsKICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZV9kaXNwbGF5ID0gIkVuIGNvdXJzIjsKICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzX2Rpc3BsYXkgPSAiRW4gY291cnMiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gQ3LDqWF0aW9uIGRlIGwnb2JqZXQgRGF0ZVRpbWUgcG91ciBsJ2hldXJlIGRlIGTDqXBhcnQKICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZSA9IERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdVJywgJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSk7CiAgICAgICAgICAgICAgICAkZGVwYXJ0dXJlX3RpbWUtPnNldFRpbWV6b25lKG5ldyBEYXRlVGltZVpvbmUoJ0V1cm9wZS9QYXJpcycpKTsKICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZV9kaXNwbGF5ID0gJGRlcGFydHVyZV90aW1lLT5mb3JtYXQoJ0g6aScpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBDYWxjdWwgZGVzIGhldXJlcyB0cmF2YWlsbMOpZXMKICAgICAgICAgICAgICAgICR3b3JrX3NlY29uZHMgPSAkcG9pbnRhZ2VbJ1NvcnRpZVRpbWVzdGFtcCddIC0gJHBvaW50YWdlWydFbnRyZWVUaW1lc3RhbXAnXTsKICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzID0gJHdvcmtfc2Vjb25kcyAvIDM2MDA7CiAgICAgICAgICAgICAgICAkd29ya19ob3Vyc19kaXNwbGF5ID0gbnVtYmVyX2Zvcm1hdCgkd29ya19ob3VycywgMik7CiAgICAgICAgICAgICAgICAkdG90YWxfaG91cnMgKz0gJHdvcmtfaG91cnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFqb3V0IGRlIGxhIGxpZ25lIGRhbnMgbGUgdGFibGVhdQogICAgICAgICAgICAkdGFibGVfcm93cyAuPSAiPHRyIGRhdGEtcG9pbnRhZ2UtaWQ9JyIuJHBvaW50YWdlWydQb2ludGFnZUlEJ10uIicgZGF0YS1lbnRyZWUtdGltZXN0YW1wPSciLiRwb2ludGFnZVsnRW50cmVlVGltZXN0YW1wJ10uIicgZGF0YS1zb3J0aWUtdGltZXN0YW1wPSciLiRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10uIicgb25jbGljaz0nYWZmaWNoZXJNb2RhbCh0aGlzKSc+PHRkPnskZGF0ZV9kaXNwbGF5fTwvdGQ+PHRkPnskYXJyaXZhbF90aW1lX2Rpc3BsYXl9PC90ZD48dGQ+eyRkZXBhcnR1cmVfdGltZV9kaXNwbGF5fTwvdGQ+PHRkPiR3b3JrX2hvdXJzX2Rpc3BsYXk8L3RkPjwvdHI+IjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgLy8gQWZmaWNoYWdlIGR1IHRhYmxlYXUgZGVzIHBvaW50YWdlcwogICAgICAgIGVjaG8gIjx0YWJsZT4iOwogICAgICAgIGVjaG8gIjx0cj48dGg+RGF0ZTwvdGg+PHRoPkhldXJlIGQnYXJyaXbDqWU8L3RoPjx0aD5IZXVyZSBkZSBkw6lwYXJ0PC90aD48dGg+Tm9tYnJlIGQnaGV1cmVzPC90aD48L3RyPiI7CiAgICAgICAgZWNobyAkdGFibGVfcm93czsKICAgICAgICBlY2hvICI8L3RhYmxlPiI7CiAgICAgICAgCiAgICAgICAgPz4KICAgICAgICAKICAgICAgICAKICAgICAgICA8Zm9udCBjb2xvcj0id2hpdGUiPgogICAgICAgIDw/cGhwCiAgICAgICAgLy8gQWZmaWNoYWdlIGR1IHRvdGFsIGQnaGV1cmVzIHRyYXZhaWxsw6llcwogICAgICAgIGVjaG8gIlRvdGFsIGQnaGV1cmVzIHRyYXZhaWxsw6llcyA6ICIgLiBudW1iZXJfZm9ybWF0KCR0b3RhbF9ob3VycywgMik7CiAgICAgICAgPz4KICAgICAgICA8L2ZvbnQ+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPGJyPjxicj48YnI+CiAgICAgICAgPGZvbnQgY29sb3I9IndoaXRlIj4KICAgICAgICA8aDQ+QWZmaWNoYWdlIHN1ciBkYXRlcyBzw6lsZWN0aW9ubsOpZXM8L2g0PgogICAgICAgIDwvZm9udD4KICAgICAgICAKICAgICAgICA8YnI+CiAgICAgICAgPGRpdiBjbGFzcz0iZDEiPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1hcCI+CiAgICAgICAgCiAgICAgICAgPGZvcm0gaWQ9ImNvbnRhY3QiIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+IERhdGUgZGUgZMOpYnV0IDogPC9mb250Pjxmb250IGNvbG9yPSJibGFjayI+PGlucHV0IHR5cGU9ImRhdGUiIG5hbWU9InN0YXJ0X2RhdGUiIHJlcXVpcmVkPjwvZm9udD48YnI+PGJyPgogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+RGF0ZSBkZSBmaW4gOiA8L2ZvbnQ+PGZvbnQgY29sb3I9ImJsYWNrIj48aW5wdXQgdHlwZT0iZGF0ZSIgbmFtZT0iZW5kX2RhdGUiIHJlcXVpcmVkPjwvZm9udD48YnI+PGJyPgogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJibGFjayI+PGlucHV0IGNsYXNzPSJidG4iIGlkPSJmb3JtLXN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQWZmaWNoZXIgbGEgc8OpbGVjdGlvbiI+PC9mb250PgogICAgICAgIAogICAgICAgIDwvZm9ybT4KICAgICAgICAKICAgICAgICA8L2Rpdj48L2Rpdj48YnI+PGJyPjxicj48YnI+PGJyPjxicj4KICAgICAgICAKICAgICAgICA8Zm9udCBjb2xvcj0id2hpdGUiPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDw/cGhwCiAgICAgICAgLy8gVsOpcmlmaWNhdGlvbiBkZSBsYSBzb3VtaXNzaW9uIGR1IGZvcm11bGFpcmUKICAgICAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT0gJ1BPU1QnICYmIGlzc2V0KCRfR0VUWydlbXBsb3llJ10pKSB7CiAgICAgICAgICAgICRlbXBsb3llSWQgPSBpbnR2YWwoJF9HRVRbJ2VtcGxveWUnXSk7CiAgICAgICAgICAgICRzdGFydF9kYXRlID0gJF9QT1NUWydzdGFydF9kYXRlJ107CiAgICAgICAgICAgICRlbmRfZGF0ZSA9ICRfUE9TVFsnZW5kX2RhdGUnXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZGVzIGRhdGVzIGVuIGZvcm1hdCBZLW0tZAogICAgICAgICAgICAkc3RhcnRfZGF0ZV9mb3JtYXR0ZWQgPSBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgkc3RhcnRfZGF0ZSkpOwogICAgICAgICAgICAkZW5kX2RhdGVfZm9ybWF0dGVkID0gZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJGVuZF9kYXRlIC4gJyArMSBkYXknKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAkdG90YWxfaG91cnMgPSAwOwogICAgICAgICAgICAkdGFibGVfcm93cyA9ICIiOwogICAgICAgICAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFJlcXXDqnRlIHBvdXIgb2J0ZW5pciBsZXMgcG9pbnRhZ2VzIGVudHJlIGxlcyBkYXRlcyBzcMOpY2lmacOpZXMKICAgICAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgUG9pbnRhZ2VJRCwgVU5JWF9USU1FU1RBTVAoRGF0ZUhldXJlRW50cmVlKSBBUyBFbnRyZWVUaW1lc3RhbXAsIFVOSVhfVElNRVNUQU1QKERhdGVIZXVyZVNvcnRpZSkgQVMgU29ydGllVGltZXN0YW1wIEZST00gel9wdGdfYXFwX3BvaW50YWdlcyBXSEVSRSBVc2VySUQgPSA6dXNlcklEIEFORCBEYXRlSGV1cmVFbnRyZWUgQkVUV0VFTiA6c3RhcnREYXRlIEFORCA6ZW5kRGF0ZSIpOwogICAgICAgICAgICAKICAgICAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkLCAnOnN0YXJ0RGF0ZScgPT4gJHN0YXJ0X2RhdGVfZm9ybWF0dGVkLCAnOmVuZERhdGUnID0+ICRlbmRfZGF0ZV9mb3JtYXR0ZWRdKTsKICAgICAgICAgICAgJHBvaW50YWdlcyA9ICRzdG10LT5mZXRjaEFsbChQRE86OkZFVENIX0FTU09DKTsKICAgICAgICAgICAgaWYgKCEkc3RtdC0+ZXhlY3V0ZSgpKSB7CiAgICAgICAgICAgICAgICBwcmludF9yKCRzdG10LT5lcnJvckluZm8oKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcmVhY2ggKCRwb2ludGFnZXMgYXMgJHBvaW50YWdlKSB7CiAgICAgICAgICAgICAgICAvLyBDcsOpYXRpb24gZGUgbCdvYmpldCBEYXRlVGltZSBwb3VyIGwnaGV1cmUgZCdhcnJpdsOpZQogICAgICAgICAgICAgICAgJGFycml2YWxfdGltZSA9IERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdVJywgJHBvaW50YWdlWydFbnRyZWVUaW1lc3RhbXAnXSk7CiAgICAgICAgICAgICAgICAkYXJyaXZhbF90aW1lLT5zZXRUaW1lem9uZShuZXcgRGF0ZVRpbWVab25lKCdFdXJvcGUvUGFyaXMnKSk7CiAgICAgICAgICAgICAgICAkZGF0ZV9kaXNwbGF5ID0gJGFycml2YWxfdGltZS0+Zm9ybWF0KCdZLW0tZCcpOwogICAgICAgICAgICAgICAgJGFycml2YWxfdGltZV9kaXNwbGF5ID0gJGFycml2YWxfdGltZS0+Zm9ybWF0KCdIOmknKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gR8OpcmVyIGxlIGNhcyBvw7kgbGUgcG9pbnRhZ2UgZGUgc29ydGllIG4nZXN0IHBhcyBlbmNvcmUgZMOpZmluaQogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lX2Rpc3BsYXkgPSAiRW4gY291cnMiOwogICAgICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzX2Rpc3BsYXkgPSAiRW4gY291cnMiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBDcsOpYXRpb24gZGUgbCdvYmpldCBEYXRlVGltZSBwb3VyIGwnaGV1cmUgZGUgZMOpcGFydAogICAgICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZSA9IERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdVJywgJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSk7CiAgICAgICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lLT5zZXRUaW1lem9uZShuZXcgRGF0ZVRpbWVab25lKCdFdXJvcGUvUGFyaXMnKSk7CiAgICAgICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lX2Rpc3BsYXkgPSAkZGVwYXJ0dXJlX3RpbWUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsIGRlcyBoZXVyZXMgdHJhdmFpbGzDqWVzCiAgICAgICAgICAgICAgICAgICAgJHdvcmtfc2Vjb25kcyA9ICRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10gLSAkcG9pbnRhZ2VbJ0VudHJlZVRpbWVzdGFtcCddOwogICAgICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzID0gJHdvcmtfc2Vjb25kcyAvIDM2MDA7CiAgICAgICAgICAgICAgICAgICAgJHdvcmtfaG91cnNfZGlzcGxheSA9IG51bWJlcl9mb3JtYXQoJHdvcmtfaG91cnMsIDIpOwogICAgICAgICAgICAgICAgICAgICR0b3RhbF9ob3VycyArPSAkd29ya19ob3VyczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gQWpvdXQgZGUgbGEgbGlnbmUgZGFucyBsZSB0YWJsZWF1CiAgICAgICAgICAgICAgICAkdGFibGVfcm93cyAuPSAiPHRyIGRhdGEtcG9pbnRhZ2UtaWQ9JyIuJHBvaW50YWdlWydQb2ludGFnZUlEJ10uIicgZGF0YS1lbnRyZWUtdGltZXN0YW1wPSciLiRwb2ludGFnZVsnRW50cmVlVGltZXN0YW1wJ10uIicgZGF0YS1zb3J0aWUtdGltZXN0YW1wPSciLiRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10uIicgb25jbGljaz0nYWZmaWNoZXJNb2RhbCh0aGlzKSc+PHRkPnskZGF0ZV9kaXNwbGF5fTwvdGQ+PHRkPnskYXJyaXZhbF90aW1lX2Rpc3BsYXl9PC90ZD48dGQ+eyRkZXBhcnR1cmVfdGltZV9kaXNwbGF5fTwvdGQ+PHRkPiR3b3JrX2hvdXJzX2Rpc3BsYXk8L3RkPjwvdHI+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBBZmZpY2hhZ2UgZHUgdGFibGVhdQogICAgICAgICAgICBlY2hvICI8dGFibGU+PHRyPjx0aD5EYXRlPC90aD48dGg+SGV1cmUgZCdhcnJpdsOpZTwvdGg+PHRoPkhldXJlIGRlIGTDqXBhcnQ8L3RoPjx0aD5Ob21icmUgZCdoZXVyZXM8L3RoPjwvdHI+JHRhYmxlX3Jvd3M8L3RhYmxlPiI7CiAgICAgICAgICAgIGVjaG8gIlRvdGFsIGQnaGV1cmVzIHRyYXZhaWxsw6llcyA6ICIgLiBudW1iZXJfZm9ybWF0KCR0b3RhbF9ob3VycywgMik7CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgPz4KICAgICAgICAKICAgICAgICAKICAgICAgICA8YnI+PGJyPjxicj4KICAgICAgICAKICAgICAgICA8cD48YSBocmVmPSIjIiBvbmNsaWNrPSJwcm9tcHRFeGl0UGluKCkiPlNvcnRpciBFbXBsb3nDqTwvYT48L3A+CiAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPC9kaXY+PC9kaXY+CiAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPCEtLSBNb2RhbCBQSU4gKGRlc2lnbiByZWZhaXQpIC0tPgogICAgICAgIDxkaXYgaWQ9Im1vZGFsQmFja2dyb3VuZCIgb25jbGljaz0iY2xvc2VQaW5Nb2RhbCgpIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CiAgICAgICAgPGRpdiBpZD0icGluTW9kYWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJwaW5Nb2RhbFRpdGxlIj4KICAgICAgICAgIDxmb3JtIGlkPSJwaW5Gb3JtIiBvbnN1Ym1pdD0idmVyaWZpZXJQaW4oKTsgcmV0dXJuIGZhbHNlOyI+CiAgICAgICAgICAgIDxoMiBpZD0icGluTW9kYWxUaXRsZSIgY2xhc3M9InBpbi1tb2RhbC10aXRsZSI+Q29kZSBQSU48L2gyPgogICAgICAgICAgICA8cCBjbGFzcz0icGluLW1vZGFsLXN1YnRpdGxlIj5TYWlzaXNzZXogdm90cmUgY29kZSDDoCA0IGNoaWZmcmVzPC9wPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWlucHV0LXdyYXBwZXIiIG9uY2xpY2s9ImZvY3VzUGluSW5wdXQoKSI+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0icGluSW5wdXQiIGNsYXNzPSJzci1vbmx5Ij5Db2RlIFBJTiAoNCBjaGlmZnJlcyk8L2xhYmVsPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBpbi1ib3hlcyIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjAiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjEiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjMiPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGVsIgogICAgICAgICAgICAgICAgaWQ9InBpbklucHV0IgogICAgICAgICAgICAgICAgY2xhc3M9InBpbi1oaWRkZW4taW5wdXQiCiAgICAgICAgICAgICAgICBpbnB1dG1vZGU9Im51bWVyaWMiCiAgICAgICAgICAgICAgICBwYXR0ZXJuPSJbMC05XSoiCiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9IjQiCiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9Im9mZiIKICAgICAgICAgICAgICAgIGF1dG9jYXBpdGFsaXplPSJvZmYiCiAgICAgICAgICAgICAgICBhdXRvY29ycmVjdD0ib2ZmIgogICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiCiAgICAgICAgICAgICAgICB0aXRsZT0iU2V1bGVtZW50IGRlcyBjaGlmZnJlcy4iCiAgICAgICAgICAgICAgICB2YWx1ZT0iIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tbW9kYWwtYWN0aW9ucyI+CiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwaW4tbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VQaW5Nb2RhbCgpIj5Bbm51bGVyPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJwaW4tbW9kYWwtYnRuIGNvbmZpcm0iPlZhbGlkZXI8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy9wbHVnaW5zLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvbWFpbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAoKCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKICAgICAgICB2YXIgZW1wbG95ZWVGaXJzdE5hbWUgPSA8P3BocCBlY2hvIGpzb25fZW5jb2RlKCgkZW1wbG95ZSAmJiBpc3NldCgkZW1wbG95ZVsnUHJlbm9tJ10pKSA/IChzdHJpbmcpJGVtcGxveWVbJ1ByZW5vbSddIDogJycsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUgfCBKU09OX0hFWF9UQUcgfCBKU09OX0hFWF9BTVAgfCBKU09OX0hFWF9BUE9TIHwgSlNPTl9IRVhfUVVPVCk7ID8+OwogICAgICAgIGZ1bmN0aW9uIGJ1aWxkUHVuY2hUb2FzdChhY3Rpb24pIHsgdmFyIHAgPSBlbXBsb3llZUZpcnN0TmFtZSA/ICgiICIgKyBlbXBsb3llZUZpcnN0TmFtZSkgOiAiIjsgcmV0dXJuIChhY3Rpb24gPT09ICJkZXBhcnQiKSA/ICgiRMOpcGFydCIgKyBwICsgIiBlbnJlZ2lzdHLDqSIpIDogKCJBcnJpdsOpZSIgKyBwICsgIiBlbnJlZ2lzdHLDqWUiKTsgfQoKICAgICAgICAkKCIjYXJyaXZhbEJ1dHRvbiIpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBsZXQgZW1wbG95ZSA9ICQodGhpcykuZGF0YSgnZW1wbG95ZScpOwogICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgICAgICAgICAgdXJsOiAiZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAiLAogICAgICAgICAgICAgICAgZGF0YToge2VtcGxveWU6IGVtcGxveWV9LAogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gYnVpbGRQdW5jaFRvYXN0KCJhcnJpdmVlIik7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiaW5kZXgucGhwP3RvYXN0PSIgKyBlbmNvZGVVUklDb21wb25lbnQobXNnKSArICImdG9hc3RUeXBlPXN1Y2Nlc3MiOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIiwgImVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgJCgiI2RlcGFydHVyZUJ1dHRvbiIpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBsZXQgZW1wbG95ZSA9ICQodGhpcykuZGF0YSgnZW1wbG95ZScpOwogICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgICAgICAgICAgdXJsOiAiZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7ZW1wbG95ZTogZW1wbG95ZX0sCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBtc2cgPSBidWlsZFB1bmNoVG9hc3QoImRlcGFydCIpOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImluZGV4LnBocD90b2FzdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAiJnRvYXN0VHlwZT1zdWNjZXNzIjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIsICJlcnJvciIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiRXJyZXVyIGxvcnMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkdSBwb2ludGFnZS4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIAogICAgICAgIHZhciBhY3Rpb25Db250ZXh0ID0gIiI7IC8vIFZhcmlhYmxlIGdsb2JhbGUgcG91ciBzdG9ja2VyIGxlIGNvbnRleHRlIGRlIGwnYWN0aW9uCgpmdW5jdGlvbiBzYW5pdGl6ZVBpblZhbHVlKHZhbCkgewogIHJldHVybiBTdHJpbmcodmFsIHx8ICcnKS5yZXBsYWNlKC9cRC9nLCAnJykuc2xpY2UoMCwgNCk7Cn0KCmZ1bmN0aW9uIHVwZGF0ZVBpbkJveGVzKHBpbikgewogIHZhciBib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNwaW5Nb2RhbCAucGluLWJveCcpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgYm94ZXMubGVuZ3RoOyBpKyspIHsKICAgIGJveGVzW2ldLnRleHRDb250ZW50ID0gKGkgPCBwaW4ubGVuZ3RoKSA/ICfimIUnIDogJyc7CiAgfQp9CgpmdW5jdGlvbiBmb2N1c1BpbklucHV0KCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQpIHJldHVybjsKICB0cnkgeyBpbnB1dC5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQp9CgpmdW5jdGlvbiByZXNldFBpbk1vZGFsKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJzsKICB1cGRhdGVQaW5Cb3hlcygnJyk7Cn0KCmZ1bmN0aW9uIG9wZW5QaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKCFtb2RhbCB8fCAhYmcpIHJldHVybjsKICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBiZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICByZXNldFBpbk1vZGFsKCk7CiAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZvY3VzUGluSW5wdXQoKTsgfSwgMTApOwp9CgpmdW5jdGlvbiBjbG9zZVBpbk1vZGFsKCkgewogIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpOwogIHZhciBiZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJhY2tncm91bmQnKTsKICBpZiAobW9kYWwpIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgaWYgKGJnKSBiZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIHJlc2V0UGluTW9kYWwoKTsKfQoKLy8gQmluZCBpbnB1dCBvbmNlIChkaWdpdHMgb25seSArIHN5bmMgVUkgYm94ZXMpCihmdW5jdGlvbiBiaW5kUGluT25jZSgpIHsKICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICBpZiAoIWlucHV0IHx8IGlucHV0LmdldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcpID09PSAnMScpIHJldHVybjsKICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnLCAnMScpOwogIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICB2YXIgY2xlYW4gPSBzYW5pdGl6ZVBpblZhbHVlKGlucHV0LnZhbHVlKTsKICAgIGlmIChpbnB1dC52YWx1ZSAhPT0gY2xlYW4pIGlucHV0LnZhbHVlID0gY2xlYW47CiAgICB1cGRhdGVQaW5Cb3hlcyhjbGVhbik7CiAgfSk7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgIHZhciBrZXkgPSBlLmtleSB8fCAnJzsKICAgIGlmIChrZXkgPT09ICdFc2NhcGUnKSB7CiAgICAgIGNsb3NlUGluTW9kYWwoKTsKICAgIH0KICB9KTsKfSkoKTsKCmZ1bmN0aW9uIGFmZmljaGVyTW9kYWwoZWxlbWVudCkgewogICAgdmFyIHBvaW50YWdlSWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wb2ludGFnZS1pZCcpOwogICAgd2luZG93LnBvaW50YWdlSWRQb3VyTW9kaWZpY2F0aW9uID0gcG9pbnRhZ2VJZDsKICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIm1vZGlmX3BvaW50YWdlLnBocD9wb2ludGFnZUlkPSIgKyBlbmNvZGVVUklDb21wb25lbnQocG9pbnRhZ2VJZCk7Cn0KCmZ1bmN0aW9uIHZlcmlmaWVyUGluKCkgewogICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgICB2YXIgcGluID0gc2FuaXRpemVQaW5WYWx1ZShpbnB1dCA/IGlucHV0LnZhbHVlIDogJycpOwogICAgaWYgKGlucHV0ICYmIGlucHV0LnZhbHVlICE9PSBwaW4pIGlucHV0LnZhbHVlID0gcGluOwogICAgdXBkYXRlUGluQm94ZXMocGluKTsKCiAgICBpZiAocGluLmxlbmd0aCAhPT0gNCkgewogICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiRW50cmV6IHVuIGNvZGUgUElOIMOgIDQgY2hpZmZyZXMuIiwgImVycm9yIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFsZXJ0KCJFbnRyZXogdW4gY29kZSBQSU4gw6AgNCBjaGlmZnJlcy4iKTsKICAgICAgICB9CiAgICAgICAgdHJ5IHsgZm9jdXNQaW5JbnB1dCgpOyB9IGNhdGNoIChlKSB7fQogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChwaW4pIHsKICAgICAgICAvLyBFbnZvaSBkdSBjb2RlIFBJTiDDoCB1biBzY3JpcHQgUEhQIHBvdXIgdsOpcmlmaWNhdGlvbgogICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLnN0YXR1cyA9PSAyMDApIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlVGV4dCA9PSAiT0siKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRXjDqWN1dGVyIGwnYWN0aW9uIGVuIGZvbmN0aW9uIGR1IGNvbnRleHRlCiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkNvbnRleHQgPT09ICJtb2RpZmljYXRpb25Qb2ludGFnZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAibW9kaWZfcG9pbnRhZ2UucGhwP3BvaW50YWdlSWQ9IiArIHdpbmRvdy5wb2ludGFnZUlkUG91ck1vZGlmaWNhdGlvbjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbkNvbnRleHQgPT09ICJzb3J0aWVFbXBsb3llIikgewogICAgICAgICAgICAgICAgICAgICAgICBzb3J0aXJFbXBsb3llKHdpbmRvdy5wb2ludGFnZUlkUG91clNvcnRpZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkNvZGUgUElOIGluY29ycmVjdC4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkNvZGUgUElOIGluY29ycmVjdC4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmVzZXRQaW5Nb2RhbCgpOwogICAgICAgICAgICAgICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9wZW4oIlBPU1QiLCAidmVyaWZpZXJfcGluLnBocCIsIHRydWUpOwogICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgeGhyLnNlbmQoInBpbj0iICsgcGluKTsKICAgIH0KfQoKZnVuY3Rpb24gcHJvbXB0RXhpdFBpbigpIHsKICAgIHdpbmRvdy5wb2ludGFnZUlkUG91clNvcnRpZSA9IDw/cGhwIGVjaG8gJGVtcGxveWVJZDsgPz47CiAgICBzb3J0aXJFbXBsb3llKHdpbmRvdy5wb2ludGFnZUlkUG91clNvcnRpZSk7Cn0KCmZ1bmN0aW9uIHNvcnRpckVtcGxveWUoZW1wbG95ZUlkKSB7CiAgICAkLmFqYXgoewogICAgICAgIHR5cGU6ICJQT1NUIiwKICAgICAgICB1cmw6ICJzb3J0aXJfZW1wbG95ZS5waHAiLCAvLyBTY3JpcHQgUEhQIHBvdXIgc29ydGlyIGwnZW1wbG95w6kKICAgICAgICBkYXRhOiB7ZW1wbG95ZTogZW1wbG95ZUlkfSwKICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkgewogICAgICAgICAgICB2YXIgbXNnID0gIlN0YXR1dCBkZSBsJ2VtcGxvecOpIG1pcyDDoCBqb3VyLiI7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImluZGV4LnBocD90b2FzdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAiJnRvYXN0VHlwZT1zdWNjZXNzIjsKICAgICAgICB9LAogICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiRXJyZXVyIGxvcnMgZGUgbGEgbWlzZSDDoCBqb3VyIGR1IHN0YXR1dCBlbXBsb3nDqS4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhbGVydCgiRXJyZXVyIGxvcnMgZGUgbGEgbWlzZSDDoCBqb3VyIGR1IHN0YXR1dCBlbXBsb3nDqS4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwp9CgogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgIAogICAgICAgICAgICA8L2h0bWw+"
            }
        }
    ],
    "meta": {
        "summary": {
            "changed": 7,
            "created": 0,
            "deleted": 0,
            "errors": 0
        },
        "patch_sha1": "439746c439bbb2a78b5d5ecd829291d83999aa9e",
        "created_files": [],
        "branching": {
            "auto_branch_created": false,
            "auto_branch_id": null,
            "source_branch_id": "main",
            "base_event_id": "event_1d594ac189671de7"
        },
        "transition_store": {
            "dir": "event-assets/event_a4c22d3ca872c3ae",
            "manifest": "event-assets/event_a4c22d3ca872c3ae/manifest.json",
            "files_count": 7
        }
    },
    "impacted_paths": [
        "pointages/admin.php",
        "pointages/css/tooplate-style.css",
        "pointages/index.php",
        "pointages/js/driver-modal.js",
        "pointages/js/main.js",
        "pointages/modif_pointage.php",
        "pointages/pointage.php"
    ]
}