HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.30
System: Linux iZj6c1151k3ad370bosnmsZ 3.10.0-1160.76.1.el7.x86_64 #1 SMP Wed Aug 10 16:21:17 UTC 2022 x86_64
User: root (0)
PHP: 7.4.30
Disabled: NONE
Upload Files
File: /var/www/html/sparkle/wp-content/uploads/lumise_data/user_data/2022/07/L4QSPXQF_AZbKCOdXi4.tmp
{"id":"14","cart_id":"L4QSPXQF","qty":1,"product_id":"14","product_cms":15661,"product_name":"Personalizar body manga larga","price":{"total":168,"fixed":0,"resource":0,"template":0,"base":168},"options":{},"variation":"PL0A","attributes":{"G4MX":{"id":"G4MX","name":"Size","type":"select","required":true,"use_variation":true,"values":{"options":[{"title":"XS","price":"","default":false,"value":"xs"},{"title":"S","price":"","default":false,"value":"s"},{"title":"M","price":"","default":false,"value":"m"},{"title":"L","price":"","default":false,"value":"l"},{"title":"XL","price":"","default":false,"value":"xl"},{"title":"2XL","price":"","default":false,"value":"2xl"}]}},"quantity":{"id":"quantity","name":"Quantity","value":1,"type":"quantity"}},"printing":null,"resource":[],"design":{"created":1655974935304,"stages":{"612bgf47ex":{"data":{"objects":[null,null,null,null,{"type":"text-fx","originX":"center","originY":"center","left":420.63,"top":196.5,"width":178,"height":169.5,"fill":"#546e7a","strokeWidth":0,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"visible":true,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","skewX":0,"skewY":0,"crossOrigin":"","alignX":"none","alignY":"none","meetOrSlice":"meet","id":"rdxafa-tq9w7t3xtqg","evented":true,"selectable":true,"text":"Oblique","fontFamily":"Anton","fontSize":60,"font":["","regular"],"bridge":{"bottom":4.5,"curve":10,"oblique":true,"offsetY":0.5,"trident":false},"name":"Oblique","filters":[],"resizeFilters":[]}],"background":"#ebeced","devicePixelRatio":2,"product_color":"#ffffff","limit_zone":{"width":136.25,"height":182.5,"top":105.25,"left":352.5},"edit_zone":{"height":146,"width":109,"left":0.5,"top":-28,"radius":"5"},"product_width":500,"product_height":424,"screenshot":""},"edit_zone":{"height":146,"width":109,"left":0.5,"top":-28,"radius":"5"},"image":".\/wp-content\/plugins\/lumise\/core\/includes\/ajax.php","overlay":false,"updated":1655974935.024,"product_width":400,"product_height":340,"devicePixelRatio":2,"screenshot":"data:image\/jpg;base64,PD9waHANCi8qKg0KKg0KKgkocCkgcGFja2FnZTogbHVtaXNlDQoqCShjKSBhdXRob3I6CUtpbmctVGhlbWUNCioJKGkpIHdlYnNpdGU6IGh0dHBzOi8vd3d3Lmx1bWlzZS5jb20NCioNCiovDQoNCnJlcXVpcmVfb25jZSgnbGliLnBocCcpOw0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCmNsYXNzIGx1bWlzZV9hamF4IGV4dGVuZHMgbHVtaXNlX2xpYiB7DQoNCglwcml2YXRlICRhY3Rpb25zID0gYXJyYXkoDQoJCSdpbml0JyA9PiB0cnVlLA0KCQknZXh0ZW5kJyA9PiB0cnVlLA0KCQkndGVtcGxhdGVzJyA9PiB0cnVlLA0KCQknY2xpcGFydHMnID0+IHRydWUsDQoJCSdzaGFwZXMnID0+IHRydWUsDQoJCSduZXdfbGFuZ3VhZ2UnID0+IGZhbHNlLA0KCQknc3dpdGNoX3N0YXR1cycgPT4gZmFsc2UsDQoJCSdkdXBsaWNhdGVfaXRlbScgPT4gZmFsc2UsDQoJCSdhZGRfdGFncycgPT4gZmFsc2UsDQoJCSdyZW1vdmVfdGFncycgPT4gZmFsc2UsDQoJCSdsdW1pc2Vfc2V0X3ByaWNlJyA9PiBmYWxzZSwNCgkJJ2NoYW5nZV9sYW5nJyA9PiB0cnVlLA0KCQknZWRpdF9sYW5ndWFnZV90ZXh0JyA9PiBmYWxzZSwNCgkJJ2NhdGVnb3JpZXMnID0+IGZhbHNlLA0KCQknYWRkX2NsaXBhcnQnID0+IGZhbHNlLA0KCQknbGlzdF9wcm9kdWN0cycgPT4gdHJ1ZSwNCgkJJ2xvYWRfcHJvZHVjdCcgPT4gdHJ1ZSwNCgkJJ3VwbG9hZF9zaGFyZV9kZXNpZ24nID0+IHRydWUsDQoJCSdnZXRfc2hhcmVzJyA9PiB0cnVlLA0KCQknZ2V0X3JzcycgPT4gZmFsc2UsDQoJCSdsaXN0X2NvbG9ycycgPT4gZmFsc2UsDQoJCSdkZWxldGVfbGlua19zaGFyZScgPT4gdHJ1ZSwNCgkJJ3VwbG9hZCcgPT4gZmFsc2UsDQoJCSd1cGxvYWRfcHJvZHVjdF9pbWFnZXMnID0+IGZhbHNlLA0KCQkndXBsb2FkX2ZpZWxkcycgPT4gZmFsc2UsDQoJCSdjaGVja291dCcgPT4gdHJ1ZSwNCgkJJ3BkZicgPT4gdHJ1ZSwNCgkJJ2xvYWRfbW9yZV9iYXNlcycgPT4gZmFsc2UsDQoJCSdlZGl0X25hbWVfcHJvZHVjdF9pbWFnZScgPT4gZmFsc2UsDQoJCSdkZWxldGVfYmFzZV9pbWFnZScgPT4gZmFsc2UsDQoJCSdzZXR1cCcgPT4gZmFsc2UsDQoJCSdhZGRvbicgPT4gdHJ1ZSwNCgkJJ3JlcG9ydF9idWcnID0+IHRydWUsDQoJCSdwcm9kdWN0X3ZhcmlhdGlvbicgPT4gdHJ1ZQ0KCSk7DQoJcHJpdmF0ZSAkYWN0aW9uc19nZXQgPSBhcnJheSgNCgkJJ3BkZicsDQoJCSdzZXR1cCcsDQoJCSdwcm9kdWN0X3ZhcmlhdGlvbicNCgkpOw0KCXByaXZhdGUgJGFjdGlvbjsNCglwcml2YXRlICRub25jZTsNCglwcm90ZWN0ZWQgJGFpZDsNCg0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsNCgkJDQoJCWdsb2JhbCAkbHVtaXNlOw0KCQkNCgkJJHRoaXMtPmFjdGlvbiA9IGlzc2V0KCRfUE9TVFsnYWN0aW9uJ10pID8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FjdGlvbiddKSA6ICcnOw0KCQkkdGhpcy0+bm9uY2UgPSBpc3NldCgkX1BPU1RbJ25vbmNlJ10pID8gZXhwbG9kZSgiOiIsIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydub25jZSddKSkgOiBhcnJheSgnJywgJycpOw0KCQkNCgkJaWYgKGlzc2V0KCRfR0VUWydhY3Rpb24nXSkgJiYgJF9HRVRbJ2FjdGlvbiddID09ICdjaGVjay11cGRhdGUnKSB7DQoJCQloZWFkZXIoJ0hUVFAvMS4wIDIwMCcpOw0KCQkJcHJpbnRfcigkbHVtaXNlLT51cGRhdGUtPmNoZWNrKCkpOw0KCQkJZXhpdDsNCgkJfQ0KCQkNCgkJaWYgKA0KCQkJaXNzZXQoJF9GSUxFU1snZmlsZSddKSB8fCANCgkJCSgNCgkJCQlpc3NldCgkX1JFUVVFU1RbJ2FjdGlvbiddKSAmJiANCgkJCQlpbl9hcnJheSgkX1JFUVVFU1RbJ2FjdGlvbiddLCAkdGhpcy0+YWN0aW9uc19nZXQpDQoJCQkpDQoJCSkgew0KCQkJJHRoaXMtPmFjdGlvbiA9IGlzc2V0KCRfUkVRVUVTVFsnYWN0aW9uJ10pID8gaHRtbHNwZWNpYWxjaGFycygkX1JFUVVFU1RbJ2FjdGlvbiddKSA6ICcnOw0KCQkJJHRoaXMtPm5vbmNlID0gaXNzZXQoJF9SRVFVRVNUWydub25jZSddKSA\/IGV4cGxvZGUoIjoiLCBodG1sc3BlY2lhbGNoYXJzKCRfUkVRVUVTVFsnbm9uY2UnXSkpIDogYXJyYXkoJycsICcnKTsNCgkJfQ0KCQkNCgkJaWYgKCRsdW1pc2UtPmNmZy0+c2V0dGluZ3NbJ3JlcG9ydF9idWdzJ10gPT0gMSB8fCAkbHVtaXNlLT5jZmctPnNldHRpbmdzWydyZXBvcnRfYnVncyddID09IDIpDQoJCQkkdGhpcy0+YWN0aW9uc1snc2VuZF9idWcnXSA9IHRydWU7DQoJCQkNCgkJLy8gQ2FsbCB0byBhY3Rpb25zDQoJCQ0KCQlpZiAoDQoJCQllbXB0eSgkdGhpcy0+YWN0aW9uKSB8fA0KCQkJZW1wdHkoJHRoaXMtPm5vbmNlKSB8fA0KCQkJIWlzc2V0KCR0aGlzLT5hY3Rpb25zWyR0aGlzLT5hY3Rpb25dKSB8fA0KCQkJIW1ldGhvZF9leGlzdHMoJHRoaXMsICR0aGlzLT5hY3Rpb24pIHx8DQoJCQkoDQoJCQkJJHRoaXMtPmFjdGlvbnNbJHRoaXMtPmFjdGlvbl0gIT09IHRydWUgJiYNCgkJCQkhJGx1bWlzZS0+Y29ubmVjdG9yLT5pc19hZG1pbigpDQoJCQkpDQoJCSkgew0KCQkJcmV0dXJuIGhlYWRlcignSFRUUC8xLjAgNDAzIEZvcmJpZGRlbicpOw0KCQl9DQoJCQ0KCQkkdGhpcy0+bWFpbiA9ICRsdW1pc2U7DQoNCgkJaWYgKCR0aGlzLT5hY3Rpb24gPT0gJ2V4dGVuZCcpDQoJCQlyZXR1cm4gJHRoaXMtPmV4dGVuZCgpOw0KCQkJDQoJCSR0aGlzLT5haWQgPSBzdHJfcmVwbGFjZSgiJyIsICIiLCAkbHVtaXNlLT5jb25uZWN0b3ItPmNvb2tpZSgnbHVtaXNlLUFJRCcpKTsNCgkJDQoJCWlmICh0cnVlIHx8IGx1bWlzZV9zZWN1cmU6OmNoZWNrX25vbmNlKCR0aGlzLT5ub25jZVswXSwgJHRoaXMtPm5vbmNlWzFdKSkgew0KCQkJaGVhZGVyKCdIVFRQLzEuMCAyMDAnKTsNCgkJCSRsdW1pc2UtPmRvX2FjdGlvbignYWpheCcpOw0KCQkJY2FsbF91c2VyX2Z1bmNfYXJyYXkoYXJyYXkoJiR0aGlzLCAkdGhpcy0+YWN0aW9uKSwgYXJyYXkoKSk7DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm4gaGVhZGVyKCdIVFRQLzEuMCA0MDMgRm9yYmlkZGVuJyk7DQoJCX0NCgkJDQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIGV4dGVuZCgpIHsNCg0KCQkkbmFtZSA9IGlzc2V0KCRfUE9TVFsnbmFtZSddKSA\/IGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWyduYW1lJ10pIDogJyc7DQoJCSRub25jZSA9IGlzc2V0KCRfUE9TVFsnbm9uY2UnXSkgPyBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnbm9uY2UnXSkgOiAnJzsNCg0KCQlpZiAoZW1wdHkoJG5hbWUpIHx8IGVtcHR5KCRub25jZSkgfHwgIWx1bWlzZV9zZWN1cmU6Om5vbmNlX2V4aXN0KCRuYW1lLCAkbm9uY2UpKSB7DQoJCQllY2hvICctMSc7DQoJCQlleGl0Ow0KCQl9ZWxzZXsNCgkJCWVjaG8gbHVtaXNlX3NlY3VyZTo6Y3JlYXRlX25vbmNlKCRuYW1lKTsNCgkJCWV4aXQ7DQoJCX0NCg0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiB0ZW1wbGF0ZXMoKSB7DQoJCQ0KCQkkdGhpcy0+eF9pdGVtcygndGVtcGxhdGVzJyk7DQoNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIGNsaXBhcnRzKCkgew0KCQkNCgkJJHRoaXMtPnhfaXRlbXMoJ2NsaXBhcnRzJyk7DQoJCQ0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBzaGFwZXMoKSB7DQoNCgkJJGluZGV4ID0gaHRtbHNwZWNpYWxjaGFycyhpc3NldCgkX1BPU1RbJ2luZGV4J10pID8gJF9QT1NUWydpbmRleCddIDogMCk7DQoJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7DQoJCSRpdGVtcyA9ICR0aGlzLT5nZXRfc2hhcGVzKCRpbmRleCk7DQoJCWZvcmVhY2goJGl0ZW1zIGFzICRpbmQgPT4gJGl0ZW0pew0KCQkJJGl0ZW1zWyRpbmRdWydjb250ZW50J10gPSAkdGhpcy0+c3RyaXBhbGxzbGFzaGVzKCRpdGVtWydjb250ZW50J10pOw0KCQl9DQoJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkiaXRlbXMiID0+ICRpdGVtcywNCgkJCSJ0b3RhbCIgPT4gJHRoaXMtPmdldF9zaGFwZXMoJ3RvdGFsJyksDQoJCQkiaW5kZXgiID0+ICRpbmRleCwNCgkJCSJsaW1pdCIgPT4gMjANCgkJKSk7DQoNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gbmV3X2xhbmd1YWdlKCkgew0KDQoJCSRjb2RlID0gJF9QT1NUWydjb2RlJ107DQoJCSRsYW5ncyA9ICR0aGlzLT5tYWluLT5sYW5ncygpOw0KDQoJCWlmICghaXNzZXQoJGNvZGUpIHx8ICFpc3NldCgkbGFuZ3NbJGNvZGVdKSkgew0KCQkJZWNobyAtMTsNCgkJCWV4aXQ7DQoJCX0NCg0KCQkkc2NhbiA9ICR0aGlzLT5zY2FuX2xhbmd1YWdlcyhMVU1JU0VfQ09SRV9QQVRIKTsNCgkJLy8gU2NhbiBhZGRvbnMNCgkJJGFkZG9uX3NjYW4gPSAkdGhpcy0+c2Nhbl9sYW5ndWFnZXMoJHRoaXMtPm1haW4tPmNmZy0+dXBsb2FkX3BhdGguJ2FkZG9ucycpOw0KCQkNCgkJJHNjYW4gPSBhcnJheV9tZXJnZSgkc2NhbiwgJGFkZG9uX3NjYW4pOw0KCQkNCgkJZm9yZWFjaCAoJHNjYW4gYXMgJGtleSA9PiAkdmFsKSB7DQoNCgkJCSRleGlzdCA9ICR0aGlzLT5tYWluLT5kYi0+cmF3UXVlcnlPbmUoIlNFTEVDVCBgaWRgIGFzIGB0ZXh0YCBGUk9NIGB7JHRoaXMtPm1haW4tPmRiLT5wcmVmaXh9bGFuZ3VhZ2VzYCBXSEVSRSBgYXV0aG9yYD0neyR0aGlzLT5tYWluLT52ZW5kb3JfaWR9JyBBTkQgYGxhbmdgPSA\/ICYmIGBvcmlnaW5hbF90ZXh0YD0gPyAiLCBhcnJheSgkY29kZSwgJHZhbCkpOw0KIA0KICAgICAgICAgICAgaWYgKGlzX251bGwoJGV4aXN0KSkgew0KCQkJCSR0aGlzLT5tYWluLT5kYi0+aW5zZXJ0KCJsYW5ndWFnZXMiLCBhcnJheSgNCgkJCQkJInRleHQiID0+ICR2YWwsDQoJCQkJCSJvcmlnaW5hbF90ZXh0IiA9PiAkdmFsLA0KCQkJCQkibGFuZyIgPT4gJGNvZGUsDQoJCQkJCSJhdXRob3IiID0+ICR0aGlzLT5tYWluLT52ZW5kb3JfaWQsDQoJCQkJCSJjcmVhdGVkIiA9PiBkYXRlKCJZLW0tZCIpLicgJy5kYXRlKCJIOmk6cyIpLA0KCQkJCQkidXBkYXRlZCIgPT4gZGF0ZSgiWS1tLWQiKS4nICcuZGF0ZSgiSDppOnMiKSwNCgkJCQkpKTsNCgkJCX0NCgkJfQ0KCQkNCgkJJHRoaXMtPm1haW4tPmNvbm5lY3Rvci0+c2V0X3Nlc3Npb24oJ2xhbmd1YWdlX2xhbmcnLCAkY29kZSk7DQoNCgkJZWNobyAnMSc7DQoJCWV4aXQ7DQoNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gZWRpdF9sYW5ndWFnZV90ZXh0KCkgew0KDQoJCSR0ZXh0ID0gJF9QT1NUWyd0ZXh0J107DQoJCQ0KCQlpZiAoaXNfYXJyYXkoJHRleHQpKSB7DQoJCQlmb3JlYWNoICgkdGV4dCBhcyAkaWQgPT4gJHR4dCkgew0KCQkJCSR0aGlzLT5tYWluLT5kYi0+d2hlcmUgKCJpZD0nJGlkJyIpLT53aGVyZSgiYXV0aG9yPSd7JHRoaXMtPm1haW4tPnZlbmRvcl9pZH0nIiktPnVwZGF0ZSgnbGFuZ3VhZ2VzJywgYXJyYXkoDQoJCQkJCSd0ZXh0JyA9PiAkdHh0LA0KCQkJCQkndXBkYXRlZCcgPT4gZGF0ZSgiWS1tLWQiKS4nICcuZGF0ZSgiSDppOnMiKQ0KCQkJCSkpOw0KCQkJfQ0KDQoJCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOw0KCQkJZWNobyBqc29uX2VuY29kZSgkdGV4dCk7DQoJCQlleGl0Ow0KCQl9IGVsc2UgaWYgKGlzc2V0KCRfUE9TVFsnaWQnXSkgJiYgIWVtcHR5KCRfUE9TVFsndGV4dCddKSkgew0KCQkJJHRoaXMtPm1haW4tPmRiLT53aGVyZSAoImlkPSd7JF9QT1NUWydpZCddfSciKS0+d2hlcmUoImF1dGhvcj0neyR0aGlzLT5tYWluLT52ZW5kb3JfaWR9JyIpLT51cGRhdGUoJ2xhbmd1YWdlcycsIGFycmF5KA0KCQkJCSd0ZXh0JyA9PiAkdGV4dCwNCgkJCQkndXBkYXRlZCcgPT4gZGF0ZSgiWS1tLWQiKS4nICcuZGF0ZSgiSDppOnMiKQ0KCQkJKSk7DQoJCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOw0KCQkJZWNobyBqc29uX2VuY29kZShhcnJheSgiaWQiID0+ICRfUE9TVFsnaWQnXSwgInRleHQiID0+ICR0ZXh0KSk7DQoJCQlleGl0Ow0KCQl9DQoJCQ0KCQllY2hvIDA7DQoJCWV4aXQ7DQoNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gY2hhbmdlX2xhbmcoKSB7DQoNCgkJJGNvZGUgPSAkX1BPU1RbJ2NvZGUnXTsNCgkJJHRoaXMtPm1haW4tPnNldF9sYW5nKCRjb2RlKTsNCgkJJHRoaXMtPm1haW4tPmRvX2FjdGlvbignY2hhbmdlX2xhbmd1YWdlJywgJGNvZGUpOw0KDQoJCWRpZSgnMScpOw0KDQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIGxpc3RfcHJvZHVjdHMoKSB7DQoJCQ0KCQkkdGFzayA9IGlzc2V0KCRfUE9TVFsndGFzayddKSA\/ICRfUE9TVFsndGFzayddIDogJyc7DQoJCSRzID0gaXNzZXQoJF9QT1NUWydzJ10pID8gJF9QT1NUWydzJ10gOiAnJzsNCgkJJGNhdGVnb3J5ID0gaXNzZXQoJF9QT1NUWydjYXRlZ29yeSddKSA\/ICRfUE9TVFsnY2F0ZWdvcnknXSA6ICcnOw0KCQkkaW5kZXggPSBpc3NldCgkX1BPU1RbJ2luZGV4J10pID8gJF9QT1NUWydpbmRleCddIDogMDsNCgkJDQoJCSRxdWVyeSA9IGFycmF5KA0KCQkJInMiID0+ICRzLA0KCQkJImNhdGVnb3J5IiA9PiAkY2F0ZWdvcnksDQoJCQkiaW5kZXgiID0+ICRpbmRleCwNCgkJCSJub19jbXNfZmlsdGVyIiA9PiAoJHRhc2sgPT0gJ2Ntc19wcm9kdWN0JykNCgkJKTsNCgkJDQoJCSRkYXRhID0gJHRoaXMtPm1haW4tPmFwcGx5X2ZpbHRlcnMoJ2xpc3RfcHJvZHVjdHMnLCBudWxsLCAkcXVlcnkpOw0KCQkNCgkJaWYgKCRkYXRhID09PSBudWxsKQ0KCQkJJGRhdGEgPSAkdGhpcy0+Z2V0X3Byb2R1Y3RzKCRxdWVyeSk7DQoNCgkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsNCgkJZWNobyBqc29uX2VuY29kZSgkZGF0YSk7DQoNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIGxvYWRfcHJvZHVjdCgpIHsNCg0KCQlpZiAoIWlzc2V0KCRfUE9TVFsnaWQnXSkpIHsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCSRkYXRhID0gJHRoaXMtPmdldF9wcm9kdWN0KChJbnQpJF9QT1NUWydpZCddKTsNCg0KCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOw0KCQllY2hvIGpzb25fZW5jb2RlKCRkYXRhKTsNCg0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBjYXRlZ29yaWVzKCkgew0KDQoJCSRwb3N0ID0gJF9QT1NUWydkYXRhJ107DQoNCgkJaWYgKGlzc2V0KCRwb3N0KSAmJiAhZW1wdHkoJHBvc3QpKSB7DQoNCgkJCSRkYXRhID0gYXJyYXkoDQoJCQkJJ25hbWUnID0+ICRwb3N0WyduYW1lJ10sDQoJCQkJJ3BhcmVudCcgPT4gJHBvc3RbJ3BhcmVudCddLA0KCQkJCSd0eXBlJyA9PiAkcG9zdFsndHlwZSddLA0KCQkJCSdhdXRob3InID0+ICR0aGlzLT5tYWluLT52ZW5kb3JfaWQsDQoJCQkJJ3VwZGF0ZWQnID0+IGRhdGUoIlktbS1kIikuJyAnLmRhdGUoIkg6aTpzIiksDQoJCQkJJ2NyZWF0ZWQnPT4gZGF0ZSgiWS1tLWQiKS4nICcuZGF0ZSgiSDppOnMiKQ0KCQkJKTsNCg0KCQkJaWYgKCFlbXB0eSgkcG9zdFsndXBsb2FkJ10pKSB7DQoJCQkJDQoJCQkJJHBhdGggPSAndGh1bWJuYWlscycuRFM7DQoJCQkJJGNoZWNrID0gJHRoaXMtPm1haW4tPmNoZWNrX3VwbG9hZCgpOw0KDQoJCQkJJHByb2Nlc3MgPSAkdGhpcy0+dXBsb2FkX2ZpbGUoJHBvc3RbJ3VwbG9hZCddLCAkcGF0aCk7DQoNCgkJCQlpZiAoIWlzc2V0KCRwcm9jZXNzWydlcnJvciddKSAmJiBpc3NldCgkcHJvY2Vzc1sndGh1bWJuJ10pKQ0KCQkJCQkkZGF0YVsndGh1bWJuYWlsJ10gPSAkcHJvY2Vzc1sndGh1bWJuJ107DQoNCgkJCQlAdW5saW5rKCR0aGlzLT5tYWluLT5jZmctPnVwbG9hZF9wYXRoLiRwYXRoLiRwcm9jZXNzWyduYW1lJ10pOw0KDQoJCQl9DQoNCgkJCSR0aGlzLT5tYWluLT5kYi0+aW5zZXJ0ICgnY2F0ZWdvcmllcycsICRkYXRhKTsNCg0KCQl9DQoJCQ0KCQkkdHlwZSA9ICR0aGlzLT5lc2MoJ3R5cGUnKTsNCgkJJGNhdGVzID0gJHRoaXMtPmdldF9jYXRlZ29yaWVzKCR0eXBlKTsNCgkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsNCg0KCQllY2hvIGpzb25fZW5jb2RlKCR0aGlzLT5nZXRfY2F0ZWdvcmllcygpKTsNCg0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBhZGRfY2xpcGFydCgpIHsNCgkJJHBvc3QgPSBAanNvbl9kZWNvZGUoc3RyaXBzbGFzaGVzKCRfUE9TVFsnZGF0YSddKSk7DQoNCgkJaWYgKCRwb3N0ID09IG51bGwpIHsNCg0KCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsNCgkJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkJImVycm9yIiA9PiAnRGF0YSBzdHJ1Y3Rpb24nLA0KCQkJCSJuYW1lIiA9PiAkZGF0YVsnbmFtZSddDQoJCQkpKTsNCg0KCQkJZXhpdDsNCgkJfQ0KDQoJCSRkYXRhID0gYXJyYXkoDQoJCQknbmFtZScgPT4gJHBvc3QtPm5hbWUsDQoJCQkncHJpY2UnID0+IGRvdWJsZXZhbCgkcG9zdC0+cHJpY2UpLA0KCQkJJ2ZlYXR1cmVkJyA9PiAkcG9zdC0+ZmVhdHVyZWQsDQoJCQknYWN0aXZlJyA9PiAxLA0KCQkJJ2F1dGhvcicgPT4gJHRoaXMtPm1haW4tPnZlbmRvcl9pZCwNCgkJCSd1cGRhdGVkJyA9PiBkYXRlKCJZLW0tZCIpLicgJy5kYXRlKCJIOmk6cyIpLA0KCQkJJ2NyZWF0ZWQnPT4gZGF0ZSgiWS1tLWQiKS4nICcuZGF0ZSgiSDppOnMiKQ0KCQkpOw0KDQoJCSR0aW1lID0gdGltZSgpOw0KCQkkcGF0aCA9ICdjbGlwYXJ0cycuRFMuZGF0ZSgnWScsICR0aW1lKS5EUy5kYXRlKCdtJywgJHRpbWUpLkRTOw0KDQoJCSRjaGVjayA9ICR0aGlzLT5tYWluLT5jaGVja191cGxvYWQoJHRpbWUpOw0KDQoJCWlmKGlzc2V0KCRwb3N0LT50YWdzKSAmJiAgY291bnQoJHBvc3QtPnRhZ3MpID4gMCl7DQoJCQkkZGF0YVsndGFncyddID0gaW1wbG9kZSgnLCcsICRwb3N0LT50YWdzKTsNCgkJfQ0KDQoJCWlmICgkY2hlY2sgIT09IDEpIHsNCg0KCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsNCgkJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkJImVycm9yIiA9PiAkdGhpcy0+bWFpbi0+bGFuZygnVGhlIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gd3JpdGUgZmlsZXMgaW4gdGhlIHVwbG9hZCBmb2xkZXI6ICcpLiRsdW1pc2UtPnVwbG9hZF9wYXRoLA0KCQkJCSJuYW1lIiA9PiAkZGF0YVsnbmFtZSddDQoJCQkpKTsNCg0KCQkJZXhpdDsNCg0KCQl9ZWxzZXsNCg0KCQkJJHByb2Nlc3MgPSAkdGhpcy0+dXBsb2FkX2ZpbGUoJHBvc3QtPnVwbG9hZCwgJHBhdGgpOw0KDQoJCQlpZiAoaXNzZXQoJHByb2Nlc3NbJ2Vycm9yJ10pKSB7DQoNCgkJCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOw0KCQkJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkJCSJlcnJvciIgPT4gJHByb2Nlc3NbJ2Vycm9yJ10sDQoJCQkJCSJuYW1lIiA9PiAkZGF0YVsnbmFtZSddDQoJCQkJKSk7DQoJCQkJZXhpdDsNCg0KCQkJfWVsc2V7DQoNCgkJCQkkZGF0YVsndXBsb2FkJ10gPSAkcGF0aC4kcHJvY2Vzc1snbmFtZSddOw0KDQoJCQkJaWYgKGlzc2V0KCRwcm9jZXNzWyd0aHVtYm4nXSkpIHsNCgkJCQkJJGRhdGFbJ3RodW1ibmFpbF91cmwnXSA9ICR0aGlzLT5tYWluLT5jZmctPnVwbG9hZF91cmwuc3RyX3JlcGxhY2UoRFMsICcvJywgJHBhdGguJHByb2Nlc3NbJ3RodW1ibiddKTsNCgkJCQl9DQoNCgkJCX0NCg0KCQl9DQoJCSR0aGlzLT5tYWluLT5hcHBseV9maWx0ZXJzKCduZXctc2VjdGlvbicsICRkYXRhLCAnY2xpcGFydHMnKTsNCgkJJGNsaXBhcnRfaWQgPSAkdGhpcy0+bWFpbi0+ZGItPmluc2VydCAoJ2NsaXBhcnRzJywgJGRhdGEpOw0KDQoJCWlmICgkY2xpcGFydF9pZCkgew0KDQoJCQlpZiAoaXNzZXQoJHBvc3QtPmNhdGVzKSAmJiBjb3VudCgkcG9zdC0+Y2F0ZXMpID4gMCkgew0KCQkJCWZvcmVhY2goJHBvc3QtPmNhdGVzIGFzICRjYXRlKSB7DQoJCQkJCSR0aGlzLT5tYWluLT5kYi0+aW5zZXJ0ICgnY2F0ZWdvcmllc19yZWZlcmVuY2UnLCBhcnJheSgNCgkJCQkJCSJjYXRlZ29yeV9pZCIgPT4gJGNhdGUsDQoJCQkJCQknYXV0aG9yJyA9PiAkdGhpcy0+bWFpbi0+dmVuZG9yX2lkLA0KCQkJCQkJIml0ZW1faWQiID0+ICRjbGlwYXJ0X2lkLA0KCQkJCQkJInR5cGUiID0+ICJjbGlwYXJ0cyINCgkJCQkJKSk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQlpZiAoaXNzZXQoJHBvc3QtPnRhZ3MpICYmIGNvdW50KCRwb3N0LT50YWdzKSA+IDApIHsNCgkJCQlmb3JlYWNoKCRwb3N0LT50YWdzIGFzICR0YWcpIHsNCg0KCQkJCQkkY2hlY2sgPSAkdGhpcy0+bWFpbi0+ZGItPnJhd1F1ZXJ5ICgiU0VMRUNUIGBpZGAgRlJPTSBgeyR0aGlzLT5tYWluLT5kYi0+cHJlZml4fXRhZ3NgIFdIRVJFIGBhdXRob3JgPSd7JHRoaXMtPm1haW4tPnZlbmRvcl9pZH0nIEFORCBgc2x1Z2A9JyIuJHRoaXMtPnNsdWdpZnkoJHRhZykuIiciKTsNCg0KCQkJCQlpZiAoY291bnQoJGNoZWNrKSA+IDApIHsNCgkJCQkJCSR0aGlzLT5tYWluLT5kYi0+aW5zZXJ0ICgndGFnc19yZWZlcmVuY2UnLCBhcnJheSgNCgkJCQkJCQkidGFnX2lkIiA9PiAkY2hlY2tbMF1bJ2lkJ10sDQoJCQkJCQkJIml0ZW1faWQiID0+ICRjbGlwYXJ0X2lkLA0KCQkJCQkJCSdhdXRob3InID0+ICR0aGlzLT5tYWluLT52ZW5kb3JfaWQsDQoJCQkJCQkJInR5cGUiID0+ICJjbGlwYXJ0cyINCgkJCQkJCSkpOw0KCQkJCQl9ZWxzZXsNCg0KCQkJCQkJJHRhZ19pZCA9ICR0aGlzLT5tYWluLT5kYi0+aW5zZXJ0ICgndGFncycsIGFycmF5KA0KCQkJCQkJCSJuYW1lIiA9PiB0cmltKCR0YWcpLA0KCQkJCQkJCSJzbHVnIiA9PiAkdGhpcy0+c2x1Z2lmeSgkdGFnKSwNCgkJCQkJCQkidHlwZSIgPT4gImNsaXBhcnRzIiwNCgkJCQkJCQkiYXV0aG9yIiA9PiAkdGhpcy0+bWFpbi0+dmVuZG9yX2lkLA0KCQkJCQkJCSd1cGRhdGVkJyA9PiBkYXRlKCJZLW0tZCIpLicgJy5kYXRlKCJIOmk6cyIpLA0KCQkJCQkJCSdjcmVhdGVkJz0+IGRhdGUoIlktbS1kIikuJyAnLmRhdGUoIkg6aTpzIikNCgkJCQkJCSkpOw0KDQoJCQkJCQkkdGhpcy0+bWFpbi0+ZGItPmluc2VydCAoJ3RhZ3NfcmVmZXJlbmNlJywgYXJyYXkoDQoJCQkJCQkJInRhZ19pZCIgPT4gJHRhZ19pZCwNCgkJCQkJCQkiaXRlbV9pZCIgPT4gJGNsaXBhcnRfaWQsDQoJCQkJCQkJJ2F1dGhvcicgPT4gJHRoaXMtPm1haW4tPnZlbmRvcl9pZCwNCgkJCQkJCQkidHlwZSIgPT4gImNsaXBhcnRzIg0KCQkJCQkJKSk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJfQ0KDQoJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7DQoJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoInN1Y2Nlc3MiID0+ICRjbGlwYXJ0X2lkKSk7DQoJCWV4aXQ7DQoNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gc3dpdGNoX3N0YXR1cygpIHsNCg0KCQkkcG9zdCA9ICRfUE9TVDsNCgkJJGRhdGEgPSBhcnJheSgpOw0KDQoJCWlmKGlzc2V0KCRwb3N0WydkYXRhJ11bJ3ZlcmlmeSddKSAmJiAkcG9zdFsnZGF0YSddWyd2ZXJpZnknXSAhPSAxKXsNCgkJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkJInZlcmlmeSIgPT4gMCwNCgkJCQkiaWQiID0+ICRwb3N0WydkYXRhJ11bJ2lkJ10NCgkJCSkpOw0KCQkJZXhpdDsgDQoJCX0NCgkJDQoJCSRjYXAgPSAnbHVtaXNlX2VkaXRfJy4kcG9zdFsnZGF0YSddWyd0eXBlJ10uJy1zJzsNCgkJJGNhcCA9IHN0cl9yZXBsYWNlKGFycmF5KCdzLXMnLCAnLXMnKSwgYXJyYXkoJ3MnLCAncycpLCAkY2FwKTsNCgkJDQoJCWlmICghJHRoaXMtPm1haW4tPmNhcHMoJGNhcCkpIHsNCgkJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkJInN0YXR1cyIgPT4gJ2Vycm9yJywNCgkJCQkiYWN0aW9uIiA9PiAkcG9zdFsnZGF0YSddWydhY3Rpb24nXSwNCgkJCQkidmFsdWUiID0+ICR0aGlzLT5tYWluLT5sYW5nKCdTb3JyeSwgeW91IGFyZSBub3QgYWxsb3dlZCB0byBkbyB0aGlzIGFjdGlvbicpLA0KCQkJCSJ2ZXJpZnkiID0+ICRwb3N0WydkYXRhJ11bJ3ZlcmlmeSddDQoJCQkpKTsNCgkJCWV4aXQ7DQoJCX0NCgkJDQoJCWlmICgkcG9zdFsnZGF0YSddWydzdGF0dXMnXSA9PSAwKQ0KCQkJJHBvc3RbJ2RhdGEnXVsnc3RhdHVzJ10gPSAxOw0KCQllbHNlDQoJCQkkcG9zdFsnZGF0YSddWydzdGF0dXMnXSA9IDA7DQoNCgkJaWYgKCRwb3N0WydkYXRhJ11bJ2FjdGlvbiddID09ICdzd2l0Y2hfZmVhdHVyZScpDQoJCQkkZGF0YVsnZmVhdHVyZWQnXSA9ICRwb3N0WydkYXRhJ11bJ3N0YXR1cyddOw0KCQllbHNlDQoJCQkkZGF0YVsnYWN0aXZlJ10gPSAkcG9zdFsnZGF0YSddWydzdGF0dXMnXTsNCgkJDQoJCWlmICgkcG9zdFsnZGF0YSddWyd0eXBlJ10gPT0gJ2FkZG9ucycpIHsNCgkJCQ0KCQkJaWYgKCRwb3N0WydkYXRhJ11bJ3N0YXR1cyddID09IDEpDQoJCQkJJHBzID0gJHRoaXMtPm1haW4tPmFkZG9ucy0+YWN0aXZlX2FkZG9uKCRwb3N0WydkYXRhJ11bJ2lkJ10pOw0KCQkJZWxzZSAkcHMgPSAkdGhpcy0+bWFpbi0+YWRkb25zLT5kZWFjdGl2ZV9hZGRvbigkcG9zdFsnZGF0YSddWydpZCddKTsNCgkJCQ0KCQkJaWYgKGVtcHR5KCRwc1snZXJyb3InXSkpIHsNCgkJCQllY2hvIGpzb25fZW5jb2RlKGFycmF5KA0KCQkJCQkic3RhdHVzIiA9PiAnc3VjY2VzcycsDQoJCQkJCSJhY3Rpb24iID0+ICRwb3N0WydkYXRhJ11bJ2FjdGlvbiddLA0KCQkJCQkidmFsdWUiID0+ICRwc1snc3RhdHVzJ10sDQoJCQkJCSJtc2ciID0+ICRwc1snbXNnJ10sDQoJCQkJCSJ2ZXJpZnkiID0+ICRwb3N0WydkYXRhJ11bJ3ZlcmlmeSddDQoJCQkJKSk7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkJCSJzdGF0dXMiID0+ICdlcnJvcicsDQoJCQkJCSJhY3Rpb24iID0+ICRwb3N0WydkYXRhJ11bJ2FjdGlvbiddLA0KCQkJCQkidmFsdWUiID0+IHN0cmlwX3RhZ3MoJHBzWydlcnJvciddKSwNCgkJCQkJIm1zZyIgPT4gJycsDQoJCQkJCSJ2ZXJpZnkiID0+ICRwb3N0WydkYXRhJ11bJ3ZlcmlmeSddDQoJCQkJKSk7DQoJCQl9DQoJCQlleGl0Ow0KCQl9DQoJCQ0KCQkkaWQgPSAkdGhpcy0+ZWRpdF9yb3coICRwb3N0WydkYXRhJ11bJ2lkJ10sICRkYXRhLCAkcG9zdFsnZGF0YSddWyd0eXBlJ10gKTsNCg0KCQlpZiAoaXNzZXQoJGlkKSAmJiAkaWQgPT0gdHJ1ZSApDQoJCQkkdmFsWydzdGF0dXMnXSA9ICdzdWNjZXNzJzsNCgkJZWxzZQ0KCQkJJHZhbFsnc3RhdHVzJ10gPSAnZXJyb3InOw0KDQoJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkic3RhdHVzIiA9PiAkdmFsWydzdGF0dXMnXSwNCgkJCSJhY3Rpb24iID0+ICRwb3N0WydkYXRhJ11bJ2FjdGlvbiddLA0KCQkJInZhbHVlIiA9PiAkcG9zdFsnZGF0YSddWydzdGF0dXMnXSwNCgkJKSk7DQoNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gZHVwbGljYXRlX2l0ZW0oKSB7DQoNCgkJZ2xvYmFsICRsdW1pc2U7DQoJCSRwb3N0ID0gJF9QT1NUOw0KCQkkZGF0YSA9IGFycmF5KCk7DQoJCQ0KCQkkY2FwID0gJ2x1bWlzZV9lZGl0XycuJHBvc3RbJ2RhdGEnXVsndGFibGUnXS4nLXMnOw0KCQkkY2FwID0gc3RyX3JlcGxhY2UoYXJyYXkoJ3MtcycsICctcycpLCBhcnJheSgncycsICdzJyksICRjYXApOw0KCQkNCgkJaWYgKCEkdGhpcy0+bWFpbi0+Y2FwcygkY2FwKSkgew0KCQkJZWNobyBqc29uX2VuY29kZShhcnJheSgNCgkJCQkic3RhdHVzIiA9PiAnZXJyb3InLA0KCQkJCSJhY3Rpb24iID0+ICRwb3N0WydkYXRhJ11bJ2R1cGxpY2F0ZSddLA0KCQkJCSJ2YWx1ZSIgPT4gJHRoaXMtPm1haW4tPmxhbmcoJ1NvcnJ5LCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGRvIHRoaXMgYWN0aW9uJykNCgkJCSkpOw0KCQkJZXhpdDsNCgkJfQ0KCQkNCgkJJGRhdGEgPSAkdGhpcy0+Z2V0X3Jvd19pZCgkcG9zdFsnZGF0YSddWydpZCddLCAkcG9zdFsnZGF0YSddWyd0YWJsZSddKTsNCgkJDQoJCWlmIChpc3NldCgkZGF0YVsnbmFtZSddKSkNCgkJCSRkYXRhWyduYW1lJ10gPSAkZGF0YVsnbmFtZSddLicoQ29weSknOw0KCQkNCgkJaWYgKGlzc2V0KCRkYXRhWyd0aXRsZSddKSkNCgkJCSRkYXRhWyd0aXRsZSddID0gJGRhdGFbJ3RpdGxlJ10uJyhDb3B5KSc7DQoNCgkJaWYgKCRkYXRhWydjcmVhdGVkJ10pDQoJCQkkZGF0YVsnY3JlYXRlZCddID0gZGF0ZSgiWS1tLWQiKS4nICcuZGF0ZSgiSDppOnMiKTsNCg0KCQlpZiAoJGRhdGFbJ3VwZGF0ZWQnXSkNCgkJCSRkYXRhWyd1cGRhdGVkJ10gPSAnJzsNCg0KCQlpZiAoJGRhdGFbJ2lkJ10pDQoJCQl1bnNldCgkZGF0YVsnaWQnXSk7DQoNCgkJJGlkID0gJHRoaXMtPmFkZF9yb3coJGRhdGEsICRwb3N0WydkYXRhJ11bJ3RhYmxlJ10pOw0KDQoJCSRkYXRhID0gYXJyYXkoKTsNCg0KCQkkZGF0YSA9ICR0aGlzLT5nZXRfcm93X2lkKCRpZCwgJHBvc3RbJ2RhdGEnXVsndGFibGUnXSk7DQoNCgkJaWYgKGlzc2V0KCRkYXRhWyduYW1lJ10pKQ0KCQkJJGRhdGFbJ3VybCddID0gJGx1bWlzZS0+Y2ZnLT5hZG1pbl91cmwuJ2x1bWlzZS1wYWdlPXByb2R1Y3QmaWQ9Jy4kZGF0YVsnaWQnXTsNCg0KCQlpZiAoaXNzZXQoJGRhdGFbJ3RpdGxlJ10pKXsNCgkJCSRkYXRhWyduYW1lJ10gPSAkZGF0YVsndGl0bGUnXTsNCgkJCSRkYXRhWyd1cmwnXSA9ICRsdW1pc2UtPmNmZy0+YWRtaW5fdXJsLidsdW1pc2UtcGFnZT1wcmludGluZyZpZD0nLiRkYXRhWydpZCddOw0KCQl9DQoNCgkJaWYgKGNvdW50KCRkYXRhKSA+IDApIHsNCgkJCSR2YWxbJ3N0YXR1cyddID0gJ3N1Y2Nlc3MnOw0KIAkJCSR0aGlzLT5tYWluLT5kb19hY3Rpb24oJ2R1cGxpY2F0ZS1zdWNjZXNzJywkZGF0YSk7DQoJCQ0KCQl9IGVsc2Ugew0KCQkJJHZhbFsnc3RhdHVzJ10gPSAnZXJyb3InOw0KCQl9DQoJCQ0KCQllY2hvIGpzb25fZW5jb2RlKGFycmF5KA0KCQkJInN0YXR1cyIgPT4gJHZhbFsnc3RhdHVzJ10sDQoJCQkiZGF0YSIgPT4gJGRhdGENCgkJKSk7DQoNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gYWRkX3RhZ3MoKSB7DQogICANCgkJJHBvc3QgPSAkX1BPU1Q7DQoNCgkJJGNhcCA9ICdsdW1pc2VfZWRpdF8nLiRwb3N0WydkYXRhJ11bJ3R5cGUnXS4nLXMnOw0KCQkkY2FwID0gc3RyX3JlcGxhY2UoYXJyYXkoJ3MtcycsICctcycpLCBhcnJheSgncycsICdzJyksICRjYXApOw0KCQkNCgkJaWYgKCEkdGhpcy0+bWFpbi0+Y2FwcygkY2FwKSkgew0KCQkJZWNobyBqc29uX2VuY29kZShhcnJheSgNCgkJCQkic3RhdHVzIiA9PiAnZXJyb3InLA0KCQkJCSJhY3Rpb24iID0+ICRwb3N0WydkYXRhJ11bJ2FjdGlvbiddLA0KCQkJCSJ2YWx1ZSIgPT4gJHRoaXMtPm1haW4tPmxhbmcoJ1NvcnJ5LCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGRvIHRoaXMgYWN0aW9uJykNCgkJCSkpOw0KCQkJZXhpdDsNCgkJfQ0KCQkNCgkJJGFyciA9IGFycmF5KCdpZCcsICduYW1lJywgJ3R5cGUnKTsNCgkJJHRhZ3MgPSAkdGhpcy0+Z2V0X3Jvd3NfY3VzdG9tKCRhcnIsICd0YWdzJywgJG9yZGVyYnkgPSAnbmFtZScsICRvcmRlcj0nYXNjJyk7DQoJCSRmbGFnID0gZmFsc2U7DQoNCgkJZm9yZWFjaCAoJHRhZ3MgYXMgJGtleSA9PiAkdmFsdWUpIHsNCgkJCQ0KCQkJaWYgKCR2YWx1ZVsnbmFtZSddID09ICRwb3N0WydkYXRhJ11bJ3ZhbHVlJ10gJiYgJHZhbHVlWyd0eXBlJ10gPT0gJHBvc3RbJ2RhdGEnXVsndHlwZSddKXsNCgkJCQkkaWQgPSAkdmFsdWVbJ2lkJ107DQoJCQkJJGZsYWcgPSB0cnVlOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKCEkZmxhZykgew0KCQkJDQoJCQkkZGF0YSA9IGFycmF5KCk7DQoJCQkkZGF0YVsnbmFtZSddID0gJHBvc3RbJ2RhdGEnXVsndmFsdWUnXTsNCgkJCSRkYXRhWyd0eXBlJ10gPSAkcG9zdFsnZGF0YSddWyd0eXBlJ107DQoJCQkkZGF0YVsnY3JlYXRlZCddID0gZGF0ZSgiWS1tLWQiKS4nICcuZGF0ZSgiSDppOnMiKTsNCg0KCQkJJGRhdGFfc2x1ZyA9IGFycmF5KCk7DQoJCQkkZGF0YVsnc2x1ZyddID0gJHRoaXMtPnNsdWdpZnkoJGRhdGFbJ25hbWUnXSk7DQoJCQkkdmFsID0gJHRoaXMtPmdldF9yb3dzX2N1c3RvbShhcnJheSgnc2x1ZycsICd0eXBlJyksICd0YWdzJyk7DQoNCgkJCWZvcmVhY2ggKCR2YWwgYXMgJGtleSA9PiAkdmFsdWUpIHsNCgkJCQlpZiAoJHZhbHVlWyd0eXBlJ10gPT0gJGRhdGFbJ3R5cGUnXSkgew0KCQkJCQkkZGF0YV9zbHVnW10gPSAkdmFsdWVbJ3NsdWcnXTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoaW5fYXJyYXkoJGRhdGFbJ3NsdWcnXSwgJGRhdGFfc2x1ZykpDQoJCQkJJGRhdGFbJ3NsdWcnXSA9ICR0aGlzLT5hZGRfY291bnQoJGRhdGFbJ3NsdWcnXSwgJGRhdGFfc2x1Zyk7DQoNCgkJCSRpZCA9ICR0aGlzLT5hZGRfcm93KCAkZGF0YSwgJ3RhZ3MnICk7DQoNCgkJfQ0KDQoJCWlmIChpc3NldCgkaWQpKXsNCg0KCQkJJHZhbFsnc3RhdHVzJ10gPSAnc3VjY2Vzcyc7DQoJCQkkdGFncyA9ICR0aGlzLT5nZXRfdGFnX2l0ZW0oJHBvc3RbJ2RhdGEnXVsnaWQnXSwgJHBvc3RbJ2RhdGEnXVsndHlwZSddKTsNCgkJCSRmbGFnID0gZmFsc2U7DQoJCQkNCgkJCWZvcmVhY2ggKCR0YWdzIGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJCQkJaWYgKCR2YWx1ZVsnaWQnXSA9PSAkaWQpew0KCQkJCQkkZmxhZyA9IHRydWU7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCg0KCQkJaWYgKCEkZmxhZykgew0KCQkJCSRkYXRhID0gYXJyYXkoKTsNCgkJCQkkZGF0YVsndGFnX2lkJ10gPSAkaWQ7DQoJCQkJJGRhdGFbJ2l0ZW1faWQnXSA9ICRwb3N0WydkYXRhJ11bJ2lkJ107DQoJCQkJJGRhdGFbJ3R5cGUnXSA9ICRwb3N0WydkYXRhJ11bJ3R5cGUnXTsNCiAgICAgICAgICAgICAgIA0KCQkJCSRpZCA9ICR0aGlzLT5hZGRfcm93KCAkZGF0YSwgJ3RhZ3NfcmVmZXJlbmNlJyApOw0KDQoJCQkJJGRhdGFfdHlwZSA9ICR0aGlzLT5nZXRfcm93X2lkKCRwb3N0WydkYXRhJ11bJ2lkJ10sJHBvc3RbJ2RhdGEnXVsndHlwZSddKTsNCgkJCQkkZGF0YV90YWcgPSBhcnJheSgpOw0KCQkJCWlmIChlbXB0eSgkZGF0YV90eXBlWyd0YWdzJ10pKSB7DQoJCQkJCSRkYXRhX3RhZ1sndGFncyddID0gICRwb3N0WydkYXRhJ11bJ3ZhbHVlJ107DQoJCQkJfSBlbHNlew0KCQkJCQkkZGF0YV90YWdzID0gZXhwbG9kZSgnLCcsICRkYXRhX3R5cGVbJ3RhZ3MnXSk7DQoJCQkJCSRkYXRhX3RhZ3NbXSA9ICRwb3N0WydkYXRhJ11bJ3ZhbHVlJ107DQoJCQkJCSRkYXRhX3RhZ1sndGFncyddID0gaW1wbG9kZSggJywnLCAkZGF0YV90YWdzKTsNCgkJCQl9DQoJCQkJJHRoaXMtPmVkaXRfcm93KCRwb3N0WydkYXRhJ11bJ2lkJ10sICRkYXRhX3RhZywgJHBvc3RbJ2RhdGEnXVsndHlwZSddKTsNCgkJCX0NCg0KCQkJaWYgKGlzc2V0KCRpZCkgJiYgJGlkID09IHRydWUpDQoJCQkJJHZhbFsnc3RhdHVzJ10gPSAnc3VjY2Vzcyc7DQoJCQllbHNlDQoJCQkJJHZhbFsnc3RhdHVzJ10gPSAnZXJyb3InOwkNCg0KCQl9IGVsc2Ugew0KCQkJJHZhbFsnc3RhdHVzJ10gPSAnZXJyb3InOw0KCQl9DQoNCgkJZWNobyBqc29uX2VuY29kZShhcnJheSgNCgkJCSJzdGF0dXMiID0+ICR2YWxbJ3N0YXR1cyddLA0KCQkJInZhbHVlIiA9PiAkcG9zdFsnZGF0YSddWyd2YWx1ZSddDQoJCSkpOw0KDQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIHJlbW92ZV90YWdzKCkgew0KDQoJCSRwb3N0ID0gJF9QT1NUOw0KCQkkdGFncyA9ICR0aGlzLT5nZXRfdGFnX2l0ZW0oJHBvc3RbJ2RhdGEnXVsnaWQnXSwgJHBvc3RbJ2RhdGEnXVsndHlwZSddKTsNCgkJDQoJCWZvcmVhY2ggKCR0YWdzIGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJCQlpZiAoJHZhbHVlWyduYW1lJ10gPT0gJHBvc3RbJ2RhdGEnXVsndmFsdWUnXSkgew0KCQkJCSRpZCA9ICR2YWx1ZVsnaWQnXTsNCgkJCQlicmVhazsNCgkJCX0NCgkJfQ0KDQoJCSRhcnIgPSBhcnJheSgnaWQnLCAndGFnX2lkJywgJ2l0ZW1faWQnLCAndHlwZScpOw0KCQkkdGFncyA9ICR0aGlzLT5nZXRfcm93c19jdXN0b20oJGFyciwgJ3RhZ3NfcmVmZXJlbmNlJywgJG9yZGVyYnkgPSAnaWQnLCAkb3JkZXI9J2FzYycpOw0KDQoJCWlmIChpc3NldCgkaWQpKXsNCgkJCSRkYXRhX3RhZ3MgPSBhcnJheSgpOw0KCQkJJGl0ZW1fdHlwZSA9ICR0aGlzLT5nZXRfcm93X2lkKCRwb3N0WydkYXRhJ11bJ2lkJ10sICRwb3N0WydkYXRhJ11bJ3R5cGUnXSk7DQoJCQkkdGFnX25hbWUgPSAkdGhpcy0+Z2V0X3Jvd19pZCgkaWQsICd0YWdzJyk7DQoJCQl0cmltKCRpdGVtX3R5cGVbJ3RhZ3MnXSk7DQoJCQkkZGF0YV90YWdzWyd0YWdzJ10gPSBzdHJfcmVwbGFjZSggJHRhZ19uYW1lWyduYW1lJ10sICcgJyAsICRpdGVtX3R5cGVbJ3RhZ3MnXSApOw0KCQkJJGRhdGFfdGFnc1sndGFncyddID0gc3RyX3JlcGxhY2UoICcsICwnLCAnLCcgLCAkZGF0YV90YWdzWyd0YWdzJ10gKTsNCgkJCSRkYXRhX3RhZ3NbJ3RhZ3MnXSA9IHN0cl9yZXBsYWNlKCAnLCAnLCAnJyAsICRkYXRhX3RhZ3NbJ3RhZ3MnXSApOw0KCQkJJGRhdGFfdGFnc1sndGFncyddID0gc3RyX3JlcGxhY2UoICcgLCcsICcnICwgJGRhdGFfdGFnc1sndGFncyddICk7DQoJCQl0cmltKCRkYXRhX3RhZ3NbJ3RhZ3MnXSwgJywnKTsNCgkJCSR0aGlzLT5lZGl0X3JvdygkcG9zdFsnZGF0YSddWydpZCddLCRkYXRhX3RhZ3MsJHBvc3RbJ2RhdGEnXVsndHlwZSddKTsNCgkJCWZvcmVhY2ggKCR0YWdzIGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJCQkJaWYgKCR2YWx1ZVsndGFnX2lkJ10gPT0gJGlkICYmICR2YWx1ZVsnaXRlbV9pZCddID09ICRwb3N0WydkYXRhJ11bJ2lkJ10gJiYgJHZhbHVlWyd0eXBlJ10gPT0gJHBvc3RbJ2RhdGEnXVsndHlwZSddKQ0KCQkJCQkkdGhpcy0+ZGVsZXRlX3JvdygkdmFsdWVbJ2lkJ10sICd0YWdzX3JlZmVyZW5jZScpOw0KCQkJfQ0KCQkJJHZhbFsnc3RhdHVzJ10gPSAnc3VjY2Vzcyc7DQoJCX0gZWxzZXsNCgkJCSR2YWxbJ3N0YXR1cyddID0gJ2Vycm9yJzsNCgkJfQ0KDQoJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkic3RhdHVzIiA9PiAkdmFsWydzdGF0dXMnXSwNCgkJCSJ2YWx1ZSIgPT4gJHBvc3RbJ2RhdGEnXVsndmFsdWUnXQ0KCQkpKTsNCg0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBsdW1pc2Vfc2V0X3ByaWNlKCkgew0KCQkNCgkJJHBvc3QgPSAkX1BPU1Q7DQoJCSRkYXRhID0gYXJyYXkoKTsNCgkJDQoJCSRjYXAgPSAnbHVtaXNlX2VkaXRfJy4kcG9zdFsnZGF0YSddWyd0eXBlJ10uJy1zJzsNCgkJJGNhcCA9IHN0cl9yZXBsYWNlKGFycmF5KCdzLXMnLCAnLXMnKSwgYXJyYXkoJ3MnLCAncycpLCAkY2FwKTsNCgkJDQoJCWlmICghJHRoaXMtPm1haW4tPmNhcHMoJGNhcCkpIHsNCgkJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkJInN0YXR1cyIgPT4gJ2Vycm9yJywNCgkJCQkiYWN0aW9uIiA9PiAkcG9zdFsnZGF0YSddWydhY3Rpb24nXSwNCgkJCQkidmFsdWUiID0+ICR0aGlzLT5tYWluLT5sYW5nKCdTb3JyeSwgeW91IGFyZSBub3QgYWxsb3dlZCB0byBkbyB0aGlzIGFjdGlvbicpDQoJCQkpKTsNCgkJCWV4aXQ7DQoJCX0NCg0KCQlpZiAoJHBvc3RbJ2RhdGEnXVsndmFsdWUnXSA9PSAnJykNCgkJCSRwb3N0WydkYXRhJ11bJ3ZhbHVlJ10gPSAwOw0KDQoJCSRkYXRhWydwcmljZSddID0gaXNzZXQoJHBvc3RbJ2RhdGEnXVsndmFsdWUnXSkgJiYgIWVtcHR5KCRwb3N0WydkYXRhJ11bJ3ZhbHVlJ10pID8gJHBvc3RbJ2RhdGEnXVsndmFsdWUnXSA6IDA7DQoJCQ0KCQkkZGF0YVsndXBkYXRlZCddID0gZGF0ZSgiWS1tLWQiKS4nICcuZGF0ZSgiSDppOnMiKTsNCgkJJGlkID0gJHRoaXMtPmVkaXRfcm93KCAkcG9zdFsnZGF0YSddWydpZCddLCAkZGF0YSwgJHBvc3RbJ2RhdGEnXVsndHlwZSddICk7DQoNCgkJaWYgKGlzc2V0KCRpZCkpDQoJCQkkdmFsWydzdGF0dXMnXSA9ICdzdWNjZXNzJzsNCgkgICAgZWxzZQ0KCQkJJHZhbFsnc3RhdHVzJ10gPSAnZXJyb3InOw0KDQoJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoIA0KCQkJInN0YXR1cyIgPT4gJHZhbFsnc3RhdHVzJ10sDQoJCQkidmFsdWUiID0+ICRwb3N0WydkYXRhJ11bJ3ZhbHVlJ10NCgkJKSk7DQoNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIHVwbG9hZF9zaGFyZV9kZXNpZ24oKSB7DQoJCQ0KCQlAaW5pX3NldCgnbWVtb3J5X2xpbWl0JywnNTAwME0nKTsNCgkJDQoJCSRoaXN0ID0gJHRoaXMtPm1haW4tPmNvbm5lY3Rvci0+Z2V0X3Nlc3Npb24oJ3NoYXJlLWRlc2lnbicpOw0KCQkNCgkJaWYgKCRoaXN0ID09PSBudWxsKQ0KCQkJJGhpc3QgPSAwOw0KCQkNCgkJJGNoZWNrX3NoYXJlICA9ICAkdGhpcy0+bWFpbi0+YXBwbHlfZmlsdGVycygndmVyaWZ5LXNoYXJlJywkaGlzdCk7DQoJCWlmICgoIWlzc2V0KCRfUE9TVFsnYWlkJ10pIHx8ICRfUE9TVFsnYWlkJ10gIT0gJHRoaXMtPm1haW4tPmNvbm5lY3Rvci0+Y29va2llKCdsdW1pc2UtQUlEJykpICYmICRjaGVja19zaGFyZSAhPT0gdHJ1ZSkgew0KCQkJZWNobyBqc29uX2VuY29kZShhcnJheSggDQoJCQkJInN1Y2Nlc3MiID0+IDAsDQoJCQkJIm1lc3NhZ2UiID0+ICR0aGlzLT5tYWluLT5sYW5nKCdFcnJvciwgdXNlciBpcyBub3QgYXV0aGVudGljYXRlZCcpDQoJCQkpKTsNCgkJCWV4aXQ7DQoJCX0NCgkJDQoJCWlmICgkaGlzdCA+PSA1MCkgew0KCQkJZWNobyBqc29uX2VuY29kZShhcnJheSggDQoJCQkJInN1Y2Nlc3MiID0+IDAsDQoJCQkJIm1lc3NhZ2UiID0+ICR0aGlzLT5tYWluLT5sYW5nKCdFcnJvciwgaGFzIGV4Y2VlZGVkIHRoZSBhbGxvd2FibGUgbGltaXQnKQ0KCQkJKSk7DQoJCQlleGl0Ow0KCQl9DQoJCQ0KCQlpZiAoJHRoaXMtPm1haW4tPmNvbm5lY3Rvci0+aXNfYWRtaW4oKSB8fCAkdGhpcy0+bWFpbi0+Y2ZnLT5zZXR0aW5nc1snc2hhcmUnXSA9PSAnMScpIHsNCgkJCQ0KCQkJJHRoaXMtPm1haW4tPmNvbm5lY3Rvci0+c2V0X3Nlc3Npb24oJ3NoYXJlLWRlc2lnbicsICRoaXN0KzEpOw0KCQkJDQoJCQkkaWQgPSAkdGhpcy0+bWFpbi0+Z2VuZXJhdGVfaWQoKTsNCgkJCQ0KCQkJJGNoZWNrID0gJHRoaXMtPm1haW4tPmNoZWNrX3VwbG9hZCh0aW1lKCkpOw0KCQkJDQoJCQlpZiAoJGNoZWNrICE9PSAxKSB7DQoJCQkJZWNobyBqc29uX2VuY29kZShhcnJheSggDQoJCQkJCSJzdWNjZXNzIiA9PiAwLA0KCQkJCQkibWVzc2FnZSIgPT4gJHRoaXMtPm1haW4tPmxhbmcoJ0Vycm9yLCBjb3VsZCBub3Qgd3JpdGUgZmlsZXMgb24gdGhlIHNlcnZlcicpDQoJCQkJKSk7DQoJCQkJZXhpdDsNCgkJCX0NCgkJCQ0KCQkJJHBhdGggPSAkdGhpcy0+bWFpbi0+Y2ZnLT51cGxvYWRfcGF0aC4nc2hhcmVzJy5EUy5kYXRlKCdZJykuRFMuZGF0ZSgnbScpLkRTOw0KCQkJDQoJCQkkc2NyZWVuc2hvdCA9IEBmaWxlX2dldF9jb250ZW50cygkX0ZJTEVTWydzY3JlZW5zaG90J11bJ3RtcF9uYW1lJ10pOw0KCQkJJHNjcmVlbnNob3QgPSBleHBsb2RlKCcsJywgJHNjcmVlbnNob3QpOw0KCQkJDQoJCQkkZGF0YSA9IEBmaWxlX2dldF9jb250ZW50cygkX0ZJTEVTWydkYXRhJ11bJ3RtcF9uYW1lJ10pOw0KCQkJDQoJCQlpZiAoDQoJCQkJZmlsZV9wdXRfY29udGVudHMoJHBhdGguJGlkLicuanBnJywgYmFzZTY0X2RlY29kZSgkc2NyZWVuc2hvdFsxXSkpICYmDQoJCQkJZmlsZV9wdXRfY29udGVudHMoJHBhdGguJGlkLicubHVtaScsICRkYXRhKQ0KCQkJKSB7DQoJCQkJJGRhdGEgPSBhcnJheSgNCgkJCQkJJ25hbWUnID0+ICR0aGlzLT5tYWluLT5saWItPmVzYygnbGFiZWwnKSwNCgkJCQkJJ2FpZCcgPT4gJHRoaXMtPm1haW4tPmxpYi0+ZXNjKCdhaWQnKSwNCgkJCQkJJ3NoYXJlX2lkJyA9PiAkaWQsDQoJCQkJCSdwcm9kdWN0JyA9PiBpbnR2YWwoJHRoaXMtPm1haW4tPmxpYi0+ZXNjKCdwcm9kdWN0JykpLA0KCQkJCQkncHJvZHVjdF9jbXMnID0+IGludHZhbCgkdGhpcy0+bWFpbi0+bGliLT5lc2MoJ3Byb2R1Y3RfY21zJykpLA0KCQkJCQkndmlldycgPT4gMCwNCgkJCQkJJ2F1dGhvcicgPT4gJHRoaXMtPm1haW4tPnZlbmRvcl9pZCwNCgkJCQkJJ2FjdGl2ZScgPT4gMSwNCgkJCQkJJ2NyZWF0ZWQnID0+IGRhdGUoIlktbS1kIikuJyAnLmRhdGUoIkg6aTpzIikNCgkJCQkpOw0KCQkJCSRkYXRhID0gJHRoaXMtPm1haW4tPmFwcGx5X2ZpbHRlcnMoJ25ldy1zZWN0aW9uJywkZGF0YSwgJ3NoYXJlcycpOw0KCQkJCSRpbnNlcnQgPSAkdGhpcy0+bWFpbi0+ZGItPmluc2VydCgnc2hhcmVzJywgJGRhdGEpOw0KCQkJCQ0KCQkJCWlmICgkaW5zZXJ0KSB7DQoJCQkJCSRyZXN1bHQgPSBqc29uX2VuY29kZShhcnJheSgNCgkJCQkJCSJzdWNjZXNzIiA9PiAxLA0KCQkJCQkJImlkIiA9PiAkaWQsDQoJCQkJCQkicHJvZHVjdCIgPT4gJHRoaXMtPm1haW4tPmxpYi0+ZXNjKCdwcm9kdWN0JyksDQoJCQkJCQkicHJvZHVjdF9jbXMiID0+ICR0aGlzLT5tYWluLT5saWItPmVzYygncHJvZHVjdF9jbXMnKSwNCgkJCQkJCSJwYXRoIiA9PiBkYXRlKCdZL20nKSwNCgkJCQkJCSJhaWQiID0+ICR0aGlzLT5tYWluLT5saWItPmVzYygnYWlkJyksDQoJCQkJCQkibmFtZSIgPT4gJHRoaXMtPm1haW4tPmxpYi0+ZXNjKCdsYWJlbCcpLA0KCQkJCQkJImNyZWF0ZWQiID0+IHRpbWUoKQ0KCQkJCQkpKTsNCgkJCQl9ZWxzZXsNCgkJCQkJJHJlc3VsdCA9IGpzb25fZW5jb2RlKGFycmF5KA0KCQkJCQkJInN1Y2Nlc3MiID0+IDAsDQoJCQkJCQkibWVzc2FnZSIgPT4gJHRoaXMtPm1haW4tPmxhbmcoJ0Vycm9yLCBjb3VsZCBub3QgY3JlYXRlIHRoZSBsaW5rIHNoYXJlJykNCgkJCQkJKSk7DQoJCQkJfQ0KCQkJDQoJCQl9IGVsc2Ugew0KCQkJCSRyZXN1bHQgPSBqc29uX2VuY29kZShhcnJheSgNCgkJCQkJInN1Y2Nlc3MiID0+IDAsDQoJCQkJCSJtZXNzYWdlIiA9PiAkdGhpcy0+bWFpbi0+bGFuZygnRXJyb3IsIGNvdWxkIG5vdCB1cGxvYWQgZGVzaWduIHRvIGNyZWF0ZSBsaW5rJykNCgkJCQkpKTsNCgkJCX0NCgkJCQ0KCQl9ZWxzZXsNCgkJCSRyZXN1bHQgPSBqc29uX2VuY29kZShhcnJheSggDQoJCQkJInN1Y2Nlc3MiID0+IDAsDQoJCQkJIm1lc3NhZ2UiID0+ICR0aGlzLT5tYWluLT5sYW5nKCdFcnJvciwgdGhpcyBmZWF0dXJlIGhhcyBiZWVuIGRpc2FibGVkIGJ5IGFkbWluJykNCgkJCSkpOw0KCQl9DQoJCQ0KCQllY2hvICRyZXN1bHQ7IGV4aXQ7DQoJCQ0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3NoYXJlcygpIHsNCgkJDQoJCSRhaWQgPSAkdGhpcy0+bWFpbi0+Y29ubmVjdG9yLT5jb29raWUoJ2x1bWlzZS1BSUQnKTsNCgkJJGluZGV4ID0gJHRoaXMtPm1haW4tPmxpYi0+ZXNjKCdpbmRleCcpOw0KCQkNCgkJaWYgKGVtcHR5KCRpbmRleCkpDQoJCQkkaW5kZXggPSAwOw0KCQkNCgkJaWYgKGVtcHR5KCRhaWQpIHx8ICRhaWQgPT0gJyonKSB7DQoJCQkkcmVzdWx0ID0ganNvbl9lbmNvZGUoYXJyYXkoIA0KCQkJCSJzdWNjZXNzIiA9PiAwLA0KCQkJCSJyZXN1bHQiID0+IGFycmF5KCkNCgkJCSkpOw0KCQl9ZWxzZXsNCgkJCQ0KCQkJJGRhdGEgPSAkdGhpcy0+Z2V0U2hhcmVzKCRpbmRleCk7DQoJCQkNCgkJCSRyZXN1bHQgPSBqc29uX2VuY29kZShhcnJheSggDQoJCQkJInN1Y2Nlc3MiID0+IDEsDQoJCQkJInJlc3VsdCIgPT4gJGRhdGFbMF0sDQoJCQkJInRvdGFsIiA9PiAkZGF0YVsxXSwNCgkJCQkicGVyX3BhZ2UiID0+IDIwLA0KCQkJCSJpbmRleCIgPT4gJGluZGV4K2NvdW50KCRkYXRhWzBdKQ0KCQkJKSk7DQoJCX0NCgkJDQoJCWVjaG8gJHJlc3VsdDsgDQoJCWV4aXQ7DQoJCQ0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3JzcygpIHsNCgkJDQoJCSRjdXJEYXRlID0gZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldCgpOw0KCQlkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCJBc2lhL0Jhbmdrb2siKTsNCgkJJHJzcyA9ICR0aGlzLT5tYWluLT5saWItPnJlbW90ZV9jb25uZWN0KCR0aGlzLT5tYWluLT5jZmctPmFwaV91cmwuJ25ld3MvcGhwLnJzcy54bWw\/bm9uY2U9Jy5yYW5kKDEwMDAwLCAzMDAwMCkpOw0KCQlkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRjdXJEYXRlKTsNCgkJJHJzcyA9IEBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJHJzcyk7DQoNCgkJaWYgKCRyc3MgIT09IG51bGwgJiYgaXNfb2JqZWN0KCRyc3MpKSB7DQoJCQkkaHRtbCA9ICc8ZGl2IGNsYXNzPSJsdW1pc2VfY29udGFpbmVyIj4nOw0KDQoJCQkkY291bnQwID0gY291bnQoJHJzcy0+Y2hhbm5lbC0+aGVhZCk7DQoNCgkJCWZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDA7ICRpKyspIHsNCg0KCQkJCSRpdGVtID0gJHJzcy0+Y2hhbm5lbC0+aGVhZFskaV07DQoJCQkJJGxpbmsgPSAkaXRlbS0+bGluazsNCgkJCQkkaWNvbiA9ICRpdGVtLT5pY29uOw0KCQkJCSRjb2xvciA9ICRpdGVtLT5jb2xvcjsNCgkJCQkkdGl0bGUgPSAkaXRlbS0+dGl0bGU7DQoJCQkJJGh0bWwgLj0gJzxkaXYgY2xhc3M9Imx1bWlzZS1jb2wgbHVtaXNlLWNvbC0zIj4NCgkJCQkJCQk8YSBjbGFzcz0ibHVzaW1lX2JveF9zdGF0cyIgaHJlZj0iJy4kbGluay4nIiB0YXJnZXQ9ICJfYmxhbmsiPg0KCQkJCQkJCQk8aSBjbGFzcz0iJy4kaWNvbi4nIiBzdHlsZT0iYmFja2dyb3VuZDogJy4kY29sb3IuJyI+PC9pPg0KCQkJCQkJCQk8ZGl2IGNsYXNzPSJib3hfcmlnaHQiPg0KCQkJCQkJCQkJPHA+Jy4kdGl0bGUuJzwvcD4NCgkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJPC9hPg0KCQkJCQkJPC9kaXY+JzsNCg0KCQkJfQ0KDQoJCQkkaHRtbCAuPSAnPC9kaXY+PGRpdiBjbGFzcz0ibmV3X2JvZHkiPic7DQoNCgkJCSRjb3VudDEgPSBjb3VudCgkcnNzLT5jaGFubmVsLT5ib2R5KTsNCg0KCQkJZm9yICgkaSA9IDA7ICRpIDwgJGNvdW50MTsgJGkrKykgew0KDQoJCQkJJGl0ZW0gPSAkcnNzLT5jaGFubmVsLT5ib2R5WyRpXTsNCgkJCQkkbGluayA9ICRpdGVtLT5saW5rOw0KCQkJCSRjb2xvciA9ICRpdGVtLT5jb2xvcjsNCgkJCQkkc3RhdHVzID0gJGl0ZW0tPnN0YXR1czsNCgkJCQkkdGl0bGUgPSAkaXRlbS0+dGl0bGU7DQoJCQkJJGh0bWwgLj0gJzxhIGhyZWY9IicuJGxpbmsuJyIgIHRhcmdldD0gIl9ibGFuayI+PHNwYW4gc3R5bGU9ImNvbG9yOiAnLiRjb2xvci4nIj4nLiRzdGF0dXMuJzwvc3Bhbj4nLiR0aXRsZS4nPC9hPic7DQoNCgkJCX0NCg0KCQkJJGh0bWwgLj0gJzwvZGl2Pic7DQoNCgkJCSRjb3VudCA9IGNvdW50KCRyc3MtPmNoYW5uZWwtPml0ZW0pOw0KDQoJCQlmb3IgKCRpID0gMDsgJGkgPCAkY291bnQ7ICRpKyspIHsNCg0KCQkJCSRpdGVtID0gJHJzcy0+Y2hhbm5lbC0+aXRlbVskaV07DQoJCQkJJHRpdGxlID0gJGl0ZW0tPnRpdGxlOw0KCQkJCSRsaW5rID0gJGl0ZW0tPmxpbms7DQoJCQkJJGNhdGUgPSAkaXRlbS0+Y2F0ZTsNCgkJCQkkdGltZSA9ICRpdGVtLT50aW1lOw0KCQkJCSR0aHVtYiA9ICRpdGVtLT50aHVtYjsNCgkJCQkkZGVzY3JpcHRpb24gPSAkaXRlbS0+ZGVzY3JpcHRpb247DQoJCQkJJGh0bWwgLj0gJzxkaXYgY2xhc3M9Imx1bWlzZV93cmFwIj48ZmlndXJlPjxpbWcgc3JjPSInLiR0aHVtYi4nIj48L2ZpZ3VyZT4nOw0KCQkJCSRodG1sIC49ICc8ZGl2IGNsYXNzPSJsdW1pc2VfcmlnaHQiPjxhIGhyZWY9IicuJGxpbmsuJyIgdGFyZ2V0PSJfYmxhbmsiPicuJHRpdGxlLic8L2E+JzsNCgkJCQkkaHRtbCAuPSAnPGRpdiBjbGFzcz0ibHVtaXNlX21ldGEiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1mb2xkZXItbyIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4nLiRjYXRlLic8L3NwYW4+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+Jy4kdGltZS4nPC9zcGFuPjwvZGl2Pic7DQoJCQkJJGh0bWwgLj0gJzxwPicuJGRlc2NyaXB0aW9uLic8L3A+PC9kaXY+PC9kaXY+JzsNCg0KCQkJfQ0KDQoJCQllY2hvICRodG1sOw0KCQkJDQoJCX0gZWxzZSB7DQoJCQllY2hvICc8cD4nLiR0aGlzLT5tYWluLT5sYW5nKCdDb3VsZCBub3QgbG9hZCBSU1MgZmVlZCcpLic8L3A+JzsNCgkJfQ0KCQkJDQoJCWV4aXQ7DQoJCQ0KCX0NCgkJDQoJcHVibGljIGZ1bmN0aW9uIGxpc3RfY29sb3JzKCkgew0KCQkNCgkJaWYgKGlzc2V0KCRfUE9TVFsnc2F2ZV9hY3Rpb24nXSkpIHsNCgkJCWVjaG8gJHRoaXMtPm1haW4tPnNldF9vcHRpb24oJ2NvbG9yc19tYW5hZ2UnLCAkX1BPU1RbJ3NhdmVfYWN0aW9uJ10pOw0KCQkJZXhpdDsNCgkJfQ0KCQkNCgkJJGNvbG9ycyA9ICR0aGlzLT5tYWluLT5nZXRfb3B0aW9uKCdjb2xvcnNfbWFuYWdlJyk7DQoJCQ0KCQllY2hvICRjb2xvcnM7DQoJCWV4aXQ7DQoJCQ0KCX0NCgkJDQoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZV9saW5rX3NoYXJlKCkgew0KCQkNCgkJJGFpZCA9ICR0aGlzLT5tYWluLT5jb25uZWN0b3ItPmNvb2tpZSgnbHVtaXNlLUFJRCcpOw0KCQkkaWQgPSAkdGhpcy0+bWFpbi0+bGliLT5lc2MoJ2lkJyk7DQoJCSRwb3N0X2FpZCA9ICR0aGlzLT5tYWluLT5saWItPmVzYygnYWlkJyk7DQoJCQ0KCQlpZiAoJGFpZCAhPSAkcG9zdF9haWQpIHsNCgkJCSRyZXN1bHQgPSBhcnJheSggDQoJCQkJInN1Y2Nlc3MiID0+IDAsDQoJCQkJIm1lc3NhZ2UiID0+ICR0aGlzLT5tYWluLT5sYW5nKCdFcnJvciBVbmF1dGhvcml6ZWQgMTogQ291bGQgbm90IGRlbGV0ZSB0aGUgbGluaycpDQoJCQkpOw0KCQl9ZWxzZXsNCgkJCQ0KCQkJJGRhdGEgPSAkdGhpcy0+Z2V0X3NoYXJlKCRpZCk7DQoJCQkNCgkJCWlmICgkZGF0YSA9PSBudWxsIHx8ICRkYXRhWydhaWQnXSAhPSAkYWlkKSB7DQoJCQkJJHJlc3VsdCA9IGFycmF5KCANCgkJCQkJInN1Y2Nlc3MiID0+IDAsDQoJCQkJCSJtZXNzYWdlIiA9PiAkdGhpcy0+bWFpbi0+bGFuZygnRXJyb3IgVW5hdXRob3JpemVkIDI6IENvdWxkIG5vdCBkZWxldGUgdGhlIGxpbmsnKQ0KCQkJCSk7DQoJCQl9ZWxzZXsNCgkJCQkNCgkJCQkkcGF0aCA9ICR0aGlzLT5tYWluLT5jZmctPnVwbG9hZF9wYXRoOw0KCQkJCSRwYXRoIC49ICdzaGFyZXMnLkRTLmRhdGUoJ1knLCBzdHJ0b3RpbWUoJGRhdGFbJ2NyZWF0ZWQnXSkpLkRTLmRhdGUoJ20nLCBzdHJ0b3RpbWUoJGRhdGFbJ2NyZWF0ZWQnXSkpLkRTOw0KCQkJCQ0KCQkJCUB1bmxpbmsoJHBhdGguJGRhdGFbJ3NoYXJlX2lkJ10uJy5qcGcnKTsNCgkJCQlAdW5saW5rKCRwYXRoLiRkYXRhWydzaGFyZV9pZCddLicubHVtaScpOw0KCQkJCQ0KCQkJCSR0aGlzLT5tYWluLT5kYi0+d2hlcmUoJ3NoYXJlX2lkJywgJGlkKTsNCgkJCQkkdGhpcy0+bWFpbi0+ZGItPndoZXJlKCdhdXRob3InLCAkdGhpcy0+bWFpbi0+dmVuZG9yX2lkKTsNCgkJCQkkdGhpcy0+bWFpbi0+ZGItPmRlbGV0ZSgnc2hhcmVzJyk7DQoJCQkJDQoJCQkJJHJlc3VsdCA9IGFycmF5KCANCgkJCQkJInN1Y2Nlc3MiID0+IDENCgkJCQkpOw0KCQkJfQ0KCQl9DQoJCQ0KCQllY2hvIGpzb25fZW5jb2RlKCRyZXN1bHQpOyANCgkJZXhpdDsNCgkJDQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiB1cGxvYWRfcHJvZHVjdF9pbWFnZXMoKSB7DQoJCWdsb2JhbCAkbHVtaXNlOw0KDQoJCWlmICghJHRoaXMtPm1haW4tPmNhcHMoJ2x1bWlzZV9jYW5fdXBsb2FkJykpIHsNCgkJCWVjaG8gJHRoaXMtPm1haW4tPmxhbmcoJ1NvcnJ5LCBZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byB1cGxvYWQnKTsNCgkJCWV4aXQ7DQoJCX0NCgkJDQoJCSR0aW1lID0gdGltZSgpOw0KCQkkY2hlY2sgPSAkdGhpcy0+bWFpbi0+Y2hlY2tfdXBsb2FkKCR0aW1lKTsNCgkJDQoJCSR2ZW5kb3IgPSBpc3NldCgkX1BPU1RbJ3ZlbmRvciddKSA\/ICRfUE9TVFsndmVuZG9yJ10gOiAnZmFsc2UnOw0KCQlpZigkbHVtaXNlLT5jb25uZWN0b3ItPnBsYXRmb3JtID09ICd3b29jb21tZXJjZScpew0KCQkJJHVpZCA9IGdldF9jdXJyZW50X3VzZXJfaWQoKTsNCgkJfSBlbHNlIHsNCgkJCSR1aWQgPSAnMSc7DQoJCX0NCgkJDQoJCWlmICgkY2hlY2sgIT09IDEpIHsNCgkJCWVjaG8gJ0Vycm9yOiAnLiRjaGVjazsNCgkJCWV4aXQ7DQoJCX0NCgkJDQoJCWlmICgkdmVuZG9yID09ICd0cnVlJyAmJiAhaXNfZGlyKCR0aGlzLT5tYWluLT5jZmctPnVwbG9hZF9wYXRoLidwcm9kdWN0cycuRFMuJHVpZCkpDQoJCQlta2RpcigkdGhpcy0+bWFpbi0+Y2ZnLT51cGxvYWRfcGF0aC4ncHJvZHVjdHMnLkRTLiR1aSwgMDc1NSk7DQoJCQ0KCQkkcGF0aCA9ICR0aGlzLT5tYWluLT5jZmctPnVwbG9hZF9wYXRoLidwcm9kdWN0cycuRFM7DQoJCSRyZXMgPSBhcnJheSgpOw0KCQkNCgkJaWYgKCR2ZW5kb3IgPT0gJ3RydWUnKQ0KCQkJJHBhdGggLj0gJHVpZC5EUzsNCgkJCQ0KCQlmb3JlYWNoICgkX0ZJTEVTIGFzICRuYW1lID0+ICRmaWxlKSB7DQoJCQkNCgkJCSRpbWFnZSA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZVsidG1wX25hbWUiXSk7DQoJCQkkdHlwZSA9ICcuanBnJzsNCgkJCWlmKHN0cnBvcygkaW1hZ2UsICdkYXRhOmltYWdlL3BuZycpICE9PSBmYWxzZSl7DQoJCQkJJHR5cGUgPSAnLnBuZyc7DQoJCQl9DQoJCQlpZihzdHJwb3MoJGltYWdlLCAnZGF0YTppbWFnZS9zdmcnKSAhPT0gZmFsc2Upew0KCQkJCSR0eXBlID0gJy5zdmcnOw0KCQkJfQ0KCQkJLy8gJHR5cGUgPSBzdHJwb3MoJGltYWdlLCAnZGF0YTppbWFnZS9wbmcnKSAhPT0gZmFsc2UgPyAnLnBuZycgOiAnLmpwZyc7DQoJCQkkaW1hZ2UgPSBleHBsb2RlKCcsJywgJGltYWdlKTsNCgkJCSRpbWFnZSA9IGJhc2U2NF9kZWNvZGUoJGltYWdlWzFdKTsNCgkJCQ0KCQkJaWYgKEBmaWxlX3B1dF9jb250ZW50cygkcGF0aC4kbmFtZS4kdHlwZSwgJGltYWdlKSkgew0KCQkJCSRyZXNbJG5hbWVdID0gJ3Byb2R1Y3RzLycuKCR2ZW5kb3IgPT0gJ3RydWUnID8gJHVpZC4nLycgOiAnJykuJG5hbWUuJHR5cGU7DQoJCQl9DQoJCQkNCgkJCXVuc2V0KCRpbWFnZSk7DQoJCQkNCgkJfQ0KCQkNCgkJZWNobyBqc29uX2VuY29kZSgkcmVzKTsNCgkJZXhpdDsNCgkJDQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiB1cGxvYWQoKSB7DQoJCQ0KCQlpZiAoISR0aGlzLT5tYWluLT5jYXBzKCdsdW1pc2VfY2FuX3VwbG9hZCcpKSB7DQoJCQllY2hvICR0aGlzLT5tYWluLT5sYW5nKCdTb3JyeSwgWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gdXBsb2FkJyk7DQoJCQlleGl0Ow0KCQl9DQoJCQ0KCQkkdGltZSA9IHRpbWUoKTsNCgkJJGNoZWNrID0gJHRoaXMtPm1haW4tPmNoZWNrX3VwbG9hZCgkdGltZSk7DQoJCQ0KCQlpZiAoJGNoZWNrICE9PSAxKSB7DQoJCQllY2hvICd7ImVycm9yIjogIicuJGNoZWNrLicifSc7DQoJCQlleGl0Ow0KCQl9DQoJCQ0KCQlpZiAoaXNzZXQoJF9HRVRbJ3Rhc2snXSkgJiYgJF9HRVRbJ3Rhc2snXSA9PSAnc3RhZ2VzJykgew0KCQkJDQoJCQkkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRfRklMRVNbImZpbGUiXVsidG1wX25hbWUiXSk7DQoJCQkkY29udGVudCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygiLyhkYXRhXDppbWFnZVwvW15cIl0rXCIpL2kiLCBhcnJheSgmJHRoaXMsICd1cGxvYWRfc3RhZ2VzJyksICRjb250ZW50KTsNCgkJCQ0KCQkJJGNvbnRlbnQgPSBleHBsb2RlKCctLT58PC0tJywgJGNvbnRlbnQpOw0KCQkJDQoJCQllY2hvIGJhc2U2NF9lbmNvZGUodXJsZW5jb2RlKCRjb250ZW50WzBdKSk7DQoJCQkNCgkJCWlmIChpc3NldCgkY29udGVudFsxXSkpDQoJCQkJZWNobyAnLS0+fDwtLScuYmFzZTY0X2VuY29kZSh1cmxlbmNvZGUoJGNvbnRlbnRbMV0pKTsNCgkJCQ0KCQkJZXhpdDsgDQoJCQkNCgkJfQ0KCQkJCQ0KCQlpZiAoaXNzZXQoJF9HRVRbJ3Rhc2snXSkgJiYgJF9HRVRbJ3Rhc2snXSA9PSAnZmlsZXMnKSB7DQoJCQkNCgkJCSRkYXRhID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfRklMRVNbImZpbGUiXVsidG1wX25hbWUiXSk7DQoJCQkkdG1wbCA9IHRpbWUoKS4nLnRtcGwnOw0KCQkJDQoJCQlpZiAoJGRhdGEgJiYgIWVtcHR5KCRkYXRhKSAmJiBzdHJsZW4oJGRhdGEpID4gMCkgew0KCQkJCWlmIChAZmlsZV9wdXRfY29udGVudHMoJHRoaXMtPm1haW4tPmNmZy0+dXBsb2FkX3BhdGguJ3VzZXJfZGF0YScuRFMuJHRtcGwsICRkYXRhKSkgew0KCQkJCQllY2hvICR0bXBsOw0KCQkJCX0gZWxzZSBlY2hvICdFcnJvcjogQ291bGQgbm90IHdyaXRlIGZpbGUnOw0KCQkJfSBlbHNlIGVjaG8gJ0Vycm9yOiBDb3VsZCBub3QgdXBsb2FkIGZpbGUnOw0KCQkJCQ0KCQkJZXhpdDsNCgkJCQ0KCQl9DQoJCQ0KCQkkcGF0aCA9ICR0aGlzLT5tYWluLT5jZmctPnVwbG9hZF9wYXRoLid1c2VyX2RhdGEnLkRTOw0KCQkkZmlsZSA9IGRhdGUoJ1knLCAkdGltZSkuRFMuZGF0ZSgnbScsICR0aW1lKS5EUy4kdGhpcy0+bWFpbi0+Z2VuZXJhdGVfaWQoKS4nLnR4dCc7DQoJCQ0KCQkkbW92ZV9maWxlID0gbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbImZpbGUiXVsidG1wX25hbWUiXSwgJHBhdGguJGZpbGUpOw0KCQkNCgkJaWYgKCRtb3ZlX2ZpbGUpDQoJCQllY2hvICd7InN1Y2Nlc3MiOiAiJy51cmxlbmNvZGUoJGZpbGUpLicifSc7DQoJCWVsc2UgZWNobyAneyJlcnJvciI6ICJjb3VsZCBub3QgdXBsb2FkIn0nOw0KCQkNCgkJZXhpdDsNCgkJDQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiB1cGxvYWRfc3RhZ2VzKCRtYXRjaGVzKSB7DQoJCQ0KCQlpZiAoISR0aGlzLT5tYWluLT5jYXBzKCdsdW1pc2VfY2FuX3VwbG9hZCcpKSB7DQoJCQllY2hvICR0aGlzLT5tYWluLT5sYW5nKCdTb3JyeSwgWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gZGVsZXRlJyk7DQoJCQlleGl0Ow0KCQl9DQoJCQ0KCQkkcGF0aCA9ICR0aGlzLT5tYWluLT5jZmctPnVwbG9hZF9wYXRoLidwcm9kdWN0cycuRFM7DQoJCSR0eXBlID0gJy5qcGcnOw0KCQkNCgkJJGRhdGEgPSBzdHJfcmVwbGFjZSgnIicsICIiLCAkbWF0Y2hlc1swXSk7DQoJCSRkYXRhID0gZXhwbG9kZSgnLCcsICRkYXRhKTsNCgkJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhWzFdKTsNCgkJDQoJCWlmIChzdHJwb3MoJG1hdGNoZXNbMF0sICdkYXRhOmltYWdlL3BuZycpICE9PSBmYWxzZSkNCgkJCSR0eXBlID0gJy5wbmcnOw0KCQlpZiAoc3RycG9zKCRtYXRjaGVzWzBdLCAnZGF0YTppbWFnZS9zdmcnKSAhPT0gZmFsc2UpDQoJCQkkdHlwZSA9ICcuc3ZnJzsNCgkJDQoJCSRmaWxlID0gJHRoaXMtPm1haW4tPmdlbmVyYXRlX2lkKCkuJHR5cGU7DQoJCQ0KCQlpZiAoIUBmaWxlX3B1dF9jb250ZW50cygkcGF0aC4kZmlsZSwgJGRhdGEpKSB7DQoJCQllY2hvICdFcnJvcjogY291bGQgbm90IHdyaXRlIGZpbGUgb24geW91ciBzZXJ2ZXInOw0KCQkJZXhpdDsNCgkJfQ0KDQoJCXJldHVybiAncHJvZHVjdHMvJy4kZmlsZS4nIic7DQoJCQ0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gdXBsb2FkX2ZpZWxkcygpIHsNCgkJDQoJCWlmIChjb3VudChhcnJheV9rZXlzKCRfRklMRVMpKSA+IDApIHsNCgkJCQ0KCQkJJHBhdGggPSAkdGhpcy0+bWFpbi0+Y2ZnLT51cGxvYWRfcGF0aC4ndXNlcl9kYXRhJy5EUzsNCgkJCSR0aW1lID0gdGltZSgpOw0KCQkJJHJlc3VsdCA9IGFycmF5KCk7DQoJCQkkY2hlY2sgPSAkdGhpcy0+bWFpbi0+Y2hlY2tfdXBsb2FkKCR0aW1lKTsNCgkJDQoJCQlpZiAoJGNoZWNrICE9PSAxKSB7DQoJCQkJZWNobyAneyJlcnJvciI6ICInLiRjaGVjay4nIn0nOw0KCQkJCWV4aXQ7DQoJCQl9DQoJCQkNCgkJCWZvcmVhY2ggKCRfRklMRVMgYXMgJG5hbWUgPT4gJGZpbGUpIHsNCgkJCQkkZmlsZV9uYW1lID0gZGF0ZSgnWScsICR0aW1lKS5EUy5kYXRlKCdtJywgJHRpbWUpLkRTLiR0aGlzLT5tYWluLT5nZW5lcmF0ZV9pZCgpLicudHh0JzsNCgkJCQlpZiAobW92ZV91cGxvYWRlZF9maWxlKCRmaWxlWyJ0bXBfbmFtZSJdLCAkcGF0aC4kZmlsZV9uYW1lKSkgew0KCQkJCQkkcmVzdWx0WyRuYW1lXSA9ICRmaWxlX25hbWU7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQlpZiAoY291bnQoYXJyYXlfa2V5cygkcmVzdWx0KSkgPT09IGNvdW50KGFycmF5X2tleXMoJF9GSUxFUykpKQ0KCQkJCWVjaG8gJ3sic3VjY2VzcyI6ICInLnVybGVuY29kZShqc29uX2VuY29kZSgkcmVzdWx0KSkuJyJ9JzsNCgkJCWVsc2UgZWNobyAneyJlcnJvciI6ICJjb3VsZCBub3QgdXBsb2FkIn0nOw0KCQkJDQoJCX0gZWxzZSBlY2hvICd7ImVycm9yIjogIm5vIGZpbGVzIHVwbG9hZCJ9JzsNCgkJDQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBjaGVja291dCgpIHsNCgkJDQoJCXJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS5EUy4nLi4nLkRTLidjYXJ0LnBocCcpOw0KDQoJCWV4aXQ7DQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBwZGYoKSB7DQoJCQ0KCQlnbG9iYWwgJGx1bWlzZTsNCgkJDQoJCSRmb250cyA9IGlzc2V0KCRfR0VUWydmb250cyddKSA\/IHVybGRlY29kZSgkX0dFVFsnZm9udHMnXSkgOiAnJzsNCgkJJGZvbnRzID0gZXhwbG9kZSgnfCcsICRmb250cyk7DQoJCQ0KCQkkbm9jYWNoZSA9IGFycmF5KCk7DQoJCQ0KCQkkZnBhdGggPSAkbHVtaXNlLT5jZmctPnVwbG9hZF9wYXRoLidmb250cycuRFM7DQoJCQ0KCQlpZiAoY291bnQoJGZvbnRzKSA+IDApIHsNCgkJCQ0KCQkJZm9yZWFjaCAoJGZvbnRzIGFzICRmKSB7DQoJCQkJaWYgKCFpc19maWxlKCRmcGF0aC4kZi4nLnR0ZicpKQ0KCQkJCQlhcnJheV9wdXNoKCRub2NhY2hlLCAkZik7DQoJCQl9DQoJCQkNCgkJCWlmIChjb3VudCgkbm9jYWNoZSkgPiAwKSB7DQoJCQkJDQoJCQkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYHskbHVtaXNlLT5kYi0+cHJlZml4fWZvbnRzYCBXSEVSRSBgYXV0aG9yYD0neyR0aGlzLT5tYWluLT52ZW5kb3JfaWR9JyBBTkQgYG5hbWVgIElOICgnIi5pbXBsb2RlKCInLCciLCAkbm9jYWNoZSkuIicpIEFORCBgYWN0aXZlYD0gMSI7DQoJCQkJDQoJCQkJJGRiX2ZvbnRzID0gJGx1bWlzZS0+ZGItPnJhd1F1ZXJ5KCRxdWVyeSk7DQoNCgkJCQlpZiAoY291bnQoJGRiX2ZvbnRzKSA+IDApIHsNCgkJCQkJZm9yZWFjaCAoJGRiX2ZvbnRzIGFzICRmb250KSB7DQoJCQkJCQlpZiAoaXNfZmlsZSgkbHVtaXNlLT5jZmctPnVwbG9hZF9wYXRoLiRmb250Wyd1cGxvYWRfdHRmJ10pKSB7DQoJCQkJCQkJY29weSgkbHVtaXNlLT5jZmctPnVwbG9hZF9wYXRoLiRmb250Wyd1cGxvYWRfdHRmJ10sICRmcGF0aC4kZm9udFsnbmFtZSddLicudHRmJyk7DQoJCQkJCQkJaWYgKCgka2V5ID0gYXJyYXlfc2VhcmNoKCRmb250WyduYW1lJ10sICRub2NhY2hlKSkgIT09IGZhbHNlKSB7DQoJCQkJCQkJICAgIHVuc2V0KCRub2NhY2hlWyRrZXldKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkNCgkJCWlmIChjb3VudCgkbm9jYWNoZSkgPiAwKSB7DQoJCQkJDQoJCQkJJGdjZmcgPSAkbHVtaXNlLT5saWItPnJlbW90ZV9jb25uZWN0KCdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS93ZWJmb250cy92MS93ZWJmb250cz9rZXk9QUl6YVN5Q3JzVERpZ0w2MVRGSFlQSFRaZHVRUDFjR2k4Q0xmcDkwJyk7DQoJCQkJDQoJCQkJJGdjZmcgPSBqc29uX2RlY29kZSgkZ2NmZyk7DQoJCQkJDQoJCQkJaWYgKGlzX2FycmF5KCRnY2ZnLT5pdGVtcykgJiYgY291bnQoJGdjZmctPml0ZW1zKSA+IDApIHsNCgkJCQkJZm9yZWFjaCAoJGdjZmctPml0ZW1zIGFzICRpdGVtKSB7DQoJCQkJCQlpZiAoaW5fYXJyYXkoJGl0ZW0tPmZhbWlseSwgJG5vY2FjaGUpKSB7DQoJCQkJCQkJaWYgKCFpc19maWxlKCRmcGF0aC4kaXRlbS0+ZmFtaWx5LicudHRmJykpIHsNCgkJCQkJCQkJJGZkYXRhID0gJGx1bWlzZS0+bGliLT5yZW1vdGVfY29ubmVjdCgkaXRlbS0+ZmlsZXMtPnJlZ3VsYXIpOw0KCQkJCQkJCQlpZiAoIWVtcHR5KCRmZGF0YSkpIHsNCgkJCQkJCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCRmcGF0aC4kaXRlbS0+ZmFtaWx5LicudHRmJywgJGZkYXRhKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQ0KCQkJfQ0KCQkNCgkJfQ0KCQkNCgk\/PjwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5MdW1pc2U8L3RpdGxlPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgZm9udHMgPSB7PD9waHANCgkJZm9yZWFjaCAoJGZvbnRzIGFzICRmb250KSB7DQoJCQlpZiAoaXNfZmlsZSgkZnBhdGguJGZvbnQuJy50dGYnKSkgew0KCQkJCWVjaG8gJyInLiRmb250LiciOiAiJy5iYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRmcGF0aC4kZm9udC4nLnR0ZicpKS4nIiwnOw0KCQkJfQ0KCQl9DQoJPz59O2Z1bmN0aW9uIGJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0KSB7DQogICAgdmFyIHJhdyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7DQogICAgdmFyIHJhd0xlbmd0aCA9IHJhdy5sZW5ndGg7DQogICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKHJhd0xlbmd0aCkpOw0KICAgIGZvciAoaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykgew0KICAgICAgICBhcnJheVtpXSA9IHJhdy5jaGFyQ29kZUF0KGkpDQogICAgfQ0KICAgIHJldHVybiAoYXJyYXkuYnVmZmVyKQ0KfTsNCg0KZnVuY3Rpb24gcmVuZGVyUERGKHN2Z3MsIHVybCkgew0KICAgIA0KICAgIGxldCBkb2MgPSBuZXcgUERGRG9jdW1lbnQoew0KICAgICAgICBjb21wcmVzczogZmFsc2UsDQogICAgICAgIHNpemU6IFtNYXRoLnJvdW5kKHN2Z3NbMF1bMV0udyksIE1hdGgucm91bmQoc3Znc1swXVsxXS5oKV0NCiAgICB9KTsNCiAgICANCiAgICBPYmplY3Qua2V5cyhmb250cykubWFwKGZ1bmN0aW9uKGYpIHsNCiAgICAgICAgZG9jLnJlZ2lzdGVyRm9udChmLCBiYXNlNjRUb0FycmF5QnVmZmVyKGZvbnRzW2ZdKSk7DQogICAgICAgIC8qaWYgKGYuaW5kZXhPZignICcpID4gLTEpIHsNCgkgICAgICAgIHN2Z3MubWFwKGZ1bmN0aW9uKHMsIGkpIHsNCgkJICAgICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgnZm9udC1mYW1pbHk9IicrZisnIicsICdnJyk7DQoJCSAgICAgICAgc3Znc1tpXVswXSA9IHN2Z3NbaV1bMF0ucmVwbGFjZShyZWcsICdmb250LWZhbWlseT0iJytmLnJlcGxhY2UoL1wgL2csICcnKS5yZXBsYWNlKC9cJy9nLCAnJykrJyInKTsgDQoJICAgICAgICB9KTsNCiAgICAgICAgfSovDQogICAgfSk7DQogICAgDQogICAgc3Zncy5tYXAoZnVuY3Rpb24ocywgaSkgew0KICAgICAgICB2YXIgdyA9IE1hdGgucm91bmQoc1sxXS53KSwNCiAgICAgICAgICAgIGggPSBNYXRoLnJvdW5kKHNbMV0uaCk7DQogICAgICAgIGlmIChpID4gMCkgew0KICAgICAgICAgICAgZG9jLmFkZFBhZ2Uoew0KICAgICAgICAgICAgICAgIHNpemU6IFt3LCBoXQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfTsNCiAgICAgICAgDQogICAgICAgIFNWR3RvUERGKGRvYywgc1swXSwgNywgNywgew0KICAgICAgICAgICAgZm9udENhbGxiYWNrOiBmdW5jdGlvbihmKSB7DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgZG9jLmZvbnQoZi5yZXBsYWNlKC9cJy9nLCAnJykpDQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHt9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgd2lkdGg6IHcgLSAxNCwNCiAgICAgICAgICAgIGhlaWdodDogaCAtIDE0DQogICAgICAgIH0pOw0KICAgICAgICA8P3BocCBpZihpc3NldCgkX0dFVFsnY3JvcG1hcmtzJ10pJiYkX0dFVFsnY3JvcG1hcmtzJ109PScxJyl7ID8+dmFyIG1hcmtzID0gJyc7DQogICAgICAgIFsnLTEgMTkgMTUgMScsICh3IC0gMTQpICsgJyAxOSAxNSAxJywgJy0xICcgKyAoaCAtIDIwKSArICcgMTUgMScsICh3IC0gMTQpICsgJyAnICsgKGggLSAyMCkgKyAnIDE1IDEnLCAnMTkgMCAxIDE1JywgKHcgLSAxOSkgKyAnIDAgMSAxNScsICcxOSAnICsgKGggLSAxNCkgKyAnIDEgMTUnLCAodyAtIDE5KSArICcgJyArIE1hdGguY2VpbChoIC0gMTQpICsgJyAxIDE1J10ubWFwKGZ1bmN0aW9uKG0pIHsNCiAgICAgICAgICAgIG0gPSBtLnNwbGl0KCcgJyk7DQogICAgICAgICAgICBtYXJrcyArPSAnPHJlY3QgeD0iJyArIG1bMF0gKyAnIiB5PSInICsgbVsxXSArICciIHdpZHRoPSInICsgbVsyXSArICciIGhlaWdodD0iJyArIG1bM10gKyAnIiBzdHlsZT0iZmlsbDogIzMzMyI+PC9yZWN0PicNCiAgICAgICAgfSk7DQogICAgICAgIFNWR3RvUERGKGRvYywgJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgJyArIHcgKyAnICcgKyBoICsgJyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iJyArICh3IC0gMzgpICsgJyIgaGVpZ2h0PSInICsgKGggLSAzOCkgKyAnIiBzdHlsZT0ic3Ryb2tlOiAjQzQxRTNBOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IDUgNTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbC1vcGFjaXR5OiAwOyIgdmlzaWJpbGl0eT0iaGlkZGVuIj48L3JlY3Q+JyArIG1hcmtzICsgJzwvc3ZnPicsIDAsIDAsIHsNCiAgICAgICAgICAgIHdpZHRoOiB3LA0KICAgICAgICAgICAgaGVpZ2h0OiBoDQogICAgICAgIH0pOw0KICAgICAgICA8P3BocCB9ID8+DQogICAgfSk7DQogICAgbGV0IHN0cmVhbSA9IGRvYy5waXBlKGJsb2JTdHJlYW0oKSk7DQogICAgc3RyZWFtLm9uKCdmaW5pc2gnLCBmdW5jdGlvbihyZXMpIHsNCiAgICAgICAgbGV0IGJsb2IgPSBzdHJlYW0udG9CbG9iKCdhcHBsaWNhdGlvbi9wZGYnKTsNCiAgICAgICAgaWYgKG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKSB7DQogICAgICAgICAgICBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihibG9iLCAnRmlsZS5wZGYnKQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpDQogICAgICAgIH0NCiAgICB9KTsNCiAgICBkb2MuZW5kKCkNCn07PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iPD9waHAgZWNobyAkbHVtaXNlLT5jZmctPmFzc2V0c191cmwuJ2Fzc2V0cy9qcy9wZGZraXQuanM\/dmVyc2lvbj0nLkxVTUlTRTsgPz4iPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPjw\/cGhwCQ0KCQlleGl0Ow0KCQkNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIGxvYWRfbW9yZV9iYXNlcygpIHsNCg0KCQlnbG9iYWwgJGx1bWlzZTsNCgkJDQoJCSRzdGFydCA9IGlzc2V0KCRfUE9TVFsnc3RhcnQnXSkgPyAkX1BPU1RbJ3N0YXJ0J10gOiAwOw0KCQkkbGltaXQgPSBpc3NldCgkX1BPU1RbJ2xpbWl0J10pID8gJF9QT1NUWydsaW1pdCddIDogMzA7DQoJCSR2ZW5kb3IgPSBpc3NldCgkX1BPU1RbJ3ZlbmRvciddKSA\/ICRfUE9TVFsndmVuZG9yJ10gOiAnZmFsc2UnOw0KCQkNCgkJaWYoJGx1bWlzZS0+Y29ubmVjdG9yLT5wbGF0Zm9ybSA9PSAnd29vY29tbWVyY2UnKXsNCgkJCSR1aWQgPSBnZXRfY3VycmVudF91c2VyX2lkKCk7DQoJCX0gZWxzZSB7DQoJCQkkdWlkID0gJzEnOw0KCQl9DQoJCQ0KCQkNCgkJJGl0ZW1zID0gJHRoaXMtPm1haW4tPmxpYi0+Z2V0X3VwbG9hZGVkX2Jhc2VzKCR2ZW5kb3IgPT0gJ3RydWUnID8gJHVpZCA6ICcnKTsNCgkJJHRvdGFsID0gY291bnQoJGl0ZW1zKTsNCgkJDQoJCSRpdGVtcyA9IGFycmF5X3NwbGljZSgkaXRlbXMsICRzdGFydCwgJGxpbWl0KTsNCgkJDQoJCSRsaXN0ID0gJHRoaXMtPm1haW4tPmdldF9vcHRpb24oJ3Byb2R1Y3RfaW1hZ2VfbmFtZXMnLigkdmVuZG9yID09ICd0cnVlJyA\/ICdfJy4kdWlkIDogJycpKTsNCgkJDQoJCWlmICgkbGlzdCA9PT0gbnVsbCkNCgkJCSRsaXN0ID0gYXJyYXkoKTsNCgkJZWxzZSAkbGlzdCA9IGpzb25fZGVjb2RlKCRsaXN0LCB0cnVlKTsNCgkJDQoJCSRuYW1lcyA9IGFycmF5KCk7DQoJCQ0KCQlmb3IgKCRpPTA7ICRpPGNvdW50KCRpdGVtcyk7ICRpKyspIHsNCgkJCWlmIChpc3NldCgkbGlzdFskaXRlbXNbJGldXSkpDQoJCQkJJG5hbWVzWyRpXSA9ICRsaXN0WyRpdGVtc1skaV1dOw0KCQkJZWxzZSAkbmFtZXNbJGldID0gJyc7DQoJCX0NCgkJDQoJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkidG90YWwiID0+ICR0b3RhbCwNCgkJCSJpdGVtcyIgPT4gJGl0ZW1zLA0KCQkJIm5hbWVzIiA9PiAkbmFtZXMsDQoJCQkic3RhcnQiID0+IChmbG9hdCkkc3RhcnQNCgkJKSk7DQoJCQ0KCQlleGl0Ow0KCQkNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIGVkaXRfbmFtZV9wcm9kdWN0X2ltYWdlKCkgew0KCQkNCgkJaWYgKCEkdGhpcy0+bWFpbi0+Y2FwcygnbHVtaXNlX2Nhbl91cGxvYWQnKSkgew0KCQkJZWNobyAkdGhpcy0+bWFpbi0+bGFuZygnU29ycnksIFlvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGVkaXQgbmFtZScpOw0KCQkJZXhpdDsNCgkJfQ0KCQkNCgkJJHZlbmRvciA9IGlzc2V0KCRfUE9TVFsndmVuZG9yJ10pID8gJF9QT1NUWyd2ZW5kb3InXSA6ICdmYWxzZSc7DQoJCSR1aWQgPSBnZXRfY3VycmVudF91c2VyX2lkKCk7DQoJCQ0KCQkkbGlzdCA9ICR0aGlzLT5tYWluLT5nZXRfb3B0aW9uKCdwcm9kdWN0X2ltYWdlX25hbWVzJy4oJHZlbmRvciA9PSAndHJ1ZScgPyAnXycuJHVpZCA6ICcnKSk7DQoJCQ0KCQlpZiAoJGxpc3QgPT09IG51bGwpDQoJCQkkbGlzdCA9IGFycmF5KCk7DQoJCWVsc2UgJGxpc3QgPSBqc29uX2RlY29kZSgkbGlzdCwgdHJ1ZSk7DQoJCQ0KCQkkbGlzdFskX1BPU1RbJ2ZpbGUnXV0gPSAkX1BPU1RbJ25hbWUnXTsNCgkJDQoJCSR0aGlzLT5tYWluLT5zZXRfb3B0aW9uKCdwcm9kdWN0X2ltYWdlX25hbWVzJy4oJHZlbmRvciA9PSAndHJ1ZScgPyAnXycuJHVpZCA6ICcnKSwganNvbl9lbmNvZGUoJGxpc3QpKTsNCgkJDQoJCWVjaG8gMTsNCgkJZXhpdDsNCgkJDQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVfYmFzZV9pbWFnZSgpIHsNCgkJZ2xvYmFsICRsdW1pc2U7DQoJCWlmICghJHRoaXMtPm1haW4tPmNhcHMoJ2x1bWlzZV9jYW5fdXBsb2FkJykpIHsNCgkJCWVjaG8gJHRoaXMtPm1haW4tPmxhbmcoJ1NvcnJ5LCBZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBkZWxldGUnKTsNCgkJCWV4aXQ7DQoJCX0NCgkJDQoJCSRmaWxlID0gaXNzZXQoJF9QT1NUWydmaWxlJ10pID8gJF9QT1NUWydmaWxlJ10gOiAnJzsNCgkJJHZlbmRvciA9IGlzc2V0KCRfUE9TVFsndmVuZG9yJ10pID8gJF9QT1NUWyd2ZW5kb3InXSA6ICdmYWxzZSc7DQoJCQ0KCQlpZigkbHVtaXNlLT5jb25uZWN0b3ItPnBsYXRmb3JtID09ICd3b29jb21tZXJjZScpew0KCQkJJHVpZCA9IGdldF9jdXJyZW50X3VzZXJfaWQoKTsNCgkJfSBlbHNlIHsNCgkJCSR1aWQgPSAnMSc7DQoJCX0NCgkJDQoJCWlmICgkdmVuZG9yID09ICd0cnVlJykgew0KCQkJJGZpbGUgPSAkdWlkLkRTLiRmaWxlOw0KCQl9DQoJCQ0KCQlpZiAoZW1wdHkoJGZpbGUpIHx8ICFpc19maWxlKCR0aGlzLT5tYWluLT5jZmctPnVwbG9hZF9wYXRoLidwcm9kdWN0cycuRFMuJGZpbGUpKSB7DQoJCQllY2hvICR0aGlzLT5tYWluLT5sYW5nKCdFcnJvciwgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsNCgkJCWV4aXQ7DQoJCX0NCgkJDQoJCSRkZWwgPSB1bmxpbmsoJHRoaXMtPm1haW4tPmNmZy0+dXBsb2FkX3BhdGguJ3Byb2R1Y3RzJy5EUy4kZmlsZSk7DQoJCQ0KCQlpZiAoJGRlbCkgew0KCQkJDQoJCQkkbGlzdCA9ICR0aGlzLT5tYWluLT5nZXRfb3B0aW9uKCdwcm9kdWN0X2ltYWdlX25hbWVzJy4oJHZlbmRvciA9PSAndHJ1ZScgPyAnXycuJHVpZCA6ICcnKSk7DQoJCQkNCgkJCWlmICgkbGlzdCA9PT0gbnVsbCkNCgkJCQkkbGlzdCA9IGFycmF5KCk7DQoJCQllbHNlICRsaXN0ID0ganNvbl9kZWNvZGUoJGxpc3QsIHRydWUpOw0KCQkJDQoJCQl1bnNldCgkbGlzdFskZmlsZV0pOw0KCQkJDQoJCQkkdGhpcy0+bWFpbi0+c2V0X29wdGlvbigncHJvZHVjdF9pbWFnZV9uYW1lcycuKCR2ZW5kb3IgPT0gJ3RydWUnID8gJ18nLiR1aWQgOiAnJyksIGpzb25fZW5jb2RlKCRsaXN0KSk7DQoJCQ0KCQl9DQoJCQ0KCQllY2hvICRkZWw7IA0KCQlleGl0Ow0KCQkNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldHVwKCkgew0KCQlpZiAobWV0aG9kX2V4aXN0cygkdGhpcy0+bWFpbi0+Y29ubmVjdG9yLCAnc2V0dXAnKSkgew0KCQkJY2FsbF91c2VyX2Z1bmNfYXJyYXkoYXJyYXkoJiR0aGlzLT5tYWluLT5jb25uZWN0b3IsICdzZXR1cCcpLCBhcnJheSgpKTsNCgkJfQ0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gYWRkb24oKSB7DQoJCQ0KCQkkdGhpcy0+bWFpbi0+ZG9fYWN0aW9uKCdhZGRvbi1hamF4Jyk7DQoJCWV4aXQ7DQoJCQ0KCX0NCgkJDQoJcHVibGljIGZ1bmN0aW9uIHNlbmRfYnVnKCkgew0KCQkNCgkJJGhpc3QgPSAkdGhpcy0+bWFpbi0+Y29ubmVjdG9yLT5nZXRfc2Vzc2lvbignYnVnLXJlcG9ydGluZycpOw0KCQkNCgkJaWYgKCRoaXN0ID09PSBudWxsKQ0KCQkJJGhpc3QgPSAwOw0KCQkNCgkJaWYgKCRoaXN0ID49IDEwKSB7DQoJCQllY2hvIGpzb25fZW5jb2RlKGFycmF5KCANCgkJCQkic3VjY2VzcyIgPT4gMCwNCgkJCQkibWVzc2FnZSIgPT4gJHRoaXMtPm1haW4tPmxhbmcoJ0Vycm9yLCBoYXMgZXhjZWVkZWQgdGhlIGFsbG93YWJsZSBsaW1pdCcpDQoJCQkpKTsNCgkJCWV4aXQ7DQoJCX0NCgkJDQoJCSR0aGlzLT5tYWluLT5jb25uZWN0b3ItPnNldF9zZXNzaW9uKCdidWctcmVwb3J0aW5nJywgJGhpc3QrMSk7DQoJCQ0KCQkkaWQgPSAkdGhpcy0+bWFpbi0+ZGItPmluc2VydCgnYnVncycsIGFycmF5KA0KCQkJJ2NvbnRlbnQnID0+IHN1YnN0cih1cmxkZWNvZGUoYmFzZTY0X2RlY29kZSgkX1BPU1RbJ2NvbnRlbnQnXSkpLCAwLCAxNTAwKSwNCgkJCSdzdGF0dXMnID0+ICduZXcnLA0KCQkJJ2x1bWlzZScgPT4gMCwNCgkJCSdhdXRob3InID0+ICR0aGlzLT5tYWluLT52ZW5kb3JfaWQsDQoJCQknY3JlYXRlZCcgPT4gZGF0ZSgiWS1tLWQiKS4nICcuZGF0ZSgiSDppOnMiKSwNCgkJCSd1cGRhdGVkJyA9PiBkYXRlKCJZLW0tZCIpLicgJy5kYXRlKCJIOmk6cyIpDQoJCSkpOw0KCQkNCgkJaWYgKCR0aGlzLT5tYWluLT5jZmctPnNldHRpbmdzWydyZXBvcnRfYnVncyddID09IDIpDQoJCQkkdGhpcy0+cmVwb3J0X2J1Z19sdW1pc2UoJGlkKTsNCgkJDQoJCWVjaG8ganNvbl9lbmNvZGUoYXJyYXkoDQoJCQkic3VjY2VzcyIgPT4gMQ0KCQkpKTsNCgkJDQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiByZXBvcnRfYnVnKCkgew0KCQllY2hvICR0aGlzLT5yZXBvcnRfYnVnX2x1bWlzZSgkX1BPU1RbJ2lkJ10pID8gJ1N1Y2Nlc3MnIDogJ0ZhaWwnOw0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gcHJvZHVjdF92YXJpYXRpb24oKSB7DQoJCWluY2x1ZGUgKExVTUlTRV9DT1JFX1BBVEguRFMuJy4uJy5EUy4nYWRtaW4nLkRTLidwYWdlcycuRFMuJ3Byb2R1Y3QtdmFyaWF0aW9uLnBocCcpOw0KCQlleGl0Ow0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gaW5pdCgpIHsNCgkJDQoJCSRzZXR0aW5ncyA9ICR0aGlzLT5tYWluLT5jZmctPnNldHRpbmdzOw0KCQkNCgkJJGNmZyA9IGFycmF5KA0KCQkJInZlcnNpb24iID0+IExVTUlTRSwNCgkJCSJ0aGVtZV9jb2xvciIgPT4gZXhwbG9kZSgnQCcsIGV4cGxvZGUoJzonLCAkc2V0dGluZ3NbJ2NvbG9ycyddKVswXSlbMF0sDQoJCQkic3RhZ2VzIiA9PiBhcnJheSgpLA0KCQkJImN1cnJlbmN5IiA9PiAkc2V0dGluZ3NbJ2N1cnJlbmN5J10sDQoJCQkic3dpdGNoX2xhbmciID0+ICRzZXR0aW5nc1snYWxsb3dfc2VsZWN0X2xhbmcnXSwNCgkJCSJ0aG91c2FuZF9zZXBhcmF0b3IiID0+IGlzc2V0KCRzZXR0aW5nc1sndGhvdXNhbmRfc2VwYXJhdG9yJ10pID8gJHNldHRpbmdzWyd0aG91c2FuZF9zZXBhcmF0b3InXSA6ICcsJywNCgkJCSJkZWNpbWFsX3NlcGFyYXRvciIgPT4gaXNzZXQoJHNldHRpbmdzWydkZWNpbWFsX3NlcGFyYXRvciddKSA\/ICRzZXR0aW5nc1snZGVjaW1hbF9zZXBhcmF0b3InXSA6ICcuJywNCgkJCSJudW1iZXJfZGVjaW1hbHMiID0+IGlzc2V0KCRzZXR0aW5nc1snbnVtYmVyX2RlY2ltYWxzJ10pPyAkc2V0dGluZ3NbJ251bWJlcl9kZWNpbWFscyddIDogMiwNCgkJCSJjdXJyZW5jeV9wb3NpdGlvbiIgPT4gJHNldHRpbmdzWydjdXJyZW5jeV9wb3NpdGlvbiddLA0KCQkJIm1pbl91cGxvYWQiID0+IGlzc2V0KCRzZXR0aW5nc1snbWluX3VwbG9hZCddKT8gKGludCkkc2V0dGluZ3NbJ21pbl91cGxvYWQnXSA6IDAsDQoJCQkibWF4X3VwbG9hZCIgPT4gaXNzZXQoJHNldHRpbmdzWydtYXhfdXBsb2FkJ10pPyAoaW50KSRzZXR0aW5nc1snbWF4X3VwbG9hZCddIDogMCwNCgkJCSJtaW5fZGltZW5zaW9ucyIgPT4gaXNzZXQoJHNldHRpbmdzWydtaW5fZGltZW5zaW9ucyddKSA\/IGV4cGxvZGUoJ3gnLCAkc2V0dGluZ3NbJ21pbl9kaW1lbnNpb25zJ10pIDogJycsDQoJCQkibWF4X2RpbWVuc2lvbnMiID0+IGlzc2V0KCRzZXR0aW5nc1snbWF4X2RpbWVuc2lvbnMnXSkgPyBleHBsb2RlKCd4JywgJHNldHRpbmdzWydtYXhfZGltZW5zaW9ucyddKSA6ICcnLA0KCQkJIm1pbl9wcGkiID0+IGlzc2V0KCRzZXR0aW5nc1snbWluX3BwaSddKSA\/ICRzZXR0aW5nc1snbWluX3BwaSddIDogJycsDQoJCQkibWF4X3BwaSIgPT4gaXNzZXQoJHNldHRpbmdzWydtYXhfcHBpJ10pID8gJHNldHRpbmdzWydtYXhfcHBpJ10gOiAnJywNCgkJCSJwcGlfbm90aWNlIiA9PiBpc3NldCgkc2V0dGluZ3NbJ3BwaV9ub3RpY2UnXSkgPyRzZXR0aW5nc1sncHBpX25vdGljZSddIDogJycsDQoJCQkicmVxdWlyZWRfZnVsbF9kZXNpZ24iID0+IGlzc2V0KCRzZXR0aW5nc1sncmVxdWlyZWRfZnVsbF9kZXNpZ24nXSkgPyAkc2V0dGluZ3NbJ3JlcXVpcmVkX2Z1bGxfZGVzaWduJ10gOiAnJywNCgkJCSJhdXRvX2ZpdCIgPT4gaXNzZXQoJHNldHRpbmdzWydhdXRvX2ZpdCddKSA\/ICRzZXR0aW5nc1snYXV0b19maXQnXSA6ICcxJywNCgkJCSJjYWxjX2Zvcm11bGEiID0+IGlzc2V0KCRzZXR0aW5nc1snY2FsY19mb3JtdWxhJ10pID8gJHNldHRpbmdzWydjYWxjX2Zvcm11bGEnXSA6ICcxJywNCiAgICAgICAgICAgICJwcmludGluZ3MiID0+IGFycmF5KCksDQoJCQkidXJsIiA9PiAkdGhpcy0+bWFpbi0+Y2ZnLT51cmwsDQoJCQkidG9vbF91cmwiID0+ICR0aGlzLT5tYWluLT5jZmctPnRvb2xfdXJsLA0KCQkJInVwbG9hZF91cmwiID0+ICR0aGlzLT5tYWluLT5jZmctPnVwbG9hZF91cmwsDQoJCQkiY2hlY2tvdXRfdXJsIiA9PiAkdGhpcy0+bWFpbi0+Y2ZnLT5jaGVja291dF91cmwsDQoJCQkiYWpheCIgPT4gJHRoaXMtPm1haW4tPmNmZy0+YWpheF91cmwsDQoJCQkiYXNzZXRzIiA9PiAkdGhpcy0+bWFpbi0+Y2ZnLT5hc3NldHNfdXJsLA0KCQkJImpxdWVyeSIgPT4gJHRoaXMtPm1haW4tPmNmZy0+bG9hZF9qcXVlcnksDQoJCQkibm9uY2UiID0+IGx1bWlzZV9zZWN1cmU6OmNyZWF0ZV9ub25jZSgnTFVNSVNFLVNFQ1VSSVRZJyksDQoJCQkibWF4X3VwbG9hZF9zaXplIiA9PiAoaW50KWluaV9nZXQoJ3Bvc3RfbWF4X3NpemUnKSwNCgkJCSJhY2Nlc3NfY29yZSIgPT4gaXNfYXJyYXkoJHRoaXMtPm1haW4tPmNmZy0+YWNjZXNzX2NvcmUpID8gaW1wbG9kZSgnLCcsICR0aGlzLT5tYWluLT5jZmctPmFjY2Vzc19jb3JlKSA6ICR0aGlzLT5tYWluLT5jZmctPmFjY2Vzc19jb3JlLA0KCQkJImRlc2lnbiIgPT4gJHRoaXMtPm1haW4tPmVzYygnZGVzaWduX3ByaW50JyksDQoJCQkicHJvZHVjdCIgPT4gJHRoaXMtPm1haW4tPmVzYygncHJvZHVjdF9iYXNlJyksDQoJCQkiZGVmYXVsdF9mb250cyIgPT4gIWVtcHR5KCR0aGlzLT5tYWluLT5jZmctPmRlZmF1bHRfZm9udHMpID8gc3RyaXBzbGFzaGVzKCR0aGlzLT5tYWluLT5jZmctPmRlZmF1bHRfZm9udHMpIDogYXJyYXkoKSwNCgkJCSJmb250cyIgPT4gJHRoaXMtPm1haW4tPmdldF9mb250cygpLA0KCQkJImpzX2xhbmciID0+ICR0aGlzLT5tYWluLT5jZmctPmpzX2xhbmcsDQoJCQkicnRsIiA9PiAkdGhpcy0+bWFpbi0+Y2ZnLT5zZXR0aW5nc1sncnRsJ10sDQoJCQkicHJlZml4X2ZpbGUiID0+IHVybGVuY29kZSgkdGhpcy0+bWFpbi0+Y2ZnLT5zZXR0aW5nc1sncHJlZml4X2ZpbGUnXSksDQoJCQkidGV4dF9kaXJlY3Rpb24iID0+ICR0aGlzLT5tYWluLT5jZmctPnNldHRpbmdzWyd0ZXh0X2RpcmVjdGlvbiddLA0KCQkJImNvbmRpdGlvbnMiID0+IChpc3NldCgkdGhpcy0+bWFpbi0+Y2ZnLT5zZXR0aW5nc1snY29uZGl0aW9ucyddKSAmJiAhZW1wdHkoJHNldHRpbmdzWydjb25kaXRpb25zJ10pKSA\/ICR0aGlzLT5tYWluLT5saWItPmVuanNvbigkc2V0dGluZ3NbJ2NvbmRpdGlvbnMnXSkgOiAnJywNCgkJCSJzaXplX2RlZmF1bHQiID0+ICR0aGlzLT5tYWluLT5jZmctPnNpemVfZGVmYXVsdCwNCgkJCSJwcmludF90eXBlcyIgPT4gJHRoaXMtPm1haW4tPmxpYi0+Z2V0X3ByaW50X3R5cGVzKCksDQoJCQkiYXR0cmlidXRlc19jZmciID0+ICR0aGlzLT5tYWluLT5jZmctPnByb2R1Y3RfYXR0cmlidXRlcywNCgkJKTsNCgkJDQoJCSRjZmcgPSAkdGhpcy0+bWFpbi0+bGliLT5wcm9kdWN0X2NmZygkY2ZnKTsNCgkJDQoJCWlmICghZW1wdHkoJHNldHRpbmdzWydjdXN0b21fanMnXSkpIHsNCgkJCSRjdXN0b21fanMgPSBzdHJfcmVwbGFjZSgNCgkJCQlhcnJheSgnPHNjcmlwdCcsICc8L3NjcmlwdD4nKSwNCgkJCQlhcnJheSgnJmx0O3NjcmlwdCcsICcmbHQ7L3NjcmlwdCZndDsnKSwNCgkJCQkkc2V0dGluZ3NbJ2N1c3RvbV9qcyddDQoJCQkpOw0KCQkJJGNmZ1snY3VzdG9tX2pzJ10gPSBzdHJpcHNsYXNoZXMoJGN1c3RvbV9qcyk7DQoJCX0NCgkJDQoJCSRjZmcgPSAkdGhpcy0+bWFpbi0+YXBwbHlfZmlsdGVycygnanNfaW5pdCcsICRjZmcpOw0KCQkNCgkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsNCgkJZWNobyBqc29uX2VuY29kZSgkY2ZnKTsNCgkJZXhpdDsNCgkJCQ0KCX0NCg0KfQ0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCm5ldyBsdW1pc2VfYWpheCgpOw0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg==","print_file":""}},"extra":{},"updated":1655974935.024,"name":"Personalizar body manga larga","id":"L4QSPXQF","system_version":"1.9.8"},"template":false,"screenshots":"WyJ1c2VyX2RhdGFcLzIwMjJcLzA3XC82MmMyZjNjNzI2ZmIxLmpwZyJd"}