# Name: smd_thumbnail v0.32 # Type: Admin/Public/AJAX plugin # Multiple image thumbnails of arbitrary dimensions # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMjp7czo0OiJuYW1lIjtzOjEzOiJzbWRfdGh1bWJuYWlsIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjMyIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo0OToiTXVsdGlwbGUgaW1hZ2UgdGh1bWJuYWlscyBvZiBhcmJpdHJhcnkgZGltZW5zaW9u cyI7czo0OiJjb2RlIjtzOjY1Mjg3OiIvKioKICogc21kX3RodW1ibmFpbAogKgogKiBBIFRl eHRwYXR0ZXJuIENNUyBwbHVnaW4gZm9yIG1hbmFnaW5nIG11bHRpcGxlIGltYWdlIHRodW1i bmFpbHM6CiAqICAtPiBDcmVhdGUgdW5saW1pdGVkIHRodW1ibmFpbCBwcm9maWxlcyBvZiBk aWZmZXJpbmcgc2l6ZXMgZm9yIHZhcmlvdXMgc2l0ZSB1c2VzCiAqICAtPiBUaHVtYm5haWwg ZmlsZXMgYXJlIGNyZWF0ZWQgaW4geW91ciBpbWFnZSBkaXJlY3RvcnkgLS0gbm8gcmVhbHRp bWUgc2NhbGluZwogKiAgLT4gQmF0Y2ggY3JlYXRlIC8gYWx0ZXIgdGh1bWJuYWlscwogKiAg LT4gQ2hvb3NlIHRvIHN5bmMgdGhlIHRodW1ibmFpbHMgd2l0aCBUZXh0cGF0dGVybidzIG93 biB0aHVtYnMKICoKICogQGF1dGhvciBTdGVmIERhd3NvbgogKiBAbGluayAgIGh0dHA6Ly9z dGVmZGF3c29uLmNvbS8KICogVE9ETzogTWFrZSBTZWxlY3Rpb25zIChsaW5lcyA5MTItOTE2 KSBvcHRpb25hbCB2aWEgcHJlZnMgb3Igc29tZXRoaW5nCiAqIFRPRE86IFNpbXBsaWZ5IEFK QVggcmVzcG9uc2UgcGFja2V0cyB0byBzcGVlZCB0aGluZ3MgdXAKICogVE9ETzogSW50ZXJm YWNlIGVsZW1lbnRzIGZvciBQcm9maWxlIGNyZWF0aW9uIGRvbid0IGdldCByZW5kZXJlZCBp ZiB0aGVyZSBhcmUgbm8gaW1hZ2VzIGluIHBvb2wKICovCmlmICghZGVmaW5lZCgnU01EX1RI VU1CJykpIHsKICAgIGRlZmluZSgiU01EX1RIVU1CIiwgJ3NtZF90aHVtYm5haWwnKTsKfQpp ZiAoIWRlZmluZWQoJ1NNRF9USFVNQl9BQ1RJVkUnKSkgewogICAgZGVmaW5lKCJTTURfVEhV TUJfQUNUSVZFIiwgMSk7Cn0KaWYgKCFkZWZpbmVkKCdTTURfVEhVTUJfQ1JPUCcpKSB7CiAg ICBkZWZpbmUoIlNNRF9USFVNQl9DUk9QIiwgMik7Cn0KaWYgKCFkZWZpbmVkKCdTTURfVEhV TUJfU0hBUlAnKSkgewogICAgZGVmaW5lKCJTTURfVEhVTUJfU0hBUlAiLCA0KTsKfQoKaWYg KHR4cGludGVyZmFjZSA9PT0gJ2FkbWluJykgewogICAgZ2xvYmFsICRzbWRfdGh1bWJfZXZl bnQsICRzbWRfdGh1bWJfcHJldnM7CgogICAgJHNtZF90aHVtYl9ldmVudCA9ICdzbWRfdGh1 bWJuYWlsJzsKICAgICRzbWRfdGh1bWJfcHJpdnMgPSAnMSwyLDMnOyAvLyBQbHVnaW4gcHJp dnMKICAgICRzbWRfdGh1bWJfcHJldnMgPSBhcnJheSgnMScpOyAvLyBQcml2cyBmb3IgcHJl ZnMKCiAgICBhZGRfcHJpdnMoJHNtZF90aHVtYl9ldmVudCwgJHNtZF90aHVtYl9wcml2cyk7 CiAgICBhZGRfcHJpdnMoJ3NtZF90aHVtYl9wcm9maWxlcycsICRzbWRfdGh1bWJfcHJpdnMp OwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl93ZWxjb21lJywgJ3BsdWdpbl9s aWZlY3ljbGUuJy4kc21kX3RodW1iX2V2ZW50KTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfdGh1bWJfcHJvZmlsZXMnLCAnaW1hZ2VfdWknLCAnZXh0ZW5kX2NvbnRyb2xzJyk7CiAg ICByZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1icycsICdpbWFnZV91aScsICd0aHVtYm5h aWwnKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfZWRpdCcsICdpbWFnZV91 aScsICd0aHVtYm5haWxfZWRpdCcpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVt Yl9lbXB0eScsICdpbWFnZV91aScsICd0aHVtYm5haWxfaW1hZ2UnKTsKICAgIHJlZ2lzdGVy X2NhbGxiYWNrKCdzbWRfdGh1bWJfZW1wdHknLCAnaW1hZ2VfdWknLCAndGh1bWJuYWlsX2Ny ZWF0ZScpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9nZW5lcmF0ZScsICdp bWFnZV91cGxvYWRlZCcsICdpbWFnZScpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90 aHVtYl9nZW5lcmF0ZScsICdpbWFnZV91cGxvYWRlZCcsICdtb2RlcmF0ZScpOwogICAgcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9kZWxldGUnLCAnaW1hZ2VfZGVsZXRlZCcsICdp bWFnZScpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9jcmVhdGVfb25lJywg J2ltYWdlJywgJ3NtZF90aHVtYl9jcmVhdGVfb25lJyk7CiAgICByZWdpc3Rlcl9jYWxsYmFj aygnc21kX3RodW1iX3N3aXRjaF9hY3RpdmUnLCAnaW1hZ2UnLCAnc21kX3RodW1iX3N3aXRj aF9hY3RpdmUnKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfc3dpdGNoX3By ZWYnLCAnaW1hZ2UnLCAnc21kX3RodW1iX3N3aXRjaF9wcmVmJyk7CiAgICByZWdpc3Rlcl9j YWxsYmFjaygnc21kX3RodW1iX2luc2VydCcsICdpbWFnZScsICdzbWRfdGh1bWJuYWlsX2lu c2VydCcsIDEpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9pbmplY3RfY3Nz JywgJ2FkbWluX3NpZGUnLCAnaGVhZF9lbmQnKTsKfSBlbHNlaWYgKHR4cGludGVyZmFjZSA9 PT0gJ3B1YmxpYycpIHsKICAgIHNtZF90aHVtYl9zZXRfaW1wYXRoKCk7CiAgICBpZiAoY2xh c3NfZXhpc3RzKCdcVGV4dHBhdHRlcm5cVGFnXFJlZ2lzdHJ5JykpIHsKICAgICAgICBUeHA6 OmdldCgnXFRleHRwYXR0ZXJuXFRhZ1xSZWdpc3RyeScpCiAgICAgICAgICAgIC0+cmVnaXN0 ZXIoJ3NtZF90aHVtYm5haWwnKQogICAgICAgICAgICAtPnJlZ2lzdGVyKCdzbWRfaWZfdGh1 bWJuYWlsJykKICAgICAgICAgICAgLT5yZWdpc3Rlcignc21kX3RodW1ibmFpbF9pbmZvJyk7 CiAgICB9Cn0KCi8qKgogKiBDU1MgZGVmaW5pdGlvbnM6IGhvcGVmdWxseSBraW5kIHRvIHRo ZW1lcnMuCiAqLwpmdW5jdGlvbiBzbWRfdGh1bWJfZ2V0X3N0eWxlX3J1bGVzKCkKewogICAg JHNtZF90aHVtYl9zdHlsZXMgPSBhcnJheSgKICAgICAgICAnc21kX3RodW1iJyA9PicKLnNt ZF9zZWxlY3RlZCB7IGJvcmRlcjoxcHggc29saWQgIzFiM2ViNzsgYmFja2dyb3VuZDojMWIz ZWI3OyB9CiNzbWRfdGh1bWJzIGltZyB7IHBhZGRpbmc6MnB4OyBtYXJnaW46MXB4OyBib3Jk ZXI6MXB4IHNvbGlkIGJsYWNrOyB9Ci5zbWRfaGlkZGVuIHsgZGlzcGxheTpub25lOyB9Ci5z bWRfdGh1bWJfbmV3X3Byb2ZpbGUgeyBkaXNwbGF5OnRhYmxlLXJvdzsgfQojc21kX3RodW1i X3Byb2ZpbGVzIHsgY2xlYXI6Ym90aDsgbWFyZ2luOjAgYXV0byAxZW07IH0KI3NtZF90aHVt Yl9wcm9maWxlcyAudHhwLXN1bW1hcnkgeyB0ZXh0LWFsaWduOmxlZnQ7IH0KI3NtZF90aHVt Yl9iYXRjaCB7IGZsb2F0OnJpZ2h0OyB9Ci5zbWRfaW5hY3RpdmUgeyBvcGFjaXR5Oi4zOyB9 Ci5zbWRfdGh1bWJfaGVhZGluZ19hY3RpdmUgeyBjdXJzb3I6cG9pbnRlcjsgfQojc21kX3Ro dW1iX3Byb2ZpbGVfZm9ybSB0YWJsZSB7IHdpZHRoOjEwMCUgfQouc21kX3RodW1iX3N3aXRj aGVyIHsgZmxvYXQ6cmlnaHQ7IH0KLnByZWYtbGFiZWwgeyB0ZXh0LWFsaWduOiByaWdodCFp bXBvcnRhbnQ7IH0KI3NtZF90aHVtYl9wcm9maWxlX2Zvcm0gdGggeyBkaXNwbGF5Om5vbmU7 IH0KI3NtZF90aHVtYl9wcm9maWxlX2Zvcm0gdGQgeyBkaXNwbGF5OmJsb2NrOyB9CiNzbWRf dGh1bWJfcHJvZmlsZV9mb3JtIHRkOmZpcnN0LWNoaWxkIHsgcGFkZGluZy10b3A6MC41ZW0g fQojc21kX3RodW1iX3Byb2ZpbGVfZm9ybSB0ZDpsYXN0LWNoaWxkIHsgcGFkZGluZy1ib3R0 b206MC41ZW0gfQojc21kX3RodW1iX3Byb2ZpbGVfZm9ybSB0ZDpiZWZvcmUgeyBjb250ZW50 OiBhdHRyKGRhdGEtdGgpICI6ICI7IGZvbnQtd2VpZ2h0OmJvbGQ7IHdpZHRoOjYuNWVtOyBk aXNwbGF5OmlubGluZS1ibG9jazsgfQojc21kX3RodW1iX3Byb2ZpbGVfZm9ybSB0ciB7IGJv cmRlci10b3A6MXB4IHNvbGlkICNjY2M7IH0KI3NtZF90aHVtYl9wcm9maWxlX2Zvcm0gdGgs ICNzbWRfdGh1bWJfcHJvZmlsZV9mb3JtIHRkIHsgbWFyZ2luOjAuM2VtIDAuN2VtOyB9CkBt ZWRpYSAobWluLXdpZHRoOjQ4MHB4KSB7CiAgI3NtZF90aHVtYl9wcm9maWxlX2Zvcm0gdGQ6 YmVmb3JlIHsgZGlzcGxheTpub25lOyB9CiAgI3NtZF90aHVtYl9wcm9maWxlX2Zvcm0gdGgs ICNzbWRfdGh1bWJfcHJvZmlsZV9mb3JtIHRkIHsgZGlzcGxheTp0YWJsZS1jZWxsOyBwYWRk aW5nOi4xZW0gLjFlbTsgdmVydGljYWwtYWxpZ246YmFzZWxpbmUgfQogICNzbWRfdGh1bWJf cHJvZmlsZV9mb3JtIHRoOmZpcnN0LWNoaWxkLCAjc21kX3RodW1iX3Byb2ZpbGVfZm9ybSB0 ZDpmaXJzdC1jaGlsZCB7IHBhZGRpbmctbGVmdDogMDsgfQogICNzbWRfdGh1bWJfcHJvZmls ZV9mb3JtIHRoOmxhc3QtY2hpbGQsICNzbWRfdGh1bWJfcHJvZmlsZV9mb3JtIHRkOmxhc3Qt Y2hpbGQgeyBwYWRkaW5nLXJpZ2h0OiAwOyB9Cn0KJwopOwoKICAgIHJldHVybiAkc21kX3Ro dW1iX3N0eWxlczsKfQoKLyoqCiAqIEluamVjdCB0aGUgc3R5bGVzaGVldCBydWxlcyBpbnRv IHRoZSBtYXRjaGluZyBwYW5lbC4KICoKICogQHBhcmFtICBzdHJpbmcgJGV2dCBUZXh0cGF0 dGVybiBldmVudCAocGFuZWwpCiAqIEBwYXJhbSAgc3RyaW5nICRzdHAgVGV4dHBhdHRlcm4g c3RlcCAoYWN0aW9uKQogKi8KZnVuY3Rpb24gc21kX3RodW1iX2luamVjdF9jc3MoJGV2dCwg JHN0cCkKewogICAgZ2xvYmFsICRldmVudDsKCiAgICBpZiAoJGV2ZW50ID09PSAnaW1hZ2Un KSB7CiAgICAgICAgJHNtZF90aHVtYl9zdHlsZXMgPSBzbWRfdGh1bWJfZ2V0X3N0eWxlX3J1 bGVzKCk7CiAgICAgICAgZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLCAkc21kX3Ro dW1iX3N0eWxlc1snc21kX3RodW1iJ10sICc8L3N0eWxlPic7CiAgICB9CgogICAgcmV0dXJu Owp9CgovKioKICogS2lja3N0YXJ0IHRoZSBwbHVnaW4gYWZ0ZXIgaW5zdGFsbGF0aW9uIC8g YWN0aXZhdGlvbiAvIGRlbGV0aW9uLgogKgogKiBAcGFyYW0gIHN0cmluZyAkZXZ0IFRleHRw YXR0ZXJuIGV2ZW50IChwYW5lbCkKICogQHBhcmFtICBzdHJpbmcgJHN0cCBUZXh0cGF0dGVy biBzdGVwIChhY3Rpb24pCiAqLwpmdW5jdGlvbiBzbWRfdGh1bWJfd2VsY29tZSgkZXZ0LCAk c3RwKQp7CiAgICBzd2l0Y2ggKCRzdHApIHsKICAgICAgICBjYXNlICdpbnN0YWxsZWQnOgog ICAgICAgICAgICBzbWRfdGh1bWJfdGFibGVfaW5zdGFsbCgpOwogICAgICAgICAgICAvLyBS ZW1vdmUgcGVyLXVzZXIgcHJlZnMgb24gdXBncmFkZSBmcm9tIHYwLjF4IHRvIHYwLjIwLgog ICAgICAgICAgICBzYWZlX2RlbGV0ZSAoJ3R4cF9wcmVmcycsICJuYW1lIElOICgnc21kX3Ro dW1iX3R4cF9jcmVhdGUnLCAnc21kX3RodW1iX3R4cF9kZWxldGUnLCAnc21kX3RodW1iX2F1 dG9fcmVwbGFjZScpIEFORCB1c2VyX25hbWUgIT0gJyciKTsKICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgY2FzZSAnZGVsZXRlZCc6CiAgICAgICAgICAgIHNtZF90aHVtYl90YWJsZV9y ZW1vdmUoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuOwp9CgovKioK ICogRGlzcGxheSB0aGUgZGVzaWduYXRlZCBkZWZhdWx0IHRodW1ibmFpbCBvbiB0aGUgbGlz dCBwYWdlLgogKi8KZnVuY3Rpb24gc21kX3RodW1icygkZXZ0LCAkc3RwLCAkZGZsdCwgJGN1 cnJpbWcpCnsKICAgIGV4dHJhY3QoZ3BzYShhcnJheSgncGFnZScsICdzb3J0JywgJ2Rpcics ICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkpOwoKICAgICRzZWFyY2hfbWV0aG9kID0gKGlz X2FycmF5KCRzZWFyY2hfbWV0aG9kKSkgPyBpbXBsb2RlKCcsJywgJHNlYXJjaF9tZXRob2Qp IDogJHNlYXJjaF9tZXRob2Q7CgogICAgaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7 CiAgICAgICAgJGRlZmF1bHQgPSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmls ZScsICcnLCAxKTsKCiAgICAgICAgaWYgKCRkZWZhdWx0KSB7CiAgICAgICAgICAgICRyb3cg PSBzYWZlX3JvdygnKicsIFNNRF9USFVNQiwgIm5hbWU9JyIuc2FuaXRpemVGb3JVcmwoJGRl ZmF1bHQpLiInIik7CgogICAgICAgICAgICBpZiAoJHJvdykgewogICAgICAgICAgICAgICAg JGVkaXRfdXJsID0gJz9ldmVudD1pbWFnZScuYS4nc3RlcD1pbWFnZV9lZGl0Jy5hLidpZD0n LiRjdXJyaW1nWydpZCddLmEuJ3NvcnQ9Jy4kc29ydC4KICAgICAgICAgICAgICAgICAgICAg ICAgYS4nZGlyPScuJGRpci5hLidwYWdlPScuJHBhZ2UuYS4nc2VhcmNoX21ldGhvZFtdPScu JHNlYXJjaF9tZXRob2QuYS4nY3JpdD0nLiRjcml0OwogICAgICAgICAgICAgICAgJG91dCA9 IHNtZF90aHVtYl9pbWcoJHJvdywgJGN1cnJpbWcsIGFycmF5KCdjbGFzcycgPT4gJ2NvbnRl bnQtaW1hZ2UgJy4kZGVmYXVsdCkpOwoKICAgICAgICAgICAgICAgIHJldHVybiAoJG91dCkg PyBocmVmKCRvdXQsICRlZGl0X3VybCkgOiBnVHh0KCdubycpOwogICAgICAgICAgICB9IGVs c2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGdUeHQoJ25vJyk7CiAgICAgICAgICAgIH0K ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZ1R4dCgnbm8nKTsKICAgICAg ICB9CiAgICB9Cn0KCi8qKgogKiBEb24ndCB3YW50IHRoZSAnY3JlYXRlJyBjb250cm9scyBv ciB0aHVtYm5haWwgaW1hZ2UgYXMgdGhleSdyZSBib3RoIGhhbmRsZWQgaW4gdGhlIGVkaXQg cG9ydGlvbiBvZiB0aGUgc2NyZWVuLgogKi8KZnVuY3Rpb24gc21kX3RodW1iX2VtcHR5KCRl dnQsICRzdHAsICRkZmx0LCAkY3VycmltZykKewogICAgcmV0dXJuICcgJzsKfQoKLyoqCiAq IENyZWF0ZSBhIGJ1bmNoIG9mIHRodW1ibmFpbHMgZW4gbWFzc2UuCiAqCiAqIFdpdGggYSBs b3Qgb2YgaW1hZ2VzIGluIHRoZSBkYXRhYmFzZSwgZG9pbmcgaXQgYWxsIGluIG9uZSBoaXQg d291bGQgdGltZSBvdXQuCiAqIFRodXMgaXQncyBkb25lIHZpYSBhamF4OyBvbmUgcmVxdWVz dCBwZXIgaW1hZ2UuCiAqCiAqIEBwYXJhbSAgc3RyaW5nICR0eXBlIEZsYXZvdXIgb2YgdGh1 bWJuYWlsIGNyZWF0aW9uOiBieSAodXNyKSwgYnkgKGNhdCksIGJ5IChzZWwpZWN0aW9uLCBv ciAoYWxsKQogKiBAcGFyYW0gIHN0cmluZyAkbHN0ICBMaXN0IG9mIGltYWdlcyB0byBvcGVy YXRlIHVwb24KICogQHJldHVybiBbdHlwZV0gICAgICAgW2Rlc2NyaXB0aW9uXQogKi8KZnVu Y3Rpb24gc21kX3RodW1iX2NyZWF0ZV9ncm91cCgkdHlwZSwgJGxzdCA9ICcnKQp7CiAgICBz d2l0Y2ggKCR0eXBlKSB7CiAgICAgICAgY2FzZSAnYWxsJzoKICAgICAgICAgICAgJHdoZXJl ID0gJzE9MSc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3NlbCc6CiAgICAg ICAgICAgICR3aGVyZSA9ICgkbHN0KSA/ICdpZCBJTiAoJy5kb1NsYXNoKCRsc3QpLicpJyA6 ICcxPTAnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdjYXQnOgogICAgICAg ICAgICAkd2hlcmUgPSAiY2F0ZWdvcnkgaW4gKCciLmRvU2xhc2goJGxzdCkuIicpIjsKICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndXNyJzoKICAgICAgICAgICAgJHdoZXJl ID0gImF1dGhvciBpbiAoJyIuZG9TbGFzaCgkbHN0KS4iJykiOwogICAgICAgICAgICBicmVh azsKICAgIH0KCiAgICAkaW1hZ2VzID0gc2FmZV9jb2x1bW4oJ2lkJywgJ3R4cF9pbWFnZScs ICR3aGVyZSk7CiAgICAkY291bnQgPSBjb3VudCgkaW1hZ2VzKTsKCiAgICBlY2hvIDw8PEVP SlMKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp2YXIgYmN0ciA9IDA7IHZhciBi dG90ID0geyRjb3VudH07CmpRdWVyeShmdW5jdGlvbigpIHsKICAgIGpRdWVyeSgiI3NtZF90 aHVtYl9idG90IikudGV4dCgiLycuJGNvdW50LiciKTsKRU9KUzsKCiAgICBmb3JlYWNoICgk aW1hZ2VzIGFzICRpbWcpIHsKICAgICAgICBlY2hvIDw8PEVPSlMKICAgIHNlbmRBc3luY0V2 ZW50KAogICAgewogICAgICAgIGV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwKICAgICAgICBz dGVwOiAnc21kX3RodW1iX2NyZWF0ZV9vbmUnLAogICAgICAgIHNtZF90aHVtYl9pbWdpZDog eyRpbWd9CiAgICB9LCBzbWRfY3JlYXRlX2dyb3VwX2ZlZWRiYWNrKTsKRU9KUzsKICAgIH0K ICAgIGVjaG8gJ30pOyc7CiAgICBlY2hvIDw8PEVPSlMKZnVuY3Rpb24gc21kX2NyZWF0ZV9n cm91cF9mZWVkYmFjaygpIHsKICAgIGJjdHIrKzsKICAgIGpRdWVyeSgnI3NtZF90aHVtYl9i Y3VycicpLnRleHQoYmN0cik7Cn0KRU9KUzsKICAgIGVjaG8gJzwvc2NyaXB0Pic7Cn0KCi8q KgogKiBBSkFYIG1ldGhvZCB0byBjcmVhdGUgb25lIHRodW1ibmFpbCBmb3IgZWFjaCBhY3Rp dmUgcHJvZmlsZSwgZnJvbSB0aGUgcGFzc2VkIGlkLgogKi8KZnVuY3Rpb24gc21kX3RodW1i X2NyZWF0ZV9vbmUoKQp7CiAgICAkY3VycmltZyA9IGdwcygnc21kX3RodW1iX2ltZ2lkJyk7 CiAgICBhc3NlcnRfaW50KCRjdXJyaW1nKTsKCiAgICAkcnMgPSBzYWZlX3Jvd3MoJyonLCBT TURfVEhVTUIsICcxPTEgQU5EIGZsYWdzICYgJyAuIFNNRF9USFVNQl9BQ1RJVkUpOwogICAg JGN1cnIgPSBzYWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAiaWQ9IiAuIGRvU2xhc2goJGN1 cnJpbWcpKTsKCiAgICBpZiAoJHJzKSB7CiAgICAgICAgc21kX3RodW1iX21ha2UoJHJzLCAk Y3VyciwgMSk7CiAgICAgICAgc2VuZF94bWxfcmVzcG9uc2UoKTsKICAgIH0KfQoKLyoqCiAq IEFKQVggbWV0aG9kIHRvIHNldCB0aGUgYWN0aXZlIHRodW1ibmFpbCBwcm9maWxlLgogKgog KiBSZXF1aXJlcyBHRVQvUE9TVCBwYXJhbXM6CiAqICAtPiBzbWRfdGh1bWJfcHJvZmlsZSBU TmFtZSBvZiB0aGUgcHJvZmlsZSB0byBzZXQgYXMgYWN0aXZlCiAqLwpmdW5jdGlvbiBzbWRf dGh1bWJfc3dpdGNoX2FjdGl2ZSgpCnsKICAgICRuYW1lID0gZG9TbGFzaChncHMoJ3NtZF90 aHVtYl9wcm9maWxlJykpOwoKICAgIGlmICgkbmFtZSkgewogICAgICAgIHNhZmVfdXBkYXRl KFNNRF9USFVNQiwgJ2ZsYWdzID0gZmxhZ3MgXiAnIC4gU01EX1RIVU1CX0FDVElWRSwgIm5h bWU9JyRuYW1lJyIpOwogICAgICAgIHNlbmRfeG1sX3Jlc3BvbnNlKGFycmF5KCdzbWRfdGh1 bWJfcHJvZmlsZScgPT4gJG5hbWUpKTsKICAgIH0KfQoKLyoqCiAqIEFKQVggbWV0aG9kIHRv IHRvZ2dsZSB0aGUgZ2l2ZW4gcHJlZmVyZW5jZSBuYW1lIHRvIHRoZSBnaXZlbiBzdGF0ZS4K ICoKICogUmVxdWlyZXMgR0VUL1BPU1QgcGFyYW1zOgogKiAgLT4gc21kX3RodW1iX3R4cHR5 cGUgUHJlZmVyZW5jZSBuYW1lICh3aXRob3V0IHBsdWdpbiBwcmVmaXgpCiAqICAtPiBzbWRf dGh1bWJfc3RhdGUgICBQcmVmZXJlbmNlIHZhbHVlIHRvIHN0b3JlCiAqLwpmdW5jdGlvbiBz bWRfdGh1bWJfc3dpdGNoX3ByZWYoKQp7CiAgICAkbmFtZSA9IGRvU2xhc2goZ3BzKCdzbWRf dGh1bWJfdHhwdHlwZScpKTsKICAgICRzdGF0ZSA9IGRvU2xhc2goZ3BzKCdzbWRfdGh1bWJf c3RhdGUnKSk7CgogICAgaWYgKCRuYW1lKSB7CiAgICAgICAgc2V0X3ByZWYoJ3NtZF90aHVt Yl8nLiRuYW1lLCAkc3RhdGUsICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5w dXQnKTsKICAgICAgICBzZW5kX3htbF9yZXNwb25zZSgpOwogICAgfQp9CgovKioKICogV3Jh cHBlciB0byBjcmVhdGUgdGh1bWJuYWlsIGZvciBhY3RpdmUgcHJvZmlsZXMgZnJvbSB1cGxv YWRlZCBpbWFnZS4KICoKICogQHBhcmFtICBzdHJpbmcgJGV2dCBUZXh0cGF0dGVybiBldmVu dCAocGFuZWwpCiAqIEBwYXJhbSAgc3RyaW5nICRzdHAgVGV4dHBhdHRlcm4gc3RlcCAoYWN0 aW9uKQogKiBAcGFyYW0gIHN0cmluZyAkaWQgIE5ldyBpbWFnZSBpZGVudGlmaWVyLiBJZiBv bWl0dGVkLCB3aWxsIHRyeSBHRVQvUE9TVCwgdGhlbiBUeHAncyBHTE9CQUxTWydJRCddCiAq LwpmdW5jdGlvbiBzbWRfdGh1bWJfZ2VuZXJhdGUoJGV2dCwgJHN0cCwgJGlkPScnKQp7CiAg ICAkaWQgPSAoJGlkKSA/ICRpZCA6IGdwcygnaWQnKTsKICAgICRpZCA9ICgkaWQpID8gJGlk IDogJEdMT0JBTFNbJ0lEJ107CiAgICAkcnMgPSBzYWZlX3Jvd3MoJyonLCBTTURfVEhVTUIs ICcxPTEgQU5EIGZsYWdzICYgJyAuIFNNRF9USFVNQl9BQ1RJVkUpOwoKICAgIHNtZF90aHVt Yl9tYWtlKCRycywgJGlkKTsKfQoKLyoqCiAqIFdyYXBwZXIgdG8gZGVsZXRlIGEgYnVuY2gg b2Ygc2VsZWN0ZWQgdGh1bWJuYWlscy4KICoKICogVXNlcyBHRVQvUE9TVCBwYXJhbWV0ZXJz OgogKiAgLT4gc2VsZWN0ZWQgQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2VsZWN0ZWQgaW1h Z2UgaWRlbnRpZmllcnMKICoKICogQHBhcmFtICBzdHJpbmcgJGV2dCBUZXh0cGF0dGVybiBl dmVudCAocGFuZWwpCiAqIEBwYXJhbSAgc3RyaW5nICRzdHAgVGV4dHBhdHRlcm4gc3RlcCAo YWN0aW9uKQogKi8KZnVuY3Rpb24gc21kX3RodW1iX2RlbGV0ZSgkZXZ0LCAkc3RwKQp7CiAg ICAkaWRzID0gZ3BzKCdzZWxlY3RlZCcpOwogICAgJHJzID0gc2FmZV9yb3dzKCcqJywgU01E X1RIVU1CLCAnMT0xJyk7CgogICAgJGltYWdlcyA9IHNhZmVfcm93cygnKicsICd0eHBfaW1h Z2UnLCAnaWQgSU4gKCcgLiBqb2luKCcsJyxxdW90ZV9saXN0KCRpZHMpKSAuICcpJyk7Cgog ICAgZm9yZWFjaCAoJGltYWdlcyBhcyAkaW1nKSB7CiAgICAgICAgc21kX3RodW1iX3VubWFr ZSgkcnMsICRpbWcpOwogICAgfQp9CgovKioKICogQ3JlYXRlIGEgdGh1bWJuYWlsLgogKgog KiBAcGFyYW0gIGFycmF5ICAkcnMgICAgICAgUmVjb3JkIHNldCBjb250YWluaW5nIGltYWdl IG1ldGEgZGF0YQogKiBAcGFyYW0gIGludCAgICAkY3VycmltZyAgSWRlbnRpZmllciBmb3Ig dGhlIGN1cnJlbnQgaW1hZ2UgYmVpbmcgb3BlcmF0ZWQgdXBvbgogKiBAcGFyYW0gIGJvb2wg ICAkZm9yY2UgICAgV2hldGhlciB0byBhbHdheXMgY3JlYXRlIHRoZSB0aHVtYm5haWwsIGV2 ZW4gaWYgaXQgZXhpc3RzCiAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBGZWVkYmFjayBt ZXNzYWdlwqcKICovCmZ1bmN0aW9uIHNtZF90aHVtYl9tYWtlKCRycywgJGN1cnJpbWcsICRm b3JjZSA9IDApCnsKICAgIC8vIFdyYXBwZXIgZm9yIHdldF90aHVtYiB0byBhbGxvdyBtdWx0 aXBsZSB0aHVtYm5haWxzLgogICAgJG1zZyA9ICcnOwogICAgc21kX3RodW1iX3NldF9pbXBh dGgoKTsKCiAgICBpZiAoIWNsYXNzX2V4aXN0cygnc21kX3RodW1iJykpIHsKICAgICAgICBj bGFzcyBzbWRfdGh1bWIgZXh0ZW5kcyB3ZXRfdGh1bWIKICAgICAgICB7CiAgICAgICAgICAg IHZhciAkbV9leHQ7CiAgICAgICAgICAgIHZhciAkbV9pZDsKICAgICAgICAgICAgdmFyICRt X2RpcjsKICAgICAgICAgICAgdmFyICRtX2RmbHQ7CiAgICAgICAgICAgIHZhciAkd2lkdGg7 CiAgICAgICAgICAgIHZhciAkaGVpZ2h0OwogICAgICAgICAgICB2YXIgJGZvcmNlOwoKICAg ICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENvbnN0cnVjdG9yLgogICAgICAgICAgICAg KgogICAgICAgICAgICAgKiBAcGFyYW0gaW50ICAgICAkaWQgICAgICAgICBVbmlxdWUgaW1h Z2UgaWRlbnRpZmllcgogICAgICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICAkZGlyICAgICAg ICBTdWJkaXJlY3RvcnkgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIGltYWdlCiAgICAgICAgICAg ICAqIEBwYXJhbSBhcnJheSAgICRpbWdfcm93ICAgIEltYWdlIG1ldGEgZGF0YSB0byBzdG9y ZQogICAgICAgICAgICAgKiBAcGFyYW0gYm9vbGVhbiAkaXNfZGVmYXVsdCBXaGV0aGVyIHRo ZSB0aHVtYm5haWwgaXMgdG8gYmVjb21lIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAqIEBw YXJhbSBzdHJpbmcgICRwcm9fdyAgICAgIFRodW1ibmFpbCB3aWR0aAogICAgICAgICAgICAg KiBAcGFyYW0gc3RyaW5nICAkcHJvX2ggICAgICBUaHVtYm5haWwgaGVpZ2h0CiAgICAgICAg ICAgICAqIEBwYXJhbSBib29sZWFuICRmb3JjZSAgICAgIFdoZXRoZXIgdG8gb3ZlcndyaXRl IGFueSBwcmV2aW91cyB0aHVtYm5haWwKICAgICAgICAgICAgICovCiAgICAgICAgICAgIHB1 YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCAoJGlkLCAkZGlyLCAkaW1nX3JvdywgJGlzX2Rl ZmF1bHQgPSBmYWxzZSwgJHByb193ID0gJycsICRwcm9faCA9ICcnLCAkZm9yY2UgPSAwKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkaWQgPSBhc3NlcnRfaW50KCRpZCk7Cgog ICAgICAgICAgICAgICAgaWYgKCRpbWdfcm93KSB7CiAgICAgICAgICAgICAgICAgICAgZXh0 cmFjdCgkaW1nX3Jvdyk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1faWQgPSAkaWQ7 CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1fZXh0ID0gJGV4dDsKICAgICAgICAgICAg ICAgICAgICAkdGhpcy0+bV9kaXIgPSAkZGlyOwogICAgICAgICAgICAgICAgICAgICR0aGlz LT5mb3JjZSA9ICRmb3JjZTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+d2lkdGggPSAk cHJvX3c7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmhlaWdodCA9ICRwcm9faDsKICAg ICAgICAgICAgICAgICAgICAkdGhpcy0+bV9kZmx0ID0gJGlzX2RlZmF1bHQ7CiAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogICAg ICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogU3RvcmUgdGhlIHRo dW1ibmFpbCBpbWFnZSBvbiBkaXNrLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBA cmV0dXJuIGJvb2wKICAgICAgICAgICAgICovCiAgICAgICAgICAgIHB1YmxpYyBmdW5jdGlv biB3cml0ZV9pbWFnZSgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICghaXNz ZXQoJHRoaXMtPm1fZXh0KSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkYXV0b3IgPSBnZXRfcHJlZign c21kX3RodW1iX2F1dG9fcmVwbGFjZScsICcwJyk7CiAgICAgICAgICAgICAgICAkcmVjZnJv bSA9IGdldF9wcmVmKCdzbWRfdGh1bWJfY3JlYXRlX2Zyb20nLCAnZnVsbCcpOwogICAgICAg ICAgICAgICAgJHNyY19zeiA9ICgkcmVjZnJvbSA9PT0gJ2Z1bGwnKSA/ICcnIDogJ3QnOwog ICAgICAgICAgICAgICAgJGluZmlsZSA9IElNUEFUSCAuICR0aGlzLT5tX2lkIC4gJHNyY19z eiAuICR0aGlzLT5tX2V4dDsKICAgICAgICAgICAgICAgICRvdXRmaWxlID0gSU1QQVRIIC4g JHRoaXMtPm1fZGlyIC4gRFMgLiAkdGhpcy0+bV9pZCAuICR0aGlzLT5tX2V4dDsKCiAgICAg ICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRvdXRmaWxlKSB8fCAkYXV0b3IgfHwgJHRo aXMtPmZvcmNlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZGVm YXVsdCBwcm9maWxlIGFuZCB0aGUgcHJlZiBpbmRpY2F0ZXMsIHdyaXRlIGEgVHhwIHRodW1i IHRvby4KICAgICAgICAgICAgICAgICAgICBpZiAoKCR0aGlzLT5tX2RmbHQgPT09IHRydWUp ICYmIChnZXRfcHJlZignc21kX3RodW1iX3R4cF9jcmVhdGUnLCAnMCcpKSkgewogICAgICAg ICAgICAgICAgICAgICAgICAkdHhwX3RodW1iID0gSU1QQVRIIC4gJHRoaXMtPm1faWQgLiAn dCcgLiAkdGhpcy0+bV9leHQ7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50 Ojp3cml0ZSgkaW5maWxlLCAkdHhwX3RodW1iKSkgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2FmZV91cGRhdGUoJ3R4cF9pbWFnZScsICJ0aHVtYm5haWwgPSAxLCB0aHVtYl93 ID0gJHRoaXMtPndpZHRoLCB0aHVtYl9oID0gJHRoaXMtPmhlaWdodCIsICdpZCA9ICcgLiAk dGhpcy0+bV9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2htb2QoJG91dGZp bGUsIDA2NDQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Ojp3cml0ZSAoJGluZmlsZSwg JG91dGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEBjaG1vZCgkb3V0ZmlsZSwg MDY0NCk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIElmIHBhc3Nl ZCBvbmx5IGFuIElELCBsb29rIHVwIHRoZSByZXN0IG9mIHRoZSBpbWFnZSBkYXRhLgogICAg aWYgKCFpc19hcnJheSgkY3VycmltZykpIHsKICAgICAgICBhc3NlcnRfaW50KCRjdXJyaW1n KTsKICAgICAgICAkY3VycmltZyA9IHNhZmVfcm93KCcqJywgJ3R4cF9pbWFnZScsICdpZD0n IC4gJGN1cnJpbWcpOwogICAgfQoKICAgIC8vIENyZWF0ZSBlYWNoIHRodW1ibmFpbC4KICAg ICRwcm9fZGZsdCA9IGdldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJycp OwoKICAgIGZvcmVhY2ggKCRycyBhcyAkcm93KSB7CiAgICAgICAgLy8gU2FuaXRpemUgYSBs aXR0bGUuCiAgICAgICAgJHdpZHRoID0gKGludCkgJHJvd1snd2lkdGgnXTsKICAgICAgICAk aGVpZ2h0ID0gKGludCkgJHJvd1snaGVpZ2h0J107CgogICAgICAgIGlmICgkd2lkdGggPT09 IDApIHsKICAgICAgICAgICAgJHdpZHRoID0gJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAo JGhlaWdodCA9PT0gMCkgewogICAgICAgICAgICAkaGVpZ2h0ID0gJyc7CiAgICAgICAgfQoK ICAgICAgICBpZiAoJHdpZHRoID09PSAnJyAmJiAkaGVpZ2h0ID09PSAnJykgewogICAgICAg ICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgICRjcm9wID0gKCRyb3dbJ2ZsYWdz J10gJiBTTURfVEhVTUJfQ1JPUCkgPyAxIDogMDsKICAgICAgICAkc2hhcnBlbiA9ICgkcm93 WydmbGFncyddICYgU01EX1RIVU1CX1NIQVJQKSA/IDEgOiAwOwogICAgICAgICRpZCA9ICRj dXJyaW1nWydpZCddOwogICAgICAgICRpc19kZmx0ID0gKCRyb3dbJ25hbWUnXSA9PT0gJHBy b19kZmx0KSA/IHRydWUgOiBmYWxzZTsKCiAgICAgICAgJHQgPSBuZXcgc21kX3RodW1iKCRp ZCwgc2FuaXRpemVGb3JVcmwoJHJvd1snbmFtZSddKSwgJGN1cnJpbWcsICRpc19kZmx0LCAk d2lkdGgsICRoZWlnaHQsICRmb3JjZSk7CiAgICAgICAgJHQtPmV4dHJhcG9sYXRlID0gdHJ1 ZTsgLy8gQWxsb3cgYmlnZ2VyIHRodW1icyB0aGFuIG9yaWdpbmFsIGltYWdlLgogICAgICAg ICR0LT5jcm9wID0gKCRjcm9wID09PSAxKTsKICAgICAgICAkdC0+c2hhcnBlbiA9ICgkc2hh cnBlbiA9PT0gMSk7CiAgICAgICAgJHQtPmhpbnQgPSAnMCc7CiAgICAgICAgJHQtPndpZHRo ID0gJHdpZHRoOwogICAgICAgICR0LT5oZWlnaHQgPSAkaGVpZ2h0OwogICAgICAgICR0LT5x dWFsaXR5ID0gJHJvd1sncXVhbGl0eSddOwoKICAgICAgICBpZiAoJHQtPndyaXRlX2ltYWdl KCkpIHsKICAgICAgICAgICAgJG1zZyA9IGdUeHQoJ3RodW1ibmFpbF9zYXZlZCcsIGFycmF5 KCd7aWR9JyA9PiAkaWQpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbXNnID0g YXJyYXkoZ1R4dCgndGh1bWJuYWlsX25vdF9zYXZlZCcsIGFycmF5KCd7aWR9JyA9PiAkaWQp KSwgRV9FUlJPUik7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkbXNnOwp9CgovKioK ICogRGVsZXRlIHRoZSBwYXNzZWQgc2V0IG9mIHRodW1ibmFpbHMuCiAqCiAqIEBwYXJhbSAg YXJyYXkgICRycyAgICAgIFNlcnQgb2YgaW1hZ2UgaWRlbnRpZmllcnMgdG8gZGVsZXRlCiAq IEBwYXJhbSAgaW50ICAgICRjdXJyaW1nIEN1cnJlbnQgaW1hZ2UgYmVpbmcgb3BlcmF0ZWQg dXBvbgogKi8KZnVuY3Rpb24gc21kX3RodW1iX3VubWFrZSgkcnMsICRjdXJyaW1nKQp7CiAg ICAkaWQgPSAkY3VycmltZ1snaWQnXTsKICAgICRleHQgPSAkY3VycmltZ1snZXh0J107CiAg ICAkcHJvX2RmbHQgPSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcn KTsKICAgICR0eHBfZGVsID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl90eHBfZGVsZXRlJywgJzAn KTsKICAgIHNtZF90aHVtYl9zZXRfaW1wYXRoKCk7CgogICAgZm9yZWFjaCAoJHJzIGFzICRy b3cpIHsKICAgICAgICAkcGF0aCA9IElNUEFUSCAuIHNhbml0aXplRm9yVXJsKCRyb3dbJ25h bWUnXSkgLiBEUyAuICRpZCAuICRleHQ7CgogICAgICAgIGlmIChmaWxlX2V4aXN0cygkcGF0 aCkpIHsKICAgICAgICAgICAgdW5saW5rKCRwYXRoKTsKICAgICAgICB9CgogICAgICAgIC8v IEFsc28gcmVtb3ZlIFR4cCdzIGJ1aWx0LWluIHRodW1iPwogICAgICAgIGlmICgoJHJvd1sn bmFtZSddID09PSAkcHJvX2RmbHQpICYmICgkdHhwX2RlbCA9PSAnMScpKSB7CiAgICAgICAg ICAgICRwYXRoID0gSU1QQVRIIC4gJGlkIC4gJ3QnIC4gJGV4dDsKCiAgICAgICAgICAgIGlm IChmaWxlX2V4aXN0cygkcGF0aCkpIHsKICAgICAgICAgICAgICAgIHNhZmVfdXBkYXRlKCd0 eHBfaW1hZ2UnLCAidGh1bWJuYWlsID0gMCwgdGh1bWJfdyA9IDAsIHRodW1iX2ggPSAwIiwg J2lkID0gJyAuICRpZCk7CiAgICAgICAgICAgICAgICB1bmxpbmsoJHBhdGgpOwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAnJzsKfQoKLyoqCiAqIEluc2Vy dCBhIHRodW1ibmFpbCB3aGVuIGEgbmV3IGZpbGUgaXMgdXBsb2FkZWQKICovCmZ1bmN0aW9u IHNtZF90aHVtYl9pbnNlcnQoKQp7CiAgICBnbG9iYWwgJHR4cGNmZywgJHR4cF91c2VyLCAk cGFnZSwgJHNvcnQsICRkaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZDsKCiAgICBzbWRfdGh1 bWJfc2V0X2ltcGF0aCgpOwogICAgZXh0cmFjdChncHNhKGFycmF5KCdwYWdlJywgJ3NvcnQn LCAnZGlyJywgJ2NyaXQnLCAnc2VhcmNoX21ldGhvZCcpKSk7CgogICAgJHNlYXJjaF9tZXRo b2QgPSAoaXNfYXJyYXkoJHNlYXJjaF9tZXRob2QpKSA/IGltcGxvZGUoJywnLCAkc2VhcmNo X21ldGhvZCkgOiAkc2VhcmNoX21ldGhvZDsKCiAgICBpbmNsdWRlX29uY2UgdHhwYXRoLicv bGliL3R4cGxpYl9taXNjLnBocCc7CgogICAgZXh0cmFjdCgkdHhwY2ZnKTsKICAgICRpZCA9 IGFzc2VydF9pbnQoZ3BzKCdpZCcpKTsKICAgICRwcm9maWxlID0gZ3BzKCdzbWRfdGh1bWJf cHJvZmlsZScpOwogICAgJHRodW1iX2V4dCA9IGdwcygnc21kX3RodW1iX2V4dCcpOwoKICAg ICRhdXRob3IgPSBmZXRjaCgnYXV0aG9yJywgJ3R4cF9pbWFnZScsICdpZCcsICRpZCk7Cgog ICAgaWYgKCFoYXNfcHJpdnMoJ2ltYWdlLmVkaXQnKSAmJiAhKCRhdXRob3IgPT0gJHR4cF91 c2VyICYmIGhhc19wcml2cygnaW1hZ2UuZWRpdC5vd24nKSkpIHsKICAgICAgICByZXR1cm47 CiAgICB9CgogICAgJGZpbGUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ107CiAg ICAkbmFtZSA9ICRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddOwoKICAgICRmaWxlID0gZ2V0 X3VwbG9hZGVkX2ZpbGUoJGZpbGUpOwoKICAgIGlmIChlbXB0eSgkZmlsZSkpIHsKICAgICAg ICByZXR1cm47CiAgICB9CgogICAgbGlzdCgkdywgJGgsICRleHRlbnNpb24pID0gZ2V0aW1h Z2VzaXplKCRmaWxlKTsKCiAgICAkdmFsaWRfZXh0cyA9IGFycmF5KAogICAgICAgIElNQUdF VFlQRV9HSUYgID0+ICcuZ2lmJywKICAgICAgICBJTUFHRVRZUEVfSlBFRyA9PiAnLmpwZycs CiAgICAgICAgSU1BR0VUWVBFX1BORyAgPT4gJy5wbmcnLAogICAgICAgIElNQUdFVFlQRV9T V0YgID0+ICcuc3dmJywKICAgICk7CgogICAgJGV4dCA9IGlzc2V0KCR2YWxpZF9leHRzWyRl eHRlbnNpb25dKSA/ICR2YWxpZF9leHRzWyRleHRlbnNpb25dIDogJyc7CgogICAgaWYgKCgk ZmlsZSAhPT0gZmFsc2UpICYmICRwcm9maWxlICYmICRleHQpIHsKICAgICAgICAkbmV3cGF0 aCA9IElNUEFUSCAuIHNhbml0aXplRm9yVXJsKCRwcm9maWxlKSAuIERTIC4gJGlkIC4gJGV4 dDsKICAgICAgICBpZiAoc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmlsZSwgJG5ld3BhdGgpID09 PSBmYWxzZSkgewogICAgICAgICAgICAvLyBGYWlsZWQ6IGRvIG5vdGhpbmcuCiAgICAgICAg fSBlbHNlIHsKICAgICAgICAgICAgQGNobW9kKCRuZXdwYXRoLCAwNjQ0KTsKCiAgICAgICAg ICAgIC8vIElmIHRoZSBwcmVmIGluZGljYXRlcywgZHVwbGljYXRlIGFzIGEgVHhwIHRodW1i IHRvby4KICAgICAgICAgICAgaWYgKGdldF9wcmVmKCdzbWRfdGh1bWJfdHhwX2NyZWF0ZScs ICcwJykgPT0gMSkgewogICAgICAgICAgICAgICAgJHR4cF90aHVtYiA9IElNUEFUSCAuICRp ZCAuICd0JyAuICRleHQ7CgogICAgICAgICAgICAgICAgaWYgKGNvcHkoJG5ld3BhdGgsICR0 eHBfdGh1bWIpKSB7CiAgICAgICAgICAgICAgICAgICAgc2FmZV91cGRhdGUoJ3R4cF9pbWFn ZScsICJ0aHVtYm5haWwgPSAxLCB0aHVtYl93ID0gJHcsIHRodW1iX2ggPSAkaCIsICdpZCA9 ICcgLiAkaWQpOwogICAgICAgICAgICAgICAgICAgIEBjaG1vZCgkdHhwX3RodW1iLCAwNjQ0 KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG1lc3Nh Z2UgPSBnVHh0KCdpbWFnZV91cGxvYWRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSk7 CiAgICAgICAgfQogICAgfQoKICAgIC8vIFNpbmNlIHRoZSBoZWFkZXJzIGhhdmUgYmVlbiBz ZW50LCByZXNvcnQgdG8ganMgdG8gcmVmcmVzaCB0aGUgcGFnZS4KICAgICR1cmxQaWVjZXMg PSBhcnJheSgKICAgICAgICAnZXZlbnQnICAgICAgICAgPT4gJ2ltYWdlJywKICAgICAgICAn c3RlcCcgICAgICAgICAgPT4gJ2ltYWdlX2VkaXQnLAogICAgICAgICdpZCcgICAgICAgICAg ICA9PiAkaWQsCiAgICAgICAgJ3NvcnQnICAgICAgICAgID0+ICRzb3J0LAogICAgICAgICdk aXInICAgICAgICAgICA9PiAkZGlyLAogICAgICAgICdwYWdlJyAgICAgICAgICA9PiAkcGFn ZSwKICAgICAgICAnc2VhcmNoX21ldGhvZCcgPT4gJHNlYXJjaF9tZXRob2QsCiAgICAgICAg J2NyaXQnICAgICAgICAgID0+ICRjcml0LAogICAgKTsKCiAgICAkdXJsID0gaHRtbF9lbnRp dHlfZGVjb2RlKGpvaW5fcXMoJHVybFBpZWNlcykpOwoKICAgIGVjaG8gPDw8RU9TCjxzY3Jp cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4Kd2luZG93LmxvY2F0aW9uLmhyZWY9InskdXJs fSI7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+CjxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNv bnRlbnQ9IjA7dXJsPXskdXJsfSIgLz4KPC9ub3NjcmlwdD4KRU9TOwogICAgZXhpdDsKfQoK LyoqCiAqIHBsdWdnYWJsZV91aSBjYWxsYmFjayB0byByZW5kZXIgdGhlIGFkZGl0aW9ucyB0 byB0aGUgaW1hZ2UgZWRpdCBwYW5lbC4KICoKICogQHBhcmFtICBzdHJpbmcgJGV2dCAgICAg VGV4dHBhdHRlcm4gZXZlbnQgKHBhbmVsKQogKiBAcGFyYW0gIHN0cmluZyAkc3RwICAgICBU ZXh0cGF0dGVybiBzdGVwIChhY3Rpb24pCiAqIEBwYXJhbSAgc3RyaW5nICRkZmx0ICAgIERl ZmF1bHQgbWFya3VwIHJlYWR5IHRvIHJlbmRlcgogKiBAcGFyYW0gIGFycmF5ICAkY3Vycmlt ZyBDdXJyZW50IGltYWdlIGluZm9ybWF0aW9uCiAqLwpmdW5jdGlvbiBzbWRfdGh1bWJfZWRp dCgkZXZ0LCAkc3RwLCAkZGZsdCwgJGN1cnJpbWcpCnsKICAgIGdsb2JhbCAkc3RlcCwgJGZp bGVfbWF4X3VwbG9hZF9zaXplLCAkdHhwX3VzZXI7CgogICAgZXh0cmFjdChncHNhKGFycmF5 KAogICAgICAgICdpZCcsCiAgICAgICAgJ3BhZ2UnLAogICAgICAgICdzb3J0JywKICAgICAg ICAnZGlyJywKICAgICAgICAnY3JpdCcsCiAgICAgICAgJ3NlYXJjaF9tZXRob2QnLAogICAg ICAgICdzbWRfdGh1bWJuYWlsX3NpemUnLAogICAgICAgICdzbWRfdGh1bWJuYWlsX2Nob3Nl bl9zaXplJywKICAgICAgICAnc21kX3RodW1ibmFpbF9kZWxldGUnLAogICAgICAgICdzbWRf c3RlcCcKICAgICkpKTsKCiAgICAkaWQgPSAoJGlkKSA/ICRpZCA6ICRHTE9CQUxTWydJRCdd OwogICAgJHNlYXJjaF9tZXRob2QgPSAoaXNfYXJyYXkoJHNlYXJjaF9tZXRob2QpKSA/IGlt cGxvZGUoJywnLCAkc2VhcmNoX21ldGhvZCkgOiAkc2VhcmNoX21ldGhvZDsKCiAgICAvLyBU b2dnbGUgcHJvZmlsZSBwYW5lbC4KICAgIGlmICgkc3RlcCA9PT0gJ3NhdmVfcGFuZV9zdGF0 ZScpIHsKICAgICAgICBzbWRfdGh1bWJuYWlsX3NhdmVfcGFuZV9zdGF0ZSgpOwogICAgICAg IHJldHVybjsKICAgIH0KCiAgICAvLyBDcmVhdGUvZGVsZXRlIHRoZSBzZWxlY3RlZCB0aHVt YnMgZGVwZW5kaW5nIG9uIHRoZSBidXR0b24gcHJlc3NlZC4KICAgIGlmICgkc21kX3N0ZXAg PT09ICdzbWRfdGh1bWJuYWlsX21hbmFnZScpIHsKICAgICAgICAvLyBWYWxpZGF0ZSB1c2Vy CiAgICAgICAgJGF1dGhvciA9IGZldGNoKCdhdXRob3InLCAndHhwX2ltYWdlJywgJ2lkJywg JGlkKTsKCiAgICAgICAgaWYgKCFoYXNfcHJpdnMoJ2ltYWdlLmVkaXQnKSAmJiAhKCRhdXRo b3IgPT0gJHR4cF91c2VyICYmIGhhc19wcml2cygnaW1hZ2UuZWRpdC5vd24nKSkpIHsKICAg ICAgICAgICAgaW1hZ2VfbGlzdChnVHh0KCdyZXN0cmljdGVkX2FyZWEnKSk7CgogICAgICAg ICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBHcmFiIHRoZSB0aHVtYm5haWxz IHRvIHdvcmsgb24KICAgICAgICAkd2hlcmUgPSAoJHNtZF90aHVtYm5haWxfc2l6ZSA9PT0g J2FsbCcpID8gJzE9MSBBTkQgZmxhZ3MgJiAnIC4gU01EX1RIVU1CX0FDVElWRSA6ICJuYW1l PSciIC4gZG9TbGFzaCgkc21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZSkgLiAiJyI7CiAgICAg ICAgJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RIVU1CLCAkd2hlcmUpOwoKICAgICAgICAv LyBEbyBpdC4KICAgICAgICBpZiAoJHNtZF90aHVtYm5haWxfZGVsZXRlKSB7CiAgICAgICAg ICAgICRtc2cgPSBzbWRfdGh1bWJfdW5tYWtlKCRycywgJGN1cnJpbWcpOwogICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICRtc2cgPSBzbWRfdGh1bWJfbWFrZSgkcnMsICRjdXJyaW1n LCAxKTsKICAgICAgICB9CiAgICB9CgogICAgJGV4dCA9ICRjdXJyaW1nWydleHQnXTsKICAg IGVjaG8gc2NyaXB0X2pzKDw8PEVPQwpmdW5jdGlvbiBzbWRfdGh1bWJfc2VsZWN0b3Ioc2Vs KSB7CiAgICB2YXIgaWR4ID0gMDsKY29uc29sZS5sb2coc2VsKTsKICAgIGpRdWVyeSgiI3Nt ZF90aHVtYnMgaW1nIikuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICBpZiAoalF1ZXJ5KHRo aXMpLmhhc0NsYXNzKHNlbCkpIHsKICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLnRvZ2dsZUNs YXNzKCdzbWRfc2VsZWN0ZWQgYWN0aXZlJyk7CiAgICAgICAgICAgIGlmIChqUXVlcnkodGhp cykuaGFzQ2xhc3MoJ3NtZF9zZWxlY3RlZCcpKSB7CiAgICAgICAgICAgICAgICBqUXVlcnko IiNzbWRfdXBsb2FkX3RodW1ibmFpbCIpLmF0dHIoJ2Rpc2FibGVkJywgZmFsc2UpOwogICAg ICAgICAgICAgICAgalF1ZXJ5KCIjc21kX3RodW1iX3Byb2ZpbGUiKS52YWwoc2VsKTsKICAg ICAgICAgICAgICAgIGlkeCA9IGpRdWVyeSgiI3NtZF90aHVtYm5haWxfc2l6ZSBvcHRpb25b dmFsdWU9JyIrc2VsKyInXSIpLmluZGV4KCk7CiAgICAgICAgICAgICAgICBqUXVlcnkoIiNz bWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplIikudmFsKHNlbCk7CiAgICAgICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgICAgICBqUXVlcnkoIiNzbWRfdXBsb2FkX3RodW1ibmFpbCIpLmF0 dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICBqUXVlcnkoIiNzbWRfdGh1 bWJfcHJvZmlsZSIpLnZhbCgnJyk7CiAgICAgICAgICAgICAgICBqUXVlcnkoIiNzbWRfdGh1 bWJuYWlsX2Nob3Nlbl9zaXplIikudmFsKCcnKTsKICAgICAgICAgICAgfQogICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5yZW1vdmVDbGFzcygnc21kX3NlbGVj dGVkIGFjdGl2ZScpOwogICAgICAgIH0KICAgIH0pOwogICAgalF1ZXJ5KCIjc21kX3RodW1i bmFpbF9zaXplIikucHJvcCgic2VsZWN0ZWRJbmRleCIsIGlkeCk7Cn0KZnVuY3Rpb24gc21k X3RodW1iX3NlbGVjdF9jaGFuZ2VkKCkgewogICAgb2JqID0galF1ZXJ5KCIjc21kX3RodW1i bmFpbF9zaXplIik7CiAgICBpZiAob2JqLmF0dHIoInNlbGVjdGVkSW5kZXgiKSA9PSAwKSB7 CiAgICAgICAgalF1ZXJ5KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdkaXNhYmxl ZCcsIHRydWUpOwogICAgICAgIGpRdWVyeSgiI3NtZF90aHVtYl9wcm9maWxlIikudmFsKCcn KTsKICAgICAgICBqUXVlcnkoIiNzbWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplIikudmFsKCcn KTsKICAgIH0gZWxzZSB7CiAgICAgICAgalF1ZXJ5KCIjc21kX3VwbG9hZF90aHVtYm5haWwi KS5hdHRyKCdkaXNhYmxlZCcsIGZhbHNlKTsKICAgICAgICBqUXVlcnkoIiNzbWRfdGh1bWJf cHJvZmlsZSIpLnZhbChvYmoudmFsKCkpOwogICAgICAgIGpRdWVyeSgiI3NtZF90aHVtYm5h aWxfY2hvc2VuX3NpemUiKS52YWwob2JqLnZhbCgpKTsKICAgIH0KICAgIGpRdWVyeSgiI3Nt ZF90aHVtYnMgaW1nIikuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICBpZiAoalF1ZXJ5KHRo aXMpLmhhc0NsYXNzKG9iai52YWwoKSkpIHsKICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLmFk ZENsYXNzKCdzbWRfc2VsZWN0ZWQgYWN0aXZlJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgalF1ZXJ5KHRoaXMpLnJlbW92ZUNsYXNzKCdzbWRfc2VsZWN0ZWQgYWN0aXZlJyk7 CiAgICAgICAgfQogICAgfSk7Cn0KalF1ZXJ5KGZ1bmN0aW9uKCkgewogICAgalF1ZXJ5KCIj c21kX3RodW1icyBpbWciKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBwcmYgPSBq UXVlcnkodGhpcykuZGF0YSgncHJvZmlsZScpOwogICAgICAgIGpRdWVyeSh0aGlzKS5jbGlj ayhmdW5jdGlvbigpIHsKICAgICAgICAgICAgc21kX3RodW1iX3NlbGVjdG9yKHByZik7CiAg ICAgICAgfSk7CiAgICB9KTsKICAgIGpRdWVyeSgiI3NtZF91cGxvYWRfdGh1bWJuYWlsIiku YXR0cignZGlzYWJsZWQnLCB0cnVlKTsKICAgIGpRdWVyeSgiLnRodW1ibmFpbC11cGxvYWQi KS5wcmVwZW5kKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzbWRfdGh1bWJfaW1naWQi IHZhbHVlPSJ7JGlkfSIgLz48aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ic21kX3RodW1iX3By b2ZpbGUiIG5hbWU9InNtZF90aHVtYl9wcm9maWxlIiB2YWx1ZT0iIiAvPjxpbnB1dCB0eXBl PSJoaWRkZW4iIGlkPSJzbWRfdGh1bWJfZXh0IiBuYW1lPSJzbWRfdGh1bWJfZXh0IiB2YWx1 ZT0ieyRleHR9IiAvPicpOwp9KTsKRU9DCiAgICApOwoKICAgIC8vIEFkZCB0aHVtYm5haWxz IGFuZCBjcmVhdGlvbiBjb250cm9scy4KICAgIGlmIChzbWRfdGh1bWJfdGFibGVfZXhpc3Qo KSkgewogICAgICAgICRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwgJzE9MSBPUkRF UiBCWSBuYW1lJyk7CgogICAgICAgIGlmICgkcnMpIHsKICAgICAgICAgICAgJHByb2ZpbGVz ID0gYXJyYXkoJ2FsbCcgPT4gZ1R4dCgnc21kX3RodW1iX2FsbF9zaXplcycpKTsKICAgICAg ICAgICAgJHRodW1ic1tdID0gJzxkaXYgaWQ9InNtZF90aHVtYnMiPic7CgogICAgICAgICAg ICBmb3JlYWNoICgkcnMgYXMgJHJvdykgewogICAgICAgICAgICAgICAgaWYgKCRyb3dbJ2Zs YWdzJ10gJiBTTURfVEhVTUJfQUNUSVZFKSB7CiAgICAgICAgICAgICAgICAgICAgJHByb2Zp bGVzWyRyb3dbJ25hbWUnXV0gPSAkcm93WyduYW1lJ107CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgJHRodW1ic1tdID0gc21kX3RodW1iX2ltZygkcm93LCAkY3Vycmlt ZywgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJyA9PiAnY29udGVudC1pbWFn ZSAnIC4gJHJvd1snbmFtZSddLAogICAgICAgICAgICAgICAgICAgICdkYXRhLXByb2ZpbGUn ID0+ICRyb3dbJ25hbWUnXSwKICAgICAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAg fQoKICAgICAgICAgICAgJHRodW1ic1tdID0gJzwvZGl2Pic7CgogICAgICAgICAgICAkcXMg PSBhcnJheSgKICAgICAgICAgICAgICAgICJldmVudCIgICAgICAgICA9PiAnaW1hZ2UnLAog ICAgICAgICAgICAgICAgInN0ZXAiICAgICAgICAgID0+ICdpbWFnZV9lZGl0JywKICAgICAg ICAgICAgICAgICJpZCIgICAgICAgICAgICA9PiAkaWQsCiAgICAgICAgICAgICAgICAicGFn ZSIgICAgICAgICAgPT4gJHBhZ2UsCiAgICAgICAgICAgICAgICAic29ydCIgICAgICAgICAg PT4gJHNvcnQsCiAgICAgICAgICAgICAgICAiZGlyIiAgICAgICAgICAgPT4gJGRpciwKICAg ICAgICAgICAgICAgICJjcml0IiAgICAgICAgICA9PiAkY3JpdCwKICAgICAgICAgICAgICAg ICJzZWFyY2hfbWV0aG9kIiA9PiAkc2VhcmNoX21ldGhvZCwKICAgICAgICAgICAgKTsKCiAg ICAgICAgICAgICRvdXRbXSA9ICc8ZGl2IGlkPSJzbWRfdGh1bWJuYWlsX2NvbnRyb2wiPjxz cGFuIGNsYXNzPSJ0eHAtc3VtbWFyeSBsZXZlcicuKGdldF9wcmVmKCdwYW5lX3NtZF90aHVt Ym5haWxzX3Zpc2libGUnKSA/ICcgZXhwYW5kZWQnIDogJycpLiciPjxhIGhyZWY9IiNzbWRf dGh1bWJuYWlscyI+Jy5nVHh0KCdzbWRfdGh1bWJfdGh1bWJuYWlsX2hlYWRpbmcnKS4nPC9h Pjwvc3Bhbj48ZGl2IGlkPSJzbWRfdGh1bWJuYWlscyIgY2xhc3M9InRvZ2dsZSIgc3R5bGU9 ImRpc3BsYXk6Jy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1ibmFpbHNfdmlzaWJsZScpID8g J2Jsb2NrJyA6ICdub25lJykuJyI+JzsKICAgICAgICAgICAgJG91dFtdID0gdXBsb2FkX2Zv cm0oZ1R4dCgnc21kX3RodW1iX3VwbG9hZCcpLCAndXBsb2FkX3RodW1ibmFpbCcsICdzbWRf dGh1bWJuYWlsX2luc2VydCcsICdpbWFnZScsICRpZCwgJGZpbGVfbWF4X3VwbG9hZF9zaXpl LCAnc21kX3VwbG9hZF90aHVtYm5haWwnLCAndGh1bWJuYWlsLXVwbG9hZCcpOwogICAgICAg ICAgICAkb3V0W10gPSAnPGZvcm0gbmFtZT0ic21kX3RodW1ibmFpbF9jcmVhdGUiIG1ldGhv ZD0icG9zdCIgYWN0aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOwogICAgICAgICAgICAkb3V0 W10gPSBmSW5wdXQoJ2hpZGRlbicsICdzbWRfc3RlcCcsICdzbWRfdGh1bWJuYWlsX21hbmFn ZScpOwogICAgICAgICAgICAkb3V0W10gPSBmSW5wdXQoJ2hpZGRlbicsICdzbWRfdGh1bWJu YWlsX2Nob3Nlbl9zaXplJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NtZF90aHVtYm5h aWxfY2hvc2VuX3NpemUnKTsKICAgICAgICAgICAgJG91dFtdID0gc2VsZWN0SW5wdXQoJ3Nt ZF90aHVtYm5haWxfc2l6ZScsICRwcm9maWxlcywgJycsICcnLCAnIG9uY2hhbmdlPSJyZXR1 cm4gc21kX3RodW1iX3NlbGVjdF9jaGFuZ2VkKCkiOycsICdzbWRfdGh1bWJuYWlsX3NpemUn KTsKICAgICAgICAgICAgJG91dFtdID0gZklucHV0KCdzdWJtaXQnLCAnJywgZ1R4dCgnY3Jl YXRlJykpOwogICAgICAgICAgICAkb3V0W10gPSBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGh1 bWJuYWlsX2RlbGV0ZScsIGdUeHQoJ2RlbGV0ZScpKTsKICAgICAgICAgICAgJG91dFtdID0g am9pbignJywgJHRodW1icyk7CiAgICAgICAgICAgICRvdXRbXSA9ICc8L2Zvcm0+JzsKICAg ICAgICAgICAgJG91dFtdID0gJzwvZGl2Pic7CgogICAgICAgICAgICByZXR1cm4gam9pbihu LCAkb3V0KTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICcgJzsKfQoKLyoqCiAqIENy ZWF0ZSBhbiAmbHRpbWcmZ3QgdGFnIHRvIGEgdGh1bWJuYWlsLgogKgogKiBAcGFyYW0gIGFy cmF5ICAkcm93ICAgICBUaHVtYm5haWwgaW5mb3JtYXRpb24KICogQHBhcmFtICBhcnJheSAg JGN1cnJpbWcgQ29ycmVzcG9uZGluZyBpbWFnZSBpbmZvcm1hdGlvbgogKiBAcGFyYW0gIGFy cmF5ICAkbWV0YSAgICBUaHVtYm5haWwgbWV0YSBpbmZvCiAqIEBwYXJhbSAgc3RyaW5nICRk c3AgICAgIFRleHRwYXR0ZXJuIEZvcm0gdGhhdCBjb250YWlucyByZW5kZXJpbmcgaW5mb3Jt YXRpb24KICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHNtZF90aHVtYl9pbWcoJHJv dywgJGN1cnJpbWcsICRtZXRhID0gYXJyYXkoKSwgJGRzcCA9ICcnKQp7CiAgICBnbG9iYWwg JGltZ19kaXIsICRzbWRfdGh1bWJfZGF0YTsKCiAgICBzbWRfdGh1bWJfc2V0X2ltcGF0aCgp OwoKICAgICRkaXIgPSBzYW5pdGl6ZUZvclVybCgkcm93WyduYW1lJ10pOwogICAgJGlkID0g JGN1cnJpbWdbJ2lkJ107CiAgICAkZXh0ID0gJGN1cnJpbWdbJ2V4dCddOwoKICAgIC8vIGFs dCBpcyBhIG1hbmRhdG9yeSBhdHRyaWJ1dGUgc28gbWFrZSBzdXJlIGl0IGV4aXN0cyAoZXZl biBpZiBpdCdzICIiKS4KICAgIGlmICghaXNzZXQoJG1ldGFbJ2FsdCddKSkgewogICAgICAg ICRtZXRhWydhbHQnXSA9ICRjdXJyaW1nWydhbHQnXTsKICAgIH0KCiAgICAkcGF0aCA9IElN UEFUSCAuICRkaXIgLiBEUyAuICRpZCAuICRleHQ7CgogICAgaWYgKGZpbGVfZXhpc3RzKCRw YXRoKSkgewogICAgICAgICRleHRyYXMgPSAnJzsKCiAgICAgICAgaWYgKGlzc2V0KCRtZXRh Wydmb3JjZXcnXSkgfHwgaXNzZXQoJG1ldGFbJ2ZvcmNlaCddKSkgewogICAgICAgICAgICAk ZGltcyA9IGdldGltYWdlc2l6ZSgkcGF0aCk7CgogICAgICAgICAgICBpZiAoaXNzZXQoJG1l dGFbJ2ZvcmNldyddKSAmJiAhJHJvd1snd2lkdGgnXSkgewogICAgICAgICAgICAgICAgJHJv d1snd2lkdGgnXSA9ICRkaW1zWzBdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAo aXNzZXQoJG1ldGFbJ2ZvcmNlaCddKSAmJiAhJHJvd1snaGVpZ2h0J10pIHsKICAgICAgICAg ICAgICAgICRyb3dbJ2hlaWdodCddID0gJGRpbXNbMV07CiAgICAgICAgICAgIH0KCiAgICAg ICAgICAgIHVuc2V0KCRtZXRhWydmb3JjZXcnXSk7CiAgICAgICAgICAgIHVuc2V0KCRtZXRh Wydmb3JjZWgnXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG1ldGFbJ3dpZHRo J10pICYmICRtZXRhWyd3aWR0aCddICE9PSAnJykgewogICAgICAgICAgICAkcm93Wyd3aWR0 aCddID0gJG1ldGFbJ3dpZHRoJ107CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG1l dGFbJ2hlaWdodCddKSAmJiAkbWV0YVsnaGVpZ2h0J10gIT09ICcnKSB7CiAgICAgICAgICAg ICRyb3dbJ2hlaWdodCddID0gJG1ldGFbJ2hlaWdodCddOwogICAgICAgIH0KCiAgICAgICAg dW5zZXQoJG1ldGFbJ3dpZHRoJ10pOwogICAgICAgIHVuc2V0KCRtZXRhWydoZWlnaHQnXSk7 CgogICAgICAgIC8vICdlbXB0eScgaW5jbHVkZXMgemVybyBkaW1lbnNpb25zIHdoaWNoIG9t aXRzIHRoZSBhdHRyaWJ1dGUgYW5kIGFsbG93cyB0aGUgYnJvd3NlciB0byBzY2FsZS4KICAg ICAgICAkdyA9ICghZW1wdHkoJHJvd1snd2lkdGgnXSkpID8gJyB3aWR0aD0iJy4kcm93Wyd3 aWR0aCddLiciJzogJyc7CiAgICAgICAgJGggPSAoIWVtcHR5KCRyb3dbJ2hlaWdodCddKSkg PyAnIGhlaWdodD0iJy4kcm93WydoZWlnaHQnXS4nIic6ICcnOwoKICAgICAgICAkdURhdGUg PSAnJzsKCiAgICAgICAgaWYgKCFpc3NldCgkbWV0YVsnc3RhbXAnXSkpIHsKICAgICAgICAg ICAgJHVEYXRlID0gJz8nIC4gZmlsZW10aW1lKCRwYXRoKTsKICAgICAgICB9CgogICAgICAg IHVuc2V0KCRtZXRhWydzdGFtcCddKTsKCiAgICAgICAgaWYgKCFpc3NldCgkbWV0YVsnY2xh c3MnXSkpIHsKICAgICAgICAgICAgJG1ldGFbJ2NsYXNzJ10gPSAkZGlyOwogICAgICAgIH0K CiAgICAgICAgZm9yZWFjaCAoJG1ldGEgYXMgJGtleSA9PiAkdmFsKSB7CiAgICAgICAgICAg IC8vIFdlIG5lZWQgYWxsIGF0dHMgZm9yIGNvbnRhaW5lciB0YWdzLCBidXQgb25seSB2YWxp ZCBIVE1MIGF0dHMgc2hvdWxkIGFwcGVhciBpbiB0aGUgZGVmYXVsdCA8aW1nPiB0YWcuCiAg ICAgICAgICAgIGlmIChpbl9hcnJheSgka2V5LCBhcnJheSgnYWx0JywgJ2NsYXNzJywgJ3Rp dGxlJykpIHx8IHN0cnBvcygka2V5LCAnZGF0YS0nKSA9PT0gMCkgewogICAgICAgICAgICAg ICAgJGV4dHJhcyAuPSAnICcgLiAka2V5IC4gJz0iJyAuICR2YWwgLiAnIic7CiAgICAgICAg ICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkZHNwKSB7CiAgICAgICAgICAgIC8vIEhh bmQgb2ZmIHRvIHRoZSBmb3JtL2NvbnRhaW5lciBmb3IgZm9ybWF0dGluZyBhZHZpY2UKICAg ICAgICAgICAgJHNtZF90aHVtYl9kYXRhID0gJG1ldGE7CiAgICAgICAgICAgICRzbWRfdGh1 bWJfZGF0YVsnaWQnXSA9ICRpZDsKICAgICAgICAgICAgJHNtZF90aHVtYl9kYXRhWydleHQn XSA9ICRleHQ7CiAgICAgICAgICAgICRzbWRfdGh1bWJfZGF0YVsnYWx0J10gPSAkYWx0Owog ICAgICAgICAgICAkc21kX3RodW1iX2RhdGFbJ3cnXSA9ICRyb3dbJ3dpZHRoJ107CiAgICAg ICAgICAgICRzbWRfdGh1bWJfZGF0YVsnaCddID0gJHJvd1snaGVpZ2h0J107CiAgICAgICAg ICAgICRzbWRfdGh1bWJfZGF0YVsnaHRtbF93J10gPSAkdzsKICAgICAgICAgICAgJHNtZF90 aHVtYl9kYXRhWydodG1sX2gnXSA9ICRoOwogICAgICAgICAgICByZXR1cm4gcGFyc2UoJGRz cCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICc8aW1nIHNyYz0iJyAu IGlodSAuICRpbWdfZGlyIC4gJy8nIC4gJGRpciAuICcvJyAuICRpZCAuICRleHQgLiAkdURh dGUgLiAnIicgLiAkdyAuICRoIC4gJGV4dHJhcyAuICcgLz4nOwogICAgICAgIH0KICAgIH0K CiAgICByZXR1cm4gJyc7Cn0KCi8qKgogKiBDYWxsYmFjayB0byByZW5kZXIgcHJvZmlsZXMg Y29udHJvbCBhcmVhIG9uIEltYWdlcyBwYW5lbC4KICoKICogQHBhcmFtICBzdHJpbmcgJGV2 dCAgICAgVGV4dHBhdHRlcm4gZXZlbnQgKHBhbmVsKQogKiBAcGFyYW0gIHN0cmluZyAkc3Rw ICAgICBUZXhwYXR0ZXJuIHN0ZXAgKGFjdGlvbikKICogQHBhcmFtICBzdHJpbmcgJGRmbHQg ICAgRGVmYXVsdCBjb250ZW50IEhUTUwKICogQHBhcmFtICBhcnJheSAgJGltZ2xpc3QgUmVj b3JkIHNldCBvZiBhbGwgaW1hZ2VzIGluIHRoZSBsaXN0CiAqIEByZXR1cm4gc3RyaW5nICAg ICAgICAgIEhUTUwKICovCmZ1bmN0aW9uIHNtZF90aHVtYl9wcm9maWxlcygkZXZ0LCAkc3Rw LCAkZGZsdCwgJGltZ2xpc3QpCnsKICAgIGdsb2JhbCAkc21kX3RodW1iX2V2ZW50LCAkc3Rl cCwgJHNtZF90aHVtYl9wcmV2cywgJHR4cF91c2VyOwoKICAgIGlmICghaGFzX3ByaXZzKF9f RlVOQ1RJT05fXykpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZXh0cmFjdChncHNh KGFycmF5KAogICAgICAgICdwYWdlJywKICAgICAgICAnc29ydCcsCiAgICAgICAgJ2Rpcics CiAgICAgICAgJ2NyaXQnLAogICAgICAgICdzZWFyY2hfbWV0aG9kJywKICAgICAgICAnc21k X3RodW1iX2FkZCcsCiAgICAgICAgJ3NtZF90aHVtYl9jYW5jZWwnLAogICAgICAgICdzbWRf dGh1bWJfc2F2ZScsCiAgICAgICAgJ3NtZF90aHVtYl9uYW1lJywKICAgICAgICAnc21kX3Ro dW1iX25ld25hbWUnLAogICAgICAgICdzbWRfdGh1bWJfYWRkX25ld25hbWUnLAogICAgICAg ICdzbWRfdGh1bWJfd2lkdGgnLAogICAgICAgICdzbWRfdGh1bWJfYWRkX3dpZHRoJywKICAg ICAgICAnc21kX3RodW1iX2hlaWdodCcsCiAgICAgICAgJ3NtZF90aHVtYl9hZGRfaGVpZ2h0 JywKICAgICAgICAnc21kX3RodW1iX3F1YWxpdHknLAogICAgICAgICdzbWRfdGh1bWJfYWRk X3F1YWxpdHknLAogICAgICAgICdzbWRfdGh1bWJfYWN0aXZlJywKICAgICAgICAnc21kX3Ro dW1iX2FjdGl2ZV9uZXcnLAogICAgICAgICdzbWRfdGh1bWJfYWRkX2FjdGl2ZV9uZXcnLAog ICAgICAgICdzbWRfdGh1bWJfY3JvcCcsCiAgICAgICAgJ3NtZF90aHVtYl9hZGRfY3JvcCcs CiAgICAgICAgJ3NtZF90aHVtYl9zaGFycGVuJywKICAgICAgICAnc21kX3RodW1iX2FkZF9z aGFycGVuJywKICAgICAgICAnc21kX3RodW1iX2RlZmF1bHQnLAogICAgICAgICdzbWRfdGh1 bWJfYWRkX2RlZmF1bHQnLAogICAgICAgICdzbWRfdGh1bWJfc2VsZWN0ZWQnLAogICAgICAg ICdzbWRfdGh1bWJfY2F0X3NlbGVjdGVkJywKICAgICAgICAnc21kX3RodW1iX3Vzcl9zZWxl Y3RlZCcsCiAgICAgICAgJ3NtZF90aHVtYl9ncm91cF90eXBlJywKICAgICkpKTsKCiAgICBp ZiAoJHNtZF90aHVtYl9hZGQpIHsKICAgICAgICAkc21kX3RodW1iX25ld25hbWUgPSAkc21k X3RodW1iX2FkZF9uZXduYW1lOwogICAgICAgICRzbWRfdGh1bWJfd2lkdGggPSAkc21kX3Ro dW1iX2FkZF93aWR0aDsKICAgICAgICAkc21kX3RodW1iX2hlaWdodCA9ICRzbWRfdGh1bWJf YWRkX2hlaWdodDsKICAgICAgICAkc21kX3RodW1iX3F1YWxpdHkgPSAkc21kX3RodW1iX2Fk ZF9xdWFsaXR5OwogICAgICAgICRzbWRfdGh1bWJfYWN0aXZlX25ldyA9ICRzbWRfdGh1bWJf YWRkX2FjdGl2ZV9uZXc7CiAgICAgICAgJHNtZF90aHVtYl9jcm9wID0gJHNtZF90aHVtYl9h ZGRfY3JvcDsKICAgICAgICAkc21kX3RodW1iX3NoYXJwZW4gPSAkc21kX3RodW1iX2FkZF9z aGFycGVuOwogICAgICAgICRzbWRfdGh1bWJfZGVmYXVsdCA9ICRzbWRfdGh1bWJfYWRkX2Rl ZmF1bHQ7CiAgICB9CgogICAgLy8gU2FuaXRpemUuCiAgICAkc2VhcmNoX21ldGhvZCA9IChp c19hcnJheSgkc2VhcmNoX21ldGhvZCkpID8gaW1wbG9kZSgnLCcsICRzZWFyY2hfbWV0aG9k KSA6ICRzZWFyY2hfbWV0aG9kOwogICAgJHF1YWxpdHkgPSAoaXNfbnVtZXJpYygkc21kX3Ro dW1iX3F1YWxpdHkpKSA/ICgoJHNtZF90aHVtYl9xdWFsaXR5IDwgMCkgPyA3NSA6ICgoJHNt ZF90aHVtYl9xdWFsaXR5ID4gMTAwKSA/IDc1IDogJHNtZF90aHVtYl9xdWFsaXR5KSApIDog NzU7CiAgICAkd2lkdGggPSAoaXNfbnVtZXJpYygkc21kX3RodW1iX3dpZHRoKSkgPyAkc21k X3RodW1iX3dpZHRoIDogMDsKICAgICRoZWlnaHQgPSAoaXNfbnVtZXJpYygkc21kX3RodW1i X2hlaWdodCkpID8gJHNtZF90aHVtYl9oZWlnaHQgOiAwOwogICAgJG5ld25hbWUgPSBzYW5p dGl6ZUZvclVybCgkc21kX3RodW1iX25ld25hbWUpOwogICAgJG1zZyA9ICcnOwoKICAgIHNt ZF90aHVtYl9zZXRfaW1wYXRoKCk7CgogICAgLy8gVGFibGUgY29udHJvbC4KICAgIGlmIChn cHMoJ3JlbW92ZScpKSB7CiAgICAgICAgc21kX3RodW1iX3RhYmxlX3JlbW92ZSgpOwogICAg fSBlbHNlIHsKICAgICAgICBpZiAoIXNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7CiAgICAg ICAgICAgIHNtZF90aHVtYl90YWJsZV9pbnN0YWxsKCk7CiAgICAgICAgfQogICAgfQoKICAg IC8vIEFjdGlvbiB0byB0b2dnbGUgcHJvZmlsZSBwYW5lbC4KICAgIGlmICgkc3RlcCA9PT0g J3NhdmVfcGFuZV9zdGF0ZScpIHsKICAgICAgICBzbWRfdGh1bWJuYWlsX3NhdmVfcGFuZV9z dGF0ZSgpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBBY3Rpb24gdG8gY3JlYXRl IHRodW1ibmFpbHMuCiAgICBpZiAoJHN0ZXAgPT09ICdzbWRfdGh1bWJfY3JlYXRlX2dyb3Vw JykgewogICAgICAgIHN3aXRjaCAoJHNtZF90aHVtYl9ncm91cF90eXBlKSB7CiAgICAgICAg ICAgIGNhc2UgJ2FsbCc6CiAgICAgICAgICAgICAgICBzbWRfdGh1bWJfY3JlYXRlX2dyb3Vw KCdhbGwnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzZWwn OgogICAgICAgICAgICAgICAgc21kX3RodW1iX2NyZWF0ZV9ncm91cCgnc2VsJywgcnRyaW0o JHNtZF90aHVtYl9zZWxlY3RlZCwgJywnKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgY2FzZSAnY2F0JzoKICAgICAgICAgICAgICAgIHNtZF90aHVtYl9jcmVhdGVf Z3JvdXAoJ2NhdCcsICRzbWRfdGh1bWJfY2F0X3NlbGVjdGVkKTsKICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICBjYXNlICd1c3InOgogICAgICAgICAgICAgICAgc21kX3Ro dW1iX2NyZWF0ZV9ncm91cCgndXNyJywgJHNtZF90aHVtYl91c3Jfc2VsZWN0ZWQpOwogICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBzZXRfcHJlZigncGFuZV9z bWRfdGh1bWJfZ3JvdXBfdHlwZScsICRzbWRfdGh1bWJfZ3JvdXBfdHlwZSwgJ3NtZF90aHVt YicsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZfUFJJVkFURSk7CiAgICAg ICAgJHN0ZXAgPSAnc21kX3RodW1iX3ByZWZzJzsKICAgIH0KCiAgICAvLyBBY3Rpb24gdG8g c2F2ZSBwcm9maWxlLgogICAgaWYgKCRzdGVwID09PSAnc21kX3RodW1iX3Byb2ZpbGVfc2F2 ZScpIHsKICAgICAgICBpZiAoc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsKICAgICAgICAg ICAgaWYgKCRzbWRfdGh1bWJfY2FuY2VsKSB7CiAgICAgICAgICAgICAgICAvLyBEbyBub3Ro aW5nLgogICAgICAgICAgICB9IGVsc2VpZiAoJHNtZF90aHVtYl9hZGQpIHsKICAgICAgICAg ICAgICAgIC8vIENyZWF0ZSBuZXcgcHJvZmlsZS4KICAgICAgICAgICAgICAgICRleGlzdHMg PSBzYWZlX3JvdygnKicsIFNNRF9USFVNQiwgIm5hbWU9JyIgLiBkb1NsYXNoKCRuZXduYW1l KSAuICInIik7CgogICAgICAgICAgICAgICAgaWYgKCRleGlzdHMpIHsKICAgICAgICAgICAg ICAgICAgICAkbXNnID0gZ1R4dCgnc21kX3RodW1iX3Byb2ZpbGVfZXhpc3RzJywgYXJyYXko J3tuYW1lfScgPT4gZG9TbGFzaCgkbmV3bmFtZSkpKTsKICAgICAgICAgICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRuZXduYW1lKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICRmbGFncyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRmbGFncyA9 ICgkc21kX3RodW1iX2FjdGl2ZV9uZXcpID8gJGZsYWdzIHwgU01EX1RIVU1CX0FDVElWRSA6 ICRmbGFnczsKICAgICAgICAgICAgICAgICAgICAgICAgJGZsYWdzID0gKCRzbWRfdGh1bWJf Y3JvcCkgPyAkZmxhZ3MgfCBTTURfVEhVTUJfQ1JPUCA6ICRmbGFnczsKICAgICAgICAgICAg ICAgICAgICAgICAgJGZsYWdzID0gKCRzbWRfdGh1bWJfc2hhcnBlbikgPyAkZmxhZ3MgfCBT TURfVEhVTUJfU0hBUlAgOiAkZmxhZ3M7CgogICAgICAgICAgICAgICAgICAgICAgICBzYWZl X2luc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNNRF9USFVNQiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJuYW1lPSciIC4gZG9TbGFzaCgkbmV3bmFtZSkgLiAi JyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIiwgd2lkdGg9JyIgLiBkb1NsYXNo KCR3aWR0aCkgLiAiJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIiwgaGVpZ2h0 PSciIC4gZG9TbGFzaCgkaGVpZ2h0KSAuICInIgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgLiAiLCBxdWFsaXR5PSciIC4gZG9TbGFzaCgkcXVhbGl0eSkgLiAiJyIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC4gIiwgZmxhZ3M9JyIgLiBkb1NsYXNoKCRmbGFncykgLiAi JyIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAg IC8vIEFsdGVyIHRoZSBkZWZhdWx0IHRodW1ibmFpbC4KICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCRzbWRfdGh1bWJfZGVmYXVsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAkbmV3bmFtZSwgJ3Nt ZF90aHVtYicsIFBSRUZfSElEREVOKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSB0aHVtYm5haWwgZGlyZWN0b3J5 CiAgICAgICAgICAgICAgICAgICAgICAgIEBta2RpcihJTVBBVEguJG5ld25hbWUpOwogICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBwcm9maWxlLgogICAgICAg ICAgICAgICAgJG5hbWUgPSBzYW5pdGl6ZUZvclVybCgkc21kX3RodW1iX25hbWUpOwogICAg ICAgICAgICAgICAgJGV4aXN0cyA9IHNhZmVfcm93KCcqJywgU01EX1RIVU1CLCAibmFtZT0n IiAuIGRvU2xhc2goJG5ld25hbWUpIC4gIiciKTsKCiAgICAgICAgICAgICAgICBpZiAoJGV4 aXN0cyAmJiBzdHJ0b2xvd2VyKCRuZXduYW1lKSAhPT0gc3RydG9sb3dlcigkbmFtZSkpIHsK ICAgICAgICAgICAgICAgICAgICAkbXNnID0gZ1R4dCgnc21kX3RodW1iX3Byb2ZpbGVfZXhp c3RzJywgYXJyYXkoJ3tuYW1lfScgPT4gZG9TbGFzaCgkbmV3bmFtZSkpKTsKICAgICAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRuZXduYW1lKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICRmbGFncyA9IDA7CiAgICAgICAgICAgICAgICAgICAg ICAgICRmbGFncyA9ICgkc21kX3RodW1iX2FjdGl2ZSkgPyAkZmxhZ3MgfCBTTURfVEhVTUJf QUNUSVZFIDogJGZsYWdzOwogICAgICAgICAgICAgICAgICAgICAgICAkZmxhZ3MgPSAoJHNt ZF90aHVtYl9jcm9wKSA/ICRmbGFncyB8IFNNRF9USFVNQl9DUk9QIDogJGZsYWdzOwogICAg ICAgICAgICAgICAgICAgICAgICAkZmxhZ3MgPSAoJHNtZF90aHVtYl9zaGFycGVuKSA/ICRm bGFncyB8IFNNRF9USFVNQl9TSEFSUCA6ICRmbGFnczsKCiAgICAgICAgICAgICAgICAgICAg ICAgIHNhZmVfdXBkYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU01EX1RIVU1C LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWU9JyIgLiBkb1NsYXNoKCRuZXdu YW1lKSAuICInIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiLCB3aWR0aD0nIiAu IGRvU2xhc2goJHdpZHRoKSAuICInIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAi LCBoZWlnaHQ9JyIgLiBkb1NsYXNoKCRoZWlnaHQpIC4gIiciCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAuICIsIHF1YWxpdHk9JyIgLiBkb1NsYXNoKCRxdWFsaXR5KSAuICInIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiLCBmbGFncz0nIiAuIGRvU2xhc2goJGZs YWdzKSAuICInIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAibmFtZT0nIiAuIGRv U2xhc2goJG5hbWUpIC4gIiciCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAg ICAgICAgICAgICAgICAgICAvLyBBbHRlciB0aGUgZGVmYXVsdCB0aHVtYm5haWwuCiAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgkc21kX3RodW1iX2RlZmF1bHQpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxl JywgJG5ld25hbWUsICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTik7CiAgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1v dmUgdGhlIGRlZmF1bHQgZmxhZyBpZiB0aGlzIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQuCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZh dWx0X3Byb2ZpbGUnKSA9PT0gZG9TbGFzaCgkbmFtZSkpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcn LCAnc21kX3RodW1iJywgUFJFRl9ISURERU4pOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg ICAvLyBBZGp1c3QgdGhlIHRodW1ibmFpbCBkaXJlY3RvcnkgaWYgdGhlIG5hbWUgaGFzIGNo YW5nZWQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRuZXduYW1lICE9ICRuYW1lKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWUoSU1QQVRILiRuYW1lLCBJTVBB VEguJG5ld25hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgJG1zZyA9IGdUeHQoJ3NtZF90aHVtYl90YWJsZXNfbm90X2luc3Rh bGxlZCcpOwogICAgICAgIH0KCiAgICAgICAgJHN0ZXAgPSAnc21kX3RodW1iX3Byb2ZpbGUn OwogICAgfQoKICAgIC8vIEFjdGlvbiB0byBkZWxldGUgYSBwcm9maWxlLgogICAgaWYgKCRz dGVwID09PSAnc21kX3RodW1iX3Byb2ZpbGVfZGVsZXRlJykgewogICAgICAgIGlmIChzbWRf dGh1bWJfdGFibGVfZXhpc3QoKSkgewogICAgICAgICAgICAkdHhwX2RlbCA9IGdldF9wcmVm KCdzbWRfdGh1bWJfdHhwX2RlbGV0ZScpOwogICAgICAgICAgICAkdGhlX2RmbHQgPSBnZXRf cHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnLCAxKTsKCiAgICAgICAgICAg IGlmICghZW1wdHkoJHNtZF90aHVtYl9uYW1lKSkgewogICAgICAgICAgICAgICAgJG5hbWUg PSBzYW5pdGl6ZUZvclVybCgkc21kX3RodW1iX25hbWUpOwogICAgICAgICAgICAgICAgJHJl dCA9IHNhZmVfZGVsZXRlKFNNRF9USFVNQiwgIm5hbWU9JyIgLiBkb1NsYXNoKCRuYW1lKSAu ICInIik7CiAgICAgICAgICAgICAgICBpZiAoJHJldCkgewogICAgICAgICAgICAgICAgICAg IHNtZF90aHVtYl9ybWRpcihJTVBBVEguJG5hbWUpOwoKICAgICAgICAgICAgICAgICAgICAv LyBEZWxldGUgYWxsIFR4cCB0aHVtYnMgdG9vPwogICAgICAgICAgICAgICAgICAgIGlmICgo JG5hbWUgPT0gJHRoZV9kZmx0KSAmJiAoJHR4cF9kZWwgPT0gJzEnKSkgewogICAgICAgICAg ICAgICAgICAgICAgICAkcnMgPSBzYWZlX3Jvd3MoJ2lkLCBleHQnLCAndHhwX2ltYWdlJywg J3RodW1ibmFpbCA9IDEnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRy cyBhcyAkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGF0aCA9IElNUEFU SCAuICRyb3dbJ2lkJ10gLiAndCcgLiAkcm93WydleHQnXTsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJHBhdGgpKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5saW5rKCRwYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAg ICAgc2FmZV91cGRhdGUoJ3R4cF9pbWFnZScsICd0aHVtYm5haWwgPSAwLCB0aHVtYl93ID0g MCwgdGh1bWJfaCA9IDAnLCAndGh1bWJuYWlsID0gMScpOwogICAgICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkZWZhdWx0IGZsYWcgaWYg dGhpcyB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgaWYgKGdl dF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJykgPT09IGRvU2xhc2goJG5hbWUp KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVs dF9wcm9maWxlJywgJycsICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTik7CiAgICAgICAgICAg ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkbXNnID0gZ1R4dCgnc21kX3RodW1i X3Byb2ZpbGVfZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+IGRvU2xhc2goJG5hbWUpKSk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRz dGVwID0gJ3NtZF90aHVtYl9wcm9maWxlJzsKICAgIH0KCiAgICAkcXMgPSBhcnJheSgKICAg ICAgICAiZXZlbnQiICAgICAgICAgPT4gJ2ltYWdlJywKICAgICAgICAicGFnZSIgICAgICAg ICAgPT4gJHBhZ2UsCiAgICAgICAgInNvcnQiICAgICAgICAgID0+ICRzb3J0LAogICAgICAg ICJkaXIiICAgICAgICAgICA9PiAkZGlyLAogICAgICAgICJjcml0IiAgICAgICAgICA9PiAk Y3JpdCwKICAgICAgICAic2VhcmNoX21ldGhvZCIgPT4gJHNlYXJjaF9tZXRob2QsCiAgICAp OwoKICAgICRwcml2cyA9IHNhZmVfZmllbGQoJ3ByaXZzJywgJ3R4cF91c2VycycsICJuYW1l ID0gJyIgLiBkb1NsYXNoKCR0eHBfdXNlcikgLiAiJyIpOwogICAgJHJpZ2h0cyA9IGluX2Fy cmF5KCRwcml2cywgJHNtZF90aHVtYl9wcmV2cykgPyB0cnVlIDogZmFsc2U7CgogICAgLy8g QWN0aW9uIHRvIHNob3cgdGh1bWJuYWlsIHByZWZzLgogICAgaWYgKCRzdGVwID09PSAnc21k X3RodW1iX3ByZWZzJykgewogICAgICAgIGlmIChzbWRfdGh1bWJfdGFibGVfZXhpc3QoKSkg ewogICAgICAgICAgICAkcHJvX2RmbHQgPSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRf cHJvZmlsZScsICcnLCAxKTsKCiAgICAgICAgICAgIC8vIFN1YnNlbGVjdCBsaXN0cyBmb3Ig dHlwZSAnY2F0JyBhbmQgJ3VzcicuCiAgICAgICAgICAgICRycyA9IGdldFRyZWUoJ3Jvb3Qn LCAnaW1hZ2UnKTsKICAgICAgICAgICAgJGFsbENhdHMgPSAkcnMgPyB0cmVlU2VsZWN0SW5w dXQoJ3NtZF90aHVtYl9jYXRfc2VsZWN0ZWQnLCAkcnMsICcnKSA6ICcnOwogICAgICAgICAg ICAkYWxsQ2F0cyA9ICI8c3Bhbj4iLnN0cl9yZXBsYWNlKGFycmF5KCJcbiIsICctJyksIGFy cmF5KCcnLCAnJiM0NTsnKSwgc3RyX3JlcGxhY2UoJzwvJywgJzxcLycsIGFkZHNsYXNoZXMo JGFsbENhdHMpKSkuIjxcL3NwYW4+IjsKICAgICAgICAgICAgJHJzID0gc2FmZV9jb2x1bW4o J25hbWUnLCAndHhwX3VzZXJzJywgInByaXZzIG5vdCBpbigwLDYpIG9yZGVyIGJ5IG5hbWUg YXNjIik7CiAgICAgICAgICAgICRhbGxVc3JzID0gJHJzID8gc2VsZWN0SW5wdXQoJ3NtZF90 aHVtYl91c3Jfc2VsZWN0ZWQnLCAkcnMsICcnLCB0cnVlKSA6ICcnOwogICAgICAgICAgICAk YWxsVXNycyA9ICI8c3Bhbj4iLnN0cl9yZXBsYWNlKGFycmF5KCJcbiIsICctJyksIGFycmF5 KCcnLCAnJiM0NTsnKSwgc3RyX3JlcGxhY2UoJzwvJywgJzxcLycsIGFkZHNsYXNoZXMoJGFs bFVzcnMpKSkuIjxcL3NwYW4+IjsKCiAgICAgICAgICAgIGVjaG8gc2NyaXB0X2pzKDw8PEVP QwpmdW5jdGlvbiBzbWRfdGh1bWJfc3dpdGNoX3ByZWYob2JqLCBuYW1lKSB7CiAgICBpZiAo bmFtZSA9PSAnY3JlYXRlX2Zyb20nKSB7CiAgICAgICAgc3RhdGUgPSBqUXVlcnkob2JqKS52 YWwoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGUgPSAoalF1ZXJ5KG9iaikucHJvcCgn Y2hlY2tlZCcpKSA/IDEgOiAwOwogICAgfQogICAgc2VuZEFzeW5jRXZlbnQoCiAgICB7CiAg ICAgICAgZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LAogICAgICAgIHN0ZXA6ICdzbWRfdGh1 bWJfc3dpdGNoX3ByZWYnLAogICAgICAgIHNtZF90aHVtYl90eHB0eXBlOiBuYW1lLAogICAg ICAgIHNtZF90aHVtYl9zdGF0ZTogc3RhdGUKICAgIH0pOwp9CmZ1bmN0aW9uIHNtZF90aHVt Yl9jb3B5X3NlbGVjdGVkKCkgewogICAgalF1ZXJ5KCIjaW1hZ2VzX2Zvcm0gdGJvZHkgLm11 bHRpLWVkaXQgaW5wdXQ6Y2hlY2tlZCwgI2ltYWdlc19mb3JtIHRib2R5IC50eHAtbGlzdC1j b2wtbXVsdGktZWRpdCBpbnB1dDpjaGVja2VkIikuZWFjaChmdW5jdGlvbigpIHsKICAgICAg ICBqUXVlcnkoIiNzbWRfdGh1bWJfc2VsZWN0ZWQiKS52YWwoalF1ZXJ5KCIjc21kX3RodW1i X3NlbGVjdGVkIikudmFsKCkgKyBqUXVlcnkodGhpcykudmFsKCkgKyAnLCcpOwogICAgfSk7 Cn0KZnVuY3Rpb24gc21kX3RodW1iX3N1YnNlbChvYmopIHsKICAgIG9iaiA9IGpRdWVyeShv YmopOwogICAgZGVzdCA9IGpRdWVyeSgnI3NtZF90aHVtYl9zdWJzZWwnKTsKICAgIGl0ZW0g PSBvYmoudmFsKCk7CiAgICBzd2l0Y2ggKGl0ZW0pIHsKICAgICAgICBjYXNlICdhbGwnOgog ICAgICAgIGNhc2UgJ3NlbCc6CiAgICAgICAgICAgIGRlc3QuZW1wdHkoKTsKICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgY2FzZSAnY2F0JzoKICAgICAgICAgICAgZGVzdC5lbXB0eSgp LnByZXBlbmQoJ3skYWxsQ2F0c30nKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz ZSAndXNyJzoKICAgICAgICAgICAgZGVzdC5lbXB0eSgpLnByZXBlbmQoJ3skYWxsVXNyc30n KTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9Cn0KalF1ZXJ5KGZ1bmN0aW9uKCkgewogICAg alF1ZXJ5KCcjc21kX3RodW1iX2dyb3VwX3R5cGUnKS5jaGFuZ2UoKTsKfSk7CkVPQwogICAg ICAgICk7CgogICAgICAgICAgICAkYnRuUG5sID0gJzxhIGNsYXNzPSJzbWRfdGh1bWJfc3dp dGNoZXIiIGhyZWY9Ij9ldmVudD1pbWFnZScuYS4nc29ydD0nLiRzb3J0LmEuJ2Rpcj0nLiRk aXIuYS4ncGFnZT0nLiRwYWdlLmEuJ3NlYXJjaF9tZXRob2RbXT0nLiRzZWFyY2hfbWV0aG9k LmEuJ2NyaXQ9Jy4kY3JpdC4nIj4nLmdUeHQoJ3NtZF90aHVtYl9idG5fcG5sJykuJzwvYT4n OwogICAgICAgICAgICAkYnRuR3JwID0gJzxidXR0b24gY2xhc3M9Im5hdmxpbmsiIHR5cGU9 InN1Ym1pdCIgb25jbGljaz0ic21kX3RodW1iX2NvcHlfc2VsZWN0ZWQoKTsgcmV0dXJuIGNv bmZpcm0oXCcnLmdUeHQoJ3NtZF90aHVtYl9jcmVhdGVfZ3JvdXBfY29uZmlybScpLidcJyk7 Ij4nLmdUeHQoJ3NtZF90aHVtYl9hbGxfdGh1bWJzJykuJzwvYnV0dG9uPic7CiAgICAgICAg ICAgICRncnBUeXBlcyA9IGFycmF5KAogICAgICAgICAgICAgICAgJ3NlbCcgPT4gZ1R4dCgn c21kX3RodW1iX2J5c2VsJyksCiAgICAgICAgICAgICAgICAnY2F0JyA9PiBnVHh0KCdjYXRl Z29yeScpLAogICAgICAgICAgICAgICAgJ3VzcicgPT4gZ1R4dCgnYXV0aG9yJyksCiAgICAg ICAgICAgICAgICAnYWxsJyA9PiBnVHh0KCdzbWRfdGh1bWJfYnlhbGwnKSwKICAgICAgICAg ICAgKTsKCiAgICAgICAgICAgICRncnBPcHRzID0gc2VsZWN0SW5wdXQoJ3NtZF90aHVtYl9n cm91cF90eXBlJywgJGdycFR5cGVzLCBnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJfZ3JvdXBf dHlwZScsICdhbGwnLCAxKSwgJycsICcgb25jaGFuZ2U9InNtZF90aHVtYl9zdWJzZWwodGhp cyk7IicsICdzbWRfdGh1bWJfZ3JvdXBfdHlwZScpLic8c3BhbiBpZD0ic21kX3RodW1iX3N1 YnNlbCI+PC9zcGFuPic7CgogICAgICAgICAgICAkb3V0W10gPSAnPGRpdiBpZD0ic21kX3Ro dW1iX3Byb2ZpbGVzIj48aDMgY2xhc3M9InR4cC1zdW1tYXJ5IGxldmVyJy4oZ2V0X3ByZWYo J3BhbmVfc21kX3RodW1ibmFpbF9wcm9maWxlc192aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6 ICcnKS4nIj48YSBocmVmPSIjc21kX3RodW1ibmFpbF9wcm9maWxlcyI+Jy4oKCRyaWdodHMp ID8gZ1R4dCgnc21kX3RodW1iX3Byb2ZpbGVfcHJlZnRvb2xfaGVhZGluZycpIDogZ1R4dCgn c21kX3RodW1iX3Byb2ZpbGVfdG9vbF9oZWFkaW5nJykpLic8L2E+PC9oMz48ZGl2IGlkPSJz bWRfdGh1bWJuYWlsX3Byb2ZpbGVzIiBjbGFzcz0idG9nZ2xlIiBzdHlsZT0iZGlzcGxheTon LihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zpc2libGUnKSA/ICdi bG9jaycgOiAnbm9uZScpLiciPic7CiAgICAgICAgICAgICRvdXRbXSA9ICc8ZGl2IGNsYXNz PSJ0eHAtYnV0dG9ucyI+Jy4kYnRuUG5sLic8L2Rpdj4nOwoKICAgICAgICAgICAgJG91dFtd ID0gJzxkaXYgaWQ9InNtZF90aHVtYl9iYXRjaCI+PHNwYW4gaWQ9InNtZF90aHVtYl9iY3Vy ciI+PC9zcGFuPjxzcGFuIGlkPSJzbWRfdGh1bWJfYnRvdCI+PC9zcGFuPjwvZGl2Pic7CiAg ICAgICAgICAgICRvdXRbXSA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9InNtZF90aHVt Yl9tdWx0aV9lZGl0IiBpZD0ic21kX3RodW1iX211bHRpX2VkaXQiIGFjdGlvbj0iJy5qb2lu X3FzKCRxcykuJyI+JzsKICAgICAgICAgICAgJG91dFtdID0gc3RhcnRUYWJsZSgpOwogICAg ICAgICAgICAkb3V0W10gPSB0cih0ZChnVHh0KCdzbWRfdGh1bWJfYmF0Y2hfcHJlYW1ibGUn KSAuICRncnBPcHRzIC4gJGJ0bkdycCkpOwogICAgICAgICAgICAkb3V0W10gPSBlbmRUYWJs ZSgpOwogICAgICAgICAgICAkb3V0W10gPSBmSW5wdXQoJ2hpZGRlbicsICdzbWRfdGh1bWJf c2VsZWN0ZWQnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnc21kX3RodW1iX3NlbGVjdGVk Jyk7CiAgICAgICAgICAgICRvdXRbXSA9IGVJbnB1dCgkc21kX3RodW1iX2V2ZW50KTsKICAg ICAgICAgICAgJG91dFtdID0gc0lucHV0KCdzbWRfdGh1bWJfY3JlYXRlX2dyb3VwJyk7CiAg ICAgICAgICAgICRvdXRbXSA9ICc8L2Zvcm0+JzsKCiAgICAgICAgICAgIGlmICgkcmlnaHRz KSB7CiAgICAgICAgICAgICAgICAkb3V0W10gPSAnPGRpdj48aDQ+Jy5nVHh0KCdzbWRfdGh1 bWJfcHJlZnMnKS4nPC9oND4nOwogICAgICAgICAgICAgICAgJG91dFtdID0gJzxmb3JtIG1l dGhvZD0icG9zdCIgbmFtZT0ic21kX3RodW1iX3ByZWZzIiBpZD0ic21kX3RodW1iX3ByZWZz X2Zvcm0iIGFjdGlvbj0iJy5qb2luX3FzKCRxcykuJyI+JzsKCiAgICAgICAgICAgICAgICAk dHhwX3JmID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl9jcmVhdGVfZnJvbScsICdmdWxsJyk7CiAg ICAgICAgICAgICAgICAkb3V0W10gPSAnPGRpdiBjbGFzcz0idHhwLXByZWZzLWdyb3VwIj4n OwogICAgICAgICAgICAgICAgJG91dFtdID0gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxk Ij4nOwogICAgICAgICAgICAgICAgJG91dFtdID0gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZp ZWxkLWxhYmVsIj48bGFiZWw+JyAuIGdUeHQoJ3NtZF90aHVtYl90eHBfY3JlYXRlX2Zyb20n KSAuICc8L2xhYmVsPjwvZGl2Pic7CiAgICAgICAgICAgICAgICAkb3V0W10gPSAnPGRpdiBj bGFzcz0idHhwLWZvcm0tZmllbGQtdmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICA8 bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8i CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0ic21kX3RodW1iX2NyZWF0 ZV9mcm9tIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJmdWxsIicK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICgoJHR4cF9yZj09J2Z1bGwnKSA/ ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLiAnIGNsYXNzPSJyYWRpbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvbmNoYW5nZT0ic21kX3RodW1iX3N3aXRjaF9wcmVmKHRoaXMsIFwnY3JlYXRlX2Zyb21c Jyk7IiAvPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIG4gLiBnVHh0KCdz bWRfdGh1bWJfdHhwX2NyZWF0ZV9mcm9tX2Z1bGwnKQogICAgICAgICAgICAgICAgICAgICAg ICAuICc8L2xhYmVsPicKICAgICAgICAgICAgICAgICAgICAgICAgLiBuIC4gJzxsYWJlbD4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzbWRfdGh1bWJfY3JlYXRlX2Zyb20i CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9InRodW1iIicKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAuICgoJHR4cF9yZj09J3RodW1iJykgPyAnIGNo ZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC4gJyBjbGFzcz0icmFkaW8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25j aGFuZ2U9InNtZF90aHVtYl9zd2l0Y2hfcHJlZih0aGlzLCBcJ2NyZWF0ZV9mcm9tXCcpOyIg Lz4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiBuIC4gZ1R4dCgnc21kX3Ro dW1iX3R4cF9jcmVhdGVfZnJvbV90aHVtYicpCiAgICAgICAgICAgICAgICAgICAgICAgIC4n PC9sYWJlbD4nOwogICAgICAgICAgICAgICAgJG91dFtdID0gJzwvZGl2PjwvZGl2Pic7Cgog ICAgICAgICAgICAgICAgaWYgKCRwcm9fZGZsdCkgewogICAgICAgICAgICAgICAgICAgICR0 eHBfYyA9IGdldF9wcmVmKCdzbWRfdGh1bWJfdHhwX2NyZWF0ZScpOwogICAgICAgICAgICAg ICAgICAgICR0eHBfZCA9IGdldF9wcmVmKCdzbWRfdGh1bWJfdHhwX2RlbGV0ZScpOwogICAg ICAgICAgICAgICAgICAgICRvdXRbXSA9ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCI+ JzsKICAgICAgICAgICAgICAgICAgICAkb3V0W10gPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0t ZmllbGQtbGFiZWwiPjxsYWJlbD4nIC4gZ1R4dCgnc21kX3RodW1iX3R4cF9kZWZhdWx0X3N5 bmMnKSAuICc8L2xhYmVsPjwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgJG91dFtdID0g JzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLXZhbHVlIj4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5w dXQgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5hbWU9InNtZF90aHVtYl90eHBfY3JlYXRlIgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2YWx1ZT0iMSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC4gKCgkdHhwX2MpID8gJyBjaGVja2VkPSJjaGVja2VkIicgOiAnJykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnIGNsYXNzPSJjaGVja2JveCIKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9InNtZF90aHVtYl9zd2l0 Y2hfcHJlZih0aGlzLCBcJ3R4cF9jcmVhdGVcJyk7IiAvPicKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLiBuIC4gZ1R4dCgnc21kX3RodW1iX2NyZWF0ZScpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAuICc8L2xhYmVsPicKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC4gbiAuICc8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuYW1lPSJzbWRfdGh1bWJfdHhwX2RlbGV0ZSIKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmFsdWU9IjEiJwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAuICgoJHR4cF9kKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJyBjbGFzcz0iY2hlY2tib3gi CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJzbWRfdGh1 bWJfc3dpdGNoX3ByZWYodGhpcywgXCd0eHBfZGVsZXRlXCcpOyIgLz4nCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC4gbiAuIGdUeHQoJ3NtZF90aHVtYl9kZWxldGUn KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnPC9sYWJlbD4nOwogICAgICAgICAg ICAgICAgICAgICRvdXRbXSA9ICc8L2Rpdj48L2Rpdj4nOwogICAgICAgICAgICAgICAgfQoK ICAgICAgICAgICAgICAgICR0eHBfYXIgPSBnZXRfcHJlZignc21kX3RodW1iX2F1dG9fcmVw bGFjZScpOwogICAgICAgICAgICAgICAgJG91dFtdID0gJzxkaXYgY2xhc3M9InR4cC1mb3Jt LWZpZWxkIj4nOwogICAgICAgICAgICAgICAgJG91dFtdID0gJzxkaXYgY2xhc3M9InR4cC1m b3JtLWZpZWxkLWxhYmVsIj48bGFiZWw+JyAuIGdUeHQoJ3NtZF90aHVtYl90eHBfYXV0b19y ZXBsYWNlJykgLiAnPC9sYWJlbD48L2Rpdj4nOwogICAgICAgICAgICAgICAgJG91dFtdID0g JzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLXZhbHVlIj4KICAgICAgICAgICAgICAgICAg ICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9 ImNoZWNrYm94IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InNtZF90 aHVtYl9hdXRvX3JlcGxhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs dWU9IjEiJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gKCgkdHhwX2FyKSA/ ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLiAnIGNsYXNzPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvbmNoYW5nZT0ic21kX3RodW1iX3N3aXRjaF9wcmVmKHRoaXMsIFwnYXV0b19yZXBs YWNlXCcpOyIgLz4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiBuIC4gZ1R4 dCgneWVzJykKICAgICAgICAgICAgICAgICAgICAgICAgLiAnPC9sYWJlbD4nOwogICAgICAg ICAgICAgICAgJG91dFtdID0gJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgICAgICAgICAkb3V0 W10gPSAnPC9kaXY+PC9mb3JtPjwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg JG91dFtdID0gJzwvZGl2PjwvZGl2PiAnOwogICAgICAgIH0KICAgIC8vIEFjdGlvbiB0byBz aG93IHRodW1ibmFpbCBwcm9maWxlIGxpc3QuCiAgICB9IGVsc2UgewogICAgICAgICRlZGl0 Rm9jdXMgPSAoJHN0ZXAgPT09ICdzbWRfdGh1bWJfcHJvZmlsZV9lZGl0JykgPyAnalF1ZXJ5 KCIjc21kX3RodW1iX3Byb2ZpbGVfZWRpdGVkIGlucHV0W25hbWU9XCdzbWRfdGh1bWJfbmV3 bmFtZVwnXSIpLmZvY3VzKCk7JyA6ICcnOwoKICAgICAgICBlY2hvIHNjcmlwdF9qcyg8PDxF T0MKZnVuY3Rpb24gc21kX3RodW1iX3RvZ2dsZW5ldygpIHsKICAgIGJveCA9IGpRdWVyeSgi I3NtZF90aHVtYl9wcm9maWxlX2NyZWF0ZSIpOwogICAgYm94LnRvZ2dsZUNsYXNzKCJzbWRf aGlkZGVuIHNtZF90aHVtYl9uZXdfcHJvZmlsZSIpOwogICAgalF1ZXJ5KCJpbnB1dC5zbWRf Zm9jdXMiKS5mb2N1cygpOwogICAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIHNtZF90aHVt Yl9zd2l0Y2hfYWN0aXZlKG5hbWUpIHsKICAgIHNlbmRBc3luY0V2ZW50KAogICAgewogICAg ICAgIGV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwKICAgICAgICBzdGVwOiAnc21kX3RodW1i X3N3aXRjaF9hY3RpdmUnLAogICAgICAgIHNtZF90aHVtYl9wcm9maWxlOiBuYW1lCiAgICB9 LCBzbWRfdGh1bWJfc3dpdGNoX2FjdGl2ZV9kb25lKTsKfQpmdW5jdGlvbiBzbWRfdGh1bWJf c3dpdGNoX2FjdGl2ZV9kb25lKGRhdGEpIHsKICAgIHZhciBzbWRfdGh1bWJfcHJvZmlsZSA9 IGpRdWVyeSgnI3NtZF90aHVtYl9wcm9maWxlXycralF1ZXJ5KGRhdGEpLmZpbmQoJ3NtZF90 aHVtYl9wcm9maWxlJykuYXR0cigndmFsdWUnKSk7CiAgICBzbWRfdGh1bWJfcHJvZmlsZS50 b2dnbGVDbGFzcygnc21kX2luYWN0aXZlJyk7CiAgICBpZiAoc21kX3RodW1iX3Byb2ZpbGUu aGFzQ2xhc3MoJ3NtZF9pbmFjdGl2ZScpKSB7CiAgICAgICAgc21kX3RodW1iX3Byb2ZpbGUu ZmluZCgnaW5wdXQ6Y2hlY2tib3gnKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7CiAgICB9IGVs c2UgewogICAgICAgIHNtZF90aHVtYl9wcm9maWxlLmZpbmQoJ2lucHV0OmNoZWNrYm94Jyku YXR0cignY2hlY2tlZCcsICdjaGVja2VkJyk7CiAgICB9Cn0KCmpRdWVyeShmdW5jdGlvbigp IHsKICAgIGpRdWVyeSgnLnNtZF90aHVtYl9oZWFkaW5nX2FjdGl2ZScpLmNsaWNrKGZ1bmN0 aW9uKCkgewogICAgICAgIGpRdWVyeSgnLnNtZF90aHVtYl9yb3cgaW5wdXQ6Y2hlY2tib3gn KS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzbWRfdGh1bWJfc3dpdGNoX2FjdGl2 ZShqUXVlcnkodGhpcykucGFyZW50KCkuYXR0cignY2xhc3MnKSk7CiAgICAgICAgfSk7CiAg ICB9KTsKICAgIHskZWRpdEZvY3VzfQp9KTsKRU9DCiAgICAgICAgKTsKCiAgICAgICAgJGJ0 bk5ldyA9ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gc21kX3RodW1iX3RvZ2dsZW5l dygpOyI+Jy5nVHh0KCdzbWRfdGh1bWJfbmV3JykuJzwvYT4nOwogICAgICAgICRidG5QcmVm ID0gJzxhIGNsYXNzPSJzbWRfdGh1bWJfc3dpdGNoZXIiIGhyZWY9Ij9ldmVudD1pbWFnZScu YS4nc3RlcD1zbWRfdGh1bWJfcHJlZnMnLmEuJ3NvcnQ9Jy4kc29ydC5hLidkaXI9Jy4kZGly LmEuJ3BhZ2U9Jy4kcGFnZS5hLidzZWFyY2hfbWV0aG9kW109Jy4kc2VhcmNoX21ldGhvZC5h Lidjcml0PScuJGNyaXQuJyI+Jy4oKCRyaWdodHMpID8gZ1R4dCgnc21kX3RodW1iX2J0bl90 b29sc19wcmVmcycpIDogZ1R4dCgnc21kX3RodW1iX2J0bl90b29scycpKS4nPC9hPic7CiAg ICAgICAgJGJ0bkNhbmNlbCA9IGZJbnB1dCgnc3VibWl0JywgJ3NtZF90aHVtYl9jYW5jZWwn LCBnVHh0KCdDYW5jZWwnKSk7CgogICAgICAgICRoZWFkaW5ncyA9IG4uJzx0aGVhZD4nLnRy KAogICAgICAgICAgICBuLmNvbHVtbl9oZWFkKCduYW1lJywgJ25hbWUnLCAnaW1hZ2UnLCBm YWxzZSwgJ2FzYycpLgogICAgICAgICAgICBjb2x1bW5faGVhZCgndGh1bWJfd2lkdGgnLCAn d2lkdGgnLCAnaW1hZ2UnLCBmYWxzZSkuCiAgICAgICAgICAgIGNvbHVtbl9oZWFkKCd0aHVt Yl9oZWlnaHQnLCAnaGVpZ2h0JywgJ2ltYWdlJywgZmFsc2UpLgogICAgICAgICAgICBjb2x1 bW5faGVhZChnVHh0KCdzbWRfdGh1bWJfcXVhbGl0eScpLCAncXVhbGl0eScsICdpbWFnZScs IGZhbHNlKS4KICAgICAgICAgICAgY29sdW1uX2hlYWQoJ2tlZXBfc3F1YXJlX3BpeGVscycs ICdjcm9wJywgJ2ltYWdlJywgZmFsc2UpLgogICAgICAgICAgICBjb2x1bW5faGVhZChnVHh0 KCdzbWRfdGh1bWJfc2hhcnBlbicpLCAnc2hhcnBlbicsICdpbWFnZScsIGZhbHNlKS4KICAg ICAgICAgICAgY29sdW1uX2hlYWQoJ2FjdGl2ZScsICdhY3RpdmUnLCAnaW1hZ2UnLCBmYWxz ZSwgJycsICcnLCAnJywgJ3NtZF90aHVtYl9oZWFkaW5nX2FjdGl2ZScpLgogICAgICAgICAg ICBjb2x1bW5faGVhZCgnZGVmYXVsdCcsICdkZWZhdWx0JywgJ2ltYWdlJywgZmFsc2UpLgog ICAgICAgICAgICBjb2x1bW5faGVhZChnVHh0KCdzbWRfdGh1bWJfYWN0aW9ucycpLCAnYWN0 aW9ucycsICdpbWFnZScsIGZhbHNlKQogICAgICAgICkuJzwvdGhlYWQ+JzsKCiAgICAgICAg JG91dFtdID0gJzxkaXYgaWQ9InNtZF90aHVtYl9wcm9maWxlcyI+PGgzIGNsYXNzPSJ0eHAt c3VtbWFyeSBsZXZlcicuKGdldF9wcmVmKCdwYW5lX3NtZF90aHVtYm5haWxfcHJvZmlsZXNf dmlzaWJsZScpID8gJyBleHBhbmRlZCcgOiAnJykuJyI+PGEgaHJlZj0iI3NtZF90aHVtYm5h aWxfcHJvZmlsZXMiIGNsYXNzPSJzbWRfdGh1bWJuYWlsX2hlYWRpbmciPicuZ1R4dCgnc21k X3RodW1iX3Byb2ZpbGVfaGVhZGluZycpLic8L2E+PC9oMz48ZGl2IGlkPSJzbWRfdGh1bWJu YWlsX3Byb2ZpbGVzIiBjbGFzcz0idG9nZ2xlIiBzdHlsZT0iZGlzcGxheTonLihnZXRfcHJl ZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zpc2libGUnKSA/ICdibG9jaycgOiAn bm9uZScpLiciPic7CiAgICAgICAgJG91dFtdID0gJzxkaXYgY2xhc3M9InR4cC1idXR0b25z Ij4nLm4uJGJ0blByZWYuJzwvZGl2Pic7CgogICAgICAgIC8vIE1haW4gbGlzdCBvZiBwcm9m aWxlcy4KICAgICAgICAkb3V0W10gPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBuYW1lPSJzbWRf dGh1bWJfcHJvZmlsZV9mb3JtIiBpZD0ic21kX3RodW1iX3Byb2ZpbGVfZm9ybSIgYWN0aW9u PSInLmpvaW5fcXMoJHFzKS4nIj4nOwogICAgICAgICRvdXRbXSA9IHN0YXJ0VGFibGUoKTsK ICAgICAgICAkb3V0W10gPSAkaGVhZGluZ3M7CgogICAgICAgIGlmIChzbWRfdGh1bWJfdGFi bGVfZXhpc3QoKSkgewogICAgICAgICAgICAkcnMgPSBzYWZlX3Jvd3MoJyonLCBTTURfVEhV TUIsICcxPTEgT1JERVIgQlkgbmFtZScpOwogICAgICAgICAgICAkcHJvX2RmbHQgPSBnZXRf cHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnLCAxKTsKCiAgICAgICAgICAg IC8vIFJvdyBmb3IgZWFjaCBjdXJyZW50bHktZGVmaW5lZCBwcm9maWxlLgogICAgICAgICAg ICBmb3JlYWNoICgkcnMgYXMgJHJvdykgewogICAgICAgICAgICAgICAgJGxpbmtfZWR0ID0g am9pbl9xcygkcXMpLmEuJ3N0ZXA9c21kX3RodW1iX3Byb2ZpbGVfZWRpdCcuYS4nc21kX3Ro dW1iX25hbWU9Jy4kcm93WyduYW1lJ107CiAgICAgICAgICAgICAgICAkbGlua19kZWwgPSBq b2luX3FzKCRxcykuYS4nc3RlcD1zbWRfdGh1bWJfcHJvZmlsZV9kZWxldGUnLmEuJ3NtZF90 aHVtYl9uYW1lPScuJHJvd1snbmFtZSddOwogICAgICAgICAgICAgICAgJGJ0bkVkdCA9ICc8 YSBocmVmPSInLiRsaW5rX2VkdC4nIj5bJyAuIGdUeHQoJ2VkaXQnKSAuICddPC9hPic7CiAg ICAgICAgICAgICAgICAkYnRuRGVsID0gJzxhIGhyZWY9IicuJGxpbmtfZGVsLiciIG9uY2xp Y2s9InJldHVybiBjb25maXJtKFwnJy5nVHh0KCdzbWRfdGh1bWJfZGVsZXRlX2NvbmZpcm0n LCBhcnJheSgie25hbWV9IiA9PiAkcm93WyduYW1lJ10pKS4nXCcpOyI+WycgLiBnVHh0KCdk ZWxldGUnKSAuICddPC9hPic7CiAgICAgICAgICAgICAgICAkYWN0aXZlID0gKCRyb3dbJ2Zs YWdzJ10gJiBTTURfVEhVTUJfQUNUSVZFKSA/IDEgOiAwOwogICAgICAgICAgICAgICAgJGNy b3AgPSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9USFVNQl9DUk9QKSA/IDEgOiAwOwogICAgICAg ICAgICAgICAgJHNoYXJwZW4gPSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9USFVNQl9TSEFSUCkg PyAxIDogMDsKCiAgICAgICAgICAgICAgICBpZiAoJHN0ZXAgPT0gJ3NtZF90aHVtYl9wcm9m aWxlX2VkaXQnICYmICRyb3dbJ25hbWUnXSA9PSAkc21kX3RodW1iX25hbWUpIHsKICAgICAg ICAgICAgICAgICAgICAkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0JywgJ3NtZF90aHVtYl9z YXZlJywgZ1R4dCgnU2F2ZScpLCAncHVibGlzaCcpOwogICAgICAgICAgICAgICAgICAgICRv dXRbXSA9IHRyKAogICAgICAgICAgICAgICAgICAgICAgICB0ZGEoaElucHV0KCdzbWRfdGh1 bWJfbmFtZScsICRyb3dbJ25hbWUnXSkuZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl9uZXdu YW1lJywgJHJvd1snbmFtZSddKSwgYXJyYXkoJ2RhdGEtdGgnID0+IGdUeHQoJ25hbWUnKSkp CiAgICAgICAgICAgICAgICAgICAgICAgIC50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVt Yl93aWR0aCcsICRyb3dbJ3dpZHRoJ10sICcnLCAnJywgJycsICc0JyksIGFycmF5KCdkYXRh LXRoJyA9PiBnVHh0KCd0aHVtYl93aWR0aCcpKSkKICAgICAgICAgICAgICAgICAgICAgICAg LnRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX2hlaWdodCcsICRyb3dbJ2hlaWdodCdd LCAnJywgJycsICcnLCAnNCcpLCBhcnJheSgnZGF0YS10aCcgPT4gZ1R4dCgndGh1bWJfaGVp Z2h0JykpKQogICAgICAgICAgICAgICAgICAgICAgICAudGRhKGZJbnB1dCgndGV4dCcsICdz bWRfdGh1bWJfcXVhbGl0eScsICRyb3dbJ3F1YWxpdHknXSwgJycsICcnLCAnJywgJzQnKSwg YXJyYXkoJ2RhdGEtdGgnID0+IGdUeHQoJ3NtZF90aHVtYl9xdWFsaXR5JykpKQogICAgICAg ICAgICAgICAgICAgICAgICAudGRhKGNoZWNrYm94KCdzbWRfdGh1bWJfY3JvcCcsICcxJywg JGNyb3ApLCBhcnJheSgnZGF0YS10aCcgPT4gZ1R4dCgna2VlcF9zcXVhcmVfcGl4ZWxzJykp KQogICAgICAgICAgICAgICAgICAgICAgICAudGRhKGNoZWNrYm94KCdzbWRfdGh1bWJfc2hh cnBlbicsICcxJywgJHNoYXJwZW4pLCBhcnJheSgnZGF0YS10aCcgPT4gZ1R4dCgnc21kX3Ro dW1iX3NoYXJwZW4nKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIC50ZGEoY2hlY2tib3go J3NtZF90aHVtYl9hY3RpdmUnLCAnMScsICRhY3RpdmUpLCBhcnJheSgnZGF0YS10aCcgPT4g Z1R4dCgnYWN0aXZlJyksICdjbGFzcycgPT4gJHJvd1snbmFtZSddKSkKICAgICAgICAgICAg ICAgICAgICAgICAgLnRkYShjaGVja2JveCgnc21kX3RodW1iX2RlZmF1bHQnLCAnMScsICgo JHJvd1snbmFtZSddID09ICRwcm9fZGZsdCkgPyAxIDogMCkpLCBhcnJheSgnZGF0YS10aCcg PT4gZ1R4dCgnZGVmYXVsdCcpKSkKICAgICAgICAgICAgICAgICAgICAgICAgLnRkYSgkYnRu U2F2ZS4kYnRuQ2FuY2VsLCBhcnJheSgnZGF0YS10aCcgPT4gZ1R4dCgnc21kX3RodW1iX2Fj dGlvbnMnKSkpCiAgICAgICAgICAgICAgICAgICAgLCAnIGlkPSJzbWRfdGh1bWJfcHJvZmls ZV9lZGl0ZWQiJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg ICAgICRvdXRbXSA9IHRyKAogICAgICAgICAgICAgICAgICAgICAgICB0ZGEoaHJlZigkcm93 WyduYW1lJ10sICRsaW5rX2VkdCksIGFycmF5KCdkYXRhLXRoJyA9PiBnVHh0KCduYW1lJykp KS4KICAgICAgICAgICAgICAgICAgICAgICAgdGRhKCRyb3dbJ3dpZHRoJ10sIGFycmF5KCdk YXRhLXRoJyA9PiBnVHh0KCd0aHVtYl93aWR0aCcpKSkuCiAgICAgICAgICAgICAgICAgICAg ICAgIHRkYSgkcm93WydoZWlnaHQnXSwgYXJyYXkoJ2RhdGEtdGgnID0+IGdUeHQoJ3RodW1i X2hlaWdodCcpKSkuCiAgICAgICAgICAgICAgICAgICAgICAgIHRkYSgkcm93WydxdWFsaXR5 J10sIGFycmF5KCdkYXRhLXRoJyA9PiBnVHh0KCdzbWRfdGh1bWJfcXVhbGl0eScpKSkuCiAg ICAgICAgICAgICAgICAgICAgICAgIHRkYSgoJGNyb3ApID8gZ1R4dCgneWVzJykgOiBnVHh0 KCdubycpLCBhcnJheSgnZGF0YS10aCcgPT4gZ1R4dCgna2VlcF9zcXVhcmVfcGl4ZWxzJykp KS4KICAgICAgICAgICAgICAgICAgICAgICAgdGRhKCgkc2hhcnBlbikgPyBnVHh0KCd5ZXMn KSA6IGdUeHQoJ25vJyksIGFycmF5KCdkYXRhLXRoJyA9PiBnVHh0KCdzbWRfdGh1bWJfc2hh cnBlbicpKSkuCiAgICAgICAgICAgICAgICAgICAgICAgIHRkYSgnPGlucHV0IHR5cGU9ImNo ZWNrYm94IiBuYW1lPSJzbWRfdGh1bWJfYWN0aXZlXycuJHJvd1snbmFtZSddLiciIHZhbHVl PSIxIicuKCgkYWN0aXZlKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLiAnIGNsYXNz PSJjaGVja2JveCIgb25jaGFuZ2U9InNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlKFwnJy4kcm93 WyduYW1lJ10uJ1wnKTsiIC8+JywgYXJyYXkoJ2RhdGEtdGgnID0+IGdUeHQoJ2FjdGl2ZScp LCAnY2xhc3MnID0+ICRyb3dbJ25hbWUnXSkpLgogICAgICAgICAgICAgICAgICAgICAgICB0 ZGEoKCRyb3dbJ25hbWUnXSA9PSAkcHJvX2RmbHQpID8gZ1R4dCgneWVzJykgOiBnVHh0KCdu bycpLCBhcnJheSgnZGF0YS10aCcgPT4gZ1R4dCgnZGVmYXVsdCcpKSkuCiAgICAgICAgICAg ICAgICAgICAgICAgIHRkYSgkYnRuRGVsLCBhcnJheSgnZGF0YS10aCcgPT4gZ1R4dCgnc21k X3RodW1iX2FjdGlvbnMnKSkpCiAgICAgICAgICAgICAgICAgICAgLCAnIGlkPSJzbWRfdGh1 bWJfcHJvZmlsZV8nLiRyb3dbJ25hbWUnXS4nIiBjbGFzcz0ic21kX3RodW1iX3JvdycgLiAo KCRhY3RpdmUpID8gJycgOiAnIHNtZF9pbmFjdGl2ZScpLiciJyk7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIE5ldyBQcm9maWxlIHJvdy4KICAg ICAgICAgICAgJG91dFtdPSAnPHRyIGlkPSJzbWRfdGh1bWJfcHJvZmlsZV9jcmVhdGUiIGNs YXNzPSJzbWRfaGlkZGVuIj4nOwogICAgICAgICAgICAkb3V0W10gPSB0ZGEoc0lucHV0KCdz bWRfdGh1bWJfcHJvZmlsZV9zYXZlJykuZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl9hZGRf bmV3bmFtZScsICgoJHN0ZXAgPT09ICdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykgPyAkc21k X3RodW1iX25hbWUgOiAnJyksICdzbWRfZm9jdXMnKSwgYXJyYXkoJ2RhdGEtdGgnID0+IGdU eHQoJ25hbWUnKSkpCiAgICAgICAgICAgICAgICAudGRhKGZJbnB1dCgndGV4dCcsICdzbWRf dGh1bWJfYWRkX3dpZHRoJywgKCgkc3RlcCA9PT0gJ3NtZF90aHVtYl9wcm9maWxlX3NhdmUn KSA/ICR3aWR0aCA6ICcnKSwgJycsICcnLCAnJywgSU5QVVRfWFNNQUxMKSwgYXJyYXkoJ2Rh dGEtdGgnID0+IGdUeHQoJ3RodW1iX3dpZHRoJykpKQogICAgICAgICAgICAgICAgLnRkYShm SW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX2FkZF9oZWlnaHQnLCAoKCRzdGVwID09PSAnc21k X3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJGhlaWdodCA6ICcnKSwgJycsICcnLCAnJywgSU5Q VVRfWFNNQUxMKSwgYXJyYXkoJ2RhdGEtdGgnID0+IGdUeHQoJ3RodW1iX2hlaWdodCcpKSkK ICAgICAgICAgICAgICAgIC50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl9hZGRfcXVh bGl0eScsICgoJHN0ZXAgPT09ICdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykgPyAkcXVhbGl0 eSA6ICcnKSwgJycsICcnLCAnJywgSU5QVVRfWFNNQUxMKSwgYXJyYXkoJ2RhdGEtdGgnID0+ IGdUeHQoJ3NtZF90aHVtYl9xdWFsaXR5JykpKQogICAgICAgICAgICAgICAgLnRkYShjaGVj a2JveCgnc21kX3RodW1iX2FkZF9jcm9wJywgJzEnLCAoKCRzdGVwID09PSAnc21kX3RodW1i X3Byb2ZpbGVfc2F2ZScpID8gJHNtZF90aHVtYl9jcm9wIDogMCkpLCBhcnJheSgnZGF0YS10 aCcgPT4gZ1R4dCgna2VlcF9zcXVhcmVfcGl4ZWxzJykpKQogICAgICAgICAgICAgICAgLnRk YShjaGVja2JveCgnc21kX3RodW1iX2FkZF9zaGFycGVuJywgJzEnLCAoKCRzdGVwID09PSAn c21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHNtZF90aHVtYl9zaGFycGVuIDogMCkpLCBh cnJheSgnZGF0YS10aCcgPT4gZ1R4dCgnc21kX3RodW1iX3NoYXJwZW4nKSkpCiAgICAgICAg ICAgICAgICAudGRhKGNoZWNrYm94KCdzbWRfdGh1bWJfYWRkX2FjdGl2ZV9uZXcnLCAnMScs IDEpLCBhcnJheSgnZGF0YS10aCcgPT4gZ1R4dCgnYWN0aXZlJykpKQogICAgICAgICAgICAg ICAgLnRkYShjaGVja2JveCgnc21kX3RodW1iX2FkZF9kZWZhdWx0JywgJzEnLCAwKSwgYXJy YXkoJ2RhdGEtdGgnID0+IGdUeHQoJ2RlZmF1bHQnKSkpCiAgICAgICAgICAgICAgICAudGRh KGZJbnB1dCgnc3VibWl0JywgJ3NtZF90aHVtYl9hZGQnLCBnVHh0KCdhZGQnKSwgJ3B1Ymxp c2gnKS4kYnRuQ2FuY2VsLCBhcnJheSgnZGF0YS10aCcgPT4gZ1R4dCgnc21kX3RodW1iX2Fj dGlvbnMnKSkpOwogICAgICAgICAgICAkb3V0W109ICc8L3RyPic7CgogICAgICAgIH0KCiAg ICAgICAgJG91dFtdID0gZW5kVGFibGUoKS5uLiRidG5OZXc7CiAgICAgICAgJG91dFtdID0g JzwvZm9ybT48L2Rpdj48L2Rpdj4nOwogICAgfQoKICAgIHJldHVybiBqb2luKG4sICRvdXQp Owp9CgovKioKICogVXNlZnVsIGZ1bmN0aW9uIGZvciBvdGhlciBwbHVnaW5zIHRvIHVzZSB0 byByZXRyaWV2ZSBhIGxpc3Qgb2YgY3VycmVudCBwcm9maWxlcy4KICoKICogQHBhcmFtICBp bnRlZ2VyICRhY3RpdmUgV2hldGhlciB0byBvbmx5IHJldHVybiBhY3RpdmUgcHJvZmlsZXMg KDEpIG9yIGFsbCBvZiB0aGVtICgwKQogKiBAcGFyYW0gIHN0cmluZyAgJG9yZGVyICBUaGUg b3JkZXIgaW4gd2hpY2ggdG8gcmV0dXJuIHRoZSBsaXN0CiAqIEByZXR1cm4gYXJyYXkKICov CmZ1bmN0aW9uIHNtZF90aHVtYl9nZXRfcHJvZmlsZXMoJGFjdGl2ZSA9IDEsICRvcmRlciA9 ICduYW1lJykKewogICAgJGFsbG93ZWRPcmRlcnMgPSBhcnJheSgnbmFtZScsICd3aWR0aCcs ICdoZWlnaHQnLCdxdWFsaXR5Jyk7CiAgICAkb3JkZXIgPSBpbl9hcnJheSgkb3JkZXIsICRh bGxvd2VkT3JkZXJzKSA/ICRvcmRlciA6ICduYW1lJzsKICAgICR3aGVyZVtdID0gJzE9MSc7 CgogICAgaWYgKCRhY3RpdmUpIHsKICAgICAgICAkd2hlcmVbXSA9ICdmbGFncyAmICcgLiBT TURfVEhVTUJfQUNUSVZFOwogICAgfQoKICAgICRycyA9IHNhZmVfcm93cygnKicsIFNNRF9U SFVNQiwgam9pbignIEFORCAnLCAkd2hlcmUpIC4gJyBPUkRFUiBCWSAnLiRvcmRlcik7Cgog ICAgcmV0dXJuICRyczsKfQoKLyoqCiAqIERlbGV0ZSBhIHRodW1ibmFpbCBkaXJlY3Rvcnkg YW5kIGl0cyBjb250ZW50cy4KICoKICogQHBhcmFtICBzdHJpbmcgJGRpciBEaXJlY3Rvcnkg dG8gcmVtb3ZlLgogKi8KZnVuY3Rpb24gc21kX3RodW1iX3JtZGlyKCRkaXIpCnsKICAgIGlm IChpc19kaXIoJGRpcikpIHsKICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJGRpcik7Cgog ICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRvYmplY3QpIHsKICAgICAgICAgICAgaWYg KCRvYmplY3QgIT0gIi4iICYmICRvYmplY3QgIT0gIi4uIikgewogICAgICAgICAgICAgICAg aWYgKGZpbGV0eXBlKCRkaXIuRFMuJG9iamVjdCkgPT0gImRpciIpIHNtZF90aHVtYl9ybWRp cigkZGlyLkRTLiRvYmplY3QpOyBlbHNlIHVubGluaygkZGlyLkRTLiRvYmplY3QpOwogICAg ICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXNldCgkb2JqZWN0cyk7CiAgICAgICAg cm1kaXIoJGRpcik7CiAgICB9Cn0KCi8qKgogKiBTZXQgdGhlIGdsb2JhbCBpbWFnZSBwYXRo IGlmIG5vdCBhbHJlYWR5IHNldC4KICovCmZ1bmN0aW9uIHNtZF90aHVtYl9zZXRfaW1wYXRo KCkKewogICAgZ2xvYmFsICRwYXRoX3RvX3NpdGUsICRpbWdfZGlyOwoKICAgIGlmICghZGVm aW5lZCgnSU1QQVRIJykpIHsKICAgICAgICBkZWZpbmUoJ0lNUEFUSCcsICRwYXRoX3RvX3Np dGUgLiBEUyAuICRpbWdfZGlyIC4gRFMpOwogICAgfQp9CgovKioKICogQWRkIHRodW1ibmFp bCB0YWJsZSBpZiBub3QgYWxyZWFkeSBpbnN0YWxsZWQuCiAqCiAqIEZsYWdzOiBCaXQgMD1B Y3RpdmUgLyAxPUNyb3AgLyAyPVNoYXJwZW4KICovCmZ1bmN0aW9uIHNtZF90aHVtYl90YWJs ZV9pbnN0YWxsKCkKewogICAgZ2xvYmFsICREQjsKCiAgICAkdGFibGVEZWYgPSAiCiAgICAg ICAgbmFtZSAgICBWQVJDSEFSKDMyKSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIHdp ZHRoICAgSU5UKDQpICAgICAgTk9UIE5VTEwgREVGQVVMVCAnMCcsCiAgICAgICAgaGVpZ2h0 ICBJTlQoNCkgICAgICBOT1QgTlVMTCBERUZBVUxUICcwJywKICAgICAgICBxdWFsaXR5IFRJ TllJTlQoMikgIE5VTEwgICAgIERFRkFVTFQgJzc1JywKICAgICAgICBmbGFncyAgIFRJTllJ TlQoMikgIE5PVCBOVUxMIERFRkFVTFQgJzAnLAogICAgICAgIFBSSU1BUlkgS0VZIChuYW1l KQogICAgIjsKCiAgICBpZiAoIXNhZmVfY3JlYXRlKFNNRF9USFVNQiwgJHRhYmxlRGVmKSkg ewogICAgICAgIGVjaG8gbXlzcWxpX2Vycm9yKCREQi0+bGluayk7CiAgICB9CgogICAgLy8g QmFja3VwIHRoZSBjdXJyZW50IHRodW1iIHByZWZzLgogICAgJGV4aXN0cyA9IHNhZmVfcm93 KCcqJywgJ3R4cF9wcmVmcycsICJuYW1lPSdzbWRfdGh1bWJfYmFja3VwX3cnIik7CgogICAg aWYgKCEkZXhpc3RzKSB7CiAgICAgICAgc2V0X3ByZWYoJ3NtZF90aHVtYl9iYWNrdXBfdycs IGdldF9wcmVmKCd0aHVtYl93JyksICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTiwgJ3RleHRf aW5wdXQnLCAwKTsKICAgICAgICBzZXRfcHJlZignc21kX3RodW1iX2JhY2t1cF9oJywgZ2V0 X3ByZWYoJ3RodW1iX2gnKSwgJ3NtZF90aHVtYicsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1 dCcsIDEpOwogICAgICAgIHNldF9wcmVmKCdzbWRfdGh1bWJfYmFja3VwX2MnLCBnZXRfcHJl ZigndGh1bWJfY3JvcCcpLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0 JywgMik7CgogICAgICAgIC8vIEVyYXNlIHRoZSBjdXJyZW50IHRodW1iIHByZWZzCiAgICAg ICAgc2V0X3ByZWYoJ3RodW1iX3cnLCAnJywgJ2ltYWdlJywgUFJFRl9ISURERU4pOwogICAg ICAgIHNldF9wcmVmKCd0aHVtYl9oJywgJycsICdpbWFnZScsIFBSRUZfSElEREVOKTsKICAg ICAgICBzZXRfcHJlZigndGh1bWJfY3JvcCcsICcnLCAnaW1hZ2UnLCBQUkVGX0hJRERFTik7 CiAgICB9Cn0KCi8qKgogKiBEcm9wIHRodW1ibmFpbCB0YWJsZSBpZiBpbiBkYXRhYmFzZS4K ICovCmZ1bmN0aW9uIHNtZF90aHVtYl90YWJsZV9yZW1vdmUoKQp7CiAgICBnbG9iYWwgJERC OwoKICAgIGlmICghc2FmZV9kcm9wKFNNRF9USFVNQikpIHsKICAgICAgICBlY2hvIG15c3Fs aV9lcnJvcigkREItPmxpbmspOwogICAgfQoKICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFs IHRodW1iIHByZWZzLgogICAgJGV4aXN0cyA9IHNhZmVfcm93KCcqJywgJ3R4cF9wcmVmcycs ICJuYW1lPSdzbWRfdGh1bWJfYmFja3VwX3cnIik7CgogICAgaWYgKCRleGlzdHMpIHsKICAg ICAgICBzZXRfcHJlZigndGh1bWJfdycsIGdldF9wcmVmKCdzbWRfdGh1bWJfYmFja3VwX3cn KSwgJ2ltYWdlJywgUFJFRl9ISURERU4pOwogICAgICAgIHNldF9wcmVmKCd0aHVtYl9oJywg Z2V0X3ByZWYoJ3NtZF90aHVtYl9iYWNrdXBfaCcpLCAnaW1hZ2UnLCBQUkVGX0hJRERFTik7 CiAgICAgICAgc2V0X3ByZWYoJ3RodW1iX2Nyb3AnLCBnZXRfcHJlZignc21kX3RodW1iX2Jh Y2t1cF9jJyksICdpbWFnZScsIFBSRUZfSElEREVOKTsKCiAgICB9CgogICAgLy8gRXJhc2Ug dGhlIGJhY2t1cCB0aHVtYiBwcmVmcy4KICAgIHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLAog ICAgICAgICJuYW1lIElOKCdzbWRfdGh1bWJfYmFja3VwX3cnLCAnc21kX3RodW1iX2JhY2t1 cF9oJywgJ3NtZF90aHVtYl9iYWNrdXBfYycsICdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxl JywgJ3BhbmVfc21kX3RodW1ibmFpbF9wcm9maWxlc192aXNpYmxlJywgJ3BhbmVfc21kX3Ro dW1ibmFpbHNfdmlzaWJsZScpIik7Cn0KCi8qKgogKiBEZXRlcm1pbmUgaWYgdGhlIHRodW1i bmFpbCB0YWJsZSBleGlzdHMuCiAqCiAqIEBwYXJhbSAgc3RyaW5nICRhbGwgW2Rlc2NyaXB0 aW9uXQogKi8KZnVuY3Rpb24gc21kX3RodW1iX3RhYmxlX2V4aXN0KCRhbGw9JycpCnsKICAg IGlmICgkYWxsKSB7CiAgICAgICAgJHRibHMgPSBhcnJheShTTURfVEhVTUIgPT4gNSk7CiAg ICAgICAgJG91dCA9IGNvdW50KCR0YmxzKTsKICAgICAgICBmb3JlYWNoICgkdGJscyBhcyAk dGJsID0+ICRjb2xzKSB7CiAgICAgICAgICAgIGlmIChncHMoJ2RlYnVnJykpIHsKICAgICAg ICAgICAgICAgIGVjaG8gIisrIFRBQkxFICIuJHRibC4iIEhBUyAiLmNvdW50KEBzYWZlX3No b3coJ2NvbHVtbnMnLCAkdGJsKSkuIiBDT0xVTU5TOyBSRVFVSVJFUyAiLiRjb2xzLiIgKysi LmJyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjb3VudChAc2FmZV9zaG93KCdj b2x1bW5zJywgJHRibCkpID09ICRjb2xzKSB7CiAgICAgICAgICAgICAgICAkb3V0LS07CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICgkb3V0PT09MCkgPyAxIDog MDsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGdwcygnZGVidWcnKSkgewogICAgICAgICAg ICBlY2hvICIrKyBUQUJMRSAiLlNNRF9USFVNQi4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3co J2NvbHVtbnMnLCBTTURfVEhVTUIpKS4iIENPTFVNTlM7IjsKICAgICAgICB9CiAgICAgICAg cmV0dXJuKEBzYWZlX3Nob3coJ2NvbHVtbnMnLCBTTURfVEhVTUIpKTsKICAgIH0KfQoKLyoq CiAqIEFKQVggZnVuY3Rpb24gdG8gc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IFVJ IGVsZW1lbnRzICh3aGljaCBwYW5lIGlzIHZpc2libGUpLgogKi8KZnVuY3Rpb24gc21kX3Ro dW1ibmFpbF9zYXZlX3BhbmVfc3RhdGUoKQp7CiAgICAkcGFuZXMgPSBhcnJheSgnc21kX3Ro dW1ibmFpbF9wcm9maWxlcycsICdzbWRfdGh1bWJuYWlscycpOwogICAgJHBhbmUgPSBncHMo J3BhbmUnKTsKCiAgICBpZiAoaW5fYXJyYXkoJHBhbmUsICRwYW5lcykpIHsKICAgICAgICBz ZXRfcHJlZigicGFuZV97JHBhbmV9X3Zpc2libGUiLCAoZ3BzKCd2aXNpYmxlJykgPT0gJ3Ry dWUnID8gJzEnIDogJzAnKSwgJ3NtZF90aHVtYicsIFBSRUZfSElEREVOLCAneWVzbm9yYWRp bycsIDAsIFBSRUZfUFJJVkFURSk7CiAgICAgICAgc2VuZF94bWxfcmVzcG9uc2UoKTsKICAg IH0gZWxzZSB7CiAgICAgICAgc2VuZF94bWxfcmVzcG9uc2UoYXJyYXkoJ2h0dHAtc3RhdHVz JyA9PiAnNDAwIEJhZCBSZXF1ZXN0JykpOwogICAgfQp9CgovKioKICogUHVibGljIHRhZzog c2hvdyBhIHRodW1ibmFpbC4KICoKICogQHBhcmFtICBhcnJheSAgJGF0dHMgIFRhZyBhdHRy aWJ1dGVzCiAqIEBwYXJhbSAgc3RyaW5nICR0aGluZyBDb250YWluZXIKICogQHJldHVybiBz dHJpbmcgICAgICAgIEhUTUwKICovCmZ1bmN0aW9uIHNtZF90aHVtYm5haWwoJGF0dHMsICR0 aGluZyA9IE5VTEwpCnsKICAgIGdsb2JhbCAkdGhpc2ltYWdlLCAkaW1nX2RpcjsKCiAgICBl eHRyYWN0KGxBdHRzKGFycmF5KAogICAgICAgICd0eXBlJyAgICAgICA9PiBnZXRfcHJlZign c21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnKSwKICAgICAgICAnaWQnICAgICAgICAg PT4gJycsCiAgICAgICAgJ25hbWUnICAgICAgID0+ICcnLAogICAgICAgICdlc2NhcGUnICAg ICA9PiAnaHRtbCcsCiAgICAgICAgJ3dyYXB0YWcnICAgID0+ICcnLAogICAgICAgICdjbGFz cycgICAgICA9PiAnJywKICAgICAgICAnaHRtbF9pZCcgICAgPT4gJycsCiAgICAgICAgJ3N0 eWxlJyAgICAgID0+ICcnLAogICAgICAgICdsaW5rJyAgICAgICA9PiAnJywKICAgICAgICAn bGlua19yZWwnICAgPT4gJycsCiAgICAgICAgJ3BvcGxpbmsnICAgID0+IDAsCiAgICAgICAg J2FkZF9zdGFtcCcgID0+IDAsCiAgICAgICAgJ3dpZHRoJyAgICAgID0+ICcnLAogICAgICAg ICdoZWlnaHQnICAgICA9PiAnJywKICAgICAgICAnZm9yY2Vfc2l6ZScgPT4gJycsCiAgICAg ICAgJ2Rpc3BsYXknICAgID0+ICd0aHVtYm5haWwnLCAvLyB0aHVtYm5haWwgKGZ1bGwgaW1n IHRhZykgb3IgdXJsCiAgICAgICAgJ2Zvcm0nICAgICAgID0+ICcnLAogICAgKSwgJGF0dHMp KTsKCiAgICAkdGhpbmcgPSAoZW1wdHkoJGZvcm0pKSA/ICR0aGluZyA6IGZldGNoX2Zvcm0o JGZvcm0pOwoKICAgIGlmICgkbmFtZSkgewogICAgICAgICRuYW1lID0gZG9TbGFzaCgkbmFt ZSk7CiAgICAgICAgJHJzID0gc2FmZV9yb3coJyonLCAndHhwX2ltYWdlJywgIm5hbWUgPSAn JG5hbWUnIGxpbWl0IDEiKTsKICAgIH0gZWxzZWlmICgkaWQpIHsKICAgICAgICAkaWQgPSAo aW50KSAkaWQ7CiAgICAgICAgJHJzID0gc2FmZV9yb3coJyonLCAndHhwX2ltYWdlJywgImlk ID0gJGlkIGxpbWl0IDEiKTsKICAgIH0gZWxzZWlmICgkdGhpc2ltYWdlKSB7CiAgICAgICAg JGlkID0gKGludCkgJHRoaXNpbWFnZVsnaWQnXTsKICAgICAgICAkcnMgPSAkdGhpc2ltYWdl OwogICAgfSBlbHNlIHsKICAgICAgICB0cmlnZ2VyX2Vycm9yKGdUeHQoJ3Vua25vd25faW1h Z2UnKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHNtZF90aHVtYl9zZXRfaW1wYXRo KCk7CgogICAgaWYgKCRycykgewogICAgICAgIGV4dHJhY3QoJHJzKTsKICAgICAgICAkdGh1 bWJpbmZvID0gc2FmZV9yb3coJyonLCBTTURfVEhVTUIsICJuYW1lPSciLmRvU2xhc2goJHR5 cGUpLiInIik7CgogICAgICAgIGlmICgkdGh1bWJpbmZvKSB7CiAgICAgICAgICAgICRkaXIg PSBzYW5pdGl6ZUZvclVybCgkdGh1bWJpbmZvWyduYW1lJ10pOwogICAgICAgICAgICAkcGF0 aCA9IElNUEFUSCAuICRkaXIgLiBEUyAuICRpZCAuICRleHQ7CgogICAgICAgICAgICBpZiAo ZmlsZV9leGlzdHMoJHBhdGgpKSB7CiAgICAgICAgICAgICAgICAvLyBEcm9wIG91dCBpZiBh bGwgd2UgbmVlZCB0byBkaXNwbGF5IGlzIHRoZSB0aHVtYidzIFVSTC4KICAgICAgICAgICAg ICAgIGlmICgkZGlzcGxheSA9PT0gJ3VybCcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1 cm4gaWh1IC4gJGltZ19kaXIgLiAnLycgLiAkZGlyIC4gJy8nIC4gJGlkIC4gJGV4dDsKICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGVzY2FwZSA9PT0gJ2h0bWwn KSB7CiAgICAgICAgICAgICAgICAgICAgJGFsdCA9IGh0bWxzcGVjaWFsY2hhcnMoJGFsdCk7 CiAgICAgICAgICAgICAgICAgICAgJGNhcHRpb24gPSBodG1sc3BlY2lhbGNoYXJzKCRjYXB0 aW9uKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkbWV0YVsndXJsJ10g PSBpaHUgLiAkaW1nX2RpciAuICcvJyAuICRkaXIgLiAnLycgLiAkaWQgLiAkZXh0OwogICAg ICAgICAgICAgICAgJG1ldGFbJ2FsdCddID0gJGFsdDsKICAgICAgICAgICAgICAgICRtZXRh Wyd0eXBlJ10gPSAkdHlwZTsKICAgICAgICAgICAgICAgICRtZXRhWyd3aWR0aCddID0gJHdp ZHRoOwogICAgICAgICAgICAgICAgJG1ldGFbJ2hlaWdodCddID0gJGhlaWdodDsKICAgICAg ICAgICAgICAgICRmb3JjZV9zaXplID0gZG9fbGlzdCgkZm9yY2Vfc2l6ZSk7CgogICAgICAg ICAgICAgICAgaWYgKGluX2FycmF5KCd3aWR0aCcsICRmb3JjZV9zaXplKSkgewogICAgICAg ICAgICAgICAgICAgICRtZXRhWydmb3JjZXcnXSA9IDE7CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgaWYgKGluX2FycmF5KCdoZWlnaHQnLCAkZm9yY2Vfc2l6ZSkpIHsK ICAgICAgICAgICAgICAgICAgICAkbWV0YVsnZm9yY2VoJ10gPSAxOwogICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgIC8vIE5lZ2F0aXZlIGxvZ2ljIHNpbmNlIHdlIHdhbnQg dGhlIHN0YW1wIG9uIGJ5IGRlZmF1bHQgZm9yIHRoZSBhZG1pbiBzaWRlLgogICAgICAgICAg ICAgICAgaWYgKCRhZGRfc3RhbXAgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICRtZXRh WydzdGFtcCddID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAo JG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAkbWV0YVsnbmFtZSddID0gJG5hbWU7CiAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRjYXB0aW9uKSB7CiAgICAg ICAgICAgICAgICAgICAgJG1ldGFbJ3RpdGxlJ10gPSAkY2FwdGlvbjsKICAgICAgICAgICAg ICAgIH0KLy8gJG1ldGFbJ3RpdGxlJ10gPSBnVHh0KCdzbWRfdGh1bWJfaW1hZ2UnKSAuICRy c1sndyddIC4gIiAmIzIxNTsgIiAuICRyc1snaCddIC4gc3AgLiAgZ1R4dCgnc21kX3RodW1i X3Byb2ZpbGUnKSAuICR0aHVtYmluZm9bJ3dpZHRoJ10gLiAiICYjMjE1OyAiIC4gJHRodW1i aW5mb1snaGVpZ2h0J107CgogICAgICAgICAgICAgICAgaWYgKCRjYXRlZ29yeSkgewogICAg ICAgICAgICAgICAgICAgICRtZXRhWydjYXRlZ29yeSddID0gJGNhdGVnb3J5OwogICAgICAg ICAgICAgICAgICAgICRtZXRhWydjYXRlZ29yeV90aXRsZSddID0gZmV0Y2hfY2F0ZWdvcnlf dGl0bGUoJGNhdGVnb3J5LCAnaW1hZ2UnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICBpZiAoJGF1dGhvcikgewogICAgICAgICAgICAgICAgICAgICRtZXRhWydhdXRo b3InXSA9ICRhdXRob3I7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg KCRkYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgJG1ldGFbJ2RhdGUnXSA9ICRkYXRlOwog ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkaHRtbF9pZCAmJiAhJHdy YXB0YWcpIHsKICAgICAgICAgICAgICAgICAgICAkbWV0YVsnaWQnXSA9ICRodG1sX2lkOwog ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkY2xhc3MgJiYgISR3cmFw dGFnKSB7CiAgICAgICAgICAgICAgICAgICAgJG1ldGFbJ2NsYXNzJ10gPSAkY2xhc3M7CiAg ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRjbGFzcyA9ICR0 eXBlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkc3R5bGUpIHsK ICAgICAgICAgICAgICAgICAgICAkbWV0YVsnc3R5bGUnXSA9ICRzdHlsZTsKICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICAkb3V0ID0gc21kX3RodW1iX2ltZygkdGh1bWJp bmZvLCAkcnMsICRtZXRhLCAkdGhpbmcpOwoKICAgICAgICAgICAgICAgIGlmICgkbGluaykg ewogICAgICAgICAgICAgICAgICAgICRvdXQgPSBocmVmKCRvdXQsIGltYWdlc3JjdXJsKCRp ZCwgJGV4dCksICghZW1wdHkoJGxpbmtfcmVsKSA/ICcgcmVsPSInIC4gJGxpbmtfcmVsIC4g JyInIDogJycpIC4gJyB0aXRsZT0iJyAuICRjYXB0aW9uIC4gJyInKTsKICAgICAgICAgICAg ICAgIH0gZWxzZWlmICgkcG9wbGluaykgewogICAgICAgICAgICAgICAgICAgICRvdXQgPSAn PGEgaHJlZj0iJyAuIGltYWdlc3JjdXJsKCRpZCwgJGV4dCkgLiAnIicgLgogICAgICAgICAg ICAgICAgICAgICAgICAnIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdwb3B1 cHdpbmRvd1wnLCAnLgogICAgICAgICAgICAgICAgICAgICAgICAnXCd3aWR0aD0nIC4gJHcg LiAnLCBoZWlnaHQ9JyAuICRoIC4gJywgc2Nyb2xsYmFycywgcmVzaXphYmxlXCcpOyByZXR1 cm4gZmFsc2U7Ij4nIC4gJG91dCAuICc8L2E+JzsKICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgICByZXR1cm4gKCR3cmFwdGFnKSA/IGRvVGFnKCRvdXQsICR3cmFwdGFnLCAk Y2xhc3MsICcnLCAkaHRtbF9pZCkgOiAkb3V0OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgfQoKICAgIHRyaWdnZXJfZXJyb3IoZ1R4dCgndW5rbm93bl9pbWFnZScpKTsKfQoKLyoq CiAqIFB1YmxpYyB0YWc6IGNoZWNrIHRodW1ibmFpbCBleGlzdHMuCiAqCiAqIEBwYXJhbSAg YXJyYXkgICRhdHRzICBUYWcgYXR0cmlidXRlcwogKiBAcGFyYW0gIHN0cmluZyAkdGhpbmcg Q29udGFpbmVyCiAqLwpmdW5jdGlvbiBzbWRfaWZfdGh1bWJuYWlsKCRhdHRzLCAkdGhpbmcp CnsKICAgIGdsb2JhbCAkdGhpc2ltYWdlOwoKICAgIGFzc2VydF9pbWFnZSgpOwoKICAgIHNt ZF90aHVtYl9zZXRfaW1wYXRoKCk7CgogICAgZXh0cmFjdChsQXR0cyhhcnJheSgKICAgICAg ICAndHlwZScgPT4gZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnKSwKICAg ICksICRhdHRzKSk7CgogICAgJHRodW1iaW5mbyA9IHNhZmVfcm93KCcqJywgU01EX1RIVU1C LCAibmFtZT0nIi5kb1NsYXNoKCR0eXBlKS4iJyIpOwogICAgJHJldCA9IGZhbHNlOwoKICAg IGlmICgkdGh1bWJpbmZvKSB7CiAgICAgICAgJHBhdGggPSBJTVBBVEggLiBzYW5pdGl6ZUZv clVybCgkdGh1bWJpbmZvWyduYW1lJ10pIC4gRFMgLiAkdGhpc2ltYWdlWydpZCddIC4gJHRo aXNpbWFnZVsnZXh0J107CiAgICAgICAgJHJldCA9IGZpbGVfZXhpc3RzKCRwYXRoKTsKICAg IH0KCiAgICByZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAkcmV0KSk7Cn0KCi8qKgog KiBQdWJsaWMgdGFnOiBkaXNwbGF5IHNlbGVjdGVkIHRodW1ibmFpbCBtZXRhIGRhdGEuCiAq CiAqIEBwYXJhbSAgYXJyYXkgICRhdHRzICBUYWcgYXR0cmlidXRlcwogKiBAcGFyYW0gIHN0 cmluZyAkdGhpbmcgQ29udGFpbmVyCiAqIEByZXR1cm4gc3RyaW5nICAgICAgICBIVE1MCiAq LwpmdW5jdGlvbiBzbWRfdGh1bWJuYWlsX2luZm8oJGF0dHMsICR0aGluZyA9IE5VTEwpCnsK ICAgIGdsb2JhbCAkc21kX3RodW1iX2RhdGE7CgogICAgZXh0cmFjdChsQXR0cyhhcnJheSgK ICAgICAgICAnaXRlbScgICAgPT4gJycsCiAgICAgICAgJ3dyYXB0YWcnID0+ICcnLAogICAg ICAgICdicmVhaycgICA9PiAnJywKICAgICAgICAnY2xhc3MnICAgPT4gJycsCiAgICAgICAg J2RlYnVnJyAgID0+IDAsCiAgICApLCAkYXR0cykpOwoKICAgICR0ZGF0YSA9IGlzX2FycmF5 KCRzbWRfdGh1bWJfZGF0YSkgPyAkc21kX3RodW1iX2RhdGEgOiBhcnJheSgpOwoKICAgIGlm ICgkZGVidWcpIHsKICAgICAgICBlY2hvICcrKyBBVkFJTEFCTEUgSU5GTyArKyc7CiAgICAg ICAgZG1wKCR0ZGF0YSk7CiAgICB9CgogICAgJGl0ZW1zID0gZG9fbGlzdCgkaXRlbSk7CiAg ICAkb3V0ID0gYXJyYXkoKTsKCiAgICBmb3JlYWNoICgkaXRlbXMgYXMgJGl0KSB7CiAgICAg ICAgaWYgKGlzc2V0KCR0ZGF0YVskaXRdKSkgewogICAgICAgICAgICAkb3V0W10gPSAkdGRh dGFbJGl0XTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGRvV3JhcCgkb3V0LCAkd3Jh cHRhZywgJGJyZWFrLCAkY2xhc3MpOwp9IjtzOjQ6InR5cGUiO3M6MToiNSI7czo1OiJvcmRl ciI7czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjIiO3M6NDoiaGVscCI7czoyMTE4ODoiPGgx PnNtZF90aHVtYm5haWw8L2gxPgoKPHA+SWYgeW91JiM4MjE3O3JlIGJvcmVkIG9mIG9uZSBU ZXh0cGF0dGVybiB0aHVtYm5haWwgcGVyIGltYWdlIGFuZCBkb24mIzgyMTc7dCBmYW5jeSB1 c2luZyBhbiBhdXRvLXJlc2l6aW5nIHNjcmlwdCBvciByZWx5aW5nIG9uIHRoZSBicm93c2Vy IHRvIHN0cmV0Y2ggeW91ciB0aHVtYm5haWxzLCA8Y29kZT5zbWRfdGh1bWJuYWlsPC9jb2Rl PiBjb3VsZCBiZSB0aGUgYW5zd2VyLiBJdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBwcm9maWxl cyBmb3IgYXMgbWFueSBUZXh0cGF0dGVybiB0aHVtYm5haWwgc2l6ZXMgYXMgeW91IGxpa2Ug YW5kIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgcGh5c2ljYWwgdGh1bWJuYWlscyBhdCB0 aG9zZSBkaW1lbnNpb25zIGZvciBhbnkvYWxsIG9mIHlvdXIgaW1hZ2VzLjwvcD4KCjxwPlBs ZWFzZSByZXBvcnQgYnVncyBhbmQgcHJvYmxlbXMgd2l0aCB0aGlzIHBsdWdpbiBhdCA8YSBo cmVmPSJodHRwczovL2dpdGh1Yi5jb20vQmxva2Uvc21kX3RodW1ibmFpbC9pc3N1ZXMiPnRo ZSBHaXRIdWIgcHJvamVjdCYjODIxNztzIGlzc3VlcyBwYWdlPC9hPi48L3A+Cgo8aDI+Q29u dGVudHM8L2gyPgoKPHVsPgoJPGxpPjxhIGhyZWY9IiNmZWF0dXJlcyI+RmVhdHVyZXM8L2E+ PC9saT4KCTxsaT48YSBocmVmPSIjaW5zdGFsbCI+VXBncmFkaW5nIGFuZCB1bmluc3RhbGxh dGlvbjwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiN1c2FnZSI+VXNhZ2U8L2E+PC9saT4KCTxs aT48YSBocmVmPSIjdGFncyI+VGFnczwvYT4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iI3N0Ij5z bWRfdGh1bWJuYWlsIHRhZzwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjc3RfaW5mbyI+c21k X3RodW1ibmFpbF9pbmZvIHRhZzwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjc3RfaWYiPnNt ZF9pZl90aHVtYm5haWwgdGFnPC9hPjwvbGk+Cgk8L3VsPjwvbGk+Cgk8bGk+PGEgaHJlZj0i I2hpc3RvcnkiPkhpc3Rvcnk8L2E+PC9saT4KCTxsaT48YSBocmVmPSIjY3JlZGl0cyI+QXV0 aG9ycy9jcmVkaXRzPC9hPjwvbGk+CjwvdWw+Cgo8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJl czwvaDI+Cgo8dWw+Cgk8bGk+QXNzaWduIGFueSBudW1iZXIgb2YgdGh1bWJuYWlscyB0byBU ZXh0cGF0dGVybiYjODIxNztzIGltYWdlcy48L2xpPgoJPGxpPkJhdGNoIGFzc2lnbiB0aHVt Ym5haWxzIHRvIGV4aXN0aW5nIGltYWdlcy48L2xpPgoJPGxpPlNldCBvbmUgdGh1bWJuYWls IHNpemUgYXMgZGVmYXVsdC48L2xpPgoJPGxpPkRpc3BsYXkgYW55IG9mIHRoZSB0aHVtYm5h aWwgc2l6ZXMgb24geW91ciBzaXRlLjwvbGk+Cgk8bGk+S2VlcCB0aHVtYnMgaW4gc3luYyB3 aXRoIFRleHRwYXR0ZXJuJiM4MjE3O3MgdGh1bWJzIGlmIHlvdSB3aXNoLjwvbGk+Cgk8bGk+ Q29uZGl0aW9uYWwgdGh1bWJuYWlsIGNoZWNrIGF2YWlsYWJsZS48L2xpPgo8L3VsPgoKPGgy IGlkPSJpbnN0YWxsIj5VcGdyYWRpbmcgYW5kIHVuaW5zdGFsbGF0aW9uPC9oMj4KCjxwPlJl cXVpcmVzIFRleHRwYXR0ZXJuIDQuNi4wIG9yIGhpZ2hlci48L3A+Cgo8cD5Eb3dubG9hZCB0 aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcv cGx1Z2lucy8xMTg2L3NtZF90aHVtYm5haWwiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRo ZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+ LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSBUZXh0cGF0dGVybiBBZG1pbiDihpIgUGx1Z2lu cyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVmlzaXQgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zNDM2 NyI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUg c3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+Cgo8cD48c3Ryb25nPldo ZW4gdXBncmFkaW5nIGZyb20gdjAuMXggdG8gdjAuMjAsIHlvdXIgcHJlZmVyZW5jZXMgZm9y ICYjODIxNjtLZWVwIFRleHRwYXR0ZXJuIHRodW1ibmFpbHMgaW4gc3luYyB3aXRoIGRlZmF1 bHQgcHJvZmlsZSYjODIxNzsgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgdmlzaXQgdGhlICYj ODIxNjtTZXR1cCYjODIxNzsgYXJlYSB0byByZWluc3RhdGUgdGhlIGJlaGF2aW91ciB5b3Ug ZGVzaXJlLjwvc3Ryb25nPjwvcD4KCjxwPlRvIHVuaW5zdGFsbCwgZGVsZXRlIGZyb20gdGhl IEFkbWluIOKGkiBQbHVnaW5zIHBhZ2UuPC9wPgoKPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gy PgoKPHA+VmlzaXQgdGhlIENvbnRlbnQg4oaSIEltYWdlcyB0YWIuIEFib3ZlIHRoZSBsaXN0 IG9mIGltYWdlcyBpcyBhbiBhcmVhIGxhYmVsbGVkIDxzdHJvbmc+VGh1bWJuYWlsIHByb2Zp bGVzPC9zdHJvbmc+LiBDbGljayBpdCB0byByZXZlYWwgdGhlIGNvbnRyb2wgcGFuZWwuIFlv dSBjYW4gdG9nZ2xlIHRoaXMgcGFuZWwgb24gYW5kIG9mZiBieSBjbGlja2luZyB0aGUgaGVh ZGluZy48L3A+Cgo8cD5Zb3UgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHByb2ZpbGUgdG8g YmVnaW4gd2l0aCwgc28gY2xpY2sgdGhlIDxzdHJvbmc+TmV3IHByb2ZpbGU8L3N0cm9uZz4g YnV0dG9uLiBUaGlzIHdpbGwgcmV2ZWFsIGVkaXQgYm94ZXMgd2hlcmUgeW91IGNhbiBlbnRl cjo8L3A+Cgo8dWw+Cgk8bGk+PHN0cm9uZz5OYW1lPC9zdHJvbmc+OiBzb21lIGRlc2NyaXB0 aXZlIG5hbWUgZm9yIHRoaXMgdGh1bWJuYWlsIGRpbWVuc2lvbi4gWW91IGFyZSBsaW1pdGVk IHRvIHVzdWFsIG5vbi13ZWlyZCBjaGFyYWN0ZXJzIGluIHRoZSBuYW1lLjwvbGk+Cgk8bGk+ PHN0cm9uZz5XaWR0aDwvc3Ryb25nPjogdGh1bWJuYWlsIHdpZHRoLCBpbiBwaXhlbHMuIElm IGxlZnQgYmxhbmsgKG9yIHNldCB0byA8Y29kZT4wPC9jb2RlPikgYW5kIGhlaWdodCBpcyBz cGVjaWZpZWQsIHRoZSB3aWR0aCB3aWxsIGJlIGNvbXB1dGVkIGluIHByb3BvcnRpb24gdG8g dGhlIGhlaWdodC48L2xpPgoJPGxpPjxzdHJvbmc+SGVpZ2h0PC9zdHJvbmc+OiB0aHVtYm5h aWwgaGVpZ2h0LCBpbiBwaXhlbHMuIElmIGxlZnQgYmxhbmsgKG9yIHNldCB0byA8Y29kZT4w PC9jb2RlPikgYW5kIHdpZHRoIGlzIHNwZWNpZmllZCwgdGhlIGhlaWdodCB3aWxsIGJlIGNv bXB1dGVkIGluIHByb3BvcnRpb24gdG8gdGhlIHdpZHRoLjwvbGk+Cgk8bGk+PHN0cm9uZz5R dWFsaXR5ICglKTwvc3Ryb25nPjogVGhlIHF1YWxpdHkgb2YgdGhlIHJlc3VsdGluZyB0aHVt Ym5haWwuIEdlbmVyYWxseSBvbmx5IG9mIHVzZSBmb3IgPHNwYW4gY2xhc3M9ImNhcHMiPkpQ RUc8L3NwYW4+IG9yIDI0LWJpdCA8c3BhbiBjbGFzcz0iY2FwcyI+UE5HPC9zcGFuPiBpbWFn ZXMuIFRoZSBoaWdoZXIgdGhlIHZhbHVlIHRoZSBiZXR0ZXIgdGhlIHF1YWxpdHkgYW5kIHRo ZSBiaWdnZXIgdGhlIGZpbGUgc2l6ZS4gRGVmYXVsdDogPGNvZGU+NzU8L2NvZGU+LjwvbGk+ Cgk8bGk+PHN0cm9uZz5Dcm9wPC9zdHJvbmc+OiB3aGV0aGVyIHRvIGNyb3AgdGhlIGltYWdl IHdoZW4gdGhlIHRodW1ibmFpbCBpcyBjcmVhdGVkLCBvciBzY2FsZSBpdCB0byBmaXQuPC9s aT4KCTxsaT48c3Ryb25nPlNoYXJwZW48L3N0cm9uZz46IHdoZXRoZXIgdG8gYXBwbHkgYSBz aGFycGVuaW5nIGZpbHRlciB0byB0aGUgdGh1bWJuYWlsIHdoZW4gaXQgaXMgY3JlYXRlZC4g VXNlZnVsIGZvciB2ZXJ5IHNtYWxsIGltYWdlcy48L2xpPgoJPGxpPjxzdHJvbmc+QWN0aXZl PC9zdHJvbmc+OiBFbmFibGUvZGlzYWJsZSB0aGlzIHRodW1ibmFpbCBzaXplIHNvIGl0IHdp bGwvd29uJiM4MjE3O3QgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd2hlbiB0aGUgbmV4 dCBpbWFnZSBpcyB1cGxvYWRlZC4gQ2xpY2sgdGhlIGNoZWNrYm94IHRvIGluc3RhbnRseSBz d2l0Y2ggdGhlIHByb2ZpbGUgb24vb2ZmLiBDbGljayB0aGUgJiM4MjE2O0FjdGl2ZSYjODIx Nzsgd29yZCBpbiB0aGUgaGVhZGluZyByb3cgdG8gdG9nZ2xlIHRoZSBzdGF0dXMgb2YgYWxs IHByb2ZpbGVzLiBOb3RlIHRoYXQgdGhpcyBzZXR0aW5nIGdvdmVybnMgaG93IHRoZSA8YSBo cmVmPSIjc21kX3RodW1iX2NyZWF0ZSI+QWxsIHNpemVzPC9hPiBkcm9wZG93biBlbnRyeSBp bnRlcmFjdHMgd2l0aCB0aGUgPGVtPkNyZWF0ZTwvZW0+IGFuZCA8ZW0+RGVsZXRlPC9lbT4g YnV0dG9ucy48L2xpPgoJPGxpPjxzdHJvbmc+RGVmYXVsdDwvc3Ryb25nPjogc2V0IHRoaXMg dGh1bWJuYWlsIHByb2ZpbGUgYXMgdGhlIGRlZmF1bHQuIFRoZSBkZWZhdWx0IGltYWdlIHdp bGwgYmUgZGlzcGxheWVkIGluIHRoZSAmIzgyMTY7SW1hZ2VzJiM4MjE3OyBsaXN0IGFuZCB3 aWxsIGFsc28gYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzaXplIHRvIGJlIGRpc3BsYXllZCB1 c2luZyA8Y29kZT4mbHQ7dHhwOnNtZF90aHVtYm5haWwvJmd0OzwvY29kZT4uIElmIHRoZSBv cHRpb24gdG8gPGEgaHJlZj0iI3NtZF90aHVtYl9wcmVmcyI+c3luYyB3aXRoIFRleHRwYXR0 ZXJuJiM4MjE3O3MgdGh1bWJzPC9hPiBpcyBvbiwgaXQgd2lsbCBhbHNvIGJlY29tZSBUZXh0 cGF0dGVybiYjODIxNztzIHN0YW5kYXJkIChidWlsdC1pbikgdGh1bWJuYWlsIHNpemUgZnJv bSB0aGlzIHBvaW50IGZvcndhcmQuPC9saT4KPC91bD4KCjxwPk9uY2UgeW91JiM4MjE3O3Zl IGNvbmZpZ3VyZWQgeW91ciBwcm9maWxlLCBjbGljayAmIzgyMTY7U2F2ZSYjODIxNzsgdG8g c3RvcmUgaXQuIFlvdSBjYW4gYWx3YXlzIGVkaXQgaXQgYWdhaW4gYnkgY2xpY2tpbmcgaXRz IG5hbWUuIEdvIGFoZWFkIGFuZCBjcmVhdGUgc29tZSBtb3JlIHByb2ZpbGVzIGZvciB0aHVt Ym5haWxzIG9mIGRpZmZlcmVudCBzaXplcy9wYXJhbWV0ZXJzLiBJZiB5b3Ugd2lzaCB0byBk ZWxldGUgYSBwcm9maWxlLCBoaXQgdGhlICYjODIxNjtEZWxldGUmIzgyMTc7IGJ1dHRvbiBh bmQgY29uZmlybS4gPHN0cm9uZz5BbGwgdGh1bWJuYWlscyBhc3NvY2lhdGVkIHdpdGggdGhh dCBwcm9maWxlIHdpbGwgYmUgZGVsZXRlZC48L3N0cm9uZz48L3A+Cgo8cD5BdCB0aGlzIHBv aW50LCBubyB0aHVtYm5haWxzIGhhdmUgYmVlbiBjcmVhdGVkLiBMZXQmIzgyMTc7cyByZWN0 aWZ5IHRoYXQmIzgyMzA7PC9wPgoKPGgzPkNyZWF0aW5nIHRodW1ibmFpbHM8L2gzPgoKPHA+ UGljayBvbmUgb2YgeW91ciBpbWFnZXMgYW5kIGNsaWNrIHRvIGVkaXQgaXQuIEJlbmVhdGgg dGhlIG1haW4gcGljdHVyZSB5b3Ugd2lsbCBzZWUgYW4gYXJlYSBsYWJlbGxlZCAmIzgyMTY7 VGh1bWJuYWlscyYjODIxNzsuIFlvdSBjYW4gdG9nZ2xlIHRoaXMgcGFuZWwgb24gYW5kIG9m ZiBieSBjbGlja2luZyB0aGUgaGVhZGluZy48L3A+Cgo8cD5JbnNpZGUgdGhlIHBhbmVsIGlz IGEgc2ltcGxlIHNlbGVjdCBsaXN0IGNvbnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoIHRo dW1ibmFpbCBwcm9maWxlIHlvdSBoYXZlIGNvbmZpZ3VyZWQsIHBsdXMgdGhlIHNwZWNpYWwg ZW50cnkgJiM4MjE2O0FsbCBzaXplcyYjODIxNzsuIFlvdSBjYW4gc2VsZWN0IG9uZSBvZiB0 aGVzZSBlbnRyaWVzIGFuZCBjbGljayAmIzgyMTY7Q3JlYXRlJiM4MjE3OyB0byBjcmVhdGUg dGh1bWJuYWlsKHMpIGluIHRoZSBzZWxlY3RlZCBzaXplIG9yIGhpdCAmIzgyMTY7RGVsZXRl JiM4MjE3OyB0byByZW1vdmUgdGhlIHNlbGVjdGVkIHRodW1ibmFpbChzKS48L3A+Cgo8cD5P bmNlIGNyZWF0ZWQsIHRoZSB0aHVtYm5haWxzIGFwcGVhciBpbiB0aGUgcGFuZWw7IHJlbWVt YmVyIHRoZXkgY2FuIGJlIHR1Y2tlZCBhd2F5IGlmIHlvdSBkb24mIzgyMTc7dCB3YW50IHRv IGxvb2sgYXQgdGhlbS48L3A+Cgo8cD5JZiB5b3Ugc2VsZWN0ICYjODIxNjtBbGwgc2l6ZXMm IzgyMTc7IGFuZCBoaXQgJiM4MjE2O0NyZWF0ZSYjODIxNzssIHlvdSB3aWxsIGdldCBvbmUg dGh1bWJuYWlsIGZvciBlYWNoIGFjdGl2ZSBwcm9maWxlLiBTaW1pbGFybHksIGlmIHlvdSBo aXQgJiM4MjE2O0RlbGV0ZSYjODIxNzsgYW55IHRodW1ibmFpbHMgc3RvcmVkIGFnYWluc3Qg YW4gYWN0aXZlIHByb2ZpbGUgZm9yIHRoZSBjdXJyZW50IGltYWdlIHdpbGwgYmUgcmVtb3Zl ZC4gQnkgdG9nZ2xpbmcgY2VydGFpbiB0aHVtYm5haWwgcHJvZmlsZXMgb24vb2ZmIHlvdSBj YW4gY29udHJvbCB3aGljaCBvbmVzIGFyZSBjcmVhdGVkIG9yIGRlbGV0ZWQgJiM4MjExOyBi eSBkZWZhdWx0OjwvcD4KCjx1bD4KCTxsaT5XaGVuIHlvdSB1cGxvYWQgYSBuZXcgaW1hZ2Us IHRodW1ibmFpbHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZm9yIGFueSBhY3Rp dmUgcHJvZmlsZXMuPC9saT4KCTxsaT5XaGVuIHlvdSByZXBsYWNlIGFuIGV4aXN0aW5nIGlt YWdlLCB0aHVtYm5haWxzIHdpbGwgb25seSBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZm9y IGFjdGl2ZSBwcm9maWxlcyBpZiB0aHVtYnMgPHN0cm9uZz5kbyBub3Q8L3N0cm9uZz4gYWxy ZWFkeSBleGlzdC4gVGhpcyBvcHRpb24gY2FuIGJlIGFsdGVyZWQgd2l0aCB0aGUgPGEgaHJl Zj0iI3NtZF90aHVtYl9wcmVmcyI+cHJlZnM8L2E+LjwvbGk+CjwvdWw+Cgo8cD5Ob3RlIHRo YXQgaWYgeW91IHVzZSBUZXh0cGF0dGVybiYjODIxNztzIG11bHRpLWVkaXQgdG9vbCB0byBk ZWxldGUgaW1hZ2VzLCA8c3Ryb25nPmFsbDwvc3Ryb25nPiBjb3JyZXNwb25kaW5nIHRodW1i bmFpbHMgZm9yIHRoZSBzZWxlY3RlZCBpbWFnZXMgKGluY2x1ZGluZyBpbmFjdGl2ZSBvbmVz KSB3aWxsIGJlIHJlbW92ZWQuPC9wPgoKPGgzPkN1c3RvbSB0aHVtYm5haWxzPC9oMz4KCjxw PklmIHlvdSBwcmVmZXIgdG8gbWFrZSB5b3VyIG93biB0aHVtYm1haWxzIGluIGFuIGV4dGVy bmFsIHByb2dyYW0sIHlvdSBjYW4gc3RpbGwgc2V0IHVwIHRoZSBwcm9maWxlcyBhcyBub3Jt YWwgYnV0IGluc3RlYWQgb2YgY2xpY2tpbmcgJiM4MjE2O0NyZWF0ZSYjODIxNzsgaW4gdGhl ICYjODIxNjtJbWFnZSBlZGl0JiM4MjE3OyBzY3JlZW4sIHlvdSBjYW4gcGljayBhIHByb2Zp bGUgc2l6ZSBmcm9tIHRoZSBkcm9wZG93biBhbmQgdXNlIHRoZSBmaWxlIHBpY2tlciBmYWNp bGl0eSAmIzgyMTY7QnJvd3NlJiM4MjMwOyYjODIxNzsgdG8gc2VsZWN0IGEgdGh1bWJuYWls IGZyb20geW91ciBoYXJkIGRyaXZlLiBXaGVuIHlvdSBjbGljayAmIzgyMTY7VXBsb2FkJiM4 MjE3OyB0aGUgaW1hZ2Ugd2lsbCBiZSBpbnNlcnRlZCBhZ2FpbnN0IHRoZSBzZWxlY3RlZCBw cm9maWxlLjwvcD4KCjxwPkF0IGFueSB0aW1lIHlvdSBjYW4gY2xpY2sgb25lIG9mIHRoZSB0 aHVtYm5haWxzIChvciBzZWxlY3QgYSBzaXplIGZyb20gdGhlIGRyb3Bkb3duKSBhbmQgY2hv b3NlIGZvciBhbm90aGVyIGltYWdlIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHRodW1ibmFp bCAmIzgyMTE7IGV2ZW4gb25lcyB0aGF0IGhhdmUgYmVlbiBhdXRvLWNyZWF0ZWQuIFNvbWUg dGhpbmdzIHRvIG5vdGUgYWJvdXQgdGhpcyBmZWF0dXJlOjwvcD4KCjxvbD4KCTxsaT5UaGUg dGh1bWJuYWlsIG11c3QgYmUgb2YgdGhlIHNhbWUgZmlsZSB0eXBlIGFzIHRoZSBvcmlnaW5h bCBpbWFnZSBvciB0aGUgdXBsb2FkIHdpbGwgYmUgaWdub3JlZC48L2xpPgoJPGxpPllvdSBj YW4gY2xpY2sgYSBoaWdobGlnaHRlZCBpbWFnZSB0byBkZXNlbGVjdCBpdC48L2xpPgoJPGxp PllvdSBjYW5ub3QgJiM4MjE2O0Jyb3dzZSYjODIzMDsmIzgyMTc7IGZvciBhbiBpbWFnZSAo dGhlIGZpbGUgdXBsb2FkIGJveCBpcyBncmV5ZWQgb3V0KSB1bmxlc3MgeW91IGhhdmUgY2hv c2VuIG9uZSBwcm9maWxlLjwvbGk+Cjwvb2w+Cgo8aDM+QmF0Y2ggdGh1bWJuYWlsIGNyZWF0 aW9uPC9oMz4KCjxwPllvdSBjYW4gYWxzbyBjcmVhdGUgdGh1bWJuYWlscyBlbi1tYXNzZS4g Q2xpY2sgdGhlICYjODIxNjtUb29scyYjODIxNzsgYnV0dG9uIChsYWJlbGxlZCAmIzgyMTY7 U2V0dXAmIzgyMTc7IGlmIHlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzKSBpbiB0aGUgdG9w LXJpZ2h0IGhhbmQgY29ybmVyIG9mIHRoZSBzbWRfdGh1bWJuYWlsIGNvbnRyb2wgcGFuZWwu IEZyb20gdGhlcmUgeW91IHdpbGwgc2VlIGFuIGFyZWEgdGhhdCBhbGxvd3MgeW91IHRvIGNy ZWF0ZSB0aHVtYm5haWxzIGZvcjo8L3A+Cgo8b2w+Cgk8bGk+T25seSB0aGUgc2VsZWN0ZWQg aW1hZ2VzICh0aGUgY2hlY2tib3hlcyBuZXh0IHRvIGVhY2ggaW1hZ2UpLjwvbGk+Cgk8bGk+ QWxsIGltYWdlcyBvZiBhIHBhcnRpY3VsYXIgY2F0ZWdvcnkuPC9saT4KCTxsaT5BbGwgaW1h Z2VzIHVwbG9hZGVkIGJ5IGEgcGFydGljdWxhciB1c2VyLjwvbGk+Cgk8bGk+QWxsIGltYWdl cy48L2xpPgo8L29sPgoKPHA+QWZ0ZXIgc2VsZWN0aW5nIHRoZSBkZXNpcmVkIG9wdGlvbiAo YW5kIGlmIHlvdSBjaG9vc2UgY2F0ZWdvcnkgb3IgYXV0aG9yLCBzZWxlY3Qgb25lIG9mIHRo ZSBlbnRyaWVzIGZyb20gdGhlIHNlY29uZGFyeSBsaXN0IHRoYXQgYXBlYXJzKSwgaGl0ICYj ODIxNjtDcmVhdGUmIzgyMTc7LiBPbmNlIHlvdSBjb25maXJtIHlvdXIgYWN0aW9uLCB0aGUg cGx1Z2luIHdpbGwgZ28gYXdheSBhbmQgY3JlYXRlIHRodW1ibmFpbHMgZm9yIGV2ZXJ5IGFj dGl2ZSBwcm9maWxlIGZvciBhbGwgaW1hZ2VzIHRoYXQgbWF0Y2ggeW91ciBjcml0ZXJpYS4g VGhpcyBpcyBhIHF1aWNrIHdheSB0byBnZW5lcmF0ZSB0aHVtYnMgZm9yIHlvdXIgZXhpc3Rp bmcgaW1hZ2VzLiA8c3Ryb25nPk5vdGU8L3N0cm9uZz4gdGhhdCBpZiB5b3UgY2hvb3NlIHRo ZSBmaXJzdCAoZW1wdHkpIGNhdGVnb3J5IGVudHJ5LCB0aGVuIGFsbCBpbWFnZXMgdGhhdCBo YXZlIG5vdCBiZWVuIGFzc2lnbmVkIGEgY2F0ZWdvcnkgYXJlIG1hbmlwdWxhdGVkLjwvcD4K CjxwPkJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiB0aGlzIHRvb2wgJiM4MjExOyBlc3BlY2lh bGx5IHdpdGggbGFyZ2UgaW1hZ2UgcG9vbHMgJiM4MjExOyB0aGUgcHJvY2VzcyBpcyBkb25l IGFzIGEgYmFja2dyb3VuZCB0YXNrIHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+QUpBWDwvc3Bh bj4uIEFmdGVyIGNsaWNraW5nIHRoZSAmIzgyMTY7Q3JlYXRlJiM4MjE3OyBidXR0b24gKGFu ZCBjb25maXJtaW5nIHlvdSBhcmUgc3VyZSkgYSBjb3VudGVyIHdpbGwgYXBwZWFyIGluIHRo ZSB0b3AtcmlnaHQgb2YgdGhlIHByZWZzIHBhbmVsIHNob3dpbmcgaG93IG1hbnkgaW1hZ2Vz IGl0IGhhcyBwcm9jZXNzZWQgb3V0IG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgaW1hZ2VzIGlu IHRoZSBzZXQuIFdoZW4gaXQmIzgyMTc7cyBkb25lLCBpZiB5b3UgdGhlbiByZWZyZXNoIHlv dXIgJiM4MjE2O0ltYWdlcyYjODIxNzsgdGFiIChlLmcuIGNsaWNrIHRvIHRoZSAmIzgyMTY7 UHJvZmlsZXMmIzgyMTc7IHBhbmUpIHlvdSB3aWxsIHNlZSB5b3VyIGNob3NlbiBkZWZhdWx0 IHRodW1ibmFpbHMgaW4gdGhlIGxpc3QgJiM4MjExOyBhc3N1bWluZyB5b3UmIzgyMTc7dmUg c2V0IG9uZSBhcyBkZWZhdWx0LjwvcD4KCjxoMz5QcmVmZXJlbmNlczwvaDM+Cgo8cD5JZiB5 b3UgaGF2ZSBzdWZmaWNpZW50IHByaXZpbGVnZXMsIGluIHRoZSBsb3dlciBwb3J0aW9uIG9m IHRoZSAmIzgyMTY7U2V0dXAmIzgyMTc7IHBhbmVsIGFyZSBzb21lIG9wdGlvbnMgdGhhdCBn b3Zlcm4gaG93IHRodW1ibmFpbHMgYXJlIGNyZWF0ZWQgZm9yIGFsbCB1c2Vycy4gVGhlcmUg aXMgbm8gJiM4MjE2O1NhdmUmIzgyMTc7IGFjdGlvbiBoZXJlOiB0aGUgY2hlY2ttYXJrcyBh cmUgc3RvcmVkIGluIHJlYWwtdGltZSBhbmQgYWx3YXlzIHJlZmxlY3QgdGhlIGN1cnJlbnQg c3RhdGUuPC9wPgoKPGg0PkNyZWF0ZSBzbWRfdGh1bWJuYWlscyBmcm9tPC9oND4KCjxwPkdv dmVybnMgd2hldGhlciB0aGUgc21kX3RodW1ibmFpbHMgYXJlIGNyZWF0ZWQgZnJvbSB0aGUg ZnVsbCBzaXplIGltYWdlIG9yIGl0cyAoVGV4dHBhdHRlcm4pIHRodW1ibmFpbC4gSWYgeW91 IGhhdmUgZWxlY3RlZCBub3QgdG8gaGF2ZSBUZXh0cGF0dGVybiB0aHVtYm5haWxzIGNyZWF0 ZWQgdGhlbiBpdCYjODIxNztsbCBwcm9iYWJseSBub3Qgd29yayB2ZXJ5IHdlbGwhIFRoaXMg cHJlZmVyZW5jZSBhcHBsaWVzOjwvcD4KCjxvbD4KCTxsaT5XaGVuIHlvdSB1c2UgYW55IG9m IHRoZSBiYXRjaCB0b29scyB0byBtYXNzLXByb2R1Y2Ugc21kX3RodW1ibmFpbHMuPC9saT4K CTxsaT5JZiB5b3UgdXBsb2FkIGEgbmV3IGltYWdlLjwvbGk+Cgk8bGk+SWYgeW91IHJldXBs b2FkIGEgbWFpbiBpbWFnZSBhbmQgJiM4MjE2O1JlY3JlYXRlIHRodW1ibmFpbHMgb24gcmUt dXBsb2FkIG9mIG1haW4gaW1hZ2UmIzgyMTc7IGlzIGNoZWNrZWQuPC9saT4KPC9vbD4KCjxo ND5LZWVwIFRleHRwYXR0ZXJuIHRodW1ibmFpbHMgaW4gc3luYyB3aXRoIGRlZmF1bHQgcHJv ZmlsZTwvaDQ+Cgo8cD48c3Ryb25nPlRoaXMgb3B0aW9uIG9ubHkgYXBwZWFycyBpZiB5b3Ug aGF2ZSBzZXQgYSBwcm9maWxlIGFzIGRlZmF1bHQuPC9zdHJvbmc+PC9wPgoKPHA+T3JkaW5h cmlseSwgc21kX3RodW1ibmFpbCB3b3JrcyBpbmRlcGVuZGVudGx5IG9mIFRleHRwYXR0ZXJu JiM4MjE3O3MgdGh1bWJuYWlscy4gSWYgeW91IGRpc2FibGUgdGhlIHBsdWdpbiB5b3UmIzgy MTc7bGwgc2VlIHRoYXQgZXZlcnl0aGluZyBnb2VzIGJhY2sgdG8gaG93IGl0IHdhcyBiZWZv cmUgeW91IGluc3RhbGxlZCBpdC4gVGhpcyBpcyBncmVhdCBiZWNhdXNlIHlvdXIgaGFyZC1n cmFmdCBpc24mIzgyMTc7dCBsb3N0IGlmIHlvdSBoYXZlIHVwbG9hZGVkIHlvdXIgb3duIHRo dW1icy4gQnV0LCBpZiB5b3Ugc3RhcnQgY3JlYXRpbmcgdGh1bWJzIHdpdGggdGhlIHBsdWdp biB5b3Ugd2lsbCBub3RpY2UgdGhhdCBUZXh0cGF0dGVybiYjODIxNztzIGJ1aWx0IGluIHRh Z3Mgc3VjaCBhcyA8Y29kZT4mbHQ7dHhwOmFydGljbGVfaW1hZ2UgdGh1bWJuYWlsPSZxdW90 OzEmcXVvdDsgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7dHhwOnRodW1ibmFpbCAvJmd0 OzwvY29kZT4gd29uJiM4MjE3O3Qgd29yayBmb3IgbmV3ZXIgdGh1bWJuYWlscy4gVGhpcyBt aWdodCBiZSBjb25mdXNpbmcgc28geW91IGNhbiBvcHQgdG8gaGF2ZSBzbWRfdGh1bWJuYWls IHVwZGF0ZSB5b3VyIFRleHRwYXR0ZXJuIHRodW1ibmFpbHMgYXQgdGhlIHNhbWUgdGltZS48 L3A+Cgo8cD5CeSB0aWNraW5nIGVpdGhlciBvZiB0aGUgY2hlY2tib3hlcywgdGhlIHBsdWdp biB3aWxsIHRyYWNrIGFueSBjaGFuZ2VzIDxzdHJvbmc+dG8gdGhlIGRlZmF1bHQgcHJvZmls ZTwvc3Ryb25nPiBhbmQgbWltaWMgdGhlbSB3aXRoIFRleHRwYXR0ZXJuJiM4MjE3O3MgdGh1 bWJuYWlscy4gVGhpcyBoYXMgYSBmZXcgZWZmZWN0cyB3b3J0aCBoaWdobGlnaHRpbmcmIzgy MzA7PC9wPgoKPHA+PHN0cm9uZz5XaGVuIHRoZSAmIzgyMTY7Q3JlYXRpb24mIzgyMTc7IGNo ZWNrYm94IGlzIHRpY2tlZDo8L3N0cm9uZz48L3A+Cgo8b2w+Cgk8bGk+SWYgeW91IGJhdGNo IGNyZWF0ZSB0aHVtYnMsIHVwbG9hZCBhIG5ldyBpbWFnZSwgb3IgcmVwbGFjZSBhbiBleGlz dGluZyBpbWFnZSwgYSBuZXcgVGV4dHBhdHRlcm4gdGh1bWJuYWlsIHdpbGwgYmUgY3JlYXRl ZCBhdCB0aGUgZGVmYXVsdCBzaXplLiBBbnkgZXhpc3RpbmcgdGh1bWJzIHdpbGwgYmUgb3Zl cndyaXR0ZW4uPC9saT4KCTxsaT5JZiB5b3UgY2hhbmdlIGRlZmF1bHQgcHJvZmlsZSwgYW55 IFRleHRwYXR0ZXJuIHRodW1ibmFpbHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCB3aWxsIHJl bWFpbiBhdCB0aGUgcHJldmlvdXMgc2l6ZS4gT25seSB3aGVuIHlvdSBzdGFydCBjcmVhdGlu ZywgdXBsb2FkaW5nIG9yIHJlcGxhY2luZyBpbWFnZXMgd2lsbCB0aGUgbmV3IHRodW1ibmFp bCBzaXplcyBiZSBjcmVhdGVkLjwvbGk+Cjwvb2w+Cgo8cD48c3Ryb25nPldoZW4gdGhlICYj ODIxNjtEZWxldGlvbiYjODIxNzsgY2hlY2tib3ggaXMgdGlja2VkOjwvc3Ryb25nPjwvcD4K CjxvbD4KCTxsaT5JZiB5b3UgZGVsZXRlIGEgc2luZ2xlIHRodW1iIHRoYXQgY29ycmVzcG9u ZHMgdG8gdGhlIGRlZmF1bHQgcHJvZmlsZSwgYm90aCB0aGUgcHJvZmlsZSB0aHVtYiBhbmQg VGV4dHBhdHRlcm4mIzgyMTc7cyB0aHVtYm1haWwgd2lsbCBiZSBkZWxldGVkLjwvbGk+Cgk8 bGk+SWYgeW91IGRlbGV0ZSBhbiBlbnRpcmUgcHJvZmlsZSwgYWxsIGl0cyB0aHVtYm5haWxz IDxzdHJvbmc+YW5kIGFsbCBUZXh0cGF0dGVybiYjODIxNztzIHRodW1ibmFpbHM8L3N0cm9u Zz4gd2lsbCBiZSByZW1vdmVkLjwvbGk+Cjwvb2w+Cgo8cD48c3Ryb25nPkZ1cnRoZXI6PC9z dHJvbmc+PC9wPgoKPG9sPgoJPGxpPklmIHlvdSBoYXZlIG5vIGRlZmF1bHQgcHJvZmlsZSwg dGhlIGNoZWNrYm94ZXMgZGlzYXBwZWFyIGFuZCB0aGUgc2V0dGluZ3MgaGF2ZSBubyBlZmZl Y3QuIENob29zZSBhIGRlZmF1bHQgcHJvZmlsZSB0byByZWluc3RhdGUgdGhlIGJlaGF2aW91 ci48L2xpPgoJPGxpPklmIHlvdSBkZWFjdGl2YXRlIHRoZSBkZWZhdWx0IHByb2ZpbGUgdGhl IGNoZWNrYm94ZXMgaGF2ZSBubyBlZmZlY3QgPHN0cm9uZz51bmxlc3M8L3N0cm9uZz4geW91 IGRlbGV0ZSB0aGUgcHJvZmlsZSAoc2luY2UgeW91JiM4MjE3O3JlIGRlbGV0aW5nIGl0LCBp dHMgc3RhdHVzIGlzICYjODIxNjtsb3N0JiM4MjE3OyBhbmQgdGhlcmVmb3JlIHRoZSBjaGVj a2JveGVzIGZ1bmN0aW9uIGFzIG5vcm1hbCkuIElmIHRoZXJlJiM4MjE3O3MgYW55IGRvdWJ0 LCB1bmNoZWNrIHRoZSAmIzgyMTY7RGVsZXRpb24mIzgyMTc7IGNoZWNrYm94IGZpcnN0ITwv bGk+Cjwvb2w+Cgo8aDQ+UmVjcmVhdGUgdGh1bWJuYWlscyBvbiByZS11cGxvYWQgb2YgbWFp biBpbWFnZTwvaDQ+Cgo8cD5XaGVuIHRoaXMgY2hlY2tib3ggaXMgY2xlYXJlZCBhbmQgeW91 IDxzdHJvbmc+cmVwbGFjZTwvc3Ryb25nPiBhIG1haW4gaW1hZ2UgKGZyb20gdGhlICYjODIx NjtJbWFnZSBlZGl0JiM4MjE3OyBzY3JlZW4pIGFueSB0aHVtYm5haWxzIHRoYXQgaGF2ZSBh bHJlYWR5IGJlZW4gYXNzaWduZWQgdG8gdGhlIGltYWdlIGFyZSBsZWZ0IGFzIHRoZXkgYXJl ICYjODIxMTsgb25seSBtaXNzaW5nIHRodW1ibmFpbHMgd2lsbCBiZSBjcmVhdGVkIGZyb20g dGhlIG1haW4gaW1hZ2UuIENvbnZlcnNlbHksIGlmIHlvdSBzZXQgdGhpcyBjaGVja2JveCwg d2hlbiB5b3UgdXBsb2FkIHRoZSByZXBsYWNlbWVudCBpbWFnZSA8c3Ryb25nPjxzcGFuIGNs YXNzPSJjYXBzIj5BTEw8L3NwYW4+IHNtZF90aHVtYm5haWxzIGZvciBhY3RpdmUgcHJvZmls ZXMgd2lsbCBiZSAocmUpY3JlYXRlZCBmcm9tIHRoZSBtYWluIGltYWdlLjwvc3Ryb25nPjwv cD4KCjxwPjxzdHJvbmc+Tm90ZSBvbmUgaW1wb3J0YW50IGV4Y2VwdGlvbjo8L3N0cm9uZz4g VGV4dHBhdHRlcm4gdGh1bWJuYWlscyBhcmUgPHN0cm9uZz48c3BhbiBjbGFzcz0iY2FwcyI+ Tk9UPC9zcGFuPjwvc3Ryb25nPiBjb3ZlcmVkIGJ5IHRoaXMgb3B0aW9uICYjODIxMTsgdGhl eSBhcmUgZ292ZXJuZWQgYnkgdGhlICYjODIxNjtLZWVwIFRleHRwYXR0ZXJuIHRodW1icyBp biBzeW5jJiM4MjE3OyAmIzgyMTY7Q3JlYXRpb24mIzgyMTc7IGNoZWNrYm94LiBUaHVzLCBp ZiB5b3UgdXBsb2FkIGEgcmVwbGFjZW1lbnQgaW1hZ2UgYW5kIHRoZSAmIzgyMTY7Q3JlYXRp b24mIzgyMTc7IGNoZWNrYm94IGlzIG9uLCB5b3Ugd2lsbCByZXBsYWNlIFRleHRwYXR0ZXJu JiM4MjE3O3MgdGh1bWJuYWlsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YgdGhlICYj ODIxNjtSZWNyZWF0ZSB0aHVtYm5haWxzJiM4MjMwOyYjODIxNzsgb3B0aW9uLjwvcD4KCjxo MiBpZD0idGFncyI+VGFnczwvaDI+Cgo8aDMgaWQ9InN0Ij5zbWRfdGh1bWJuYWlsIHRhZzwv aDM+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6c21kX3RodW1ibmFpbCAvJmd0OzwvY29kZT48L3By ZT4KCjxwPjxzdHJvbmc+QSBkaXJlY3QgcmVwbGFjZW1lbnQgZm9yIHRoZSBidWlsdCBpbiA8 YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPXRo dW1ibmFpbCI+dHhwOnRodW1ibmFpbDwvYT4gdGFnIHdpdGggZXhhY3RseSB0aGUgc2FtZSBm dW5jdGlvbmFsaXR5IGFuZCBhdHRyaWJ1dGVzIGFwYXJ0IGZyb20gdGhlIGFkZGl0aW9uYWwg YXR0cmlidXRlcyBsaXN0ZWQgYmVsb3cuPC9zdHJvbmc+PC9wPgoKPGg0PkF0dHJpYnV0ZXMg KGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIHR4cDp0aHVtYm5haWwgdGFnIGF0dHJpYnV0ZXMp PC9oND4KCjx1bD4KCTxsaT48Y29kZT5hZGRfc3RhbXA9JnF1b3Q7Ym9vbGVhbiZxdW90Ozwv Y29kZT48YnIgLz4KQWRkcyB0aGUgaW1hZ2UgZmlsZSBtb2RpZmljYXRpb24gdGltZSB0byB0 aGUgZW5kIG9mIHRoZSB0aHVtYm5haWwmIzgyMTc7cyA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPi4gVXNlIDxjb2RlPmFkZF9zdGFtcD0mcXVvdDsxJnF1b3Q7PC9jb2RlPiB0byBz d2l0Y2ggdGhpcyBmZWF0dXJlIG9uLiBUaGlzIGhlbHBzIHByZXZlbnQgc3RhbGUgaW1hZ2Vz LCBidXQgbWF5IHByZXZlbnQgYnJvd3NlcnMgZnJvbSBjYWNoZWluZyB0aGUgdGh1bWJuYWls cyBwcm9wZXJseSwgdGh1cyBpbmNyZWFzaW5nIGJhbmR3aWR0aCB1c2FnZS4gRGVmYXVsdDog PGNvZGU+MDwvY29kZT4uPC9saT4KCTxsaT48Y29kZT5jbGFzcz0mcXVvdDtjbGFzcyBuYW1l JnF1b3Q7PC9jb2RlPjxiciAvPgo8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gPGNv ZGU+Y2xhc3M8L2NvZGU+IHRvIGFwcGx5IHRvIHRoZSA8Y29kZT53cmFwdGFnPC9jb2RlPiBh bmQvb3IgPGNvZGU+Jmx0O2ltZyZndDs8L2NvZGU+IGF0dHJpYnV0ZSB2YWx1ZS4gSWYgb21p dHRlZCwgdGhlIG5hbWUgb2YgdGhlIHByb2ZpbGUgd2lsbCBiZSB1c2VkIGFzIGEgPGNvZGU+ Y2xhc3M8L2NvZGU+IG5hbWUgZm9yIHRoZSA8Y29kZT4mbHQ7aW1nJmd0OzwvY29kZT4gdGFn LiBJZiB5b3Ugc3BlY2lmeSBhIDxjb2RlPndyYXB0YWc8L2NvZGU+IGFuZCBvbWl0IHRoZSA8 Y29kZT5jbGFzczwvY29kZT4sIHRoZSBwcm9maWxlIG5hbWUgd2lsbCBiZSB1c2VkIGFzIGEg PGNvZGU+Y2xhc3M8L2NvZGU+IG9uIGJvdGggdGhlIGNvbnRhaW5lciBhbmQgdGhlIDxjb2Rl PiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWcuPC9saT4KCTxsaT48Y29kZT5kaXNwbGF5PSZxdW90 O3ZhbHVlJnF1b3Q7PC9jb2RlPjxiciAvPgpCeSBkZWZhdWx0LCB0aGlzIHRhZyBvdXRwdXRz IGEgZnVsbCA8Y29kZT4mbHQ7aW1nJmd0OzwvY29kZT4gdGFnLiBJZiB5b3UganVzdCByZXF1 aXJlIHRoZSBpbWFnZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBzbyB5b3UgY2Fu IG1ha2UgeW91ciBvd24gaW1hZ2UgdGFncywgc2V0IDxjb2RlPmRpc3BsYXk9JnF1b3Q7dXJs JnF1b3Q7PC9jb2RlPi4gRGVmYXVsdDogPGNvZGU+dGh1bWJuYWlsPC9jb2RlPi48L2xpPgoJ PGxpPjxjb2RlPmZvcmNlX3NpemU9JnF1b3Q7dmFsdWUmcXVvdDs8L2NvZGU+PGJyIC8+ClVz dWFsbHkgd2hlbiB5b3Ugc2V0IG9uZSBvciBvdGhlciB3aWR0aC9oZWlnaHQgdG8gPGNvZGU+ MDwvY29kZT4gaW4gYSBwcm9maWxlLCB0aGUgYnJvd3NlciBzY2FsZXMgdGhlIG1pc3Npbmcg ZGltZW5zaW9uIGF1dG9tYXRpY2FsbHkuIEl0IGRvZXMgdGhpcyBieSBvbWl0dGluZyB0aGUg PGNvZGU+d2lkdGg9PC9jb2RlPiBvciA8Y29kZT5oZWlnaHQ9PC9jb2RlPiBhdHRyaWJ1dGUg aW4gdGhlIDxjb2RlPmltZzwvY29kZT4gdGFnLiBUaGlzIG1heSBjYXVzZSB2aXN1YWwgYXJ0 ZWZhY3RzIGFzIHRoZSBwYWdlIGlzIHJlbmRlcmVkIGFuZCB0aGUgYnJvd3NlciBjYWxjdWxh dGVzIHRoZSBzaXplcy4gSWYgeW91IHdpc2ggdGhlIHBsdWdpbiB0byBhZGQgdGhlIGFjdHVh bCBkaW1lbnNpb24gdG8gdGhlIDxjb2RlPiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWcgKHRoZSBz aXplIGF0IHRoZSB0aW1lIHRoZSB0aHVtYm5haWwgd2FzIGNyZWF0ZWQpLCB0ZWxsIHRoZSBw bHVnaW4gd2l0aCB0aGlzIGF0dHJpYnV0ZS4gQ2hvb3NlIG9uZSBvciBib3RoIG9mIDxjb2Rl PndpZHRoPC9jb2RlPiBvciA8Y29kZT5oZWlnaHQ8L2NvZGU+LiBDb21tYS1zZXBhcmF0ZSBh cyByZXF1aXJlZC4gRGVmYXVsdDogdW5zZXQuPC9saT4KCTxsaT48Y29kZT5mb3JtPSZxdW90 O2Zvcm0gbmFtZSZxdW90OzwvY29kZT48YnIgLz4KWW91IGNhbiBjb25zdHJ1Y3QgeW91ciBv d24gPGNvZGU+Jmx0O2ltZyZndDs8L2NvZGU+IHRhZ3MgdXNpbmcgdGhlIGdpdmVuIGZvcm0u IElmIG5vdCBzcGVjaWZpZWQsIHlvdSBtYXkgdXNlIHRoZSB0YWcgYXMgYSBjb250YWluZXIu PC9saT4KCTxsaT48Y29kZT50eXBlPSZxdW90O3ZhbHVlJnF1b3Q7PC9jb2RlPjxiciAvPgpV c2UgdGhpcyBhdHRyaWJ1dGUgdG8gZGlzcGxheSB0aHVtYm5haWxzIG9mIHRoZSBnaXZlbiBw cm9maWxlIG5hbWUgKGUuZy4sIDxjb2RlPnR5cGU9JnF1b3Q7bGFyZ2UmcXVvdDs8L2NvZGU+ KS4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IHRoaXMgYXR0cmlidXRlLCB0aGUgZGVmYXVsdCBw cm9maWxlIHdpbGwgYmUgdXNlZC4gSWYgdGhlcmUgaXMgbm8gZGVmYXVsdCBwcm9maWxlIHlv dSYjODIxNztsbCBzZWUgd2FybmluZyBtZXNzYWdlcy48L2xpPgo8L3VsPgoKPHA+VGhlIHRh ZyB3b3JrcyBpbnNpZGUgPGNvZGU+Jmx0O3R4cDppbWFnZXMmZ3Q7PC9jb2RlPiBvciBjYW4g YmUgdXNlZCBzdGFuZGFsb25lIGJ5IHNwZWNpZnlpbmcgdGhlIDxjb2RlPmlkPC9jb2RlPiBv ciA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUuIElmIHVzaW5nIGl0IGFzIGEgY29udGFp bmVyIG9yIHdpdGggdGhlIDxjb2RlPmZvcm08L2NvZGU+IGF0dHJpYnV0ZSB5b3UgZGlzcGxh eSB0aGUgdmFyaW91cyBwaWVjZXMgb2YgdGh1bWJuYWlsIGluZm9ybWF0aW9uIHVzaW5nIHRo ZSA8Y29kZT4mbHQ7dHhwOnNtZF90aHVtYm5haWxfaW5mbyZndDs8L2NvZGU+IHRhZy48L3A+ Cgo8aDQ+RXhhbXBsZXM8L2g0PgoKPGg1PkV4YW1wbGUgMTwvaDU+Cgo8cHJlPjxjb2RlPiZs dDt0eHA6aW1hZ2VzJmd0OwogICAgJmx0O3R4cDpzbWRfdGh1bWJuYWlsIHR5cGU9JnF1b3Q7 YmlnLXNpemUmcXVvdDsgLyZndDsKJmx0Oy90eHA6aW1hZ2VzJmd0OzwvY29kZT48L3ByZT4K CjxwPlNob3cgYWxsIGltYWdlcyB0aGF0IGhhdmUgYmVlbiBnZW5lcmF0ZWQgd2l0aCB0aGUg JiM4MjE2O2JpZy1zaXplJiM4MjE3OyBzbWRfdGh1bWJuYWlsIHByb2ZpbGUuPC9wPgoKPGg1 PkV4YW1wbGUgMjogcmVzcG9uc2l2ZSBpbWFnZXM8L2g1PgoKPHA+U2VlIDxhIGhyZWY9Imh0 dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9Mjg4MzYxI3Ay ODgzNjEiPnJlc3BvbnNpdmUgaW1hZ2VzIHBvc3Q8L2E+IGluIHRoZSBUZXh0cGF0dGVybiBm b3J1bS48L3A+Cgo8aDMgaWQ9InN0X2luZm8iPnNtZF90aHVtYm5haWxfaW5mbyB0YWc8L2gz PgoKPHByZT48Y29kZT4mbHQ7dHhwOnNtZF90aHVtYm5haWxfaW5mbyAvJmd0OzwvY29kZT48 L3ByZT4KCjxwPkRpc3BsYXkgdmFyaW91cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjdXJyZW50 IDxjb2RlPiZsdDt0eHA6c21kX3RodW1ibmFpbCZndDs8L2NvZGU+IHRhZyAoaW4gZWl0aGVy IGl0cyBmb3JtIG9yIGNvbnRhaW5lcikuPC9wPgoKPGg0PkF0dHJpYnV0ZXM8L2g0PgoKPHVs PgoJPGxpPjxjb2RlPmNsYXNzPSZxdW90O2NsYXNzIG5hbWUmcXVvdDs8L2NvZGU+PGJyIC8+ CjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiA8Y29kZT5jbGFzczwvY29kZT4gdG8g YXBwbHkgdG8gdGhlIDxjb2RlPndyYXB0YWc8L2NvZGU+IGF0dHJpYnV0ZSB2YWx1ZS48L2xp PgoJPGxpPjxjb2RlPmJyZWFrPSZxdW90O3ZhbHVlJnF1b3Q7PC9jb2RlPjxiciAvPgpXaGVy ZSB2YWx1ZSBpcyBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZWxlbWVudCwg c3BlY2lmaWVkIHdpdGhvdXQgYnJhY2tldHMgKGUuZy4sIDxjb2RlPmJyZWFrPSZxdW90O2xp JnF1b3Q7PC9jb2RlPikgdG8gc2VwYXJhdGUgbGlzdCBpdGVtcy48L2xpPgoJPGxpPjxjb2Rl Pml0ZW09JnF1b3Q7aXRlbSB2YWx1ZSZxdW90OzwvY29kZT48YnIgLz4KTGlzdCBvZiB0aGlu Z3MgeW91IHdpc2ggdG8gZGlzcGxheS4gQ2hvb3NlIGZyb206Cgk8dWw+CgkJPGxpPjxjb2Rl PmFsdDwvY29kZT46IGltYWdlIGFsdCB0ZXh0LjwvbGk+CgkJPGxpPjxjb2RlPmF1dGhvcjwv Y29kZT46IGltYWdlIGF1dGhvci48L2xpPgoJCTxsaT48Y29kZT5jYXRlZ29yeTwvY29kZT46 IGltYWdlIGNhdGVnb3J5IG5hbWUuPC9saT4KCQk8bGk+PGNvZGU+Y2F0ZWdvcnlfdGl0bGU8 L2NvZGU+OiBpbWFnZSBjYXRlZ29yeSB0aXRsZS48L2xpPgoJCTxsaT48Y29kZT5jbGFzczwv Y29kZT46IGNsYXNzIGFwcGxpZWQgdG8gdGh1bWJuYWlsIChpZiBub3Qgc3VwcGxpZWQsIGlz IHNhbWUgYXMgdHlwZSkuPC9saT4KCQk8bGk+PGNvZGU+ZGF0ZTwvY29kZT4gOiByYXcgZGF0 ZXN0YW1wIG9mIHdoZW4gdGhlIGltYWdlIHdhcyB1cGxvYWRlZC48L2xpPgoJCTxsaT48Y29k ZT5leHQ8L2NvZGU+OiB0aHVtYm5haWwgZmlsZSBleHRlbnNpb24uPC9saT4KCQk8bGk+PGNv ZGU+aDwvY29kZT46IHRodW1ibmFpbCBoZWlnaHQgKHBpeGVscykuPC9saT4KCQk8bGk+PGNv ZGU+aHRtbF9oPC9jb2RlPjogPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+LWZvcm1h dHRlZCA8Y29kZT5oZWlnaHQ8L2NvZGU+IGF0dHJpYnV0ZS48L2xpPgoJCTxsaT48Y29kZT5o dG1sX3c8L2NvZGU+OiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4tZm9ybWF0dGVk IDxjb2RlPndpZHRoPC9jb2RlPiBhdHRyaWJ1dGUuPC9saT4KCQk8bGk+PGNvZGU+aWQ8L2Nv ZGU+OiB0aHVtYm5haWwgSUQuPC9saT4KCQk8bGk+PGNvZGU+bmFtZTwvY29kZT46IGltYWdl IG5hbWUuPC9saT4KCQk8bGk+PGNvZGU+dGl0bGU8L2NvZGU+OiBpbWFnZSB0aXRsZS9jYXB0 aW9uLjwvbGk+CgkJPGxpPjxjb2RlPnR5cGU8L2NvZGU+OiB0aHVtYm5haWwgcHJvZmlsZSBu YW1lLjwvbGk+CgkJPGxpPjxjb2RlPnVybDwvY29kZT46IGZ1bGwgaW1hZ2UgPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj4gb2YgdGhlIHRodW1ibmFpbC48L2xpPgoJCTxsaT48Y29k ZT53PC9jb2RlPjogdGh1bWJuYWlsIHdpZHRoIChwaXhlbHMpLjwvbGk+Cgk8L3VsPjwvbGk+ Cgk8bGk+PGNvZGU+d3JhcHRhZz0mcXVvdDtlbGVtZW50JnF1b3Q7PC9jb2RlPjxiciAvPgo8 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZWxlbWVudCB0byB3cmFwIChtYXJrdXAp IGxpc3QgYmxvY2ssIHNwZWNpZmllZCB3aXRob3V0IGJyYWNrZXRzIChlLmcuLCA8Y29kZT53 cmFwdGFnPSZxdW90O3VsJnF1b3Q7PC9jb2RlPikuPC9saT4KPC91bD4KCjxoNT5FeGFtcGxl IDE8L2g1PgoKPHA+PHNwYW4gY2xhc3M9ImNhcHMiPlRPRE88L3NwYW4+LjwvcD4KCjxoMyBp ZD0ic3RfaWYiPnNtZF9pZl90aHVtYm5haWwgdGFnPC9oMz4KCjxwcmU+PGNvZGU+Jmx0O3R4 cDpzbWRfaWZfdGh1bWJuYWlsJmd0OzwvY29kZT48L3ByZT4KCjxwPkEgZGlyZWN0IHJlcGxh Y2VtZW50IGZvciB0aGUgYnVpbHQgaW4gPGNvZGU+Jmx0O3R4cDppZl90aHVtYm5haWwgLyZn dDs8L2NvZGU+IHRhZyB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS48L3A+ Cgo8aDQ+QXR0cmlidXRlczwvaDQ+Cgo8dWw+Cgk8bGk+PGNvZGU+dHlwZTwvY29kZT46IHVz ZSB0aGlzIGF0dHJpYnV0ZSB0byBjaGVjayBmb3IgdGh1bWJuYWlscyBvZiB0aGUgZ2l2ZW4g cHJvZmlsZSBuYW1lIChlLmcuLCA8Y29kZT50eXBlPSZxdW90O01lZGl1bSZxdW90OzwvY29k ZT4pLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgdGhpcyBhdHRyaWJ1dGUsIHRoZSBkZWZhdWx0 IHByb2ZpbGUgd2lsbCBiZSB0ZXN0ZWQuIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgcHJvZmls ZSB0aGUgdGFnIHdpbGwgYWx3YXlzIHJlbmRlciB0aGUgPGNvZGU+Jmx0O3R4cDplbHNlIC8m Z3Q7PC9jb2RlPiBwb3J0aW9uLjwvbGk+CjwvdWw+Cgo8aDU+RXhhbXBsZSAxPC9oNT4KCjxw PjxzcGFuIGNsYXNzPSJjYXBzIj5UT0RPPC9zcGFuPi48L3A+Cgo8aDI+SG93IGl0IHdvcmtz PC9oMj4KCjxwPkZvciByZWZlcmVuY2UsIHdoZW4geW91IGNyZWF0ZSBhIHByb2ZpbGUgYSBk aXJlY3RvcnkgaXMgY3JlYXRlZCB3aXRoIHRoYXQgbmFtZSBpbnNpZGUgeW91ciBUZXh0cGF0 dGVybiA8Y29kZT5pbWFnZXM8L2NvZGU+IGZvbGRlci4gSW5zaWRlIHRoaXMgZm9sZGVyIHlv dSB3aWxsIGZpbmQgaW1hZ2VzIG9mIHRoZSBmb3JtYXQgPGNvZGU+aWQuZXh0PC9jb2RlPjog d2hlcmUgPGNvZGU+aWQ8L2NvZGU+IGFuZCA8Y29kZT5leHQ8L2NvZGU+IG1hdGNoIHRoZSBj b3JyZXNwb25kaW5nIGltYWdlIElEcyBpbiB0aGUgVGV4dHBhdHRlcm4gZGF0YWJhc2UuIFRo YXQmIzgyMTc7cyBwcmV0dHkgbXVjaCBpdCE8L3A+Cgo8cD5Zb3UgY2FuIGRlbGV0ZSB0aHVt Ym5haWwgZmlsZXMgbWFudWFsbHkgZnJvbSBhbnkgb2YgdGhlc2UgZGlyZWN0b3JpZXMgYW5k IHRoZSBwbHVnaW4gd2lsbCBmaWd1cmUgZXZlcnl0aGluZyBvdXQuIEJ1dCBpdCYjODIxNztz IHByb2JhYmx5IG5vdCBhZHZpc2FibGUgdG8gZGVsZXRlIHRoZSBkaXJlY3RvcmllcyB0aGVt c2VsdmVzICYjODIxMTsgdXNlIHRoZSAmIzgyMTY7RGVsZXRlJiM4MjE3OyBidXR0b25zIGlu IHRoZSBjb250cm9sIHBhbmVsIGZvciB0aGF0LjwvcD4KCjxoMiBpZD0iaGlzdG9yeSI+SGlz dG9yeTwvaDI+Cgo8cD5QbGVhc2Ugc2VlIHRoZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5j b20vQmxva2Uvc21kX3RodW1ibmFpbC9ibG9iL21hc3Rlci9DSEFOR0VMT0cudGV4dGlsZSI+ Y2hhbmdlbG9nIG9uIEdpdEh1YjwvYT4uPC9wPgoKPGgyIGlkPSJjcmVkaXRzIj5BdXRob3Jz L2NyZWRpdHM8L2gyPgoKPHA+V3JpdHRlbiBieSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nv bi5jb20vY29udGFjdCI+U3RlZiBEYXdzb248L2E+LiBNYW55IHRoYW5rcyB0byA8YSBocmVm PSJodHRwczovL2dpdGh1Yi5jb20vQmxva2Uvc21kX3RodW1ibmFpbC9ncmFwaHMvY29udHJp YnV0b3JzIj5hbGwgYWRkaXRpb25hbCBjb250cmlidXRvcnM8L2E+LiBTcGVjaWFsIHRoYW5r cyBhbHNvIHRvIHRoZSBiZXRhIHRlc3QgY3JldyB3aG8gb2ZmZXJlZCBmZWF0dXJlIGFuZCB3 b3JrZmxvdyBhZHZpY2UsIGVzcGVjaWFsbHkgdGhlYm9tYnNpdGUsIGpha29iLCBqc3R1YmJz IGFuZCBtYW5pcXVpLjwvcD4iO3M6MzoibWQ1IjtzOjMyOiJiOGRiMGYyMjJhNDk1MTVlZmJj ZTUyMjM0MDcxMDhhMiI7czo4OiJ0ZXh0cGFjayI7czozMjU3OiIjQHNtZF90aHVtYgpzbWRf dGh1bWJfYWN0aW9ucyA9PiBBY3Rpb25zCnNtZF90aHVtYl9hbGxfc2l6ZXMgPT4gQWxsIHNp emVzCnNtZF90aHVtYl9hbGxfdGh1bWJzID0+IENyZWF0ZQpzbWRfdGh1bWJfYmF0Y2hfcHJl YW1ibGUgPT4gKFJlKWNyZWF0ZSB0aHVtYm5haWxzIGZvciBhbGwgYWN0aXZlIHByb2ZpbGVz LCBiYXNlZCBvbgpzbWRfdGh1bWJfYnRuX3BubCA9PiBQcm9maWxlcwpzbWRfdGh1bWJfYnRu X3Rvb2xzID0+IFRvb2xzCnNtZF90aHVtYl9idG5fdG9vbHNfcHJlZnMgPT4gU2V0dXAKc21k X3RodW1iX2J5YWxsID0+IEFsbCBpbWFnZXMKc21kX3RodW1iX2J5c2VsID0+IFNlbGVjdGVk IGltYWdlcwpzbWRfdGh1bWJfY3JlYXRlID0+IENyZWF0aW9uCnNtZF90aHVtYl9jcmVhdGVf Z3JvdXBfY29uZmlybSA9PiBSZWFsbHkgY3JlYXRlIHRodW1ibmFpbHMgZm9yIEFMTCBhY3Rp dmUgcHJvZmlsZXM/IEFueSBleGlzdGluZyB0aHVtYnMgd2lsbCBiZSBvdmVyd3JpdHRlbi4K c21kX3RodW1iX2RlbGV0ZSA9PiBEZWxldGlvbgpzbWRfdGh1bWJfZGVsZXRlX2NvbmZpcm0g PT4gUmVhbGx5IGRlbGV0ZSBwcm9maWxlIHtuYW1lfT8gSXQgd2lsbCBkZWxldGUgQUxMIHRo dW1ibmFpbHMgb2YgdGhpcyB0eXBlLgpzbWRfdGh1bWJfaW1hZ2UgPT4gSW1hZ2U9CnNtZF90 aHVtYl9uZXcgPT4gTmV3IHByb2ZpbGUKc21kX3RodW1iX3ByZWZzID0+IFByZWZlcmVuY2Vz CnNtZF90aHVtYl9wcm9maWxlID0+IFByb2ZpbGU9CnNtZF90aHVtYl9wcm9maWxlX2RlbGV0 ZWQgPT4gUHJvZmlsZSAie25hbWV9IiBkZWxldGVkCnNtZF90aHVtYl9wcm9maWxlX2V4aXN0 cyA9PiBQcm9maWxlICJ7bmFtZX0iIGFscmVhZHkgZXhpc3RzCnNtZF90aHVtYl9wcm9maWxl X2hlYWRpbmcgPT4gVGh1bWJuYWlsIHByb2ZpbGVzCnNtZF90aHVtYl9wcm9maWxlX3ByZWZ0 b29sX2hlYWRpbmcgPT4gVGh1bWJuYWlsIHNldHVwCnNtZF90aHVtYl9wcm9maWxlX3Rvb2xf aGVhZGluZyA9PiBUaHVtYm5haWwgdG9vbHMKc21kX3RodW1iX3F1YWxpdHkgPT4gUXVhbGl0 eSAoJSkKc21kX3RodW1iX3NoYXJwZW4gPT4gU2hhcnBlbgpzbWRfdGh1bWJfdGFibGVzX25v dF9pbnN0YWxsZWQgPT4gVGFibGVzIG5vdCBpbnN0YWxsZWQ6IHRyeSByZWluc3RhbGxpbmcg dGhlIHBsdWdpbgpzbWRfdGh1bWJfdGh1bWJuYWlsX2hlYWRpbmcgPT4gVGh1bWJuYWlscwpz bWRfdGh1bWJfdHhwX2F1dG9fcmVwbGFjZSA9PiBSZWNyZWF0ZSB0aHVtYm5haWxzIG9uIHJl LXVwbG9hZCBvZiBtYWluIGltYWdlOgpzbWRfdGh1bWJfdHhwX2NyZWF0ZV9mcm9tID0+IENy ZWF0ZSB0aHVtYm5haWxzIGZyb206CnNtZF90aHVtYl90eHBfY3JlYXRlX2Zyb21fZnVsbCA9 PiBGdWxsIHNpemUgaW1hZ2UKc21kX3RodW1iX3R4cF9jcmVhdGVfZnJvbV90aHVtYiA9PiBU aHVtYm5haWwKc21kX3RodW1iX3R4cF9kZWZhdWx0X3N5bmMgPT4gS2VlcCBUeHAgdGh1bWJu YWlscyBpbiBzeW5jIHdpdGggZGVmYXVsdCBwcm9maWxlIG9uOgpzbWRfdGh1bWJfdXBsb2Fk ID0+IFJlcGxhY2Ugc2VsZWN0ZWQgdGh1bWJuYWlsCiNAc21kX3RodW1iCiNAbGFuZ3VhZ2Ug ZnItZnIKc21kX3RodW1iX2FjdGlvbnMgPT4gQWN0aW9ucwpzbWRfdGh1bWJfYWxsX3NpemVz ID0+IFRvdXRlcyBsZXMgdGFpbGxlcwpzbWRfdGh1bWJfYWxsX3RodW1icyA9PiBDcsOpZXIK c21kX3RodW1iX2JhdGNoX3ByZWFtYmxlID0+IChSZSljcsOpZXIgZGVzIHZpZ25ldHRlcyBw b3VyIGxlcyBwcm9maWxzIGFjdGlmcwpzbWRfdGh1bWJfYnRuX3BubCA9PiBQcm9maWxzCnNt ZF90aHVtYl9idG5fdG9vbHMgPT4gT3V0aWxzCnNtZF90aHVtYl9idG5fdG9vbHNfcHJlZnMg PT4gQ29uZmlndXJhdGlvbgpzbWRfdGh1bWJfYnlBbGwgPT4gVG91cyBpbWFnZXMKc21kX3Ro dW1iX2J5U2VsID0+IFPDqWxlY3Rpb25uw6llcwpzbWRfdGh1bWJfY3JlYXRlID0+IENyw6lh dGlvbgpzbWRfdGh1bWJfY3JlYXRlX2dyb3VwX2NvbmZpcm0gPT4gQ3LDqWVyIGxlcyB2aWdu ZXR0ZXMgcG91ciBUT1VTIGxlcyBwcm9maWxzIGV4aXN0YW50ID8gTGVzIHByw6ljw6lkZW50 ZXMgdmlnbmV0dGVzIHNlcm9udCDDqWNyYXPDqWVzLgpzbWRfdGh1bWJfZGVsZXRlID0+IFN1 cHByZXNzaW9uCnNtZF90aHVtYl9kZWxldGVfY29uZmlybSA9PiBWb3VsZXotdm91cyB2cmFp bWVudCBzdXBwcmltZXIgbGUgcHJvZmlsIHtuYW1lfSA/IExlcyB2aWduZXR0ZXMgZGUgY2Ug dHlwZSBzZXJvbnQgVE9VVEVTIHN1cHByaW3DqWVzLgpzbWRfdGh1bWJfaW1hZ2UgPT4gSW1h Z2U9CnNtZF90aHVtYl9uZXcgPT4gTm91dmVhdSBwcm9maWwKc21kX3RodW1iX3ByZWZzID0+ IFByw6lmw6lyZW5jZXMKc21kX3RodW1iX3Byb2ZpbGUgPT4gUHJvZmlsPQpzbWRfdGh1bWJf cHJvZmlsZV9kZWxldGVkID0+IExlIHByb2ZpbCAie25hbWV9IiBhIMOpdMOpIHN1cHByaW3D qS4Kc21kX3RodW1iX3Byb2ZpbGVfZXhpc3RzID0+IExlIHByb2ZpbCAie25hbWV9IiBleGlz dGUgZMOpasOgLgpzbWRfdGh1bWJfcHJvZmlsZV9oZWFkaW5nID0+IFByb2ZpbHMgZGUgdmln bmV0dGVzCnNtZF90aHVtYl9wcm9maWxlX3ByZWZ0b29sX2hlYWRpbmcgPT4gQ29uZmlndXJh dGlvbiBkdSB2aWduZXR0YWdlCnNtZF90aHVtYl9wcm9maWxlX3Rvb2xfaGVhZGluZyA9PiBP dXRpbHMgZGUgdmlnbmV0dGFnZQpzbWRfdGh1bWJfcXVhbGl0eSA9PiBRdWFsaXTDqSAoJSkK c21kX3RodW1iX3NoYXJwZW4gPT4gUmVuZHJlIG5ldApzbWRfdGh1bWJfdGFibGVzX25vdF9p bnN0YWxsZWQgPT4gVGFibGVzIG5vbiBpbnN0YWxsw6llcyA6IGVzc2F5ZXogZGUgcsOpaW5z dGFsbGVyIGxlIHBsdWdpbi4Kc21kX3RodW1iX3RodW1ibmFpbF9oZWFkaW5nID0+IFZpZ25l dHRlcwpzbWRfdGh1bWJfdHhwX2F1dG9fcmVwbGFjZSA9PiBSZWNyw6llciBsZXMgdmlnbmV0 dGVzIGF1IHTDqWzDqWNoYXJnZW1lbnQgZGVzIGltYWdlcyA6CnNtZF90aHVtYl90eHBfY3Jl YXRlID0+IENyw6llcgpzbWRfdGh1bWJfdHhwX2NyZWF0ZV9mcm9tID0+IENyw6llciBsZXMg dmlnbmV0dGVzIMOgIHBhcnRpciBkZSA6CnNtZF90aHVtYl90eHBfY3JlYXRlX2Zyb21fZnVs bCA9PiBsJ2ltYWdlIG9yaWdpbmFsZQpzbWRfdGh1bWJfdHhwX2NyZWF0ZV9mcm9tX3RodW1i ID0+IGxhIHZpZ25ldHRlCnNtZF90aHVtYl90eHBfZGVsZXRlID0+IFN1cHByaW1lcgpzbWRf dGh1bWJfdXBsb2FkID0+IFJlbXBsYWNlciBsZXMgdmlnbmV0dGVzIHPDqWxlY3Rpb25uw6ll cyI7fQ==