Content-Type: multipart/related; start=; boundary=----------JxuqZ6nLgOmBPtWaPDKENk Content-Location: http://community.livejournal.com/bad_rpers_suck/6680158.html?view=120649054 Subject: =?utf-8?Q?bad=5Frpers=5Fsuck:=20You=20plagiarising=20bitches?= MIME-Version: 1.0 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=6680158.html Content-Type: text/html; charset=utf-8; name=6680158.html Content-Id: Content-Location: http://community.livejournal.com/bad_rpers_suck/6680158.html?view=120649054 Content-Transfer-Encoding: Base64 PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJh bnNpdGlvbmFsLy9FTiIKImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQv eGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3 dy53My5vcmcvMTk5OS94aHRtbCIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+CiAg ICA8IS0tIExpdmVKb3VybmFsIEV4cHJlc3NMYW5lOiBZb3UgcmVjZWl2ZWQgdGhp cyBwYWdlIGJlZm9yZSA2MCBmcmVlIHVzZXJzLCBzYXZpbmcgYXBwcm94aW1hdGVs eSAxIHNlY29uZHMhIC0tPgoKICAgIDxoZWFkPgogICAgPG1ldGEgaHR0cC1lcXVp dj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT03Ii8+CiAgICA8bWV0YSBo dHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hh cnNldD11dGYtOCIgLz4KICAgIDx0aXRsZT5iYWRfcnBlcnNfc3VjazogWW91IHBs YWdpYXJpc2luZyBiaXRjaGVzPC90aXRsZT4KICAgIAogICAgICAgIAoKICAgIDxz Y3JpcHQ+CiAgICAKICAgIDwvc2NyaXB0PgogICAgCiAgICAgICAgPHNjcmlwdCB0 eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICB2YXIgU2l0ZTsKICAg ICAgICAgICAgaWYgKCFTaXRlKQogICAgICAgICAgICAgICAgU2l0ZSA9IHt9OwoK ICAgICAgICAgICAgdmFyIHNpdGVfcCA9IHsibWVkaWFfZW1iZWRfZW5hYmxlZCI6 IDEsCiJpbmJveF91cGRhdGVfcG9sbCI6IDAsCiJoYXNfcmVtb3RlIjogMSwKInN0 YXRwcmVmaXgiOiAiaHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20iLAoiY3R4 X3BvcHVwIjogMSwKImltZ3ByZWZpeCI6ICJodHRwOi8vbC1zdGF0LmxpdmVqb3Vy bmFsLmNvbS9pbWciLAoiZXNuX2FzeW5jIjogMSwKImN1cnJlbnRKb3VybmFsIjog ImJhZF9ycGVyc19zdWNrIiwKInNpdGVyb290IjogImh0dHA6Ly93d3cubGl2ZWpv dXJuYWwuY29tIiwKImN1cnJlbnRKb3VybmFsQmFzZSI6ICJodHRwOi8vY29tbXVu aXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3VjayJ9OwogICAgICAgICAg ICB2YXIgc2l0ZV9rID0gWyJtZWRpYV9lbWJlZF9lbmFibGVkIiwgImluYm94X3Vw ZGF0ZV9wb2xsIiwgImhhc19yZW1vdGUiLCAic3RhdHByZWZpeCIsICJjdHhfcG9w dXAiLCAiaW1ncHJlZml4IiwgImVzbl9hc3luYyIsICJjdXJyZW50Sm91cm5hbCIs ICJzaXRlcm9vdCIsICJjdXJyZW50Sm91cm5hbEJhc2UiXTsKICAgICAgICAgICAg Zm9yICh2YXIgaSA9IDA7IHNpdGVfay5sZW5ndGggPiBpOyBpKyspIHsKICAgICAg ICAgICAgICAgIFNpdGVbc2l0ZV9rW2ldXSA9IHNpdGVfcFtzaXRlX2tbaV1dOwog ICAgICAgICAgICB9CiAgICAgICA8L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0i dGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwu Y29tL2pzLz8/Y29yZS5qcyxkb20uanMsaHR0cHJlcS5qcyxsaXZlam91cm5hbC5q cyxjb21tb24vQWRFbmdpbmUuanMsZXNuLmpzLGlwcHUuanMsbGpfaXBwdS5qcyxo b3VyZ2xhc3MuanMsY29udGV4dHVhbGhvdmVyLmpzLHRocmVhZF9leHBhbmRlci5q cyxqc29uLmpzLHRlbXBsYXRlLmpzLHVzZXJwaWNzZWxlY3QuanMsaW5wdXRjb21w bGV0ZS5qcyxkYXRhc291cmNlLmpzLHNlbGVjdGFibGVfdGFibGUuanMseF9jb3Jl LmpzLHF1aWNrcmVwbHkuanMsY29tbWVudG1hbmFnZS5qcyxob3Jpem9uLmpzLGxp dmVqb3VybmFsLWxvY2FsLmpzP3Y9MTIzNzg0OTU4OCI+PC9zY3JpcHQ+CjxsaW5r IHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9s LXN0YXQubGl2ZWpvdXJuYWwuY29tLz8/bGpfYmFzZS5jc3MsZXNuLmNzcyxjb250 ZXh0dWFsaG92ZXIuY3NzLHVwcy5jc3MsbGpfYmFzZS1hcHAuY3NzLGFkX2Jhc2Uu Y3NzLGhvcml6b24vc2NyZWVuLmNzcyxob3Jpem9uL2xheW91dC5jc3Msd2lkZ2V0 LmNzcyxob3Jpem9uL2hvcml6b250YWwuY3NzP3Y9MTIzNjgxMDk0MCIgLz4KCiAg ICA8bGluayByZWw9ImhvbWUiIHRpdGxlPSJIb21lIiBocmVmPSJodHRwOi8vd3d3 LmxpdmVqb3VybmFsLmNvbS8iIC8+CiAgICA8bGluayByZWw9ImNvbnRlbnRzIiB0 aXRsZT0iU2l0ZSBNYXAiIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29t L3NpdGUvIiAvPgogICAgPGxpbmsgcmVsPSJoZWxwIiB0aXRsZT0iVGVjaG5pY2Fs IFN1cHBvcnQiIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL3N1cHBv cnQvIiAvPgogICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJo dHRwOi8vbC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvYXBwbGUtdG91Y2gtaWNv bi5wbmciIC8+CiAgICA8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vaW5k ZXgsIG5vZm9sbG93LCBub2FyY2hpdmUiIC8+CjxtZXRhIG5hbWU9Imdvb2dsZWJv dCIgY29udGVudD0ibm9pbmRleCwgbm9mb2xsb3csIG5vYXJjaGl2ZSwgbm9zbmlw cGV0IiAvPgo8bGluayBocmVmPSdodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9n by5ibWw/am91cm5hbD1iYWRfcnBlcnNfc3VjayZhbXA7aXRlbWlkPTY2ODAxNTgm YW1wO2Rpcj1wcmV2JyByZWw9J1ByZXZpb3VzJyAvPgo8bGluayBocmVmPSdodHRw Oi8vd3d3LmxpdmVqb3VybmFsLmNvbS9nby5ibWw/am91cm5hbD1iYWRfcnBlcnNf c3VjayZhbXA7aXRlbWlkPTY2ODAxNTgmYW1wO2Rpcj1uZXh0JyByZWw9J05leHQn IC8+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgTEpfY210aW5m byA9IHsiMTIwNjQ4Nzk4IjogeyJ1IjogInRoZXNvdXJncm92ZSIsCiJyYyI6IFtd LAoiZnVsbCI6IDF9LAoiMTIwNjQ4Mjg2IjogeyJ1IjogInRoZXNvdXJncm92ZSIs CiJyYyI6IFtdLAoiZnVsbCI6IDF9LAoiMTIwNjQ3MDA2IjogeyJ1IjogInRoZXNv dXJncm92ZSIsCiJyYyI6IFsxMjA2NDc3NzQsIDEyMDY0ODAzMF0sCiJmdWxsIjog MX0sCiIxMjA2NDkwNTQiOiB7InUiOiAiYmVhcmRlZHRyb2xsIiwKInJjIjogW10s CiJmdWxsIjogMX0sCiIxMjA2NDY0OTQiOiB7InUiOiAiY2VsZXN0aW5lYW5nZWwi LAoicmMiOiBbMTIwNjQ3MDA2XSwKImZ1bGwiOiAxfSwKIjEyMDY0NzI2MiI6IHsi dSI6ICJ0aGVzb3VyZ3JvdmUiLAoicmMiOiBbXSwKImZ1bGwiOiAxfSwKInJlbW90 ZSI6ICJiZWFyZGVkdHJvbGwiLAoiMTIwNjQ4MDMwIjogeyJ1IjogInRlbnNoaW5v ZnVzaGlnaSIsCiJyYyI6IFsxMjA2NDg1NDJdLAoiZnVsbCI6IDF9LAoiMTIwNjQ0 OTU4IjogeyJ1IjogInRoZXNvdXJncm92ZSIsCiJyYyI6IFsxMjA2NDUyMTRdLAoi ZnVsbCI6IDF9LAoiMTIwNjQ2NzUwIjogeyJ1IjogInRlbnNoaW5vZnVzaGlnaSIs CiJyYyI6IFsxMjA2NDcyNjJdLAoiZnVsbCI6IDF9LAoiam91cm5hbCI6ICJiYWRf cnBlcnNfc3VjayIsCiJjYW5BZG1pbiI6IDAsCiJmb3JtX2F1dGgiOiAiYzA6MTIz ODQ0MzIwMDoxODA2Ojg2NDAwOjF2Wm8zZlFXSlctMzU4MTM1NC00MzI6NjIyMjhh OTU2N2RhMGJmNDhkYmM1ZGI2NmZlYTM1YzIiLAoiMTIwNjQ3Nzc0IjogeyJ1Ijog InRlbnNoaW5vZnVzaGlnaSIsCiJyYyI6IFsxMjA2NDgyODZdLAoiZnVsbCI6IDF9 LAoiMTIwNjQ1NzI2IjogeyJ1IjogInRoZXNvdXJncm92ZSIsCiJyYyI6IFsxMjA2 NDY0OTQsIDEyMDY0Njc1MF0sCiJmdWxsIjogMX0sCiIxMjA2NDc1MTgiOiB7InUi OiAiYmVhcmRlZHRyb2xsIiwKInJjIjogWzEyMDY0ODc5OF0sCiJmdWxsIjogMX0s CiIxMjA2NDg1NDIiOiB7InUiOiAidGhlc291cmdyb3ZlIiwKInJjIjogW10sCiJm dWxsIjogMX0sCiIxMjA2NDUyMTQiOiB7InUiOiAidGVuc2hpbm9mdXNoaWdpIiwK InJjIjogWzEyMDY0NTcyNiwgMTIwNjQ5MDU0XSwKImZ1bGwiOiAxfX07CmZ1bmN0 aW9uIHVzZXJob29rX3NjcmVlbl9jb21tZW50X0FSRyAoZElpZCkgeyBzZXRTdHls ZSgnY210YmFyJytkSWlkLCAnYmFja2dyb3VuZCcsICIjY2NjY2NjIik7IH0KZnVu Y3Rpb24gdXNlcmhvb2tfdW5zY3JlZW5fY29tbWVudF9BUkcgKGRJaWQpIHsgc2V0 U3R5bGUoJ2NtdGJhcicrZElpZCwgJ2JhY2tncm91bmQnLCAiI2JiZGRmZiIpOyB9 Cjwvc2NyaXB0PgoKICAgIDwhLS1baWYgbHQgSUUgN10+CiAgICAgICAgPGxpbmsg cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2wt c3RhdC5saXZlam91cm5hbC5jb20vbGpfYmFzZS1pZS5jc3MiIC8+CiAgICAgICAg PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0 cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaG9yaXpvbi9pZS5jc3MiIC8+CiAg ICA8IVtlbmRpZl0tLT4KICA8L2hlYWQ+CgoKICAgIDxib2R5IGNsYXNzPSdsb2dn ZWQtaW4nID4KICAgIDxkaXYgaWQ9ImJpZy1jb250ZW50LXdyYXBwZXIiPgogICAg PGRpdiBpZD0iY29udGVudCI+CiAgICAKICAgIDxkaXYgaWQ9ImNvbnRlbnQtaW5u ZXIiPgogICAgICAKICAgICAgCgogICAgICAKICAgICAgCgogICAgICAKCiAgICAg IAogICAgICA8aDEgY2xhc3M9J2xvZ2dlZC1pbic+PC9oMT4KCiAgICAgIDxkaXYg aWQ9J2NvbnRlbnQtd3JhcHBlcicgY2xhc3M9Jycgc3R5bGU9J21hcmdpbi1yaWdo dDogOyBoZWlnaHQ6IDElJz4KICAgICAgICAKCiAgICAgICAgCgogICAgICAgIDwh LS0gQ29udGVudCAtLT4KICAgICAgICA8cD48dGFibGU+PHRyIHZhbGlnbj0nbWlk ZGxlJz48dGQ+PGltZyBzcmM9J2h0dHA6Ly9sLXVzZXJwaWMubGl2ZWpvdXJuYWwu Y29tLzc4NzA2ODAxLzYyNjgyNTgnIHdpZHRoPScxMDAnIGhlaWdodD0nMTAwJyBh bGlnbj0nYWJzbWlkZGxlJyBoc3BhY2U9JzMnIHRpdGxlPSdUaGUgcXVlZW4gb2Yg dGhlIGltcHM6IGpva2VyIGNsYXAnIGFsdD0nJz48L3RkPjx0ZD5UaGUgcXVlZW4g b2YgdGhlIGltcHMgKDxzcGFuIGNsYXNzPSdsanVzZXInIGxqOnVzZXI9J3RlbnNo aW5vZnVzaGlnaScgc3R5bGU9J3doaXRlLXNwYWNlOiBub3dyYXA7Jz48YSBocmVm PSdodHRwOi8vdGVuc2hpbm9mdXNoaWdpLmxpdmVqb3VybmFsLmNvbS9wcm9maWxl Jz48aW1nIHNyYz0naHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL3Vz ZXJpbmZvLmdpZicgYWx0PSdbaW5mb10nIHdpZHRoPScxNycgaGVpZ2h0PScxNycg c3R5bGU9J3ZlcnRpY2FsLWFsaWduOiBib3R0b207IGJvcmRlcjogMDsgcGFkZGlu Zy1yaWdodDogMXB4OycgLz48L2E+PGEgaHJlZj0naHR0cDovL3RlbnNoaW5vZnVz aGlnaS5saXZlam91cm5hbC5jb20vJz48Yj50ZW5zaGlub2Z1c2hpZ2k8L2I+PC9h Pjwvc3Bhbj4pIHNrcmVpdiBpIDxzcGFuIGNsYXNzPSdsanVzZXInIGxqOnVzZXI9 J2JhZF9ycGVyc19zdWNrJyBzdHlsZT0nd2hpdGUtc3BhY2U6IG5vd3JhcDsnPjxh IGhyZWY9J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVy c19zdWNrL3Byb2ZpbGUnPjxpbWcgc3JjPSdodHRwOi8vbC1zdGF0LmxpdmVqb3Vy bmFsLmNvbS9pbWcvY29tbXVuaXR5LmdpZicgYWx0PSdbaW5mb10nIHdpZHRoPScx NicgaGVpZ2h0PScxNicgc3R5bGU9J3ZlcnRpY2FsLWFsaWduOiBib3R0b207IGJv cmRlcjogMDsgcGFkZGluZy1yaWdodDogMXB4OycgLz48L2E+PGEgaHJlZj0naHR0 cDovL2NvbW11bml0eS5saXZlam91cm5hbC5jb20vYmFkX3JwZXJzX3N1Y2svJz48 Yj5iYWRfcnBlcnNfc3VjazwvYj48L2E+PC9zcGFuPiw8YnIgLz48Zm9udCBzaXpl PSctMSc+QCA8YSBocmVmPSJodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNv bS9iYWRfcnBlcnNfc3Vjay8yMDA5LyI+MjAwOTwvYT4tPGEgaHJlZj0iaHR0cDov L2NvbW11bml0eS5saXZlam91cm5hbC5jb20vYmFkX3JwZXJzX3N1Y2svMjAwOS8w My8iPjAzPC9hPi08YSBocmVmPSJodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFs LmNvbS9iYWRfcnBlcnNfc3Vjay8yMDA5LzAzLzMwLyI+MzA8L2E+IDE2OjAzOjAw PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPjxkaXYgY2xhc3M9InN0YW5kb3V0Ij48 dGFibGUgY2xhc3M9ImNvbnRhaW5lciI+PHRyPjx0ZD4KPHRhYmxlPjx0cj48dGQg dmFsaWduPSdtaWRkbGUnPjxhIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwu Y29tL2dvLmJtbD9qb3VybmFsPWJhZF9ycGVyc19zdWNrJmFtcDtpdGVtaWQ9NjY4 MDE1OCZhbXA7ZGlyPXByZXYiPjxpbWcgc3JjPSJodHRwOi8vbC1zdGF0LmxpdmVq b3VybmFsLmNvbS9pbWcvYnRuX3ByZXYuZ2lmIiB3aWR0aD0iMjIiIGhlaWdodD0i MjAiIGFsdD0iUHJldmlvdXMgRW50cnkiIHRpdGxlPSJQcmV2aW91cyBFbnRyeSIg Ym9yZGVyPScwJyBhbGlnbj0iYWJzbWlkZGxlIiAvPjwvYT4mbmJzcDsmbmJzcDs8 YSBocmVmPSJodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS90b29scy9tZW1hZGQu Ym1sP2pvdXJuYWw9YmFkX3JwZXJzX3N1Y2smYW1wO2l0ZW1pZD02NjgwMTU4Ij48 aW1nIHNyYz0iaHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL21lbWFk ZC5naWYiIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMCIgYWx0PSJBZGQgdG8gbWVtb3Jp ZXMhIiB0aXRsZT0iQWRkIHRvIG1lbW9yaWVzISIgYm9yZGVyPScwJyBhbGlnbj0i YWJzbWlkZGxlIiAvPjwvYT4mbmJzcDsmbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3 LmxpdmVqb3VybmFsLmNvbS90b29scy90ZWxsYWZyaWVuZC5ibWw/am91cm5hbD1i YWRfcnBlcnNfc3VjayZhbXA7aXRlbWlkPTY2ODAxNTgiPjxpbWcgc3JjPSJodHRw Oi8vbC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvYnRuX3RlbGxmcmllbmQuZ2lm IiB3aWR0aD0iMjIiIGhlaWdodD0iMjAiIGFsdD0iVGVsbCBhIEZyaWVuZCEiIHRp dGxlPSJUZWxsIGEgRnJpZW5kISIgYm9yZGVyPScwJyBhbGlnbj0iYWJzbWlkZGxl IiAvPjwvYT4mbmJzcDsmbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LmxpdmVqb3Vy bmFsLmNvbS9tYW5hZ2Uvc3Vic2NyaXB0aW9ucy9lbnRyeS5ibWw/am91cm5hbD1i YWRfcnBlcnNfc3VjayZhbXA7aXRlbWlkPTY2ODAxNTgiPjxpbWcgc3JjPSJodHRw Oi8vbC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvYnRuX3RyYWNrLmdpZiIgd2lk dGg9IjIyIiBoZWlnaHQ9IjIwIiBhbHQ9IlRyYWNrIFRoaXMiIHRpdGxlPSJUcmFj ayBUaGlzIiBib3JkZXI9JzAnIGFsaWduPSJhYnNtaWRkbGUiIC8+PC9hPiZuYnNw OyZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL3Rvb2xz L2NvbnRlbnRfZmxhZy5ibWw/dXNlcj1iYWRfcnBlcnNfc3VjayZpdGVtaWQ9NjY4 MDE1OCI+PGltZyBzcmM9Imh0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwuY29tL2lt Zy9idXR0b24tZmxhZy5naWYiIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMCIgYWx0PSJG bGFnIiB0aXRsZT0iRmxhZyIgYm9yZGVyPScwJyBhbGlnbj0iYWJzbWlkZGxlIiAv PjwvYT4mbmJzcDsmbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LmxpdmVqb3VybmFs LmNvbS9nby5ibWw/am91cm5hbD1iYWRfcnBlcnNfc3VjayZhbXA7aXRlbWlkPTY2 ODAxNTgmYW1wO2Rpcj1uZXh0Ij48aW1nIHNyYz0iaHR0cDovL2wtc3RhdC5saXZl am91cm5hbC5jb20vaW1nL2J0bl9uZXh0LmdpZiIgd2lkdGg9IjIyIiBoZWlnaHQ9 IjIwIiBhbHQ9Ik5leHQgRW50cnkiIHRpdGxlPSJOZXh0IEVudHJ5IiBib3JkZXI9 JzAnIGFsaWduPSJhYnNtaWRkbGUiIC8+PC9hPjwvdGQ+PC90cj48L3RhYmxlPgo8 L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KPGRpdiBzdHlsZT0nbWFyZ2luLWxlZnQ6 IDMwcHgnPjxmb250IGZhY2U9J0FyaWFsLEhlbHZldGljYScgc2l6ZT0nKzEnPjxp PjxiPllvdSBwbGFnaWFyaXNpbmcgYml0Y2hlczwvYj48L2k+PC9mb250PjxiciAv PgpTby4gIEluIFNlcHRlbWJlciwgbXkgZnJpZW5kIGFuZCBJIGZvcm1lZCBhIEhh cnJ5IFBvdHRlciBnYW1lIHRoYXQgcmV2b2x2ZWQgYXJvdW5kIGFuIGFsdGVybmF0 ZSBmdXR1cmUgd2hlcmUgVm9sZGVtb3J0IHRvb2sgb3ZlciB3aGVuIHRoZSBldmVu dHMgYXQgR29kcmljJ3MgSG9sbG93IHdlbnQgZGlmZmVyZW50bHkgYmVjYXVzZSBI YXJyeSBkaWVkIGFuZCBKYW1lcyBkaWRuJ3QsIHNldCBpbiAxOTk4LTE5OTkuICBJ dCdzIGNhbGxlZCA8c3BhbiBjbGFzcz0nbGp1c2VyJyBsajp1c2VyPSdpZl93ZV9s b3N0JyBzdHlsZT0nd2hpdGUtc3BhY2U6IG5vd3JhcDsnPjxhIGhyZWY9J2h0dHA6 Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2lmX3dlX2xvc3QvcHJvZmlsZSc+ PGltZyBzcmM9J2h0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwuY29tL2ltZy9jb21t dW5pdHkuZ2lmJyBhbHQ9J1tpbmZvXScgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBz dHlsZT0ndmVydGljYWwtYWxpZ246IGJvdHRvbTsgYm9yZGVyOiAwOyBwYWRkaW5n LXJpZ2h0OiAxcHg7JyAvPjwvYT48YSBocmVmPSdodHRwOi8vY29tbXVuaXR5Lmxp dmVqb3VybmFsLmNvbS9pZl93ZV9sb3N0Lyc+PGI+aWZfd2VfbG9zdDwvYj48L2E+ PC9zcGFuPi4gIEl0J3MgYmVlbiBydW5uaW5nIGV2ZXIgc2luY2UuPGJyIC8+PGJy IC8+UmVjZW50bHksIHR3byBwbGF5ZXJzIGhhdmUgZHJvcHBlZCBvdXQsIGNsYWlt aW5nIHRoYXQgUkwgaGFkIGVhdGVuIHVwIGFsbCB0aGVpciB0aW1lIGFuZCBSUCBq dXN0IGNvdWxkbid0IGZpdCBpbiBhbnltb3JlLiAgQSB0aGlyZCBwbGF5ZXIgaGFz IHNwb2tlbiBvZiBob3cgc2hlJ3MgY29uc2lkZXJpbmcgaXQuICBBbGwgdGhyZWUg d2VyZSBpbiBhIGNsb3NlIGxpdHRsZSBjbGlxdWUuPGJyIC8+PGJyIC8+Tm93LCBv biB0aGUgUlBHIGFkIGNpcmN1aXQsIGlzIGFuIElKIGdhbWUgaW4gd2hpY2ggVm9s ZGVtb3J0IHRvb2sgb3ZlciBiZWNhdXNlIEdvZHJpYydzIEhvbGxvdyB3ZW50IGRp ZmZlcmVudGx5IGJlY2F1c2UgSGFycnkgZGllZCBhbmQgSmFtZXMgZGlkbid0LCBz ZXQgaW4gMTk5OS4gIERvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGV5IHJpcHBl ZCB1cyBvZmYsIGNvdWxkIGhhdmUganVzdCBiZWVuIGEgY29pbmNpZGVuY2UuPGJy IC8+PGJyIC8+RXhjZXB0IHRoaXM6IGEgbG90IG9mIHRoZSB3b3JkcyBmcm9tIHRo ZSBnYW1lIGRlc2NyaXB0aW9uIG1hdGNoIHVwIGV4YWN0bHkuICBUaGUgd29yZHMg dGhlbXNlbHZlcyB3ZXJlIHdyaXR0ZW4gYnkgdGhlIHRoaXJkIHBsYXllciwgdGhl IG9uZSB3aG8gaGFzbid0IHF1aXRlIHF1aXQgeWV0LCBidXQgbWFueSBvZiB0aGUg aWRlYXMgd2VyZSBvdXJzIHRvIGJlZ2luIHdpdGgsIGxpa2UgbWFya2luZyBibG9v ZCB0cmFpdG9ycyB3aXRoIG1hcmtzIG9uIHRoZWlyIGhhbmRzLjxiciAvPjxiciAv PlNvLjxiciAvPjxiciAvPlRvIHRob3NlIHRocmVlIHBsYXllcnM6ICBuaWNlIHRv IHNlZSB0aGF0IHJlYWwgbGlmZSB3YXNuJ3QgZWF0aW5nIHVwIHNvIG11Y2ggb2Yg eW91ciB0aW1lIHRoYXQgeW91IGNvdWxkbid0IGZvcm0gYSBuZXcgZ2FtZSEgIFdp dGggYSBwcmVtaXNlIHlvdSBSSVBQRUQgT0ZGIEZST00gVVMuPGJyIC8+PGJyIC8+ QW5kIGhleSwgbWF5YmUgdGhpcyBvbmUgd29uJ3QgdGFuayBpbiB0d28gbW9udGhz IGxpa2UgeW91ciBsYXN0IG9uZSE8L2Rpdj48YnIgc3R5bGU9J2NsZWFyOiBib3Ro JyAvPjxociB3aWR0aD0nMTAwJScgc2l6ZT0nMicgYWxpZ249J2NlbnRlcicgLz48 ZGl2IGlkPSdDb21tZW50cyc+PGEgbmFtZT0nY29tbWVudHMnPjwvYT48c2NyaXB0 IGxhbmd1YWdlPSdKYXZhU2NyaXB0Jz4KCiAgICAgICAgICAgICAgIHZhciBkZTsK ICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgJiYgZG9j dW1lbnQuYm9keS5pbnNlcnRCZWZvcmUgJiYgISh4TWFjICYmIHhJRTRVcCkpIHsK ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCI8aW5wdXQgdHlwZT1c J2hpZGRlblwnIG5hbWU9XCJzYXZlZF9zdWJqZWN0XCIgaWQ9XCJzYXZlZF9zdWJq ZWN0XCIgLz48aW5wdXQgdHlwZT1cJ2hpZGRlblwnIG5hbWU9XCJzYXZlZF9ib2R5 XCIgaWQ9XCJzYXZlZF9ib2R5XCIgLz48aW5wdXQgdHlwZT1cJ2hpZGRlblwnIG5h bWU9XCJzYXZlZF9zcGVsbFwiIGlkPVwic2F2ZWRfc3BlbGxcIiAvPjxpbnB1dCB0 eXBlPVwnaGlkZGVuXCcgbmFtZT1cInNhdmVkX3VwaWNcIiBpZD1cInNhdmVkX3Vw aWNcIiAvPjxpbnB1dCB0eXBlPVwnaGlkZGVuXCcgbmFtZT1cInNhdmVkX2R0aWRc IiBpZD1cInNhdmVkX2R0aWRcIiAvPjxpbnB1dCB0eXBlPVwnaGlkZGVuXCcgbmFt ZT1cInNhdmVkX3B0aWRcIiBpZD1cInNhdmVkX3B0aWRcIiAvPiIpOwogICAgICAg ICAgICAgICAgICAgZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK CiAgICAgICAgICAgICAgICAgICBpZiAoZGUpIHsKICAgICAgICAgICAgICAgICAg ICAgICBkZS5pZCA9ICJxcmRpdiI7CiAgICAgICAgICAgICAgICAgICAgICAgZGUu aW5uZXJIVE1MID0gIjxkaXYgaWQ9XCdxcmZvcm1kaXZcJz48Zm9ybSBpZD1cJ3Fy Zm9ybVwnIG5hbWU9XCdxcmZvcm1cJyBtZXRob2Q9XCdQT1NUXCcgYWN0aW9uPVwn aHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vdGFsa3Bvc3RfZG8uYm1sXCc+PGlu cHV0IHR5cGU9XCdoaWRkZW5cJyBuYW1lPVwibGpfZm9ybV9hdXRoXCIgdmFsdWU9 XCJjMDoxMjM4NDQzMjAwOjE4MDY6ODY0MDA6MXZabzNmUVdKVy0zNTgxMzU0LTQz Mjo2MjIyOGE5NTY3ZGEwYmY0OGRiYzVkYjY2ZmVhMzVjMlwiIC8+PGlucHV0IHR5 cGU9XCdoaWRkZW5cJyBuYW1lPVwicmVwbHl0b1wiIHZhbHVlPVwiXCIgaWQ9XCJy ZXBseXRvXCIgLz48aW5wdXQgdHlwZT1cJ2hpZGRlblwnIG5hbWU9XCJwYXJlbnR0 YWxraWRcIiB2YWx1ZT1cIlwiIGlkPVwicGFyZW50dGFsa2lkXCIgLz48aW5wdXQg dHlwZT1cJ2hpZGRlblwnIG5hbWU9XCJqb3VybmFsXCIgdmFsdWU9XCJiYWRfcnBl cnNfc3Vja1wiIGlkPVwiam91cm5hbFwiIC8+PGlucHV0IHR5cGU9XCdoaWRkZW5c JyBuYW1lPVwiaXRlbWlkXCIgdmFsdWU9XCI2NjgwMTU4XCIgaWQ9XCJpdGVtaWRc IiAvPjxpbnB1dCB0eXBlPVwnaGlkZGVuXCcgbmFtZT1cInVzZXJ0eXBlXCIgdmFs dWU9XCJjb29raWV1c2VyXCIgaWQ9XCJ1c2VydHlwZVwiIC8+PGlucHV0IHR5cGU9 XCdoaWRkZW5cJyBuYW1lPVwicXJcIiB2YWx1ZT1cIjFcIiBpZD1cInFyXCIgLz48 aW5wdXQgdHlwZT1cJ2hpZGRlblwnIG5hbWU9XCJjb29raWV1c2VyXCIgdmFsdWU9 XCJiZWFyZGVkdHJvbGxcIiBpZD1cImNvb2tpZXVzZXJcIiAvPjxpbnB1dCB0eXBl PVwnaGlkZGVuXCcgbmFtZT1cImR0aWRcIiB2YWx1ZT1cIlwiIGlkPVwiZHRpZFwi IC8+PGlucHV0IHR5cGU9XCdoaWRkZW5cJyBuYW1lPVwiYmFzZXBhdGhcIiB2YWx1 ZT1cImh0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19z dWNrLzY2ODAxNTguaHRtbD9cIiBpZD1cImJhc2VwYXRoXCIgLz48aW5wdXQgdHlw ZT1cJ2hpZGRlblwnIG5hbWU9XCJzdHlsZW1pbmVcIiB2YWx1ZT1cIjBcIiBpZD1c InN0eWxlbWluZVwiIC8+PGlucHV0IHR5cGU9XCdoaWRkZW5cJyBuYW1lPVwidmll d2luZ190aHJlYWRcIiBpZD1cInZpZXdpbmdfdGhyZWFkXCIgLz48aW5wdXQgdHlw ZT1cJ2hpZGRlblwnIG5hbWU9XCJjaHJwMVwiIHZhbHVlPVwiNjY4MDE1OC02OTA5 OTMtMTIzODQ0MzIwMC02UVZvYmJYa0NlYXZGeTlwWmxITC0zZTM1NGExNTc1ZDgz YjZlYzFmMjNiMmY3YzY5ZDQzYVwiIC8+PHRhYmxlIHN0eWxlPVwnYm9yZGVyOiAx cHggc29saWQgYmxhY2tcJz48dHIgdmFsaWduPVwnY2VudGVyXCc+PHRkIGFsaWdu PVwncmlnaHRcJz48Yj5Gcm9tOjwvYj48L3RkPjx0ZCBhbGlnbj1cJ2xlZnRcJz48 c3BhbiBjbGFzcz1cJ2xqdXNlclwnIGxqOnVzZXI9XCdiZWFyZGVkdHJvbGxcJyBz dHlsZT1cJ3doaXRlLXNwYWNlOiBub3dyYXA7XCc+PGEgaHJlZj1cJ2h0dHA6Ly9i ZWFyZGVkdHJvbGwubGl2ZWpvdXJuYWwuY29tL3Byb2ZpbGVcJz48aW1nIHNyYz1c J2h0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwuY29tL2ltZy91c2VyaW5mby5naWZc JyBhbHQ9XCdbaW5mb11cJyB3aWR0aD1cJzE3XCcgaGVpZ2h0PVwnMTdcJyBzdHls ZT1cJ3ZlcnRpY2FsLWFsaWduOiBib3R0b207IGJvcmRlcjogMDsgcGFkZGluZy1y aWdodDogMXB4O1wnIC8+PC9hPjxhIGhyZWY9XCdodHRwOi8vYmVhcmRlZHRyb2xs LmxpdmVqb3VybmFsLmNvbS9cJz48Yj5iZWFyZGVkdHJvbGw8L2I+PC9hPjwvc3Bh bj48L3RkPjx0ZCBhbGlnbj1cJ2NlbnRlclwnPjxhIGhyZWY9XCdodHRwOi8vd3d3 LmxpdmVqb3VybmFsLmNvbS9hbGxwaWNzLmJtbD91c2VyPWJlYXJkZWR0cm9sbFwn PkJpbGV0ZTwvYT4gdGlsIMOlIGJydWtlOjxzZWxlY3QgbmFtZT1cInByb3BfcGlj dHVyZV9rZXl3b3JkXCIgaWQ9XCJwcm9wX3BpY3R1cmVfa2V5d29yZFwiPlxuPG9w dGlvbiB2YWx1ZT1cIlwiIHNlbGVjdGVkPVwnc2VsZWN0ZWRcJz4oZGVmYXVsdCk8 L29wdGlvbj5cbjxvcHRpb24gdmFsdWU9XCJhZ2FpbnN0IHRoZSB3YWxsXCI+YWdh aW5zdCB0aGUgd2FsbDwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1ZT1cIkJvdGhhblwi PkJvdGhhbjwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1ZT1cImNoZWVyIHVwXCI+Y2hl ZXIgdXA8L29wdGlvbj5cbjxvcHRpb24gdmFsdWU9XCJjaWdhclwiPmNpZ2FyPC9v cHRpb24+XG48b3B0aW9uIHZhbHVlPVwiY29mZmVlXCI+Y29mZmVlPC9vcHRpb24+ XG48b3B0aW9uIHZhbHVlPVwiRGVpcmRyZVwiPkRlaXJkcmU8L29wdGlvbj5cbjxv cHRpb24gdmFsdWU9XCJFeWVzXCI+RXllczwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1 ZT1cIkZyZXVkXCI+RnJldWQ8L29wdGlvbj5cbjxvcHRpb24gdmFsdWU9XCJHYWJi bGVkdWNrXCI+R2FiYmxlZHVjazwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1ZT1cIkdy ZW1saW5zXCI+R3JlbWxpbnM8L29wdGlvbj5cbjxvcHRpb24gdmFsdWU9XCJIYXJy eS9DaGVcIj5IYXJyeS9DaGU8L29wdGlvbj5cbjxvcHRpb24gdmFsdWU9XCJIYXog bmV0d29yayBub2RlXCI+SGF6IG5ldHdvcmsgbm9kZTwvb3B0aW9uPlxuPG9wdGlv biB2YWx1ZT1cIkh1enphaFwiPkh1enphaDwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1 ZT1cImxhd3llclwiPmxhd3llcjwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1ZT1cIkxp bnV4XCI+TGludXg8L29wdGlvbj5cbjxvcHRpb24gdmFsdWU9XCJsaXZlIGxvbmdc Ij5saXZlIGxvbmc8L29wdGlvbj5cbjxvcHRpb24gdmFsdWU9XCJMb3cgd3JpdFwi PkxvdyB3cml0PC9vcHRpb24+XG48b3B0aW9uIHZhbHVlPVwibmV0d29yayBub2Rl XCI+bmV0d29yayBub2RlPC9vcHRpb24+XG48b3B0aW9uIHZhbHVlPVwicGF5cGFs IGRvbmF0ZVwiPnBheXBhbCBkb25hdGU8L29wdGlvbj5cbjxvcHRpb24gdmFsdWU9 XCJwaXJhdGVzXCI+cGlyYXRlczwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1ZT1cInBs aWdodFwiPnBsaWdodDwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1ZT1cIlJlYWwgUHJv Z3JhbW1lcnNcIj5SZWFsIFByb2dyYW1tZXJzPC9vcHRpb24+XG48b3B0aW9uIHZh bHVlPVwicmV2b2x1dGlvblwiPnJldm9sdXRpb248L29wdGlvbj5cbjxvcHRpb24g dmFsdWU9XCJzbXVnXCI+c211Zzwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1ZT1cIlNw aXJhbFwiPlNwaXJhbDwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1ZT1cInN0aW5raW4m IzM5OyBpY29uc1wiPnN0aW5raW4mIzM5OyBpY29uczwvb3B0aW9uPlxuPG9wdGlv biB2YWx1ZT1cIlRha2Ugb3ZlciB0aGUgd29ybGRcIj5UYWtlIG92ZXIgdGhlIHdv cmxkPC9vcHRpb24+XG48b3B0aW9uIHZhbHVlPVwiVGhleSBmaWdodCBjcmltZVwi PlRoZXkgZmlnaHQgY3JpbWU8L29wdGlvbj5cbjxvcHRpb24gdmFsdWU9XCJUaW1l IFRlYW0gQmFkIFBsYW5cIj5UaW1lIFRlYW0gQmFkIFBsYW48L29wdGlvbj5cbjxv cHRpb24gdmFsdWU9XCJUcm9sbFwiPlRyb2xsPC9vcHRpb24+XG48b3B0aW9uIHZh bHVlPVwiVXJcIj5Vcjwvb3B0aW9uPlxuPG9wdGlvbiB2YWx1ZT1cInZhbiBnb2do XCI+dmFuIGdvZ2g8L29wdGlvbj5cbjwvc2VsZWN0PlxuICAgICAgICAgICAgICAg IDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJsal91c2VycGljc2VsZWN0XCIg dmFsdWU9XCJCcm93c2VcIiAvPlxuICAgICAgICAgICAgICAgICA8YSBocmVmPVwi aHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vc3VwcG9ydC9mYXFicm93c2UuYm1s P2ZhcWlkPTQ2XCIgY2xhc3M9XCJoZWxwbGlua1wiIHRhcmdldD1cIl9ibGFua1wi PjxpbWcgc3JjPVwiaHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL2hl bHAuZ2lmXCIgYWx0PVwiSGVscFwiIHRpdGxlPVwiSGVscFwiIHdpZHRoPVwnMTRc JyBoZWlnaHQ9XCcxNFwnIGJvcmRlcj1cJzBcJyAvPjwvYT48L3RkPjwvdHI+PHRy Pjx0ZCBhbGlnbj1cJ3JpZ2h0XCc+PGI+RW1uZTo8L2I+PC90ZD48dGQgY29sc3Bh bj1cJzJcJyBhbGlnbj1cJ2xlZnRcJz48aW5wdXQgY2xhc3M9XCd0ZXh0Ym94XCcg dHlwZT1cJ3RleHRcJyBzaXplPVwnNTBcJyBtYXhsZW5ndGg9XCcxMDBcJyBuYW1l PVwnc3ViamVjdFwnIGlkPVwnc3ViamVjdFwnIHZhbHVlPVwnXCcgLz48L3RkPjwv dHI+PHRyIHZhbGlnbj1cJ3RvcFwnPjx0ZCBhbGlnbj1cJ3JpZ2h0XCc+PGI+TWVs ZGluZzo8L2I+PC90ZD48dGQgY29sc3Bhbj1cJzNcJyBzdHlsZT1cJ3dpZHRoOiA5 MCVcJz48dGV4dGFyZWEgY2xhc3M9XCd0ZXh0Ym94XCcgcm93cz1cJzEwXCcgY29s cz1cJzUwXCcgd3JhcD1cJ3NvZnRcJyBuYW1lPVwnYm9keVwnIGlkPVwnYm9keVwn IHN0eWxlPVwnd2lkdGg6IDk5JVwnPjwvdGV4dGFyZWE+PC90ZD48L3RyPjx0cj48 dGQ+Jm5ic3A7PC90ZD48dGQgY29sc3Bhbj1cJzNcJyBhbGlnbj1cJ2xlZnRcJz48 aW5wdXQgdHlwZT1cJ3N1Ym1pdFwnIG5hbWU9XCJzdWJtaXRwb3N0XCIgdmFsdWU9 XCJQb3N0IENvbW1lbnRcIiBpZD1cInN1Ym1pdHBvc3RcIiBvbmNsaWNrPVwiaWYg KGNoZWNrTGVuZ3RoKCkpIHtzdWJtaXRmb3JtKCk7fVwiIC8+Jm5ic3A7PGlucHV0 IHR5cGU9XCdzdWJtaXRcJyBuYW1lPVwic3VibWl0bW9yZW9wdHNcIiB2YWx1ZT1c Ik1vcmUgT3B0aW9ucy4uLlwiIGlkPVwic3VibWl0bW9yZW9wdHNcIiBvbmNsaWNr PVwiaWYgKG1vcmVvcHRzKCkpIHtzdWJtaXRmb3JtKCk7fVwiIC8+Jm5ic3A7PGlu cHV0IHR5cGU9XCdjaGVja2JveFwnIG5hbWU9XCdkb19zcGVsbGNoZWNrXCcgdmFs dWU9XCcxXCcgaWQ9XCdkb19zcGVsbGNoZWNrXCcgLz4gPGxhYmVsIGZvcj1cJ2Rv X3NwZWxsY2hlY2tcJz5DaGVjayBzcGVsbGluZyBhbmQgcHJldmlldzwvbGFiZWw+ PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPjwvZGl2PiI7CiAgICAgICAgICAgICAg ICAgICAgICAgdmFyIGJvZHllID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h bWUoImJvZHkiKTsKICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keWVbMF0p CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHllWzBdLmluc2VydEJlZm9y ZShkZSwgYm9keWVbMF0uZmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICAgICAg ICAgZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgIAo8L3NjcmlwdD4KICAgICAg ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFT Y3JpcHQiPgogICAgICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3cs ICJsb2FkIiwgZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgLy8gYXR0 YWNoIHVzZXJwaWNzZWxlY3QgY29kZSB0byB1c2VycGljYnJvd3NlIGJ1dHRvbgog ICAgICAgICAgICAgICAgdmFyIHVwc19idG4gPSAkKCJsal91c2VycGljc2VsZWN0 Iik7CiAgICAgICAgICAgICAgICBpZiAodXBzX2J0bikgewogICAgICAgICAgICAg ICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHVwc19idG4sICJjbGljayIsIGZ1 bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgICAgICAgdmFyIHVwcyA9IG5l dyBVc2VycGljU2VsZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgIHVwcy5pbml0 KCk7CiAgICAgICAgICAgICAgICAgICAgIHVwcy5zZXRQaWNTZWxlY3RlZENhbGxi YWNrKGZ1bmN0aW9uIChwaWNpZCwga2V5d29yZHMpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgIHZhciBrd3NfZHJvcGRvd24gPSAkKCJwcm9wX3BpY3R1cmVfa2V5 d29yZCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrd3NfZHJvcGRv d24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBr d3NfZHJvcGRvd24ub3B0aW9uczsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gc2VsZWN0IHRoZSBrZXl3b3JkIGluIHRoZSBkcm9wZG93bgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzLmZvckVhY2goZnVuY3Rpb24g KGt3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSA9 PSBrdykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGt3c19kcm9wZG93bi5zZWxlY3RlZEluZGV4ID0gaTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7 CiAgICAgICAgICAgICAgICAgICAgIHVwcy5zaG93KCk7CiAgICAgICAgICAgICAg ICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAg IDwvc2NyaXB0PgogICAgICAgIDxmb3JtIHN0eWxlPSdkaXNwbGF5OiBpbmxpbmUn IG1ldGhvZD0ncG9zdCcgYWN0aW9uPSdodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNv bS90YWxrbXVsdGkuYm1sJyBuYW1lPSdtdWx0aWZvcm0nIG9uc3VibWl0PSdyZXR1 cm4gbXVsdGlmb3JtU3VibWl0KHRoaXMsIHtub19hY3Rpb246ICJZb3UgaGF2ZSBu b3Qgc2VsZWN0ZWQgb25lIG9mIHRoZSBhY3Rpb25zIixub19jb21tZW50czogIllv dSBoYXZlIG5vdCBzZWxlY3RlZCBhbnkgY29tbWVudHMiLGNvbmZfZGVsZXRlOiAi QXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgY29t bWVudHM/In0pJz48cCBjbGFzcz0nbGVzc3RvcCcgYWxpZ249J2NlbnRlcic+PGI+ KDxhIG9uY2xpY2s9J3JldHVybiBxdWlja3JlcGx5KCJ0b3AiLCAwLCAiIiknIGhy ZWY9J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19z dWNrLzY2ODAxNTguaHRtbD9tb2RlPXJlcGx5JyA+UG9zdCBhIG5ldyBjb21tZW50 PC9hPjwvYT4pPC9iPjwvcD48ZGl2IGFsaWduPSdjZW50ZXInPjxkaXYgaWQ9J2xq cXJ0dG9wJyBuYW1lPSdsanFydHRvcCc+PC9kaXY+PC9kaXY+PGlucHV0IHR5cGU9 J2hpZGRlbicgbmFtZT0iZGl0ZW1pZCIgdmFsdWU9IjY2ODAxNTgiIC8+PGlucHV0 IHR5cGU9J2hpZGRlbicgbmFtZT0iam91cm5hbCIgdmFsdWU9ImJhZF9ycGVyc19z dWNrIiAvPjxhIG5hbWU9J3QxMjA2NDQ5NTgnPjwvYT48c3BhbiBpZD0nbGpjbXQx MjA2NDQ5NTgnPjx0YWJsZSB3aWR0aD0nMTAwJScgY2xhc3M9J3RhbGstY29tbWVu dCc+PHRib2R5Pjx0cj48dGQgcm93c3Bhbj0nMic+PGltZyBzcmM9J2h0dHA6Ly9s LXN0YXQubGl2ZWpvdXJuYWwuY29tL2ltZy9kb3QuZ2lmJyBoZWlnaHQ9JzEnIHdp ZHRoPScwJz48L3RkPjx0ZCBpZD0nY210YmFyMTIwNjQ0OTU4JyBiZ2NvbG9yPScj YmJkZGZmJyB3aWR0aD0nMTAwJSc+PGZvbnQgc2l6ZT0nKzEnIGZhY2U9J0FyaWFs LEhlbHZldGljYSc+PGI+PC9iPjwvZm9udD4gPGJyIC8+PHNwYW4gY2xhc3M9J2xq dXNlcicgbGo6dXNlcj0ndGhlc291cmdyb3ZlJyBzdHlsZT0nd2hpdGUtc3BhY2U6 IG5vd3JhcDsnPjxhIGhyZWY9J2h0dHA6Ly90aGVzb3VyZ3JvdmUubGl2ZWpvdXJu YWwuY29tL3Byb2ZpbGUnPjxpbWcgc3JjPSdodHRwOi8vbC1zdGF0LmxpdmVqb3Vy bmFsLmNvbS9pbWcvdXNlcmluZm8uZ2lmJyBhbHQ9J1tpbmZvXScgd2lkdGg9JzE3 JyBoZWlnaHQ9JzE3JyBzdHlsZT0ndmVydGljYWwtYWxpZ246IGJvdHRvbTsgYm9y ZGVyOiAwOyBwYWRkaW5nLXJpZ2h0OiAxcHg7JyAvPjwvYT48YSBocmVmPSdodHRw Oi8vdGhlc291cmdyb3ZlLmxpdmVqb3VybmFsLmNvbS8nPjxiPnRoZXNvdXJncm92 ZTwvYj48L2E+PC9zcGFuPgo8YnIgLz48Zm9udCBzaXplPSctMSc+MjAwOS0wMy0z MCAxMDoxOSBwbSAobG9jYWwpPC9mb250PgogPGZvbnQgc2l6ZT0nLTEnPig8YSBo cmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNf c3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0NDk1OCN0MTIwNjQ0OTU4Jz5s aW5rPC9hPik8L2ZvbnQ+IDxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwu Y29tL21hbmFnZS9zdWJzY3JpcHRpb25zL2NvbW1lbnRzLmJtbD9qb3VybmFsPWJh ZF9ycGVyc19zdWNrJmFtcDt0YWxraWQ9MTIwNjQ0OTU4Jz48aW1nIHNyYz0iaHR0 cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL2J0bl90cmFjay5naWYiIHdp ZHRoPSIyMiIgaGVpZ2h0PSIyMCIgYWx0PSJUcmFjayBUaGlzIiB0aXRsZT0iVHJh Y2sgVGhpcyIgYm9yZGVyPScwJyBhbGlnbj0iYWJzbWlkZGxlIiAvPjwvYT48L3Rk PjwvdHI+PHRyPjx0ZD5TbyBhIGxpdHRsZSB3aGl0ZSBsaWUgb2YgIldlJ3JlIGxl YXZpbmcgZHVlIHRvIFJMIiByYXRoZXIgdGhhbiBhcHBhcmVudGx5ICJXZSdyZSBs ZWF2aW5nIGJlY2F1c2UgeW91IGd1eXMgYXJlIHNvIHRlcnJpYmxlIHdlIGNhbid0 IHN0YW5kIHRvIHBsYXkgd2l0aCB5b3UgYW55bW9yZSIgbWFrZXMgdGhlbSBiYWQg cnBlcnM/PGJyIC8+PGJyIC8+QW5kIHdoYXQncyB3cm9uZyB3aXRoIHRoZW0gdXNp bmcgZGVzY3JpcHRpb25zIGFuZCBydWxlcyB0aGF0IHRoZXkgd3JvdGU/PHAgc3R5 bGU9J21hcmdpbjogMC43ZW0gMCAwLjJlbSAwJz48Zm9udCBzaXplPSctMic+KDxh IG9uY2xpY2s9J3JldHVybiBxdWlja3JlcGx5KCIxMjA2NDQ5NTgiLCA0NzEyNjks ICIiKScgaHJlZj0naHR0cDovL2NvbW11bml0eS5saXZlam91cm5hbC5jb20vYmFk X3JwZXJzX3N1Y2svNjY4MDE1OC5odG1sP3JlcGx5dG89MTIwNjQ0OTU4JyA+U3Zh ciBww6UgZGV0dGU8L2E+KSAoPGEgaHJlZj0naHR0cDovL2NvbW11bml0eS5saXZl am91cm5hbC5jb20vYmFkX3JwZXJzX3N1Y2svNjY4MDE1OC5odG1sP3RocmVhZD0x MjA2NDQ5NTgjdDEyMDY0NDk1OCc+VHLDpWQ8L2E+KTwvZm9udD48L3A+PGRpdiBp ZD0nbGpxcnQxMjA2NDQ5NTgnIG5hbWU9J2xqcXJ0MTIwNjQ0OTU4Jz48L2Rpdj48 L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvc3Bhbj4KPGEgbmFtZT0ndDEyMDY0 NTIxNCc+PC9hPjxzcGFuIGlkPSdsamNtdDEyMDY0NTIxNCc+PHRhYmxlIHdpZHRo PScxMDAlJyBjbGFzcz0ndGFsay1jb21tZW50Jz48dGJvZHk+PHRyPjx0ZCByb3dz cGFuPScyJz48aW1nIHNyYz0naHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20v aW1nL2RvdC5naWYnIGhlaWdodD0nMScgd2lkdGg9JzI1Jz48L3RkPjx0ZCBpZD0n Y210YmFyMTIwNjQ1MjE0JyBiZ2NvbG9yPScjYWFjY2VlJyB3aWR0aD0nMTAwJSc+ PGltZyBhbGlnbj0nbGVmdCcgaHNwYWNlPSczJyBzcmM9J2h0dHA6Ly9sLXVzZXJw aWMubGl2ZWpvdXJuYWwuY29tLzc4NzA2ODAxLzYyNjgyNTgnIHdpZHRoPScxMDAn IHRpdGxlPSdUaGUgcXVlZW4gb2YgdGhlIGltcHM6IGpva2VyIGNsYXAnIGFsdD0n JyBoZWlnaHQ9JzEwMCcgLz48Zm9udCBzaXplPScrMScgZmFjZT0nQXJpYWwsSGVs dmV0aWNhJz48Yj48L2I+PC9mb250PiA8YnIgLz48c3BhbiBjbGFzcz0nbGp1c2Vy JyBsajp1c2VyPSd0ZW5zaGlub2Z1c2hpZ2knIHN0eWxlPSd3aGl0ZS1zcGFjZTog bm93cmFwOyc+PGEgaHJlZj0naHR0cDovL3RlbnNoaW5vZnVzaGlnaS5saXZlam91 cm5hbC5jb20vcHJvZmlsZSc+PGltZyBzcmM9J2h0dHA6Ly9sLXN0YXQubGl2ZWpv dXJuYWwuY29tL2ltZy91c2VyaW5mby5naWYnIGFsdD0nW2luZm9dJyB3aWR0aD0n MTcnIGhlaWdodD0nMTcnIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyBi b3JkZXI6IDA7IHBhZGRpbmctcmlnaHQ6IDFweDsnIC8+PC9hPjxhIGhyZWY9J2h0 dHA6Ly90ZW5zaGlub2Z1c2hpZ2kubGl2ZWpvdXJuYWwuY29tLyc+PGI+dGVuc2hp bm9mdXNoaWdpPC9iPjwvYT48L3NwYW4+CjxiciAvPjxmb250IHNpemU9Jy0xJz4y MDA5LTAzLTMwIDEwOjIxIHBtIChsb2NhbCk8L2ZvbnQ+CiA8Zm9udCBzaXplPSct MSc+KDxhIGhyZWY9J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2Jh ZF9ycGVyc19zdWNrLzY2ODAxNTguaHRtbD90aHJlYWQ9MTIwNjQ1MjE0I3QxMjA2 NDUyMTQnPmxpbms8L2E+KTwvZm9udD4gPGEgaHJlZj0naHR0cDovL3d3dy5saXZl am91cm5hbC5jb20vbWFuYWdlL3N1YnNjcmlwdGlvbnMvY29tbWVudHMuYm1sP2pv dXJuYWw9YmFkX3JwZXJzX3N1Y2smYW1wO3RhbGtpZD0xMjA2NDUyMTQnPjxpbWcg c3JjPSJodHRwOi8vbC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvYnRuX3RyYWNr LmdpZiIgd2lkdGg9IjIyIiBoZWlnaHQ9IjIwIiBhbHQ9IlRyYWNrIFRoaXMiIHRp dGxlPSJUcmFjayBUaGlzIiBib3JkZXI9JzAnIGFsaWduPSJhYnNtaWRkbGUiIC8+ PC9hPjwvdGQ+PC90cj48dHI+PHRkPlRoZXkgdG9vayBvdXIgcHJlbWlzZSwgaW5j bHVkaW5nIHNwZWNpZmljIGRldGFpbHMuICBUaGV5IGhhZCBubyBoYW5kIGluIHRo ZSBvcmlnaW5hbCBpZGVhLCBvbmUgb2YgdGhlbSBqdXN0IGFkZGVkIHRvIGl0IGFm dGVyIHNoZSBqb2luZWQuPHAgc3R5bGU9J21hcmdpbjogMC43ZW0gMCAwLjJlbSAw Jz48Zm9udCBzaXplPSctMic+KDxhIG9uY2xpY2s9J3JldHVybiBxdWlja3JlcGx5 KCIxMjA2NDUyMTQiLCA0NzEyNzAsICIiKScgaHJlZj0naHR0cDovL2NvbW11bml0 eS5saXZlam91cm5hbC5jb20vYmFkX3JwZXJzX3N1Y2svNjY4MDE1OC5odG1sP3Jl cGx5dG89MTIwNjQ1MjE0JyA+U3ZhciBww6UgZGV0dGU8L2E+KSAoPGEgaHJlZj0n aHR0cDovL2NvbW11bml0eS5saXZlam91cm5hbC5jb20vYmFkX3JwZXJzX3N1Y2sv NjY4MDE1OC5odG1sP3RocmVhZD0xMjA2NDQ5NTgjdDEyMDY0NDk1OCc+UGFyZW50 PC9hPikoPGEgaHJlZj0naHR0cDovL2NvbW11bml0eS5saXZlam91cm5hbC5jb20v YmFkX3JwZXJzX3N1Y2svNjY4MDE1OC5odG1sP3RocmVhZD0xMjA2NDUyMTQjdDEy MDY0NTIxNCc+VHLDpWQ8L2E+KTwvZm9udD48L3A+PGRpdiBpZD0nbGpxcnQxMjA2 NDUyMTQnIG5hbWU9J2xqcXJ0MTIwNjQ1MjE0Jz48L2Rpdj48L3RkPjwvdHI+PC90 Ym9keT48L3RhYmxlPjwvc3Bhbj4KPGEgbmFtZT0ndDEyMDY0NTcyNic+PC9hPjxz cGFuIGlkPSdsamNtdDEyMDY0NTcyNic+PHRhYmxlIHdpZHRoPScxMDAlJyBjbGFz cz0ndGFsay1jb21tZW50Jz48dGJvZHk+PHRyPjx0ZCByb3dzcGFuPScyJz48aW1n IHNyYz0naHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL2RvdC5naWYn IGhlaWdodD0nMScgd2lkdGg9JzUwJz48L3RkPjx0ZCBpZD0nY210YmFyMTIwNjQ1 NzI2JyBiZ2NvbG9yPScjYmJkZGZmJyB3aWR0aD0nMTAwJSc+PGZvbnQgc2l6ZT0n KzEnIGZhY2U9J0FyaWFsLEhlbHZldGljYSc+PGI+PC9iPjwvZm9udD4gPGJyIC8+ PHNwYW4gY2xhc3M9J2xqdXNlcicgbGo6dXNlcj0ndGhlc291cmdyb3ZlJyBzdHls ZT0nd2hpdGUtc3BhY2U6IG5vd3JhcDsnPjxhIGhyZWY9J2h0dHA6Ly90aGVzb3Vy Z3JvdmUubGl2ZWpvdXJuYWwuY29tL3Byb2ZpbGUnPjxpbWcgc3JjPSdodHRwOi8v bC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvdXNlcmluZm8uZ2lmJyBhbHQ9J1tp bmZvXScgd2lkdGg9JzE3JyBoZWlnaHQ9JzE3JyBzdHlsZT0ndmVydGljYWwtYWxp Z246IGJvdHRvbTsgYm9yZGVyOiAwOyBwYWRkaW5nLXJpZ2h0OiAxcHg7JyAvPjwv YT48YSBocmVmPSdodHRwOi8vdGhlc291cmdyb3ZlLmxpdmVqb3VybmFsLmNvbS8n PjxiPnRoZXNvdXJncm92ZTwvYj48L2E+PC9zcGFuPgo8YnIgLz48Zm9udCBzaXpl PSctMSc+MjAwOS0wMy0zMCAxMDoyNCBwbSAobG9jYWwpPC9mb250PgogPGZvbnQg c2l6ZT0nLTEnPig8YSBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFs LmNvbS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0NTcy NiN0MTIwNjQ1NzI2Jz5saW5rPC9hPik8L2ZvbnQ+IDxhIGhyZWY9J2h0dHA6Ly93 d3cubGl2ZWpvdXJuYWwuY29tL21hbmFnZS9zdWJzY3JpcHRpb25zL2NvbW1lbnRz LmJtbD9qb3VybmFsPWJhZF9ycGVyc19zdWNrJmFtcDt0YWxraWQ9MTIwNjQ1NzI2 Jz48aW1nIHNyYz0iaHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL2J0 bl90cmFjay5naWYiIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMCIgYWx0PSJUcmFjayBU aGlzIiB0aXRsZT0iVHJhY2sgVGhpcyIgYm9yZGVyPScwJyBhbGlnbj0iYWJzbWlk ZGxlIiAvPjwvYT48L3RkPjwvdHI+PHRyPjx0ZD5CZWNhdXNlICJJdCdzIGp1c3Qg bGlrZSBIYXJyeSBQb3R0ZXIgZXhjZXB0IFgiIGlzIHRoZSBraW5nIG9mIG9yaWdp bmFsIGlkZWFzLCB5b3UgaW5jcmVkaWJsZSBoYWNrLjxwIHN0eWxlPSdtYXJnaW46 IDAuN2VtIDAgMC4yZW0gMCc+PGZvbnQgc2l6ZT0nLTInPig8YSBvbmNsaWNrPSdy ZXR1cm4gcXVpY2tyZXBseSgiMTIwNjQ1NzI2IiwgNDcxMjcyLCAiIiknIGhyZWY9 J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNr LzY2ODAxNTguaHRtbD9yZXBseXRvPTEyMDY0NTcyNicgPlN2YXIgcMOlIGRldHRl PC9hPikgKDxhIGhyZWY9J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29t L2JhZF9ycGVyc19zdWNrLzY2ODAxNTguaHRtbD90aHJlYWQ9MTIwNjQ1MjE0I3Qx MjA2NDUyMTQnPlBhcmVudDwvYT4pKDxhIGhyZWY9J2h0dHA6Ly9jb21tdW5pdHku bGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNrLzY2ODAxNTguaHRtbD90aHJl YWQ9MTIwNjQ1NzI2I3QxMjA2NDU3MjYnPlRyw6VkPC9hPik8L2ZvbnQ+PC9wPjxk aXYgaWQ9J2xqcXJ0MTIwNjQ1NzI2JyBuYW1lPSdsanFydDEyMDY0NTcyNic+PC9k aXY+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3NwYW4+CjxhIG5hbWU9J3Qx MjA2NDY0OTQnPjwvYT48c3BhbiBpZD0nbGpjbXQxMjA2NDY0OTQnPjx0YWJsZSB3 aWR0aD0nMTAwJScgY2xhc3M9J3RhbGstY29tbWVudCc+PHRib2R5Pjx0cj48dGQg cm93c3Bhbj0nMic+PGltZyBzcmM9J2h0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwu Y29tL2ltZy9kb3QuZ2lmJyBoZWlnaHQ9JzEnIHdpZHRoPSc3NSc+PC90ZD48dGQg aWQ9J2NtdGJhcjEyMDY0NjQ5NCcgYmdjb2xvcj0nI2FhY2NlZScgd2lkdGg9JzEw MCUnPjxpbWcgYWxpZ249J2xlZnQnIGhzcGFjZT0nMycgc3JjPSdodHRwOi8vbC11 c2VycGljLmxpdmVqb3VybmFsLmNvbS83OTc0MDY3Ny8xNDk0ODcyMicgd2lkdGg9 JzEwMCcgdGl0bGU9J2NlbGVzdGluZWFuZ2VsJyBhbHQ9JycgaGVpZ2h0PScxMDAn IC8+PGZvbnQgc2l6ZT0nKzEnIGZhY2U9J0FyaWFsLEhlbHZldGljYSc+PGI+PC9i PjwvZm9udD4gPGJyIC8+PHNwYW4gY2xhc3M9J2xqdXNlcicgbGo6dXNlcj0nY2Vs ZXN0aW5lYW5nZWwnIHN0eWxlPSd3aGl0ZS1zcGFjZTogbm93cmFwOyc+PGEgaHJl Zj0naHR0cDovL2NlbGVzdGluZWFuZ2VsLmxpdmVqb3VybmFsLmNvbS9wcm9maWxl Jz48aW1nIHNyYz0naHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL3Vz ZXJpbmZvLmdpZicgYWx0PSdbaW5mb10nIHdpZHRoPScxNycgaGVpZ2h0PScxNycg c3R5bGU9J3ZlcnRpY2FsLWFsaWduOiBib3R0b207IGJvcmRlcjogMDsgcGFkZGlu Zy1yaWdodDogMXB4OycgLz48L2E+PGEgaHJlZj0naHR0cDovL2NlbGVzdGluZWFu Z2VsLmxpdmVqb3VybmFsLmNvbS8nPjxiPmNlbGVzdGluZWFuZ2VsPC9iPjwvYT48 L3NwYW4+CjxiciAvPjxmb250IHNpemU9Jy0xJz4yMDA5LTAzLTMwIDEwOjI2IHBt IChsb2NhbCk8L2ZvbnQ+CiA8Zm9udCBzaXplPSctMSc+KDxhIGhyZWY9J2h0dHA6 Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNrLzY2ODAx NTguaHRtbD90aHJlYWQ9MTIwNjQ2NDk0I3QxMjA2NDY0OTQnPmxpbms8L2E+KTwv Zm9udD4gPGEgaHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vbWFuYWdl L3N1YnNjcmlwdGlvbnMvY29tbWVudHMuYm1sP2pvdXJuYWw9YmFkX3JwZXJzX3N1 Y2smYW1wO3RhbGtpZD0xMjA2NDY0OTQnPjxpbWcgc3JjPSJodHRwOi8vbC1zdGF0 LmxpdmVqb3VybmFsLmNvbS9pbWcvYnRuX3RyYWNrLmdpZiIgd2lkdGg9IjIyIiBo ZWlnaHQ9IjIwIiBhbHQ9IlRyYWNrIFRoaXMiIHRpdGxlPSJUcmFjayBUaGlzIiBi b3JkZXI9JzAnIGFsaWduPSJhYnNtaWRkbGUiIC8+PC9hPjwvdGQ+PC90cj48dHI+ PHRkPllvdSBtaWdodCBhcyB3ZWxsIHN0b3AgaGlkaW5nIHVuZGVyIGEgc29jay48 cCBzdHlsZT0nbWFyZ2luOiAwLjdlbSAwIDAuMmVtIDAnPjxmb250IHNpemU9Jy0y Jz4oPGEgb25jbGljaz0ncmV0dXJuIHF1aWNrcmVwbHkoIjEyMDY0NjQ5NCIsIDQ3 MTI3NSwgIiIpJyBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNv bS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/cmVwbHl0bz0xMjA2NDY0OTQn ID5TdmFyIHDDpSBkZXR0ZTwvYT4pICg8YSBocmVmPSdodHRwOi8vY29tbXVuaXR5 LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/dGhy ZWFkPTEyMDY0NTcyNiN0MTIwNjQ1NzI2Jz5QYXJlbnQ8L2E+KSg8YSBocmVmPSdo dHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82 NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0NjQ5NCN0MTIwNjQ2NDk0Jz5UcsOlZDwv YT4pPC9mb250PjwvcD48ZGl2IGlkPSdsanFydDEyMDY0NjQ5NCcgbmFtZT0nbGpx cnQxMjA2NDY0OTQnPjwvZGl2PjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9z cGFuPgo8YSBuYW1lPSd0MTIwNjQ3MDA2Jz48L2E+PHNwYW4gaWQ9J2xqY210MTIw NjQ3MDA2Jz48dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSd0YWxrLWNvbW1lbnQn Pjx0Ym9keT48dHI+PHRkIHJvd3NwYW49JzInPjxpbWcgc3JjPSdodHRwOi8vbC1z dGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvZG90LmdpZicgaGVpZ2h0PScxJyB3aWR0 aD0nMTAwJz48L3RkPjx0ZCBpZD0nY210YmFyMTIwNjQ3MDA2JyBiZ2NvbG9yPScj YmJkZGZmJyB3aWR0aD0nMTAwJSc+PGZvbnQgc2l6ZT0nKzEnIGZhY2U9J0FyaWFs LEhlbHZldGljYSc+PGI+PC9iPjwvZm9udD4gPGJyIC8+PHNwYW4gY2xhc3M9J2xq dXNlcicgbGo6dXNlcj0ndGhlc291cmdyb3ZlJyBzdHlsZT0nd2hpdGUtc3BhY2U6 IG5vd3JhcDsnPjxhIGhyZWY9J2h0dHA6Ly90aGVzb3VyZ3JvdmUubGl2ZWpvdXJu YWwuY29tL3Byb2ZpbGUnPjxpbWcgc3JjPSdodHRwOi8vbC1zdGF0LmxpdmVqb3Vy bmFsLmNvbS9pbWcvdXNlcmluZm8uZ2lmJyBhbHQ9J1tpbmZvXScgd2lkdGg9JzE3 JyBoZWlnaHQ9JzE3JyBzdHlsZT0ndmVydGljYWwtYWxpZ246IGJvdHRvbTsgYm9y ZGVyOiAwOyBwYWRkaW5nLXJpZ2h0OiAxcHg7JyAvPjwvYT48YSBocmVmPSdodHRw Oi8vdGhlc291cmdyb3ZlLmxpdmVqb3VybmFsLmNvbS8nPjxiPnRoZXNvdXJncm92 ZTwvYj48L2E+PC9zcGFuPgo8YnIgLz48Zm9udCBzaXplPSctMSc+MjAwOS0wMy0z MCAxMDoyNiBwbSAobG9jYWwpPC9mb250PgogPGZvbnQgc2l6ZT0nLTEnPig8YSBo cmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNf c3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0NzAwNiN0MTIwNjQ3MDA2Jz5s aW5rPC9hPik8L2ZvbnQ+IDxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwu Y29tL21hbmFnZS9zdWJzY3JpcHRpb25zL2NvbW1lbnRzLmJtbD9qb3VybmFsPWJh ZF9ycGVyc19zdWNrJmFtcDt0YWxraWQ9MTIwNjQ3MDA2Jz48aW1nIHNyYz0iaHR0 cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL2J0bl90cmFjay5naWYiIHdp ZHRoPSIyMiIgaGVpZ2h0PSIyMCIgYWx0PSJUcmFjayBUaGlzIiB0aXRsZT0iVHJh Y2sgVGhpcyIgYm9yZGVyPScwJyBhbGlnbj0iYWJzbWlkZGxlIiAvPjwvYT48L3Rk PjwvdHI+PHRyPjx0ZD5CZWNhdXNlIHlvdSBrbm93IHdobyBJIGFtLCByaWdodD8g IFlvdSBwZW9wbGUgYXJlIHNvIHByZWRpY3RhYmxlLjxwIHN0eWxlPSdtYXJnaW46 IDAuN2VtIDAgMC4yZW0gMCc+PGZvbnQgc2l6ZT0nLTInPig8YSBvbmNsaWNrPSdy ZXR1cm4gcXVpY2tyZXBseSgiMTIwNjQ3MDA2IiwgNDcxMjc3LCAiIiknIGhyZWY9 J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNr LzY2ODAxNTguaHRtbD9yZXBseXRvPTEyMDY0NzAwNicgPlN2YXIgcMOlIGRldHRl PC9hPikgKDxhIGhyZWY9J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29t L2JhZF9ycGVyc19zdWNrLzY2ODAxNTguaHRtbD90aHJlYWQ9MTIwNjQ2NDk0I3Qx MjA2NDY0OTQnPlBhcmVudDwvYT4pKDxhIGhyZWY9J2h0dHA6Ly9jb21tdW5pdHku bGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNrLzY2ODAxNTguaHRtbD90aHJl YWQ9MTIwNjQ3MDA2I3QxMjA2NDcwMDYnPlRyw6VkPC9hPik8L2ZvbnQ+PC9wPjxk aXYgaWQ9J2xqcXJ0MTIwNjQ3MDA2JyBuYW1lPSdsanFydDEyMDY0NzAwNic+PC9k aXY+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3NwYW4+CjxhIG5hbWU9J3Qx MjA2NDc3NzQnPjwvYT48c3BhbiBpZD0nbGpjbXQxMjA2NDc3NzQnPjx0YWJsZSB3 aWR0aD0nMTAwJScgY2xhc3M9J3RhbGstY29tbWVudCc+PHRib2R5Pjx0cj48dGQg cm93c3Bhbj0nMic+PGltZyBzcmM9J2h0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwu Y29tL2ltZy9kb3QuZ2lmJyBoZWlnaHQ9JzEnIHdpZHRoPScxMjUnPjwvdGQ+PHRk IGlkPSdjbXRiYXIxMjA2NDc3NzQnIGJnY29sb3I9JyNhYWNjZWUnIHdpZHRoPScx MDAlJz48aW1nIGFsaWduPSdsZWZ0JyBoc3BhY2U9JzMnIHNyYz0naHR0cDovL2wt dXNlcnBpYy5saXZlam91cm5hbC5jb20vNzg3MDY5NzcvNjI2ODI1OCcgd2lkdGg9 Jzk5JyB0aXRsZT0nVGhlIHF1ZWVuIG9mIHRoZSBpbXBzJyBhbHQ9JycgaGVpZ2h0 PScxMDAnIC8+PGZvbnQgc2l6ZT0nKzEnIGZhY2U9J0FyaWFsLEhlbHZldGljYSc+ PGI+PC9iPjwvZm9udD4gPGJyIC8+PHNwYW4gY2xhc3M9J2xqdXNlcicgbGo6dXNl cj0ndGVuc2hpbm9mdXNoaWdpJyBzdHlsZT0nd2hpdGUtc3BhY2U6IG5vd3JhcDsn PjxhIGhyZWY9J2h0dHA6Ly90ZW5zaGlub2Z1c2hpZ2kubGl2ZWpvdXJuYWwuY29t L3Byb2ZpbGUnPjxpbWcgc3JjPSdodHRwOi8vbC1zdGF0LmxpdmVqb3VybmFsLmNv bS9pbWcvdXNlcmluZm8uZ2lmJyBhbHQ9J1tpbmZvXScgd2lkdGg9JzE3JyBoZWln aHQ9JzE3JyBzdHlsZT0ndmVydGljYWwtYWxpZ246IGJvdHRvbTsgYm9yZGVyOiAw OyBwYWRkaW5nLXJpZ2h0OiAxcHg7JyAvPjwvYT48YSBocmVmPSdodHRwOi8vdGVu c2hpbm9mdXNoaWdpLmxpdmVqb3VybmFsLmNvbS8nPjxiPnRlbnNoaW5vZnVzaGln aTwvYj48L2E+PC9zcGFuPgo8YnIgLz48Zm9udCBzaXplPSctMSc+MjAwOS0wMy0z MCAxMDoyNyBwbSAobG9jYWwpPC9mb250PgogPGZvbnQgc2l6ZT0nLTEnPig8YSBo cmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNf c3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0Nzc3NCN0MTIwNjQ3Nzc0Jz5s aW5rPC9hPik8L2ZvbnQ+IDxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwu Y29tL21hbmFnZS9zdWJzY3JpcHRpb25zL2NvbW1lbnRzLmJtbD9qb3VybmFsPWJh ZF9ycGVyc19zdWNrJmFtcDt0YWxraWQ9MTIwNjQ3Nzc0Jz48aW1nIHNyYz0iaHR0 cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL2J0bl90cmFjay5naWYiIHdp ZHRoPSIyMiIgaGVpZ2h0PSIyMCIgYWx0PSJUcmFjayBUaGlzIiB0aXRsZT0iVHJh Y2sgVGhpcyIgYm9yZGVyPScwJyBhbGlnbj0iYWJzbWlkZGxlIiAvPjwvYT48L3Rk PjwvdHI+PHRyPjx0ZD4iWW91IHBlb3BsZSI/ICBTbyB5b3UgZG8ga25vdyB1cy48 cCBzdHlsZT0nbWFyZ2luOiAwLjdlbSAwIDAuMmVtIDAnPjxmb250IHNpemU9Jy0y Jz4oPGEgb25jbGljaz0ncmV0dXJuIHF1aWNrcmVwbHkoIjEyMDY0Nzc3NCIsIDQ3 MTI4MCwgIiIpJyBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNv bS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/cmVwbHl0bz0xMjA2NDc3NzQn ID5TdmFyIHDDpSBkZXR0ZTwvYT4pICg8YSBocmVmPSdodHRwOi8vY29tbXVuaXR5 LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/dGhy ZWFkPTEyMDY0NzAwNiN0MTIwNjQ3MDA2Jz5QYXJlbnQ8L2E+KSg8YSBocmVmPSdo dHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82 NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0Nzc3NCN0MTIwNjQ3Nzc0Jz5UcsOlZDwv YT4pPC9mb250PjwvcD48ZGl2IGlkPSdsanFydDEyMDY0Nzc3NCcgbmFtZT0nbGpx cnQxMjA2NDc3NzQnPjwvZGl2PjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9z cGFuPgo8YSBuYW1lPSd0MTIwNjQ4Mjg2Jz48L2E+PHNwYW4gaWQ9J2xqY210MTIw NjQ4Mjg2Jz48dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSd0YWxrLWNvbW1lbnQn Pjx0Ym9keT48dHI+PHRkIHJvd3NwYW49JzInPjxpbWcgc3JjPSdodHRwOi8vbC1z dGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvZG90LmdpZicgaGVpZ2h0PScxJyB3aWR0 aD0nMTUwJz48L3RkPjx0ZCBpZD0nY210YmFyMTIwNjQ4Mjg2JyBiZ2NvbG9yPScj YmJkZGZmJyB3aWR0aD0nMTAwJSc+PGZvbnQgc2l6ZT0nKzEnIGZhY2U9J0FyaWFs LEhlbHZldGljYSc+PGI+PC9iPjwvZm9udD4gPGJyIC8+PHNwYW4gY2xhc3M9J2xq dXNlcicgbGo6dXNlcj0ndGhlc291cmdyb3ZlJyBzdHlsZT0nd2hpdGUtc3BhY2U6 IG5vd3JhcDsnPjxhIGhyZWY9J2h0dHA6Ly90aGVzb3VyZ3JvdmUubGl2ZWpvdXJu YWwuY29tL3Byb2ZpbGUnPjxpbWcgc3JjPSdodHRwOi8vbC1zdGF0LmxpdmVqb3Vy bmFsLmNvbS9pbWcvdXNlcmluZm8uZ2lmJyBhbHQ9J1tpbmZvXScgd2lkdGg9JzE3 JyBoZWlnaHQ9JzE3JyBzdHlsZT0ndmVydGljYWwtYWxpZ246IGJvdHRvbTsgYm9y ZGVyOiAwOyBwYWRkaW5nLXJpZ2h0OiAxcHg7JyAvPjwvYT48YSBocmVmPSdodHRw Oi8vdGhlc291cmdyb3ZlLmxpdmVqb3VybmFsLmNvbS8nPjxiPnRoZXNvdXJncm92 ZTwvYj48L2E+PC9zcGFuPgo8YnIgLz48Zm9udCBzaXplPSctMSc+MjAwOS0wMy0z MCAxMDoyOSBwbSAobG9jYWwpPC9mb250PgogPGZvbnQgc2l6ZT0nLTEnPig8YSBo cmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNf c3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0ODI4NiN0MTIwNjQ4Mjg2Jz5s aW5rPC9hPik8L2ZvbnQ+IDxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwu Y29tL21hbmFnZS9zdWJzY3JpcHRpb25zL2NvbW1lbnRzLmJtbD9qb3VybmFsPWJh ZF9ycGVyc19zdWNrJmFtcDt0YWxraWQ9MTIwNjQ4Mjg2Jz48aW1nIHNyYz0iaHR0 cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL2J0bl90cmFjay5naWYiIHdp ZHRoPSIyMiIgaGVpZ2h0PSIyMCIgYWx0PSJUcmFjayBUaGlzIiB0aXRsZT0iVHJh Y2sgVGhpcyIgYm9yZGVyPScwJyBhbGlnbj0iYWJzbWlkZGxlIiAvPjwvYT48L3Rk PjwvdHI+PHRyPjx0ZD5EaWQgYW55b25lIGV2ZXIgdGVsbCB5b3UgdGhhdCB5b3Un cmUga2luZCBvZiBkdW1iPzxwIHN0eWxlPSdtYXJnaW46IDAuN2VtIDAgMC4yZW0g MCc+PGZvbnQgc2l6ZT0nLTInPig8YSBvbmNsaWNrPSdyZXR1cm4gcXVpY2tyZXBs eSgiMTIwNjQ4Mjg2IiwgNDcxMjgyLCAiIiknIGhyZWY9J2h0dHA6Ly9jb21tdW5p dHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNrLzY2ODAxNTguaHRtbD9y ZXBseXRvPTEyMDY0ODI4NicgPlN2YXIgcMOlIGRldHRlPC9hPikgKDxhIGhyZWY9 J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNr LzY2ODAxNTguaHRtbD90aHJlYWQ9MTIwNjQ3Nzc0I3QxMjA2NDc3NzQnPlBhcmVu dDwvYT4pPC9mb250PjwvcD48ZGl2IGlkPSdsanFydDEyMDY0ODI4NicgbmFtZT0n bGpxcnQxMjA2NDgyODYnPjwvZGl2PjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+ PC9zcGFuPgo8YSBuYW1lPSd0MTIwNjQ4MDMwJz48L2E+PHNwYW4gaWQ9J2xqY210 MTIwNjQ4MDMwJz48dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSd0YWxrLWNvbW1l bnQnPjx0Ym9keT48dHI+PHRkIHJvd3NwYW49JzInPjxpbWcgc3JjPSdodHRwOi8v bC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvZG90LmdpZicgaGVpZ2h0PScxJyB3 aWR0aD0nMTI1Jz48L3RkPjx0ZCBpZD0nY210YmFyMTIwNjQ4MDMwJyBiZ2NvbG9y PScjYWFjY2VlJyB3aWR0aD0nMTAwJSc+PGltZyBhbGlnbj0nbGVmdCcgaHNwYWNl PSczJyBzcmM9J2h0dHA6Ly9sLXVzZXJwaWMubGl2ZWpvdXJuYWwuY29tLzc4NzA2 OTc3LzYyNjgyNTgnIHdpZHRoPSc5OScgdGl0bGU9J1RoZSBxdWVlbiBvZiB0aGUg aW1wcycgYWx0PScnIGhlaWdodD0nMTAwJyAvPjxmb250IHNpemU9JysxJyBmYWNl PSdBcmlhbCxIZWx2ZXRpY2EnPjxiPjwvYj48L2ZvbnQ+IDxiciAvPjxzcGFuIGNs YXNzPSdsanVzZXInIGxqOnVzZXI9J3RlbnNoaW5vZnVzaGlnaScgc3R5bGU9J3do aXRlLXNwYWNlOiBub3dyYXA7Jz48YSBocmVmPSdodHRwOi8vdGVuc2hpbm9mdXNo aWdpLmxpdmVqb3VybmFsLmNvbS9wcm9maWxlJz48aW1nIHNyYz0naHR0cDovL2wt c3RhdC5saXZlam91cm5hbC5jb20vaW1nL3VzZXJpbmZvLmdpZicgYWx0PSdbaW5m b10nIHdpZHRoPScxNycgaGVpZ2h0PScxNycgc3R5bGU9J3ZlcnRpY2FsLWFsaWdu OiBib3R0b207IGJvcmRlcjogMDsgcGFkZGluZy1yaWdodDogMXB4OycgLz48L2E+ PGEgaHJlZj0naHR0cDovL3RlbnNoaW5vZnVzaGlnaS5saXZlam91cm5hbC5jb20v Jz48Yj50ZW5zaGlub2Z1c2hpZ2k8L2I+PC9hPjwvc3Bhbj4KPGJyIC8+PGZvbnQg c2l6ZT0nLTEnPjIwMDktMDMtMzAgMTA6MjkgcG0gKGxvY2FsKTwvZm9udD4KIDxm b250IHNpemU9Jy0xJz4oPGEgaHJlZj0naHR0cDovL2NvbW11bml0eS5saXZlam91 cm5hbC5jb20vYmFkX3JwZXJzX3N1Y2svNjY4MDE1OC5odG1sP3RocmVhZD0xMjA2 NDgwMzAjdDEyMDY0ODAzMCc+bGluazwvYT4pPC9mb250PiA8YSBocmVmPSdodHRw Oi8vd3d3LmxpdmVqb3VybmFsLmNvbS9tYW5hZ2Uvc3Vic2NyaXB0aW9ucy9jb21t ZW50cy5ibWw/am91cm5hbD1iYWRfcnBlcnNfc3VjayZhbXA7dGFsa2lkPTEyMDY0 ODAzMCc+PGltZyBzcmM9Imh0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwuY29tL2lt Zy9idG5fdHJhY2suZ2lmIiB3aWR0aD0iMjIiIGhlaWdodD0iMjAiIGFsdD0iVHJh Y2sgVGhpcyIgdGl0bGU9IlRyYWNrIFRoaXMiIGJvcmRlcj0nMCcgYWxpZ249ImFi c21pZGRsZSIgLz48L2E+PC90ZD48L3RyPjx0cj48dGQ+SSdtYSBndWVzcy4uLlN0 YWNleS48cCBzdHlsZT0nbWFyZ2luOiAwLjdlbSAwIDAuMmVtIDAnPjxmb250IHNp emU9Jy0yJz4oPGEgb25jbGljaz0ncmV0dXJuIHF1aWNrcmVwbHkoIjEyMDY0ODAz MCIsIDQ3MTI4MSwgIiIpJyBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3Vy bmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/cmVwbHl0bz0xMjA2 NDgwMzAnID5TdmFyIHDDpSBkZXR0ZTwvYT4pICg8YSBocmVmPSdodHRwOi8vY29t bXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0 bWw/dGhyZWFkPTEyMDY0NzAwNiN0MTIwNjQ3MDA2Jz5QYXJlbnQ8L2E+KSg8YSBo cmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNf c3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0ODAzMCN0MTIwNjQ4MDMwJz5U csOlZDwvYT4pPC9mb250PjwvcD48ZGl2IGlkPSdsanFydDEyMDY0ODAzMCcgbmFt ZT0nbGpxcnQxMjA2NDgwMzAnPjwvZGl2PjwvdGQ+PC90cj48L3Rib2R5PjwvdGFi bGU+PC9zcGFuPgo8YSBuYW1lPSd0MTIwNjQ4NTQyJz48L2E+PHNwYW4gaWQ9J2xq Y210MTIwNjQ4NTQyJz48dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSd0YWxrLWNv bW1lbnQnPjx0Ym9keT48dHI+PHRkIHJvd3NwYW49JzInPjxpbWcgc3JjPSdodHRw Oi8vbC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvZG90LmdpZicgaGVpZ2h0PScx JyB3aWR0aD0nMTUwJz48L3RkPjx0ZCBpZD0nY210YmFyMTIwNjQ4NTQyJyBiZ2Nv bG9yPScjYmJkZGZmJyB3aWR0aD0nMTAwJSc+PGZvbnQgc2l6ZT0nKzEnIGZhY2U9 J0FyaWFsLEhlbHZldGljYSc+PGI+PC9iPjwvZm9udD4gPGJyIC8+PHNwYW4gY2xh c3M9J2xqdXNlcicgbGo6dXNlcj0ndGhlc291cmdyb3ZlJyBzdHlsZT0nd2hpdGUt c3BhY2U6IG5vd3JhcDsnPjxhIGhyZWY9J2h0dHA6Ly90aGVzb3VyZ3JvdmUubGl2 ZWpvdXJuYWwuY29tL3Byb2ZpbGUnPjxpbWcgc3JjPSdodHRwOi8vbC1zdGF0Lmxp dmVqb3VybmFsLmNvbS9pbWcvdXNlcmluZm8uZ2lmJyBhbHQ9J1tpbmZvXScgd2lk dGg9JzE3JyBoZWlnaHQ9JzE3JyBzdHlsZT0ndmVydGljYWwtYWxpZ246IGJvdHRv bTsgYm9yZGVyOiAwOyBwYWRkaW5nLXJpZ2h0OiAxcHg7JyAvPjwvYT48YSBocmVm PSdodHRwOi8vdGhlc291cmdyb3ZlLmxpdmVqb3VybmFsLmNvbS8nPjxiPnRoZXNv dXJncm92ZTwvYj48L2E+PC9zcGFuPgo8YnIgLz48Zm9udCBzaXplPSctMSc+MjAw OS0wMy0zMCAxMDoyOSBwbSAobG9jYWwpPC9mb250PgogPGZvbnQgc2l6ZT0nLTEn Pig8YSBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRf cnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0ODU0MiN0MTIwNjQ4 NTQyJz5saW5rPC9hPik8L2ZvbnQ+IDxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpv dXJuYWwuY29tL21hbmFnZS9zdWJzY3JpcHRpb25zL2NvbW1lbnRzLmJtbD9qb3Vy bmFsPWJhZF9ycGVyc19zdWNrJmFtcDt0YWxraWQ9MTIwNjQ4NTQyJz48aW1nIHNy Yz0iaHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL2J0bl90cmFjay5n aWYiIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMCIgYWx0PSJUcmFjayBUaGlzIiB0aXRs ZT0iVHJhY2sgVGhpcyIgYm9yZGVyPScwJyBhbGlnbj0iYWJzbWlkZGxlIiAvPjwv YT48L3RkPjwvdHI+PHRyPjx0ZD5Oby48cCBzdHlsZT0nbWFyZ2luOiAwLjdlbSAw IDAuMmVtIDAnPjxmb250IHNpemU9Jy0yJz4oPGEgb25jbGljaz0ncmV0dXJuIHF1 aWNrcmVwbHkoIjEyMDY0ODU0MiIsIDQ3MTI4MywgIiIpJyBocmVmPSdodHRwOi8v Y29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4 Lmh0bWw/cmVwbHl0bz0xMjA2NDg1NDInID5TdmFyIHDDpSBkZXR0ZTwvYT4pICg8 YSBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBl cnNfc3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0ODAzMCN0MTIwNjQ4MDMw Jz5QYXJlbnQ8L2E+KTwvZm9udD48L3A+PGRpdiBpZD0nbGpxcnQxMjA2NDg1NDIn IG5hbWU9J2xqcXJ0MTIwNjQ4NTQyJz48L2Rpdj48L3RkPjwvdHI+PC90Ym9keT48 L3RhYmxlPjwvc3Bhbj4KPGEgbmFtZT0ndDEyMDY0Njc1MCc+PC9hPjxzcGFuIGlk PSdsamNtdDEyMDY0Njc1MCc+PHRhYmxlIHdpZHRoPScxMDAlJyBjbGFzcz0ndGFs ay1jb21tZW50Jz48dGJvZHk+PHRyPjx0ZCByb3dzcGFuPScyJz48aW1nIHNyYz0n aHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL2RvdC5naWYnIGhlaWdo dD0nMScgd2lkdGg9Jzc1Jz48L3RkPjx0ZCBpZD0nY210YmFyMTIwNjQ2NzUwJyBi Z2NvbG9yPScjYWFjY2VlJyB3aWR0aD0nMTAwJSc+PGltZyBhbGlnbj0nbGVmdCcg aHNwYWNlPSczJyBzcmM9J2h0dHA6Ly9sLXVzZXJwaWMubGl2ZWpvdXJuYWwuY29t Lzc4NzA2ODAxLzYyNjgyNTgnIHdpZHRoPScxMDAnIHRpdGxlPSdUaGUgcXVlZW4g b2YgdGhlIGltcHM6IGpva2VyIGNsYXAnIGFsdD0nJyBoZWlnaHQ9JzEwMCcgLz48 Zm9udCBzaXplPScrMScgZmFjZT0nQXJpYWwsSGVsdmV0aWNhJz48Yj48L2I+PC9m b250PiA8YnIgLz48c3BhbiBjbGFzcz0nbGp1c2VyJyBsajp1c2VyPSd0ZW5zaGlu b2Z1c2hpZ2knIHN0eWxlPSd3aGl0ZS1zcGFjZTogbm93cmFwOyc+PGEgaHJlZj0n aHR0cDovL3RlbnNoaW5vZnVzaGlnaS5saXZlam91cm5hbC5jb20vcHJvZmlsZSc+ PGltZyBzcmM9J2h0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwuY29tL2ltZy91c2Vy aW5mby5naWYnIGFsdD0nW2luZm9dJyB3aWR0aD0nMTcnIGhlaWdodD0nMTcnIHN0 eWxlPSd2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyBib3JkZXI6IDA7IHBhZGRpbmct cmlnaHQ6IDFweDsnIC8+PC9hPjxhIGhyZWY9J2h0dHA6Ly90ZW5zaGlub2Z1c2hp Z2kubGl2ZWpvdXJuYWwuY29tLyc+PGI+dGVuc2hpbm9mdXNoaWdpPC9iPjwvYT48 L3NwYW4+CjxiciAvPjxmb250IHNpemU9Jy0xJz4yMDA5LTAzLTMwIDEwOjI2IHBt IChsb2NhbCk8L2ZvbnQ+CiA8Zm9udCBzaXplPSctMSc+KDxhIGhyZWY9J2h0dHA6 Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNrLzY2ODAx NTguaHRtbD90aHJlYWQ9MTIwNjQ2NzUwI3QxMjA2NDY3NTAnPmxpbms8L2E+KTwv Zm9udD4gPGEgaHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vbWFuYWdl L3N1YnNjcmlwdGlvbnMvY29tbWVudHMuYm1sP2pvdXJuYWw9YmFkX3JwZXJzX3N1 Y2smYW1wO3RhbGtpZD0xMjA2NDY3NTAnPjxpbWcgc3JjPSJodHRwOi8vbC1zdGF0 LmxpdmVqb3VybmFsLmNvbS9pbWcvYnRuX3RyYWNrLmdpZiIgd2lkdGg9IjIyIiBo ZWlnaHQ9IjIwIiBhbHQ9IlRyYWNrIFRoaXMiIHRpdGxlPSJUcmFjayBUaGlzIiBi b3JkZXI9JzAnIGFsaWduPSJhYnNtaWRkbGUiIC8+PC9hPjwvdGQ+PC90cj48dHI+ PHRkPllvdSBoYXZlIHNvbWUgcGVyc29uYWwgc3Rha2UgaW4gdGhpcyBvciBkbyB5 b3UganVzdCBnZXQgbWFkIGVhc2lseT88YnIgLz48YnIgLz5JJ20gdGFsa2luZyBk b3duIHRvIHNwZWNpZmljIHNoaXQgbGlrZSAiaWYgdGhleSdyZSBhIGJsb29kIHRy YWl0b3JzLCB0aGV5IHdlYXIgYSBtYXJrIG9uIHRoZWlyIGhhbmQsIGFuZCB0aGlz IGlzIHdoYXQgaXQgbG9va3MgbGlrZSIuPHAgc3R5bGU9J21hcmdpbjogMC43ZW0g MCAwLjJlbSAwJz48Zm9udCBzaXplPSctMic+KDxhIG9uY2xpY2s9J3JldHVybiBx dWlja3JlcGx5KCIxMjA2NDY3NTAiLCA0NzEyNzYsICIiKScgaHJlZj0naHR0cDov L2NvbW11bml0eS5saXZlam91cm5hbC5jb20vYmFkX3JwZXJzX3N1Y2svNjY4MDE1 OC5odG1sP3JlcGx5dG89MTIwNjQ2NzUwJyA+U3ZhciBww6UgZGV0dGU8L2E+KSAo PGEgaHJlZj0naHR0cDovL2NvbW11bml0eS5saXZlam91cm5hbC5jb20vYmFkX3Jw ZXJzX3N1Y2svNjY4MDE1OC5odG1sP3RocmVhZD0xMjA2NDU3MjYjdDEyMDY0NTcy Nic+UGFyZW50PC9hPikoPGEgaHJlZj0naHR0cDovL2NvbW11bml0eS5saXZlam91 cm5hbC5jb20vYmFkX3JwZXJzX3N1Y2svNjY4MDE1OC5odG1sP3RocmVhZD0xMjA2 NDY3NTAjdDEyMDY0Njc1MCc+VHLDpWQ8L2E+KTwvZm9udD48L3A+PGRpdiBpZD0n bGpxcnQxMjA2NDY3NTAnIG5hbWU9J2xqcXJ0MTIwNjQ2NzUwJz48L2Rpdj48L3Rk PjwvdHI+PC90Ym9keT48L3RhYmxlPjwvc3Bhbj4KPGEgbmFtZT0ndDEyMDY0NzI2 Mic+PC9hPjxzcGFuIGlkPSdsamNtdDEyMDY0NzI2Mic+PHRhYmxlIHdpZHRoPScx MDAlJyBjbGFzcz0ndGFsay1jb21tZW50Jz48dGJvZHk+PHRyPjx0ZCByb3dzcGFu PScyJz48aW1nIHNyYz0naHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1n L2RvdC5naWYnIGhlaWdodD0nMScgd2lkdGg9JzEwMCc+PC90ZD48dGQgaWQ9J2Nt dGJhcjEyMDY0NzI2MicgYmdjb2xvcj0nI2JiZGRmZicgd2lkdGg9JzEwMCUnPjxm b250IHNpemU9JysxJyBmYWNlPSdBcmlhbCxIZWx2ZXRpY2EnPjxiPjwvYj48L2Zv bnQ+IDxiciAvPjxzcGFuIGNsYXNzPSdsanVzZXInIGxqOnVzZXI9J3RoZXNvdXJn cm92ZScgc3R5bGU9J3doaXRlLXNwYWNlOiBub3dyYXA7Jz48YSBocmVmPSdodHRw Oi8vdGhlc291cmdyb3ZlLmxpdmVqb3VybmFsLmNvbS9wcm9maWxlJz48aW1nIHNy Yz0naHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL3VzZXJpbmZvLmdp ZicgYWx0PSdbaW5mb10nIHdpZHRoPScxNycgaGVpZ2h0PScxNycgc3R5bGU9J3Zl cnRpY2FsLWFsaWduOiBib3R0b207IGJvcmRlcjogMDsgcGFkZGluZy1yaWdodDog MXB4OycgLz48L2E+PGEgaHJlZj0naHR0cDovL3RoZXNvdXJncm92ZS5saXZlam91 cm5hbC5jb20vJz48Yj50aGVzb3VyZ3JvdmU8L2I+PC9hPjwvc3Bhbj4KPGJyIC8+ PGZvbnQgc2l6ZT0nLTEnPjIwMDktMDMtMzAgMTA6MjcgcG0gKGxvY2FsKTwvZm9u dD4KIDxmb250IHNpemU9Jy0xJz4oPGEgaHJlZj0naHR0cDovL2NvbW11bml0eS5s aXZlam91cm5hbC5jb20vYmFkX3JwZXJzX3N1Y2svNjY4MDE1OC5odG1sP3RocmVh ZD0xMjA2NDcyNjIjdDEyMDY0NzI2Mic+bGluazwvYT4pPC9mb250PiA8YSBocmVm PSdodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9tYW5hZ2Uvc3Vic2NyaXB0aW9u cy9jb21tZW50cy5ibWw/am91cm5hbD1iYWRfcnBlcnNfc3VjayZhbXA7dGFsa2lk PTEyMDY0NzI2Mic+PGltZyBzcmM9Imh0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwu Y29tL2ltZy9idG5fdHJhY2suZ2lmIiB3aWR0aD0iMjIiIGhlaWdodD0iMjAiIGFs dD0iVHJhY2sgVGhpcyIgdGl0bGU9IlRyYWNrIFRoaXMiIGJvcmRlcj0nMCcgYWxp Z249ImFic21pZGRsZSIgLz48L2E+PC90ZD48L3RyPjx0cj48dGQ+UmlnaHQsIHJp Z2h0LCBpZGVudGlmeWluZyBtYXJrcyBvbiB0aGUgYXBwZW5kYWdlcyBpbiBIYXJy eSBQb3R0ZXIgaXMgeW91ciBvd24gdW5pcXVlIGlkZWEuPHAgc3R5bGU9J21hcmdp bjogMC43ZW0gMCAwLjJlbSAwJz48Zm9udCBzaXplPSctMic+KDxhIG9uY2xpY2s9 J3JldHVybiBxdWlja3JlcGx5KCIxMjA2NDcyNjIiLCA0NzEyNzgsICIiKScgaHJl Zj0naHR0cDovL2NvbW11bml0eS5saXZlam91cm5hbC5jb20vYmFkX3JwZXJzX3N1 Y2svNjY4MDE1OC5odG1sP3JlcGx5dG89MTIwNjQ3MjYyJyA+U3ZhciBww6UgZGV0 dGU8L2E+KSAoPGEgaHJlZj0naHR0cDovL2NvbW11bml0eS5saXZlam91cm5hbC5j b20vYmFkX3JwZXJzX3N1Y2svNjY4MDE1OC5odG1sP3RocmVhZD0xMjA2NDY3NTAj dDEyMDY0Njc1MCc+UGFyZW50PC9hPik8L2ZvbnQ+PC9wPjxkaXYgaWQ9J2xqcXJ0 MTIwNjQ3MjYyJyBuYW1lPSdsanFydDEyMDY0NzI2Mic+PC9kaXY+PC90ZD48L3Ry PjwvdGJvZHk+PC90YWJsZT48L3NwYW4+CjxhIG5hbWU9J3QxMjA2NDkwNTQnPjwv YT48c3BhbiBpZD0nbGpjbXQxMjA2NDkwNTQnPjx0YWJsZSB3aWR0aD0nMTAwJScg Y2xhc3M9J3RhbGstY29tbWVudCc+PHRib2R5Pjx0cj48dGQgcm93c3Bhbj0nMic+ PGltZyBzcmM9J2h0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwuY29tL2ltZy9kb3Qu Z2lmJyBoZWlnaHQ9JzEnIHdpZHRoPSc1MCc+PC90ZD48dGQgaWQ9J2NtdGJhcjEy MDY0OTA1NCcgYmdjb2xvcj0nIzk5Y2NmZicgd2lkdGg9JzEwMCUnPjxpbWcgYWxp Z249J2xlZnQnIGhzcGFjZT0nMycgc3JjPSdodHRwOi8vbC11c2VycGljLmxpdmVq b3VybmFsLmNvbS8zOTY0NzQ0Ni8zNTgxMzU0JyB3aWR0aD0nMTAwJyB0aXRsZT0n YmVhcmRlZHRyb2xsJyBhbHQ9JycgaGVpZ2h0PScxMDAnIC8+PGZvbnQgc2l6ZT0n KzEnIGZhY2U9J0FyaWFsLEhlbHZldGljYSc+PGI+PC9iPjwvZm9udD4gPGJyIC8+ PHNwYW4gY2xhc3M9J2xqdXNlcicgbGo6dXNlcj0nYmVhcmRlZHRyb2xsJyBzdHls ZT0nd2hpdGUtc3BhY2U6IG5vd3JhcDsnPjxhIGhyZWY9J2h0dHA6Ly9iZWFyZGVk dHJvbGwubGl2ZWpvdXJuYWwuY29tL3Byb2ZpbGUnPjxpbWcgc3JjPSdodHRwOi8v bC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvdXNlcmluZm8uZ2lmJyBhbHQ9J1tp bmZvXScgd2lkdGg9JzE3JyBoZWlnaHQ9JzE3JyBzdHlsZT0ndmVydGljYWwtYWxp Z246IGJvdHRvbTsgYm9yZGVyOiAwOyBwYWRkaW5nLXJpZ2h0OiAxcHg7JyAvPjwv YT48YSBocmVmPSdodHRwOi8vYmVhcmRlZHRyb2xsLmxpdmVqb3VybmFsLmNvbS8n PjxiPmJlYXJkZWR0cm9sbDwvYj48L2E+PC9zcGFuPgo8YnIgLz48Zm9udCBzaXpl PSctMSc+MjAwOS0wMy0zMCAxMDozMCBwbSAobG9jYWwpPC9mb250PgogPGZvbnQg c2l6ZT0nLTEnPig8YSBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFs LmNvbS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0OTA1 NCN0MTIwNjQ5MDU0Jz5saW5rPC9hPik8L2ZvbnQ+IDxhIGhyZWY9J2h0dHA6Ly9j b21tdW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNrLzY2ODAxNTgu aHRtbD9lZGl0PTEyMDY0OTA1NCc+PGltZyBzcmM9Imh0dHA6Ly9sLXN0YXQubGl2 ZWpvdXJuYWwuY29tL2ltZy9idG5fZWRpdC5naWYiIHdpZHRoPSIyMiIgaGVpZ2h0 PSIyMCIgYWx0PSJFZGl0IiB0aXRsZT0iRWRpdCIgYm9yZGVyPScwJyB2c3BhY2U9 IiIgaHNwYWNlPSIyIiBhbGlnbj0iYWJzbWlkZGxlIiAvPjwvYT48YSBocmVmPSdo dHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9kZWxjb21tZW50LmJtbD9qb3VybmFs PWJhZF9ycGVyc19zdWNrJmFtcDtpZD0xMjA2NDkwNTQnPjxpbWcgc3JjPSJodHRw Oi8vbC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvYnRuX2RlbC5naWYiIHdpZHRo PSIyMiIgaGVpZ2h0PSIyMCIgYWx0PSJEZWxldGUiIHRpdGxlPSJEZWxldGUiIGJv cmRlcj0nMCcgdnNwYWNlPSIiIGhzcGFjZT0iMiIgYWxpZ249ImFic21pZGRsZSIg Lz48L2E+PGEgaHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vbWFuYWdl L3N1YnNjcmlwdGlvbnMvY29tbWVudHMuYm1sP2pvdXJuYWw9YmFkX3JwZXJzX3N1 Y2smYW1wO3RhbGtpZD0xMjA2NDkwNTQnPjxpbWcgc3JjPSJodHRwOi8vbC1zdGF0 LmxpdmVqb3VybmFsLmNvbS9pbWcvYnRuX3RyYWNrLmdpZiIgd2lkdGg9IjIyIiBo ZWlnaHQ9IjIwIiBhbHQ9IlRyYWNrIFRoaXMiIHRpdGxlPSJUcmFjayBUaGlzIiBi b3JkZXI9JzAnIGFsaWduPSJhYnNtaWRkbGUiIC8+PC9hPjxiciAvPjxiPkNvbW1l bnQgUG9zdGVkIFN1Y2Nlc3NmdWxseTwvYj48L3RkPjwvdHI+PHRyPjx0ZD48aT5U aGV5IGhhZCBubyBoYW5kIGluIHRoZSBvcmlnaW5hbCBpZGVhLDwvaT48YnIgLz48 YnIgLz5Zb3Uga25vdyBzb21ldGhpbmcgYWJvdXQgaWRlYXM/IFRoZXkncmUgY2hl YXAuIDxpPlJlYWw8L2k+IGNoZWFwLiBUaGV5IGFsc28gaGF2ZSBubyBsZWdhbCBv ciBtb3JhbCBwcm90ZWN0aW9uIHdoYXRzb2V2ZXIuIEV2ZXJ5IGF1dGhvciwgcGFp bnRlciwgc29uZ3dyaXRlciBhbmQgb3RoZXIgYXJ0aXN0IHN0ZWFscyBkb3plbnMg b2YgaWRlYXMgZXZlcnkgd2Vlay4gU28gd2hlbiBwZW9wbGUgInN0ZWFsIiBhbiBp ZGVhIHlvdSBjYW1lIHVwIHdpdGg/IEp1c3QgZnVja2luZyBncmluIGFuZCBiZWFy IGl0LjxwIHN0eWxlPSdtYXJnaW46IDAuN2VtIDAgMC4yZW0gMCc+PGZvbnQgc2l6 ZT0nLTInPig8YSBvbmNsaWNrPSdyZXR1cm4gcXVpY2tyZXBseSgiMTIwNjQ5MDU0 IiwgNDcxMjg1LCAiIiknIGhyZWY9J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJu YWwuY29tL2JhZF9ycGVyc19zdWNrLzY2ODAxNTguaHRtbD9yZXBseXRvPTEyMDY0 OTA1NCcgPlN2YXIgcMOlIGRldHRlPC9hPikgKDxhIGhyZWY9J2h0dHA6Ly9jb21t dW5pdHkubGl2ZWpvdXJuYWwuY29tL2JhZF9ycGVyc19zdWNrLzY2ODAxNTguaHRt bD90aHJlYWQ9MTIwNjQ1MjE0I3QxMjA2NDUyMTQnPlBhcmVudDwvYT4pPC9mb250 PjwvcD48ZGl2IGlkPSdsanFydDEyMDY0OTA1NCcgbmFtZT0nbGpxcnQxMjA2NDkw NTQnPjwvZGl2PjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9zcGFuPgo8YSBu YW1lPSd0MTIwNjQ3NTE4Jz48L2E+PHNwYW4gaWQ9J2xqY210MTIwNjQ3NTE4Jz48 dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSd0YWxrLWNvbW1lbnQnPjx0Ym9keT48 dHI+PHRkIHJvd3NwYW49JzInPjxpbWcgc3JjPSdodHRwOi8vbC1zdGF0LmxpdmVq b3VybmFsLmNvbS9pbWcvZG90LmdpZicgaGVpZ2h0PScxJyB3aWR0aD0nMCc+PC90 ZD48dGQgaWQ9J2NtdGJhcjEyMDY0NzUxOCcgYmdjb2xvcj0nI2JiZGRmZicgd2lk dGg9JzEwMCUnPjxpbWcgYWxpZ249J2xlZnQnIGhzcGFjZT0nMycgc3JjPSdodHRw Oi8vbC11c2VycGljLmxpdmVqb3VybmFsLmNvbS8zOTY0NzQ0Ni8zNTgxMzU0JyB3 aWR0aD0nMTAwJyB0aXRsZT0nYmVhcmRlZHRyb2xsJyBhbHQ9JycgaGVpZ2h0PScx MDAnIC8+PGZvbnQgc2l6ZT0nKzEnIGZhY2U9J0FyaWFsLEhlbHZldGljYSc+PGI+ PC9iPjwvZm9udD4gPGJyIC8+PHNwYW4gY2xhc3M9J2xqdXNlcicgbGo6dXNlcj0n YmVhcmRlZHRyb2xsJyBzdHlsZT0nd2hpdGUtc3BhY2U6IG5vd3JhcDsnPjxhIGhy ZWY9J2h0dHA6Ly9iZWFyZGVkdHJvbGwubGl2ZWpvdXJuYWwuY29tL3Byb2ZpbGUn PjxpbWcgc3JjPSdodHRwOi8vbC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvdXNl cmluZm8uZ2lmJyBhbHQ9J1tpbmZvXScgd2lkdGg9JzE3JyBoZWlnaHQ9JzE3JyBz dHlsZT0ndmVydGljYWwtYWxpZ246IGJvdHRvbTsgYm9yZGVyOiAwOyBwYWRkaW5n LXJpZ2h0OiAxcHg7JyAvPjwvYT48YSBocmVmPSdodHRwOi8vYmVhcmRlZHRyb2xs LmxpdmVqb3VybmFsLmNvbS8nPjxiPmJlYXJkZWR0cm9sbDwvYj48L2E+PC9zcGFu Pgo8YnIgLz48Zm9udCBzaXplPSctMSc+MjAwOS0wMy0zMCAxMDoyNyBwbSAobG9j YWwpPC9mb250PgogPGZvbnQgc2l6ZT0nLTEnPig8YSBocmVmPSdodHRwOi8vY29t bXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0 bWw/dGhyZWFkPTEyMDY0NzUxOCN0MTIwNjQ3NTE4Jz5saW5rPC9hPik8L2ZvbnQ+ IDxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL2RlbGNvbW1lbnQu Ym1sP2pvdXJuYWw9YmFkX3JwZXJzX3N1Y2smYW1wO2lkPTEyMDY0NzUxOCc+PGlt ZyBzcmM9Imh0dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwuY29tL2ltZy9idG5fZGVs LmdpZiIgd2lkdGg9IjIyIiBoZWlnaHQ9IjIwIiBhbHQ9IkRlbGV0ZSIgdGl0bGU9 IkRlbGV0ZSIgYm9yZGVyPScwJyB2c3BhY2U9IiIgaHNwYWNlPSIyIiBhbGlnbj0i YWJzbWlkZGxlIiAvPjwvYT48YSBocmVmPSdodHRwOi8vd3d3LmxpdmVqb3VybmFs LmNvbS9tYW5hZ2Uvc3Vic2NyaXB0aW9ucy9jb21tZW50cy5ibWw/am91cm5hbD1i YWRfcnBlcnNfc3VjayZhbXA7dGFsa2lkPTEyMDY0NzUxOCc+PGltZyBzcmM9Imh0 dHA6Ly9sLXN0YXQubGl2ZWpvdXJuYWwuY29tL2ltZy9idG5fdHJhY2suZ2lmIiB3 aWR0aD0iMjIiIGhlaWdodD0iMjAiIGFsdD0iVHJhY2sgVGhpcyIgdGl0bGU9IlRy YWNrIFRoaXMiIGJvcmRlcj0nMCcgYWxpZ249ImFic21pZGRsZSIgLz48L2E+PC90 ZD48L3RyPjx0cj48dGQ+PGk+IFdpdGggYSBwcmVtaXNlIHlvdSBSSVBQRUQgT0ZG IEZST00gVVMuPC9pPjxiciAvPjxiciAvPldobywgaW4gdHVybiwgcmlwcGVkIGl0 IGZyb20gUm93bGluZy4gWW91ciBwb2ludD88cCBzdHlsZT0nbWFyZ2luOiAwLjdl bSAwIDAuMmVtIDAnPjxmb250IHNpemU9Jy0yJz4oPGEgb25jbGljaz0ncmV0dXJu IHF1aWNrcmVwbHkoIjEyMDY0NzUxOCIsIDQ3MTI3OSwgIiIpJyBocmVmPSdodHRw Oi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82Njgw MTU4Lmh0bWw/cmVwbHl0bz0xMjA2NDc1MTgnID5TdmFyIHDDpSBkZXR0ZTwvYT4p ICg8YSBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRf cnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0NzUxOCN0MTIwNjQ3 NTE4Jz5UcsOlZDwvYT4pPC9mb250PjwvcD48ZGl2IGlkPSdsanFydDEyMDY0NzUx OCcgbmFtZT0nbGpxcnQxMjA2NDc1MTgnPjwvZGl2PjwvdGQ+PC90cj48L3Rib2R5 PjwvdGFibGU+PC9zcGFuPgo8YSBuYW1lPSd0MTIwNjQ4Nzk4Jz48L2E+PHNwYW4g aWQ9J2xqY210MTIwNjQ4Nzk4Jz48dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSd0 YWxrLWNvbW1lbnQnPjx0Ym9keT48dHI+PHRkIHJvd3NwYW49JzInPjxpbWcgc3Jj PSdodHRwOi8vbC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvZG90LmdpZicgaGVp Z2h0PScxJyB3aWR0aD0nMjUnPjwvdGQ+PHRkIGlkPSdjbXRiYXIxMjA2NDg3OTgn IGJnY29sb3I9JyNhYWNjZWUnIHdpZHRoPScxMDAlJz48Zm9udCBzaXplPScrMScg ZmFjZT0nQXJpYWwsSGVsdmV0aWNhJz48Yj48L2I+PC9mb250PiA8YnIgLz48c3Bh biBjbGFzcz0nbGp1c2VyJyBsajp1c2VyPSd0aGVzb3VyZ3JvdmUnIHN0eWxlPSd3 aGl0ZS1zcGFjZTogbm93cmFwOyc+PGEgaHJlZj0naHR0cDovL3RoZXNvdXJncm92 ZS5saXZlam91cm5hbC5jb20vcHJvZmlsZSc+PGltZyBzcmM9J2h0dHA6Ly9sLXN0 YXQubGl2ZWpvdXJuYWwuY29tL2ltZy91c2VyaW5mby5naWYnIGFsdD0nW2luZm9d JyB3aWR0aD0nMTcnIGhlaWdodD0nMTcnIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjog Ym90dG9tOyBib3JkZXI6IDA7IHBhZGRpbmctcmlnaHQ6IDFweDsnIC8+PC9hPjxh IGhyZWY9J2h0dHA6Ly90aGVzb3VyZ3JvdmUubGl2ZWpvdXJuYWwuY29tLyc+PGI+ dGhlc291cmdyb3ZlPC9iPjwvYT48L3NwYW4+CjxiciAvPjxmb250IHNpemU9Jy0x Jz4yMDA5LTAzLTMwIDEwOjMwIHBtIChsb2NhbCk8L2ZvbnQ+CiA8Zm9udCBzaXpl PSctMSc+KDxhIGhyZWY9J2h0dHA6Ly9jb21tdW5pdHkubGl2ZWpvdXJuYWwuY29t L2JhZF9ycGVyc19zdWNrLzY2ODAxNTguaHRtbD90aHJlYWQ9MTIwNjQ4Nzk4I3Qx MjA2NDg3OTgnPmxpbms8L2E+KTwvZm9udD4gPGEgaHJlZj0naHR0cDovL3d3dy5s aXZlam91cm5hbC5jb20vbWFuYWdlL3N1YnNjcmlwdGlvbnMvY29tbWVudHMuYm1s P2pvdXJuYWw9YmFkX3JwZXJzX3N1Y2smYW1wO3RhbGtpZD0xMjA2NDg3OTgnPjxp bWcgc3JjPSJodHRwOi8vbC1zdGF0LmxpdmVqb3VybmFsLmNvbS9pbWcvYnRuX3Ry YWNrLmdpZiIgd2lkdGg9IjIyIiBoZWlnaHQ9IjIwIiBhbHQ9IlRyYWNrIFRoaXMi IHRpdGxlPSJUcmFjayBUaGlzIiBib3JkZXI9JzAnIGFsaWduPSJhYnNtaWRkbGUi IC8+PC9hPjwvdGQ+PC90cj48dHI+PHRkPlRoZSBwb2ludCBpcyBvYnZpb3VzbHkg QkFXV1dXV1dXV1dXV1dXV1dXV1dXVy48cCBzdHlsZT0nbWFyZ2luOiAwLjdlbSAw IDAuMmVtIDAnPjxmb250IHNpemU9Jy0yJz4oPGEgb25jbGljaz0ncmV0dXJuIHF1 aWNrcmVwbHkoIjEyMDY0ODc5OCIsIDQ3MTI4NCwgIiIpJyBocmVmPSdodHRwOi8v Y29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4 Lmh0bWw/cmVwbHl0bz0xMjA2NDg3OTgnID5TdmFyIHDDpSBkZXR0ZTwvYT4pICg8 YSBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNvbS9iYWRfcnBl cnNfc3Vjay82NjgwMTU4Lmh0bWw/dGhyZWFkPTEyMDY0NzUxOCN0MTIwNjQ3NTE4 Jz5QYXJlbnQ8L2E+KTwvZm9udD48L3A+PGRpdiBpZD0nbGpxcnQxMjA2NDg3OTgn IG5hbWU9J2xqcXJ0MTIwNjQ4Nzk4Jz48L2Rpdj48L3RkPjwvdHI+PC90Ym9keT48 L3RhYmxlPjwvc3Bhbj4KPGhyIC8+PHAgY2xhc3M9J2xlc3N0b3AnIGFsaWduPSdj ZW50ZXInPjxiPig8YSBvbmNsaWNrPSdyZXR1cm4gcXVpY2tyZXBseSgiYm90dG9t IiwgMCwgIiIpJyBocmVmPSdodHRwOi8vY29tbXVuaXR5LmxpdmVqb3VybmFsLmNv bS9iYWRfcnBlcnNfc3Vjay82NjgwMTU4Lmh0bWw/bW9kZT1yZXBseScgPlBvc3Qg YSBuZXcgY29tbWVudDwvYT48L2E+KTwvYj48L3A+PGRpdiBhbGlnbj0nY2VudGVy Jz48ZGl2IGlkPSdsanFydGJvdHRvbScgbmFtZT0nbGpxcnRib3R0b20nPjwvZGl2 PjwvZGl2PjwvZm9ybT48L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0nY2xlYXIn PjwvZGl2PgogICAgICAKICAgICAgPC9kaXY+CgogICAgICAKCiAgICA8L2Rpdj4K ICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHVzaCI+PC9kaXY+CiAgICA8L2Rp dj4KICAgIDwhLS0gRW5kIFwjY29udGVudCAtLT4KCiAgICAKICAgICAgICA8ZGl2 IGlkPSJmb290ZXIiPgogICAgICAgICAgICA8ZGl2IGlkPSJmb290ZXItbGlua3Mi PgogICAgICAgICAgICAgICAgPHRhYmxlPjx0cj4KICAgICAgICAgICAgICAgICAg ICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5BYm91dDwvaDM+CiAg ICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0iZm9vdGVyLWxpbmtzLWNvbDEi PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6 Ly93d3cubGl2ZWpvdXJuYWwuY29tL2NvbnRhY3QvIj5Db250YWN0PC9hPjwvbGk+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDov L2xpdmVqb3VybmFsaW5jLmNvbS9zYWxlcy5waHAiPkFkdmVydGlzZTwvYT48L2xp PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6 Ly93d3cubGl2ZWpvdXJuYWxpbmMuY29tL2pvYnMvIj5Kb2JzPC9hPjwvbGk+CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3 dy5saXZlam91cm5hbC5jb20vbmV3cy5ibWwiPlNpdGUgTmV3czwvYT48L2xpPgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93 d3cubGl2ZWpvdXJuYWxpbmMuY29tLyI+TW9yZS4uLjwvYT48L2xpPgogICAgICAg ICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+ CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAg ICA8aDM+SGVscDwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0i Zm9vdGVyLWxpbmtzLWNvbDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL3N1cHBvcnQv Ij5TdXBwb3J0PC9hPiAvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBo cmVmPSJodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9zdXBwb3J0L2ZhcS5ibWwi PkZBUXM8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48 YSBocmVmPSJodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9zaXRlL3NhZmV0eXRp cHMuYm1sIj5TYWZldHkgVGlwczwvYT48L2xpPgogICAgICAgICAgICAgICAgICAg ICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgaWQ9ImZvb3Rl ci1saW5rcy1nZXRpbnZvbHZlZCI+R2V0IEludm9sdmVkPC9oMz4KICAgICAgICAg ICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL3N1cHBvcnQv ZmFxYnJvd3NlLmJtbD9mYXFpZD01NyI+Vm9sdW50ZWVyPC9hPjwvbGk+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2NvbW11 bml0eS5saXZlam91cm5hbC5jb20vbGpfZGV2LyI+RGV2ZWxvcGVyczwvYT48L2xp PgogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAg ICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAg ICAgICAgICAgICA8aDM+TGVnYWw8L2gzPgogICAgICAgICAgICAgICAgICAgICAg ICA8dWwgaWQ9ImZvb3Rlci1saW5rcy1jb2wzIj4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNv bS9sZWdhbC90b3MuYm1sIj5UZXJtcyBvZiBTZXJ2aWNlPC9hPjwvbGk+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5s aXZlam91cm5hbC5jb20vbGVnYWwvcHJpdmFjeS5ibWwiPlByaXZhY3kgUG9saWN5 PC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJl Zj0iaHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vbGVnYWwvZG1jYS5ibWwiPkNv cHlyaWdodDwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxp PjxhIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL2FidXNlL3BvbGlj eS5ibWwiPkFidXNlIFBvbGljeTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAg ICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAg ICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8aDM+U3RvcmU8 L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9ImZvb3Rlci1saW5r cy1jb2w0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVm PSJodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9tYW5hZ2UvYWNjb3VudC8iPlVw Z3JhZGUgQWNjb3VudDwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL3Nob3Av dmdpZnQuYm1sIj5WaXJ0dWFsIEdpZnRzPC9hPjwvbGk+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuc3ByZWFkc2hp cnQuY29tL3Nob3AucGhwP3NpZD0xMjEzODAmb3A9YXJ0aWNsZXMmcD0xIj5NZXJj aGFuZGlzZTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxp PjxhIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL3Nob3Avdmlldy5i bWw/aXRlbT1naWZ0Y2VydGlmaWNhdGUiPkdpZnQgQ2VydGlmaWNhdGVzPC9hPjwv bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0 cDovL3d3dy5saXZlam91cm5hbC5jb20vc2hvcC8iPk1vcmUuLi48L2E+PC9saT4K ICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAg ICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAg ICAgICAgICAgPGgzPkxKIExhYnM8L2gzPgogICAgICAgICAgICAgICAgICAgICAg ICA8dWwgY2xhc3M9ImZvb3Rlci1saW5rcy1jb2wiIGlkPSJmb290ZXItbGlua3Mt Y29sNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0i aHR0cDovL2Rhc2hib2FyZC5saXZlam91cm5hbC5jb20vIj5MSiBEYXNoYm9hcmQ8 L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVm PSJodHRwOi8vYXF1YS5saXZlam91cm5hbC5ydS8iPkxKIEFxdWE8L2E+PC9saT4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8v d3d3LmxpdmVqb3VybmFsLmNvbS9sYWJzLmJtbCI+TW9yZS4uLjwvYT48L2xpPgog ICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAg IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJsYXN0Ij4KICAg ICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPSJmb290ZXItbGlua3MtY29sNiI+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+Q2hhbmdlIGxhbmd1YWdl OjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNlbGVjdCBu YW1lPSJsYW5nIiBpZD0iZm9vdGVyX2xhbmdfbGlzdCI+CjxvcHRpb24gdmFsdWU9 ImVuX0xKIj5FbmdsaXNoPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9ImVuX0dCIj5F bmdsaXNoIChVSyk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iZGUiPkRldXRzY2g8 L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iZGEiPkRhbnNrPC9vcHRpb24+CjxvcHRp b24gdmFsdWU9ImVzIj5lc3Bhw7FvbDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJm ciI+RnJhbsOnYWlzPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Iml0Ij5JdGFsaWFu bzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJydSI+0KDRg9GB0YHQutC40Lk8L29w dGlvbj4KPG9wdGlvbiB2YWx1ZT0idWsiPtCj0LrRgNCw0ZfQvdGB0YzQutCwPC9v cHRpb24+CjxvcHRpb24gdmFsdWU9ImJlIj7QkdC10LvQsNGA0YPRgdC60LDRjzwv b3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJqYSI+5pel5pys6KqePC9vcHRpb24+Cjxv cHRpb24gdmFsdWU9InB0Ij5Qb3J0dWd1w6pzPC9vcHRpb24+CjxvcHRpb24gdmFs dWU9ImVvIj5Fc3BlcmFudG88L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iaGUiPtei 15HXqNeZ16o8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0ibmwiPk5lZGVybGFuZHM8 L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iaHUiPk1hZ3lhcjwvb3B0aW9uPgo8b3B0 aW9uIHZhbHVlPSJnYSI+R2FlaWxnZTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJp cyI+w61zbGVuc2thPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9ImZpIj5zdW9taTwv b3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJnciI+zpXOu867zrfOvc65zrrOrDwvb3B0 aW9uPgo8b3B0aW9uIHZhbHVlPSJuYiI+Tm9yc2sgYm9rbcOlbDwvb3B0aW9uPgo8 b3B0aW9uIHZhbHVlPSJzdiI+U3ZlbnNrYTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVl PSJwbCI+cG9sc2tpPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9InpoIj7nroDkvZPk uK3mloc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0ibHYiPkxhdHZpZcWhdTwvb3B0 aW9uPgo8b3B0aW9uIHZhbHVlPSJ0ciI+VMO8cmvDp2U8L29wdGlvbj4KPG9wdGlv biB2YWx1ZT0ibXMiPkJhaGFzYSBNZWxheXU8L29wdGlvbj4KPG9wdGlvbiB2YWx1 ZT0iaGkiPuCkueCkv+CkqOCljeCkpuClgDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVl PSJwdF9CUiI+UG9ydHVndcOqcyBCcmFzaWxlaXJvPC9vcHRpb24+CjxvcHRpb24g dmFsdWU9InpoX1RSIj7nuYHpq5TkuK3mloc8L29wdGlvbj4KPG9wdGlvbiB2YWx1 ZT0ibHQiPkxpZXR1dmnFszwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJubiIgc2Vs ZWN0ZWQ9J3NlbGVjdGVkJz5Ob3JzayBueW5vcnNrPC9vcHRpb24+Cjwvc2VsZWN0 PjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CgkJCQkJCTxkbCBj bGFzcz0iY3VycmVudC12ZXJzaW9uIj48ZHQ+PGEgaHJlZj0iaHR0cDovL25ld3Mu bGl2ZWpvdXJuYWwuY29tLyI+Q3VycmVudCB2ZXJzaW9uPC9hPjo8L2R0PjxkZD52 LiA0Ny41PC9kZD48L2RsPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAg ICAgICAgICAgICA8L3RyPjx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY29s c3Bhbj0iNiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtb3Jl X2xqIj48YSBocmVmPSJodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9zaXRlLyI+ JnJhcXVvOyBWaWV3IEZ1bGwgU2l0ZW1hcDwvYT48L3A+CiAgICAgICAgICAgICAg ICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+PC90YWJsZT4KICAgICAg ICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9ImZvb3Rlci1jb3B5cmln aHQiPkNvcHlyaWdodCAmY29weTsgMTk5OS0yMDA5IExpdmVKb3VybmFsLCBJbmMu ICBBbGwgcmlnaHRzIHJlc2VydmVkLjwvZGl2PgogICAgICAgIDwvZGl2PgogICAg ICAgIDwhLS0gZW5kIGZvb3RlciAtLT4KICAgIAoKCiAgICA8ZGl2IGlkPSJuYXZp Z2F0aW9uIj4KICAgIDxkaXYgaWQ9J1VzZXJwaWMnPjxhIGhyZWY9J2h0dHA6Ly93 d3cubGl2ZWpvdXJuYWwuY29tL2FsbHBpY3MuYm1sJz48ZGl2IGlkPSdkZWZhdWx0 cGljJyBzdHlsZT0nYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHA6Ly9sLXVzZXJw aWMubGl2ZWpvdXJuYWwuY29tLzM5NjQ3NDQ2LzM1ODEzNTQpJz48L2Rpdj48L2E+ PC9kaXY+PCEtLSBlbmQgI1VzZXJwaWMgLS0+CiAgICAgIDxkaXYgaWQ9Ik5hdmln YXRpb25XZWxjb21lTG9nbyI+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJ3ZWxj b21lIj4KICAgICAgICAgICAgPGgyPjxzcGFuIGNsYXNzPSdsanVzZXInIGxqOnVz ZXI9J2JlYXJkZWR0cm9sbCcgc3R5bGU9J3doaXRlLXNwYWNlOiBub3dyYXA7Jz48 YSBocmVmPSdodHRwOi8vYmVhcmRlZHRyb2xsLmxpdmVqb3VybmFsLmNvbS9wcm9m aWxlJz48aW1nIHNyYz0naHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1n L3VzZXJpbmZvLmdpZicgYWx0PSdbaW5mb10nIHdpZHRoPScxNycgaGVpZ2h0PScx Nycgc3R5bGU9J3ZlcnRpY2FsLWFsaWduOiBib3R0b207IGJvcmRlcjogMDsgcGFk ZGluZy1yaWdodDogMXB4OycgLz48L2E+PGEgaHJlZj0naHR0cDovL2JlYXJkZWR0 cm9sbC5saXZlam91cm5hbC5jb20vJz48Yj5iZWFyZGVkdHJvbGw8L2I+PC9hPjwv c3Bhbj48L2gyPgogICAgICAgICAgICA8ZGl2IGlkPSJXZWxjb21lTGlua3MiPgog ICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29t L21hbmFnZS9zZXR0aW5ncy8iPkFjY291bnQ8L2E+CiAgICAgICAgICAgICAgPGEg aHJlZj0iaHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vbWFuYWdlL2FjY291bnQv Ij48aW1nIHNyYz0naHR0cDovL2wtc3RhdC5saXZlam91cm5hbC5jb20vaW1nL3Bh aWQuZ2lmJyBhbHQ9JycgYm9yZGVyPScwJyAvPjwvYT4gfAogICAgICAgICAgICAg IDxhIGhyZWY9Imh0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL3N1cHBvcnQvIj5I ZWxwPC9hPiB8CiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5saXZl am91cm5hbC5jb20vbG9nb3V0LmJtbD91c2VyPWJlYXJkZWR0cm9sbCZhbXA7c2Vz c2lkPTQzMiI+TG9nb3V0PC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAg ICAgPGRpdiBpZD0iV2VsY29tZVZpZXdMaW5rcyI+CiAgICAgICAgICAgICAgPHVs IGNsYXNzPSJ2aWV3Ij4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSdodHRw Oi8vd3d3LmxpdmVqb3VybmFsLmNvbS91cGRhdGUuYm1sJz5Qb3N0PC9hPiB8PC9s aT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSdodHRwOi8vd3d3LmxpdmVq b3VybmFsLmNvbS9pbmJveC8nPk1lc3NhZ2VzPHNwYW4gaWQ9IkxKX0luYm94X1Vu cmVhZF9Db3VudCI+PC9zcGFuPjwvYT4gfDwvbGk+CiAgICAgICAgICAgICAgICA8 bGk+PGEgaHJlZj0iaHR0cDovL2JlYXJkZWR0cm9sbC5saXZlam91cm5hbC5jb20v ZnJpZW5kcy8iPkZyaWVuZHMgUGFnZTwvYT4gfDwvbGk+CiAgICAgICAgICAgICAg ICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vZnJpZW5k cy9pbnZpdGUuYm1sIj5JbnZpdGU8L2E+CiAgICAgICAgICAgICAgICAgfCA8L2xp PjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9tYW5hZ2Uv c2V0dGluZ3MvP2NhdD1tb2JpbGUiPk1vYmlsZTwvYT48L2xpPiAKICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2Pgog ICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8IS0tIEVuZCBXZWxjb21lIC0tPgoK ICAgICAgPC9kaXY+CiAgICAgIDwhLS0gRW5kIE5hdmlnYXRpb24gYW5kIFdlbGNv bWUgLS0+CgogICAgICAgICAgICA8ZGl2IGlkPSdOYXZCYXInPgogICAgICA8dWwg aWQ9J05hdk1lbnUnPgogICAgICA8bGkgY2xhc3M9J05hdk1lbnVJdGVtJyBpZD0n TmF2TWVudUl0ZW0xJz48YSBocmVmPSdodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNv bS8nPkhvbWU8L2E+PC9saT4KPGxpIGNsYXNzPSdOYXZNZW51SXRlbScgaWQ9J05h dk1lbnVJdGVtMic+PGEgaHJlZj0naHR0cDovL2JlYXJkZWR0cm9sbC5saXZlam91 cm5hbC5jb20vJz5Kb3VybmFsPC9hPjx1bCBjbGFzcz0nTmF2TWVudVN1Yk5hdicg aWQ9J05hdk1lbnUyJz4KPGxpIGNsYXNzPSdOYXZNZW51U3ViTmF2QmFjayc+PGlm cmFtZSBzcmM9J2Fib3V0OmJsYW5rJyBmcmFtZWJvcmRlcj0nMCcgY2xhc3M9J05h dk1lbnVTdWJOYXZCYWNrJz48L2lmcmFtZT48L2xpPjxsaSBjbGFzcz0nJz48YSBo cmVmPSdodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS91cGRhdGUuYm1sJz5Qb3N0 IGFuIEVudHJ5PC9hPjwvbGk+CjxsaSBjbGFzcz0nJz48YSBocmVmPSdodHRwOi8v d3d3LmxpdmVqb3VybmFsLmNvbS9lZGl0am91cm5hbC5ibWwnPkVkaXQgRW50cmll czwvYT48L2xpPgo8bGkgY2xhc3M9Jyc+PGEgaHJlZj0naHR0cDovL3d3dy5saXZl am91cm5hbC5jb20vY3VzdG9taXplLyc+U2VsZWN0IEpvdXJuYWwgU3R5bGU8L2E+ PC9saT4KPGxpIGNsYXNzPScnPjxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJu YWwuY29tL2N1c3RvbWl6ZS9vcHRpb25zLmJtbCc+Q3VzdG9taXplIEpvdXJuYWwg U3R5bGU8L2E+PC9saT4KPGxpIGNsYXNzPScnPjxhIGhyZWY9J2h0dHA6Ly93d3cu bGl2ZWpvdXJuYWwuY29tL3Rvb2xzL3JlY2VudF9jb21tZW50cy5ibWwnPk1hbmFn ZSBDb21tZW50czwvYT48L2xpPgo8bGkgY2xhc3M9Jyc+PGEgaHJlZj0naHR0cDov L3d3dy5saXZlam91cm5hbC5jb20vbWFuYWdlL3RhZ3MuYm1sJz5NYW5hZ2UgVGFn czwvYT48L2xpPgo8bGkgY2xhc3M9Jyc+PGEgaHJlZj0naHR0cDovL3d3dy5saXZl am91cm5hbC5jb20vbWFuYWdlL3NldHRpbmdzLz9jYXQ9ZGlzcGxheSc+Vmlld2lu ZyBPcHRpb25zPC9hPjwvbGk+CjwvdWw+CjwvbGk+CjxsaSBjbGFzcz0nTmF2TWVu dUl0ZW0nIGlkPSdOYXZNZW51SXRlbTMnPjxhIGhyZWY9J2h0dHA6Ly9iZWFyZGVk dHJvbGwubGl2ZWpvdXJuYWwuY29tL3Byb2ZpbGUnPlByb2ZpbGU8L2E+PHVsIGNs YXNzPSdOYXZNZW51U3ViTmF2JyBpZD0nTmF2TWVudTMnPgo8bGkgY2xhc3M9J05h dk1lbnVTdWJOYXZCYWNrJz48aWZyYW1lIHNyYz0nYWJvdXQ6YmxhbmsnIGZyYW1l Ym9yZGVyPScwJyBjbGFzcz0nTmF2TWVudVN1Yk5hdkJhY2snPjwvaWZyYW1lPjwv bGk+PGxpIGNsYXNzPScnPjxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwu Y29tL21hbmFnZS9wcm9maWxlLyc+RWRpdCBQcm9maWxlPC9hPjwvbGk+CjxsaSBj bGFzcz0nJz48YSBocmVmPSdodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9lZGl0 cGljcy5ibWwnPk1hbmFnZSBVc2VycGljcyA8c3BhbiBjbGFzcz0ncGljLWNvdW50 Jz4oMjQgb2YgNDApPC9zcGFuPjwvYT48L2xpPgo8bGkgY2xhc3M9Jyc+PGEgaHJl Zj0naHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vc2Nob29scy9tYW5hZ2UuYm1s Jz5NYW5hZ2UgU2Nob29sczwvYT48L2xpPgo8bGkgY2xhc3M9Jyc+PGEgaHJlZj0n aHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vdG9vbHMvbWVtb3JpZXMuYm1sJz5N ZW1vcmllczwvYT48L2xpPgo8L3VsPgo8L2xpPgo8bGkgY2xhc3M9J05hdk1lbnVJ dGVtJyBpZD0nTmF2TWVudUl0ZW00Jz48YSBocmVmPSdodHRwOi8vYmVhcmRlZHRy b2xsLmxpdmVqb3VybmFsLmNvbS9mcmllbmRzLyc+RnJpZW5kczwvYT48dWwgY2xh c3M9J05hdk1lbnVTdWJOYXYnIGlkPSdOYXZNZW51NCc+CjxsaSBjbGFzcz0nTmF2 TWVudVN1Yk5hdkJhY2snPjxpZnJhbWUgc3JjPSdhYm91dDpibGFuaycgZnJhbWVi b3JkZXI9JzAnIGNsYXNzPSdOYXZNZW51U3ViTmF2QmFjayc+PC9pZnJhbWU+PC9s aT48bGkgY2xhc3M9Jyc+PGEgaHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5j b20vZnJpZW5kcy9maW5kLmJtbCc+RmluZCBZb3VyIEZyaWVuZHM8L2E+PC9saT4K PGxpIGNsYXNzPScnPjxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29t L2ZyaWVuZHMvZWRpdC5ibWwnPkFkZCBvciBSZW1vdmUgRnJpZW5kczwvYT48L2xp Pgo8bGkgY2xhc3M9Jyc+PGEgaHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5j b20vZnJpZW5kcy9lZGl0Z3JvdXBzLmJtbCc+TWFuYWdlIEN1c3RvbSBHcm91cHM8 L2E+PC9saT4KPGxpIGNsYXNzPScnPjxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpv dXJuYWwuY29tL2ZyaWVuZHMvZmlsdGVyLmJtbCc+RmlsdGVyIEZyaWVuZHMgUGFn ZTwvYT48L2xpPgo8bGkgY2xhc3M9Jyc+PGEgaHJlZj0naHR0cDovL3d3dy5saXZl am91cm5hbC5jb20vZnJpZW5kcy9pbnZpdGUuYm1sJz5JbnZpdGUgTmV3IEZyaWVu ZHM8L2E+PC9saT4KPGxpIGNsYXNzPScnPjxhIGhyZWY9J2h0dHA6Ly93d3cubGl2 ZWpvdXJuYWwuY29tL2ZyaWVuZHMvJz5PdGhlciBGcmllbmRzIFRvb2xzPC9hPjwv bGk+CjwvdWw+CjwvbGk+CjxsaSBjbGFzcz0nTmF2TWVudUl0ZW0nIGlkPSdOYXZN ZW51SXRlbTUnPjxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL2Nv bW11bml0eS9tYW5hZ2UuYm1sJz5Db21tdW5pdGllczwvYT48dWwgY2xhc3M9J05h dk1lbnVTdWJOYXYnIGlkPSdOYXZNZW51NSc+CjxsaSBjbGFzcz0nTmF2TWVudVN1 Yk5hdkJhY2snPjxpZnJhbWUgc3JjPSdhYm91dDpibGFuaycgZnJhbWVib3JkZXI9 JzAnIGNsYXNzPSdOYXZNZW51U3ViTmF2QmFjayc+PC9pZnJhbWU+PC9saT48bGkg Y2xhc3M9Jyc+PGEgaHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vdXBk YXRlLmJtbCc+UG9zdCBhbiBFbnRyeTwvYT48L2xpPgo8bGkgY2xhc3M9Jyc+PGEg aHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vbWFuYWdlL2ludml0ZXMu Ym1sJz5NYW5hZ2UgWW91ciBJbnZpdGVzPC9hPjwvbGk+CjxsaSBjbGFzcz0nJz48 YSBocmVmPSdodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9jb21tdW5pdHkvY3Jl YXRlLmJtbCc+Q3JlYXRlIE5ldzwvYT48L2xpPgo8L3VsPgo8L2xpPgo8bGkgY2xh c3M9J05hdk1lbnVJdGVtJyBpZD0nTmF2TWVudUl0ZW02Jz48YSBocmVmPSdodHRw Oi8vcGljcy5saXZlam91cm5hbC5jb20vYmVhcmRlZHRyb2xsLyc+U2NyYXBCb29r PC9hPjx1bCBjbGFzcz0nTmF2TWVudVN1Yk5hdicgaWQ9J05hdk1lbnU2Jz4KPGxp IGNsYXNzPSdOYXZNZW51U3ViTmF2QmFjayc+PGlmcmFtZSBzcmM9J2Fib3V0OmJs YW5rJyBmcmFtZWJvcmRlcj0nMCcgY2xhc3M9J05hdk1lbnVTdWJOYXZCYWNrJz48 L2lmcmFtZT48L2xpPjxsaSBjbGFzcz0nJz48YSBocmVmPSdodHRwOi8vcGljcy5s aXZlam91cm5hbC5jb20vbWFuYWdlL3VwbG9hZCc+VXBsb2FkIFBpY3R1cmVzPC9h PjwvbGk+CjxsaSBjbGFzcz0nJz48YSBocmVmPSdodHRwOi8vcGljcy5saXZlam91 cm5hbC5jb20vbWFuYWdlL2dhbHMnPk1hbmFnZSBHYWxsZXJpZXM8L2E+PC9saT4K PGxpIGNsYXNzPScnPjxhIGhyZWY9J2h0dHA6Ly9waWNzLmxpdmVqb3VybmFsLmNv bS9tYW5hZ2UvZ2Fscz9zaG93PXRhZ3MnPk1hbmFnZSBUYWcgR2FsbGVyaWVzPC9h PjwvbGk+CjxsaSBjbGFzcz0nJz48YSBocmVmPSdodHRwOi8vcGljcy5saXZlam91 cm5hbC5jb20vbWFuYWdlL3N0eWxlcy8nPkN1c3RvbWl6ZSBTY3JhcEJvb2s8L2E+ PC9saT4KPC91bD4KPC9saT4KPGxpIGNsYXNzPSdOYXZNZW51SXRlbScgaWQ9J05h dk1lbnVJdGVtNyc+PGEgaHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5jb20v ZXhwbG9yZS8nPkV4cGxvcmUgTEo8L2E+PHVsIGNsYXNzPSdOYXZNZW51U3ViTmF2 JyBpZD0nTmF2TWVudTcnPgo8bGkgY2xhc3M9J05hdk1lbnVTdWJOYXZCYWNrJz48 aWZyYW1lIHNyYz0nYWJvdXQ6YmxhbmsnIGZyYW1lYm9yZGVyPScwJyBjbGFzcz0n TmF2TWVudVN1Yk5hdkJhY2snPjwvaWZyYW1lPjwvbGk+PGxpIGNsYXNzPScnPjxh IGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwuY29tL2xpZmUvJz5MaWZlPC9h PjwvbGk+CjxsaSBjbGFzcz0nJz48YSBocmVmPSdodHRwOi8vd3d3LmxpdmVqb3Vy bmFsLmNvbS9lbnRlcnRhaW5tZW50Lyc+RW50ZXJ0YWlubWVudDwvYT48L2xpPgo8 bGkgY2xhc3M9Jyc+PGEgaHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5jb20v bXVzaWMvJz5NdXNpYzwvYT48L2xpPgo8bGkgY2xhc3M9Jyc+PGEgaHJlZj0naHR0 cDovL3d3dy5saXZlam91cm5hbC5jb20vY3VsdHVyZS8nPkN1bHR1cmU8L2E+PC9s aT4KPGxpIGNsYXNzPScnPjxhIGhyZWY9J2h0dHA6Ly93d3cubGl2ZWpvdXJuYWwu Y29tL25ld3MtYW5kLXBvbGl0aWNzLyc+TmV3cyAmIFBvbGl0aWNzPC9hPjwvbGk+ CjxsaSBjbGFzcz0nJz48YSBocmVmPSdodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNv bS90ZWNobm9sb2d5Lyc+VGVjaG5vbG9neTwvYT48L2xpPgo8bGkgY2xhc3M9Jyc+ PGEgaHJlZj0naHR0cDovL3d3dy5saXZlam91cm5hbC5jb20vZGlyZWN0b3J5c2Vh cmNoLmJtbCc+RGlyZWN0b3J5IFNlYXJjaDwvYT48L2xpPgo8L3VsPgo8L2xpPgoK ICAgICAgICA8bGkgaWQ9Ik5hdk1lbnVTZWFyY2giPgogICAgICAgICAgPGZvcm0g YWN0aW9uPSJodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS9tdWx0aXNlYXJjaC5i bWwiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAKICAgICAgICAgICAgPGlucHV0 IHR5cGU9InRleHQiIHZhbHVlPSJGaW5kIiBzaXplPSIxMiIgbmFtZT0icSIgaWQ9 J1NlYXJjaFRleHQnIG9uZm9jdXM9ImlmKHRoaXMudmFsdWU9PSdGaW5kJyl0aGlz LnZhbHVlPScnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVl PSdGaW5kJzsiIC8+CiAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8c2Vs ZWN0IG5hbWU9InR5cGUiPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFs dWU9J2ludCc+SW50ZXJlc3NlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAg PG9wdGlvbiB2YWx1ZT0ncmVnaW9uJz5PbXLDpWRlPC9vcHRpb24+CiAgICAgICAg ICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbmF2X2FuZF91c2VyJz5TaXRlICZh bXA7IFVzZXI8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZh bHVlPSdmYXEnPkZBUTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRp b24gdmFsdWU9J2VtYWlsJz5FbWFpbDwvb3B0aW9uPgogICAgICAgICAgICAgICAg ICAgIDxvcHRpb24gdmFsdWU9J2ltJz5JTSBJbmZvPC9vcHRpb24+CiAgICAgICAg ICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIiAvPgogICAgICAgICAg PC9mb3JtPgogICAgICAgIDwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDwvZGl2Pgog ICAgICA8IS0tIEVuZCBuYXZiYXIgLS0+CgoKICAgIDwvZGl2PgogICAgPCEtLSBF bmQgI25hdmlnYXRpb24gLS0+CgogICAgPCEtLSBMb2dpbiAtLT4KICAgIAogICAg PCEtLSBFbmQgTG9naW4gLS0+CgogICAgPCEtLSBMb2dvIC0tPgogICAgPGRpdiBp ZD0iTG9nbyI+CiAgICA8YSBocmVmPSdodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNv bScgc3R5bGU9J2JvcmRlcjogMCc+PGltZyBzcmM9Imh0dHA6Ly9sLXN0YXQubGl2 ZWpvdXJuYWwuY29tL2hvcml6b24vbG9nby5naWYiIHdpZHRoPSIyMjUiIGhlaWdo dD0iNzAiIGFsdD0iTGl2ZUpvdXJuYWwiIC8+PC9hPgogICAgPC9kaXY+CiAgICA8 IS0tIEVuZCBMb2dvIC0tPgoKCiAgICA8IS0tIEV4dHJhIGJsb2NrIHRvIHJlYWQg c3R5bGUgZnJvbSBhbmQgY2FsbCB0byBpbml0aWFsaXplIEhvcml6b24gd2hpY2gg cmVhZHMgc3R5bGUgLS0+CiAgICA8ZGl2IGlkPSdBbHBoYScgc3R5bGU9J2Rpc3Bs YXk6IG5vbmUgIWltcG9ydGFudCc+Jm5ic3A7PC9kaXY+CiAgICA8IS0tW2lmIGx0 IElFIDddPjxzY3JpcHQ+SG9yaXpvbi5zY2hlbWVfaW5pdCgpOzwvc2NyaXB0Pjwh W2VuZGlmXS0tPgoKICAgIDxkaXYgaWQ9J2hlbGxvLXdvcmxkJyBzdHlsZT0ndGV4 dC1hbGlnbjogbGVmdDsgZm9udC1zaXplOjA7IGxpbmUtaGVpZ2h0OjA7IGhlaWdo dDowOyBvdmVyZmxvdzpoaWRkZW47Jz48L2Rpdj4KICAgIAogIDwvYm9keT4KPC9o dG1sPgoK ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=default.js Content-Type: application/x-javascript; name=default.js Content-Location: http://l-stat.livejournal.com/js/??core.js,dom.js,httpreq.js,livejournal.js,common/AdEngine.js,esn.js,ippu.js,lj_ippu.js,hourglass.js,contextualhover.js,thread_expander.js,json.js,template.js,userpicselect.js,inputcomplete.js,datasource.js,selectable_table.js,x_core.js,quickreply.js,commentmanage.js,horizon.js,livejournal-local.js?v=1237849588 Content-Transfer-Encoding: Base64 LyoKQ29yZSBKYXZhU2NyaXB0IExpYnJhcnkKJElkOiBjb3JlLmpzIDI3MSAyMDA5 LTAzLTIzIDEyOjA1OjE3WiBwa29ybmlsb3YgJAoKQ29weXJpZ2h0IChjKSAyMDA1 LCBTaXggQXBhcnQsIEx0ZC4KQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgICAqIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Cm5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAgICAqIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKY29weXJp Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lcgppbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCmRpc3RyaWJ1dGlvbi4KCiAg ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgIlNpeCBBcGFydCIgbm9yIHRoZSBuYW1l cyBvZiBpdHMKY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KdGhpcyBzb2Z0d2FyZSB3aXRo b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD T05UUklCVVRPUlMKIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SCkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCk9XTkVSIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLApT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLApEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkKVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAooSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UKT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCiovCgovKiBzdHVicyAqLwoKbG9n ID0gZnVuY3Rpb24oKSB7fTsKbG9nLmVycm9yID0gbG9nLndhcm4gPSBsb2cuZGVi dWcgPSBsb2c7CgoKLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KCmRlZmluZWQgPSBm dW5jdGlvbiggeCApIHsKICAgIHJldHVybiB4ID09PSB1bmRlZmluZWQgPyBmYWxz ZSA6IHRydWU7Cn0KCgovKioKICogVXRpbGl0eSBtZXRob2QuCiAqIEBwYXJhbSB4 IDxjb2RlPmFueTwvY29kZT4gQW55IEphdmFTY3JpcHQgdmFsdWUsIGluY2x1ZGlu ZyA8Y29kZT51bmRlZmluZWQ8L2NvZGU+LgogKiBAcmV0dXJuIGJvb2xlYW4gPGNv ZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHZhbHVlIGlzIG5vdCA8Y29kZT5udWxsPC9j b2RlPiBhbmQgaXMgbm90IDxjb2RlPnVuZGVmaW5lZDwvY29kZT4uCiAqLwpleGlz dHMgPSBmdW5jdGlvbiggeCApIHsKICAgcmV0dXJuICh4ID09PSB1bmRlZmluZWQg fHwgeCA9PT0gbnVsbCkgPyBmYWxzZSA6IHRydWU7Cn0KCgpmaW5pdGUgPSBmdW5j dGlvbiggeCApIHsKICAgIHJldHVybiBpc0Zpbml0ZSggeCApID8geCA6IDA7Cn0K CgpmaW5pdGVJbnQgPSBmdW5jdGlvbiggeCwgYmFzZSApIHsKICAgIHJldHVybiBm aW5pdGUoIHBhcnNlSW50KCB4LCBiYXNlICkgKTsKfQoKCmZpbml0ZUZsb2F0ID0g ZnVuY3Rpb24oIHggKSB7CiAgICByZXR1cm4gZmluaXRlKCBwYXJzZUZsb2F0KCB4 ICkgKTsKfQoKCm1heCA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGEgPSBhcmd1bWVu dHM7CiAgICB2YXIgbiA9IGFbIDAgXTsKICAgIGZvciggdmFyIGkgPSAxOyBpIDwg YS5sZW5ndGg7IGkrKyApCiAgICAgICAgaWYoIGFbIGkgXSA+IG4gKQogICAgICAg ICAgICBuID0gYVsgaSBdOwogICAgcmV0dXJuIG47Cn0KCgptaW4gPSBmdW5jdGlv bigpIHsKICAgIHZhciBhID0gYXJndW1lbnRzOwogICAgdmFyIG4gPSBhWyAwIF07 CiAgICBmb3IoIHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKysgKQogICAgICAg IGlmKCBhWyBpIF0gPCBuICkKICAgICAgICAgICAgbiA9IGFbIGkgXTsKICAgIHJl dHVybiBuOwp9CgoKLyogdHJ5IGJsb2NrICovICAKIApUcnkgPSB7CiAgICB0aGVz ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgZm9yKCB2YXIgaSA9IDA7IGkgPCBhcmd1 bWVudHMubGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAg ICAgICAgICByZXR1cm4gYXJndW1lbnRzWyBpIF0oKTsKICAgICAgICAgICAgfSBj YXRjaCggZSApIHt9CiAgICAgICAgfQogICAgICAgIHJldHVybiB1bmRlZmluZWQ7 CiAgICB9Cn0KCgovKiB1bmlxdWUgaWQgZ2VuZXJhdG9yICovCgpVbmlxdWUgPSB7 CiAgICBsZW5ndGg6IDAsCiAgICAKICAgIGlkOiBmdW5jdGlvbigpIHsKICAgICAg ICByZXR1cm4gKyt0aGlzLmxlbmd0aDsKICAgIH0KfQoKCi8qIGV2ZW50IG1ldGhv ZHMgKi8KCmlmKCAhZGVmaW5lZCggd2luZG93LkV2ZW50ICkgKQogICAgRXZlbnQg PSB7fTsKCgpFdmVudC5zdG9wID0gZnVuY3Rpb24oIGUgKSB7CiAgICBlID0gZSB8 fCB3aW5kb3cuZXZlbnQ7CiAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbiggZSApOwog ICAgdGhpcy5wcmV2ZW50RGVmYXVsdCggZSApOwogICAgcmV0dXJuIGZhbHNlOwp9 CgoKRXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oIGUgKSB7CiAgICBp ZiAoIHdpbmRvdy5ldmVudCApCiAgICAgICAgd2luZG93LmV2ZW50LmNhbmNlbEJ1 YmJsZSA9IHRydWUKICAgIGVsc2UKICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigp Cn0KCgpFdmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCBlICkgewogICAg ZSA9IGUgfHwgd2luZG93LmV2ZW50OwogICAgaWYgKCBlLnByZXZlbnREZWZhdWx0 ICkKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBlLnJldHVyblZhbHVl ID0gZmFsc2U7Cn0KCgpFdmVudC5wcmVwID0gZnVuY3Rpb24oIGV2ZW50ICkgewog ICAgZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7CiAgICBpZiggIWRlZmlu ZWQoIGV2ZW50LnN0b3AgKSApCiAgICAgICAgZXZlbnQuc3RvcCA9IHRoaXMuc3Rv cDsKICAgIGlmKCAhZGVmaW5lZCggZXZlbnQudGFyZ2V0ICkgKQogICAgICAgIGV2 ZW50LnRhcmdldCA9IGV2ZW50LnNyY0VsZW1lbnQ7CiAgICBpZiggIWRlZmluZWQo IGV2ZW50LnJlbGF0ZWRUYXJnZXQgKSApIAogICAgICAgIGV2ZW50LnJlbGF0ZWRU YXJnZXQgPSBldmVudC50b0VsZW1lbnQ7CiAgICByZXR1cm4gZXZlbnQ7Cn0KCgov KiBvYmplY3QgZXh0ZW5zaW9ucyAqLwoKRnVuY3Rpb24uc3R1YiA9IGZ1bmN0aW9u KCkge307CgppZiAoIU9iamVjdC5leHRlbmQpCglPYmplY3QuZXh0ZW5kID0gZnVu Y3Rpb24gKGQsIHMpIHsgaWYgKGQpIGZvciAodmFyIHAgaW4gcykgaWYgKCFkW3Bd KSBkW3BdID0gc1twXTsgcmV0dXJuIGQgfQoKaWYgKCFPYmplY3Qub3ZlcnJpZGUp CglPYmplY3Qub3ZlcnJpZGUgPSBmdW5jdGlvbiAoZCwgcykgeyBpZiAoZCkgZm9y ICh2YXIgcCBpbiBzKSBkW3BdID0gc1twXTsgcmV0dXJuIGQgfQoKLyogZnVuY3Rp b24gZXh0ZW5zaW9ucyAqLwoKT2JqZWN0LmV4dGVuZChGdW5jdGlvbi5wcm90b3R5 cGUsIHsKICAgIGJpbmQ6IGZ1bmN0aW9uKCBvYmplY3QgKSB7CiAgICAgICAgdmFy IG1ldGhvZCA9IHRoaXM7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAg ICAgICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KCBvYmplY3QsIGFyZ3VtZW50cyAp OwogICAgICAgIH07CiAgICB9LAogICAgCiAgICAKICAgIGJpbmRFdmVudExpc3Rl bmVyOiBmdW5jdGlvbiggb2JqZWN0ICkgewogICAgICAgIHZhciBtZXRob2QgPSB0 aGlzOyAvLyBVc2UgZG91YmxlIGNsb3N1cmUgdG8gd29yayBhcm91bmQgSUUgNiBt ZW1vcnkgbGVhay4KICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGV2ZW50ICkgewog ICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZXZlbnQgPSBFdmVudC5w cmVwKCBldmVudCApOwogICAgICAgICAgICB9IGNhdGNoKCBlICkge30KICAgICAg ICAgICAgcmV0dXJuIG1ldGhvZC5jYWxsKCBvYmplY3QsIGV2ZW50ICk7CiAgICAg ICAgfTsKICAgIH0KfSApOwoKCi8qIGNsYXNzIGhlbHBlcnMgKi8KCmluZGlyZWN0 T2JqZWN0cyA9IFtdOwoKCkNsYXNzID0gZnVuY3Rpb24oIHN1cGVyQ2xhc3MgKSB7 CgogICAgLy8gU2V0IHRoZSBjb25zdHJ1Y3RvcjoKICAgIHZhciBjb25zdHJ1Y3Rv ciA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmKCBhcmd1bWVudHMubGVuZ3RoICkK ICAgICAgICAgICAgdGhpcy5pbml0LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsK ICAgIH07ICAgIAogICAgLy8gICAtLSBBY2NvbXBsaXNoIHN0YXRpYy1pbmhlcml0 YW5jZToKICAgIE9iamVjdC5vdmVycmlkZShjb25zdHJ1Y3RvciwgQ2xhc3MpOyAg Ly8gaW5oZXJpdCBzdGF0aWMgbWV0aG9kcyBmcm9tIENsYXNzCiAgICAKICAgIHN1 cGVyQ2xhc3MgPSBzdXBlckNsYXNzIHx8IGZ1bmN0aW9uKCl7fTsKICAgIHN1cGVy Q2xhc3NGdW5jID0gZnVuY3Rpb24oKXt9CiAgICBPYmplY3QuZXh0ZW5kKHN1cGVy Q2xhc3NGdW5jLnByb3RvdHlwZSwgc3VwZXJDbGFzcy5wcm90b3R5cGUpCiAgICBP YmplY3QuZXh0ZW5kKHN1cGVyQ2xhc3NGdW5jLnByb3RvdHlwZSwgewogICAgICAg IGluaXQ6IGZ1bmN0aW9uKCl7fSwKICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigp e30KICAgIH0pCiAgICBPYmplY3Qub3ZlcnJpZGUoY29uc3RydWN0b3IsIHN1cGVy Q2xhc3MpOyAvLyBpbmhlcml0IHN0YXRpYyBtZXRob2RzIGZyb20gdGhlIHN1cGVy Q2xhc3MKICAgIGNvbnN0cnVjdG9yLnN1cGVyQ2xhc3MgPSBzdXBlckNsYXNzRnVu Yy5wcm90b3R5cGU7CiAgICAKICAgIC8vIFNldCB0aGUgY29uc3RydWN0b3IncyBw cm90b3R5cGUgKGFjY29tcGxpc2ggb2JqZWN0LWluaGVyaXRhbmNlKToKICAgIGNv bnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBzdXBlckNsYXNzKCk7CiAgICBjb25z dHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjsgLy8g cmV2LiAwLjcgICAgCiAgICAvLyAgIC0tIGV4dGVuZCBwcm90b3R5cGUgd2l0aCBD bGFzcyBpbnN0YW5jZSBtZXRob2RzCiAgICBPYmplY3QuZXh0ZW5kKGNvbnN0cnVj dG9yLnByb3RvdHlwZSwgQ2xhc3MucHJvdG90eXBlKTsKICAgIC8vICAgLS0gb3Zl cnJpZGUgcHJvdG90eXBlIHdpdGggaW50ZXJmYWNlIG1ldGhvZHMKICAgIGZvcigg dmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkKICAgICAgICBP YmplY3Qub3ZlcnJpZGUoY29uc3RydWN0b3IucHJvdG90eXBlLCBhcmd1bWVudHNb aV0pOwogICAgCiAgICByZXR1cm4gY29uc3RydWN0b3I7Cn0KCgpPYmplY3QuZXh0 ZW5kKENsYXNzLCB7CiAgICBpbml0U2luZ2xldG9uOiBmdW5jdGlvbigpIHsKICAg ICAgICBpZiggdGhpcy5zaW5nbGV0b24gKQogICAgICAgICAgICByZXR1cm4gdGhp cy5zaW5nbGV0b247CiAgICAgICAgdGhpcy5zaW5nbGV0b24gPSB0aGlzLnNpbmds ZXRvbkNvbnN0cnVjdG9yCiAgICAgICAgICAgID8gbmV3IHRoaXMuc2luZ2xldG9u Q29uc3RydWN0b3IoKQogICAgICAgICAgICA6IG5ldyB0aGlzKCk7CiAgICAgICAg dGhpcy5zaW5nbGV0b24uaW5pdC5hcHBseSggdGhpcy5zaW5nbGV0b24sIGFyZ3Vt ZW50cyApOwogICAgICAgIHJldHVybiB0aGlzLnNpbmdsZXRvbjsKICAgIH0KfSAp OwoKCkNsYXNzLnByb3RvdHlwZSA9IHsKICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkg ewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmKCB0aGlzLmluZGlyZWN0SW5k ZXggKQogICAgICAgICAgICAgICAgaW5kaXJlY3RPYmplY3RzWyB0aGlzLmluZGly ZWN0SW5kZXggXSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgZGVsZXRlIHRoaXMu aW5kaXJlY3RJbmRleDsKICAgICAgICB9IGNhdGNoKCBlICkge30KICAgICAgICAK ICAgICAgICBmb3IoIHZhciBwcm9wZXJ0eSBpbiB0aGlzICkgewogICAgICAgICAg ICB0cnkgewogICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbIHByb3BlcnR5IF07 CiAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7fQogICAgICAgIH0KICAgIH0sCiAg ICAKICAgIAogICAgZ2V0Qm91bmRNZXRob2Q6IGZ1bmN0aW9uKCBtZXRob2ROYW1l ICkgewogICAgICAgIHJldHVybiB0aGlzWyBuYW1lIF0uYmluZCggdGhpcyApOwog ICAgfSwKICAgIAogICAgCiAgICBnZXRFdmVudExpc3RlbmVyOiBmdW5jdGlvbigg bWV0aG9kTmFtZSApIHsKICAgICAgICByZXR1cm4gdGhpc1sgbWV0aG9kTmFtZSBd LmJpbmRFdmVudExpc3RlbmVyKCB0aGlzICk7CiAgICB9LAogICAgCiAgICAKICAg IGdldEluZGlyZWN0SW5kZXg6IGZ1bmN0aW9uKCkgewogICAgICAgIGlmKCAhZGVm aW5lZCggdGhpcy5pbmRpcmVjdEluZGV4ICkgKSB7CiAgICAgICAgICAgIHRoaXMu aW5kaXJlY3RJbmRleCA9IGluZGlyZWN0T2JqZWN0cy5sZW5ndGg7CiAgICAgICAg ICAgIGluZGlyZWN0T2JqZWN0cy5wdXNoKCB0aGlzICk7CiAgICAgICAgfQogICAg ICAgIHJldHVybiB0aGlzLmluZGlyZWN0SW5kZXg7CiAgICB9LAogICAgCiAgICAK ICAgIGdldEluZGlyZWN0TWV0aG9kOiBmdW5jdGlvbiggbWV0aG9kTmFtZSApIHsK ICAgICAgICBpZiggIXRoaXMuaW5kaXJlY3RNZXRob2RzICkKICAgICAgICAgICAg dGhpcy5pbmRpcmVjdE1ldGhvZHMgPSB7fTsKICAgICAgICB2YXIgbWV0aG9kID0g dGhpc1sgbWV0aG9kTmFtZSBdOwogICAgICAgIGlmKCB0eXBlb2YgbWV0aG9kICE9 ICJmdW5jdGlvbiIgKQogICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAg ICAgIHZhciBpbmRpcmVjdEluZGV4ID0gdGhpcy5nZXRJbmRpcmVjdEluZGV4KCk7 CiAgICAgICAgaWYoICF0aGlzLmluZGlyZWN0TWV0aG9kc1sgbWV0aG9kTmFtZSBd ICkgewogICAgICAgICAgICB0aGlzLmluZGlyZWN0TWV0aG9kc1sgbWV0aG9kTmFt ZSBdID0gbmV3IEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgInZhciBvID0gaW5k aXJlY3RPYmplY3RzWyIgKyBpbmRpcmVjdEluZGV4ICsgIl07IiArCiAgICAgICAg ICAgICAgICAicmV0dXJuIG8uIiArIG1ldGhvZE5hbWUgKyAiLmFwcGx5KCBvLCBh cmd1bWVudHMgKTsiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJl dHVybiB0aGlzLmluZGlyZWN0TWV0aG9kc1sgbWV0aG9kTmFtZSBdOwogICAgfSwK ICAgIAogICAgCiAgICBnZXRJbmRpcmVjdEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9u KCBtZXRob2ROYW1lICkgewogICAgICAgIGlmKCAhdGhpcy5pbmRpcmVjdEV2ZW50 TGlzdGVuZXJzICkKICAgICAgICAgICAgdGhpcy5pbmRpcmVjdEV2ZW50TGlzdGVu ZXJzID0ge307CiAgICAgICAgdmFyIG1ldGhvZCA9IHRoaXNbIG1ldGhvZE5hbWUg XTsKICAgICAgICBpZiggdHlwZW9mIG1ldGhvZCAhPSAiZnVuY3Rpb24iICkKICAg ICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICB2YXIgaW5kaXJlY3RJ bmRleCA9IHRoaXMuZ2V0SW5kaXJlY3RJbmRleCgpOwogICAgICAgIGlmKCAhdGhp cy5pbmRpcmVjdEV2ZW50TGlzdGVuZXJzWyBtZXRob2ROYW1lIF0gKSB7CiAgICAg ICAgICAgIHRoaXMuaW5kaXJlY3RFdmVudExpc3RlbmVyc1sgbWV0aG9kTmFtZSBd ID0gbmV3IEZ1bmN0aW9uKCAiZXZlbnQiLAogICAgICAgICAgICAgICAgInRyeSB7 IGV2ZW50ID0gRXZlbnQucHJlcCggZXZlbnQgKTsgfSBjYXRjaCggZSApIHt9IiAr CiAgICAgICAgICAgICAgICAidmFyIG8gPSBpbmRpcmVjdE9iamVjdHNbIiArIGlu ZGlyZWN0SW5kZXggKyAiXTsiICsKICAgICAgICAgICAgICAgICJyZXR1cm4gby4i ICsgbWV0aG9kTmFtZSArICIuY2FsbCggbywgZXZlbnQgKTsiCiAgICAgICAgICAg ICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmluZGlyZWN0RXZlbnRM aXN0ZW5lcnNbIG1ldGhvZE5hbWUgXTsKICAgIH0KfQoKCi8qIHN0cmluZyBleHRl bnNpb25zICovCgpPYmplY3QuZXh0ZW5kKFN0cmluZywgewogICAgZXNjYXBlSlND aGFyOiBmdW5jdGlvbiggYyApIHsKICAgICAgICAvLyB0cnkgc2ltcGxlIGVzY2Fw aW5nCiAgICAgICAgc3dpdGNoKCBjICkgewogICAgICAgICAgICBjYXNlICJcXCI6 IHJldHVybiAiXFxcXCI7CiAgICAgICAgICAgIGNhc2UgIlwiIjogcmV0dXJuICJc XFwiIjsKICAgICAgICAgICAgY2FzZSAiJyI6ICByZXR1cm4gIlxcJyI7CiAgICAg ICAgICAgIGNhc2UgIlxiIjogcmV0dXJuICJcXGIiOwogICAgICAgICAgICBjYXNl ICJcZiI6IHJldHVybiAiXFxmIjsKICAgICAgICAgICAgY2FzZSAiXG4iOiByZXR1 cm4gIlxcbiI7CiAgICAgICAgICAgIGNhc2UgIlxyIjogcmV0dXJuICJcXHIiOwog ICAgICAgICAgICBjYXNlICJcdCI6IHJldHVybiAiXFx0IjsKICAgICAgICB9CiAg ICAgICAgCiAgICAgICAgLy8gcmV0dXJuIHJhdyBieXRlcyBub3cgLi4uIHNob3Vs ZCBiZSBVVEYtOAogICAgICAgIGlmKCBjID49ICIgIiApCiAgICAgICAgICAgIHJl dHVybiBjOwogICAgICAgIAogICAgICAgIC8vIHRyeSBcdVhYWFggZXNjYXBpbmcs IGJ1dCBzaG91bGRuJ3QgbWFrZSBpdCBmb3IgY2FzZSAxLCAyCiAgICAgICAgYyA9 IGMuY2hhckNvZGVBdCggMCApLnRvU3RyaW5nKCAxNiApOwogICAgICAgIHN3aXRj aCggYy5sZW5ndGggKSB7CiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJcXHUw MDAiICsgYzsKICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gIlxcdTAwIiArIGM7 CiAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJcXHUwIiArIGM7CiAgICAgICAg ICAgIGNhc2UgNDogcmV0dXJuICJcXHUiICsgYzsKICAgICAgICB9CiAgICAgICAg CiAgICAgICAgLy8gc2hvdWxkIG5ldmVyIG1ha2UgaXQgaGVyZQogICAgICAgIHJl dHVybiAiIjsKICAgIH0sCiAgICAKICAgIAogICAgZW5jb2RlRW50aXR5OiBmdW5j dGlvbiggYyApIHsKICAgICAgICBzd2l0Y2goIGMgKSB7CiAgICAgICAgICAgIGNh c2UgIjwiOiByZXR1cm4gIiZsdDsiOwogICAgICAgICAgICBjYXNlICI+IjogcmV0 dXJuICImZ3Q7IjsKICAgICAgICAgICAgY2FzZSAiJiI6IHJldHVybiAiJmFtcDsi OwogICAgICAgICAgICBjYXNlICciJzogcmV0dXJuICImcXVvdDsiOwogICAgICAg ICAgICBjYXNlICInIjogcmV0dXJuICImYXBvczsiOwogICAgICAgIH0KICAgICAg ICByZXR1cm4gYzsKICAgIH0sCgoKICAgIGRlY29kZUVudGl0eTogZnVuY3Rpb24o IGMgKSB7CiAgICAgICAgc3dpdGNoKCBjICkgewogICAgICAgICAgICBjYXNlICJh bXAiOiByZXR1cm4gIiYiOwogICAgICAgICAgICBjYXNlICJxdW90IjogcmV0dXJu ICciJzsKICAgICAgICAgICAgY2FzZSAiZ3QiOiByZXR1cm4gIj4iOwogICAgICAg ICAgICBjYXNlICJsdCI6IHJldHVybiAiPCI7CiAgICAgICAgfQogICAgICAgIHZh ciBtID0gYy5tYXRjaCggL14jKFxkKykkLyApOwogICAgICAgIGlmKCBtICYmIGRl ZmluZWQoIG1bIDEgXSApICkKICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9t Q2hhckNvZGUoIG1bIDEgXSApOwogICAgICAgIG0gPSBjLm1hdGNoKCAvXiN4KFsw LTlhLWZdKykkL2kgKTsKICAgICAgICBpZiggIG0gJiYgZGVmaW5lZCggbVsgMSBd ICkgKQogICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSggcGFy c2VJbnQoIGhleCwgbVsgMSBdICkgKTsKICAgICAgICByZXR1cm4gYzsKICAgIH0K fSApOwoKCk9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZSwgewogICAgZXNj YXBlSlM6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2Uo IC8oW14gLSEjLVxbXF0tfl0pL2csIGZ1bmN0aW9uKCBtLCBjICkgeyByZXR1cm4g U3RyaW5nLmVzY2FwZUpTQ2hhciggYyApOyB9ICkKICAgIH0sCiAgICAKICAgIAog ICAgZXNjYXBlSlMyOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5y ZXBsYWNlKCAvKFtcdTAwMDAtXHUwMDMxJyJcXF0pL2csIGZ1bmN0aW9uKCBtLCBj ICkgeyByZXR1cm4gU3RyaW5nLmVzY2FwZUpTQ2hhciggYyApOyB9ICkKICAgIH0s CiAgICAKICAgIAogICAgZXNjYXBlSlMzOiBmdW5jdGlvbigpIHsKICAgICAgICBy ZXR1cm4gdGhpcy5yZXBsYWNlKCAvW1x1MDAwMC1cdTAwMzEnIlxcXS9nLCBmdW5j dGlvbiggbSApIHsgcmV0dXJuIFN0cmluZy5lc2NhcGVKU0NoYXIoIG0gKTsgfSAp CiAgICB9LAogICAgCiAgICAKICAgIGVzY2FwZUpTNDogZnVuY3Rpb24oKSB7CiAg ICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZSggLy4vZywgZnVuY3Rpb24oIG0gKSB7 IHJldHVybiBTdHJpbmcuZXNjYXBlSlNDaGFyKCBtICk7IH0gKQogICAgfSwKICAg IAogICAgCiAgICBlbmNvZGVIVE1MOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1 cm4gdGhpcy5yZXBsYWNlKCAvKFs8PiYiXSkvZywgZnVuY3Rpb24oIG0sIGMgKSB7 IHJldHVybiBTdHJpbmcuZW5jb2RlRW50aXR5KCBjICkgfSApOwogICAgfSwKCgog ICAgZGVjb2RlSFRNTDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMu cmVwbGFjZSggLyYoLio/KTsvZywgZnVuY3Rpb24oIG0sIGMgKSB7IHJldHVybiBT dHJpbmcuZGVjb2RlRW50aXR5KCBjICkgfSApOwogICAgfSwKICAgIAogICAgCiAg ICBjc3NUb0pTOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5yZXBs YWNlKCAvLShbYS16XSkvZywgZnVuY3Rpb24oIG0sIGMgKSB7IHJldHVybiBjLnRv VXBwZXJDYXNlKCkgfSApOwogICAgfSwKICAgIAogICAgCiAgICBqc1RvQ1NTOiBm dW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKCAvKFtBLVpd KS9nLCBmdW5jdGlvbiggbSwgYyApIHsgcmV0dXJuICItIiArIGMudG9Mb3dlckNh c2UoKSB9ICk7CiAgICB9LAogICAgCiAgICAKICAgIGZpcnN0VG9Mb3dlckNhc2U6 IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2UoIC9eKC4p LywgZnVuY3Rpb24oIG0sIGMgKSB7IHJldHVybiBjLnRvTG93ZXJDYXNlKCkgfSAp OwogICAgfSwKICAgIAogICAgICAgIAogICAgcmdiVG9IZXg6IGZ1bmN0aW9uKCkg ewogICAgICAgIHZhciBjID0gdGhpcy5tYXRjaCggLyhcZCspXEQrKFxkKylcRCso XGQrKS8gKTsKICAgICAgICBpZiggIWMgKQogICAgICAgICAgICByZXR1cm4gdW5k ZWZpbmVkOwogICAgICAgIHJldHVybiAiIyIgKwogICAgICAgICAgICBmaW5pdGVJ bnQoIGNbIDEgXSApLnRvU3RyaW5nKCAxNiApLnBhZCggMiwgIjAiICkgKwogICAg ICAgICAgICBmaW5pdGVJbnQoIGNbIDIgXSApLnRvU3RyaW5nKCAxNiApLnBhZCgg MiwgIjAiICkgKwogICAgICAgICAgICBmaW5pdGVJbnQoIGNbIDMgXSApLnRvU3Ry aW5nKCAxNiApLnBhZCggMiwgIjAiICk7CiAgICB9LAogICAgCiAgICAKICAgIHBh ZDogZnVuY3Rpb24oIGxlbmd0aCwgcGFkQ2hhciApIHsKICAgICAgICB2YXIgcGFk ZGluZyA9IGxlbmd0aCAtIHRoaXMubGVuZ3RoOwogICAgICAgIGlmKCBwYWRkaW5n IDw9IDAgKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBpZiggIWRl ZmluZWQoIHBhZENoYXIgKSApCiAgICAgICAgICAgIHBhZENoYXIgPSAiICI7CiAg ICAgICAgdmFyIG91dCA9IFtdOwogICAgICAgIGZvciggdmFyIGkgPSAwOyBpIDwg cGFkZGluZzsgaSsrICkKICAgICAgICAgICAgb3V0LnB1c2goIHBhZENoYXIgKTsK ICAgICAgICBvdXQucHVzaCggdGhpcyApOwogICAgICAgIHJldHVybiBvdXQuam9p biggIiIgKTsKICAgIH0sCgoKICAgIHRyaW06IGZ1bmN0aW9uKCkgewogICAgICAg IHJldHVybiB0aGlzLnJlcGxhY2UoIC9eXHMrfFxzKyQvZywgIiIgKTsKICAgIH0K Cn0gKTsKCgovKiBleHRlbmQgYXJyYXkgb2JqZWN0ICovCgpPYmplY3QuZXh0ZW5k KEFycmF5LCB7IAogICAgZnJvbVBzZXVkbzogZnVuY3Rpb24gKCBhcmdzICkgewog ICAgICAgIHZhciBvdXQgPSBbXTsKICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkg PCBhcmdzLmxlbmd0aDsgaSsrICkKICAgICAgICAgICAgb3V0LnB1c2goIGFyZ3Nb IGkgXSApOwogICAgICAgIHJldHVybiBvdXQ7CiAgICB9Cn0pOwoKCi8qIGV4dGVu ZCBhcnJheSBvYmplY3QgKi8KCk9iamVjdC5leHRlbmQoQXJyYXkucHJvdG90eXBl LCB7CiAgICBjb3B5OiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb3V0ID0gW107 CiAgICAgICAgZm9yKCB2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrICkK ICAgICAgICAgICAgb3V0WyBpIF0gPSB0aGlzWyBpIF07CiAgICAgICAgcmV0dXJu IG91dDsKICAgIH0sCgoKICAgIGZpcnN0OiBmdW5jdGlvbiggY2FsbGJhY2ssIG9i amVjdCApIHsKICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAg ICAgZm9yKCB2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAg ICAgdmFyIHJlc3VsdCA9IG9iamVjdAogICAgICAgICAgICAgICAgPyBjYWxsYmFj ay5jYWxsKCBvYmplY3QsIHRoaXNbIGkgXSwgaSwgdGhpcyApCiAgICAgICAgICAg ICAgICA6IGNhbGxiYWNrKCB0aGlzWyBpIF0sIGksIHRoaXMgKTsKICAgICAgICAg ICAgaWYoIHJlc3VsdCApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1sgaSBd OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0sCgoKICAgIGZp dEluZGV4OiBmdW5jdGlvbiggZnJvbUluZGV4LCBkZWZhdWx0SW5kZXggKSB7CiAg ICAgICAgaWYoICFkZWZpbmVkKCBmcm9tSW5kZXggKSB8fCBmcm9tSW5kZXggPT0g bnVsbCApCiAgICAgICAgICAgIGZyb21JbmRleCA9IGRlZmF1bHRJbmRleDsKICAg ICAgICBlbHNlIGlmKCBmcm9tSW5kZXggPCAwICkgewogICAgICAgICAgICBmcm9t SW5kZXggPSB0aGlzLmxlbmd0aCArIGZyb21JbmRleDsKICAgICAgICAgICAgaWYo IGZyb21JbmRleCA8IDAgKQogICAgICAgICAgICAgICAgZnJvbUluZGV4ID0gMDsK ICAgICAgICB9IGVsc2UgaWYoIGZyb21JbmRleCA+PSB0aGlzLmxlbmd0aCApCiAg ICAgICAgICAgIGZyb21JbmRleCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgICAgICBy ZXR1cm4gZnJvbUluZGV4OwogICAgfSwKCgogICAgc2NyYW1ibGU6IGZ1bmN0aW9u KCkgewogICAgICAgIGZvciggdmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkr KyApIHsKICAgICAgICAgICAgdmFyIGogPSBNYXRoLmZsb29yKCBNYXRoLnJhbmRv bSgpICogdGhpcy5sZW5ndGggKTsKICAgICAgICAgICAgdmFyIHRlbXAgPSB0aGlz WyBpIF07CiAgICAgICAgICAgIHRoaXNbIGkgXSA9IHRoaXNbIGogXTsKICAgICAg ICAgICAgdGhpc1sgaiBdID0gdGVtcDsKICAgICAgICB9CiAgICB9LAogICAgCiAg ICAKICAgIGFkZDogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGEgPSBhcmd1bWVu dHM7CiAgICAgICAgZm9yKCB2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrICkg ewogICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4T2YoIGFbIGkgXSAp OwogICAgICAgICAgICBpZiggaW5kZXggPCAwICkgCiAgICAgICAgICAgICAgICB0 aGlzLnB1c2goIGFyZ3VtZW50c1sgaSBdICk7CiAgICAgICAgfQogICAgICAgIHJl dHVybiB0aGlzLmxlbmd0aDsKICAgIH0sCiAgICAgICAgCiAgICAKICAgIHJlbW92 ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGEgPSBhcmd1bWVudHM7CiAgICAg ICAgZm9yKCB2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrICkgewogICAgICAg ICAgICB2YXIgaiA9IHRoaXMuaW5kZXhPZiggYVsgaSBdICk7CiAgICAgICAgICAg IGlmKCBqID49IDAgKQogICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoIGosIDEg KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoOwogICAgfSwK CgogICAgLyogamF2YXNjcmlwdCAxLjUgYXJyYXkgbWV0aG9kcyAqLwogICAgLyog aHR0cDovL2RldmVsb3Blci10ZXN0Lm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9K YXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6T2JqZWN0czpBcnJheSNNZXRob2RzICov CgogICAgZXZlcnk6IGZ1bmN0aW9uKCBjYWxsYmFjaywgb2JqZWN0ICkgewogICAg ICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgICBmb3IoIHZhciBp ID0gMDsgaSA8IGxlbmd0aDsgaSsrICkgewogICAgICAgICAgICB2YXIgcmVzdWx0 ID0gb2JqZWN0CiAgICAgICAgICAgICAgICA/IGNhbGxiYWNrLmNhbGwoIG9iamVj dCwgdGhpc1sgaSBdLCBpLCB0aGlzICkKICAgICAgICAgICAgICAgIDogY2FsbGJh Y2soIHRoaXNbIGkgXSwgaSwgdGhpcyApOwogICAgICAgICAgICBpZiggIXJlc3Vs dCApCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAg ICAgIHJldHVybiB0cnVlOwogICAgfSwKCgogICAgZmlsdGVyOiBmdW5jdGlvbigg Y2FsbGJhY2ssIG9iamVjdCApIHsKICAgICAgICB2YXIgb3V0ID0gW107CiAgICAg ICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgICAgIGZvciggdmFyIGkg PSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQg PSBvYmplY3QKICAgICAgICAgICAgICAgID8gY2FsbGJhY2suY2FsbCggb2JqZWN0 LCB0aGlzWyBpIF0sIGksIHRoaXMgKQogICAgICAgICAgICAgICAgOiBjYWxsYmFj ayggdGhpc1sgaSBdLCBpLCB0aGlzICk7CiAgICAgICAgICAgIGlmKCByZXN1bHQg KQogICAgICAgICAgICAgICAgb3V0LnB1c2goIHRoaXNbIGkgXSApOwogICAgICAg IH0KICAgICAgICByZXR1cm4gb3V0OwogICAgfSwKICAgIAogICAgCiAgICBmb3JF YWNoOiBmdW5jdGlvbiggY2FsbGJhY2ssIG9iamVjdCApIHsKICAgICAgICB2YXIg bGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgZm9yKCB2YXIgaSA9IDA7IGkg PCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgb2JqZWN0CiAgICAgICAgICAg ICAgICA/IGNhbGxiYWNrLmNhbGwoIG9iamVjdCwgdGhpc1sgaSBdLCBpLCB0aGlz ICkKICAgICAgICAgICAgICAgIDogY2FsbGJhY2soIHRoaXNbIGkgXSwgaSwgdGhp cyApOwogICAgICAgIH0KICAgIH0sCiAgICAKICAgIAogICAgaW5kZXhPZjogZnVu Y3Rpb24oIHZhbHVlLCBmcm9tSW5kZXggKSB7CiAgICAgICAgZnJvbUluZGV4ID0g dGhpcy5maXRJbmRleCggZnJvbUluZGV4LCAwICk7CiAgICAgICAgZm9yKCB2YXIg aSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrICkgewogICAgICAgICAgICBpZigg dGhpc1sgaSBdID09PSB2YWx1ZSApCiAgICAgICAgICAgICAgICByZXR1cm4gaTsg CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH0sCgoKICAgIGxhc3RJ bmRleE9mOiBmdW5jdGlvbiggdmFsdWUsIGZyb21JbmRleCApIHsKICAgICAgICBm cm9tSW5kZXggPSB0aGlzLmZpdEluZGV4KCBmcm9tSW5kZXgsIHRoaXMubGVuZ3Ro IC0gMSApOwogICAgICAgIGZvciggdmFyIGkgPSBmcm9tSW5kZXg7IGkgPj0gMDsg aS0tICkgewogICAgICAgICAgICBpZiggdGhpc1sgaSBdID09IHZhbHVlICkKICAg ICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgIH0KICAgICAgICByZXR1cm4g LTE7CiAgICB9LAoKCiAgICBzb21lOiBmdW5jdGlvbiggY2FsbGJhY2ssIG9iamVj dCApIHsKICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAg Zm9yKCB2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAg dmFyIHJlc3VsdCA9IG9iamVjdAogICAgICAgICAgICAgICAgPyBjYWxsYmFjay5j YWxsKCBvYmplY3QsIHRoaXNbIGkgXSwgaSwgdGhpcyApCiAgICAgICAgICAgICAg ICA6IGNhbGxiYWNrKCB0aGlzWyBpIF0sIGksIHRoaXMgKTsKICAgICAgICAgICAg aWYoIHJlc3VsdCApCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg ICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKCgogICAgLyogamF2YXNj cmlwdCAxLjIgYXJyYXkgbWV0aG9kcyAqLwoKICAgIGNvbmNhdDogZnVuY3Rpb24o KSB7CiAgICAgICAgdmFyIGEgPSBhcmd1bWVudHM7CiAgICAgICAgdmFyIG91dCA9 IHRoaXMuY29weSgpOwogICAgICAgIGZvciggaSA9IDA7IGkgPCBhLmxlbmd0aDsg aSsrICkgewogICAgICAgICAgICB2YXIgYiA9IGFbIGkgXTsKICAgICAgICAgICAg Zm9yKCBqID0gMDsgaiA8IGIubGVuZ3RoOyBqKysgKQogICAgICAgICAgICAgICAg b3V0LnB1c2goIGJbIGogXSApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0 OwogICAgfSwKICAgIAoKICAgIHB1c2g6IGZ1bmN0aW9uKCkgewogICAgICAgIHZh ciBhID0gYXJndW1lbnRzOwogICAgICAgIGZvciggdmFyIGkgPSAwOyBpIDwgYS5s ZW5ndGg7IGkrKyApCiAgICAgICAgICAgIHRoaXNbIHRoaXMubGVuZ3RoIF0gPSBh WyBpIF07CiAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoOyAgICAgCiAgICB9LAoK CiAgICBwb3A6IGZ1bmN0aW9uKCkgewogICAgICAgIGlmKCB0aGlzLmxlbmd0aCA9 PSAwICkKICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICB2YXIg b3V0ID0gdGhpc1sgdGhpcy5sZW5ndGggLSAxIF07CiAgICAgICAgdGhpcy5sZW5n dGgtLTsKICAgICAgICByZXR1cm4gb3V0OwogICAgfSwKICAgIAogICAgCiAgICB1 bnNoaWZ0OiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYSA9IGFyZ3VtZW50czsK ICAgICAgICBmb3IoIHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKysgKSB7CiAg ICAgICAgICAgIHRoaXNbIGkgKyBhLmxlbmd0aCBdID0gdGhpc1sgaSBdOwogICAg ICAgICAgICB0aGlzWyBpIF0gPSBhWyBpIF07CiAgICAgICAgfQogICAgICAgIHJl dHVybiB0aGlzLmxlbmd0aDsgICAgIAogICAgfSwKICAgIAogICAgCiAgICBzaGlm dDogZnVuY3Rpb24oKSB7CiAgICAgICAgaWYoIHRoaXMubGVuZ3RoID09IDAgKQog ICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgIHZhciBvdXQgPSB0 aGlzWyAwIF07CiAgICAgICAgZm9yKCB2YXIgaSA9IDE7IGkgPCB0aGlzLmxlbmd0 aDsgaSsrICkKICAgICAgICAgICAgdGhpc1sgaSAtIDEgXSA9IHRoaXNbIGkgXTsK ICAgICAgICB0aGlzLmxlbmd0aC0tOwogICAgICAgIHJldHVybiBvdXQ7CiAgICB9 Cn0gKTsKCgovKiBkYXRlIGV4dGVuc2lvbnMgKi8KCk9iamVjdC5leHRlbmQoRGF0 ZSwgewogICAgLyogIGlzbyA4NjAxIGRhdGUgZm9ybWF0IHBhcnNlcgogICAgICAg IHRoaXMgd2FzIGZ1biB0byB3cml0ZS4uLgogICAgICAgIHRoYW5rcyB0bzogaHR0 cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L2lzby10aW1lLmh0bWwgKi8KCiAg ICBtYXRjaElTT1N0cmluZzogbmV3IFJlZ0V4cCgKICAgICAgICAiXihbMC05XXs0 fSkiICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIHllYXIKICAgICAgICAiKD86LSg/PTBbMS05XXwxWzAtMl0p fCQpKC4uKT8iICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IG1vbnRoCiAgICAgICAgIig/Oi0oPz0wWzEtOV18WzEyXVswLTldfDNbMDFdKXwk KShbMC05XXsyfSk/IiArICAgICAgICAgICAgICAgICAgICAvLyBkYXkgb2YgdGhl IG1vbnRoCiAgICAgICAgIig/OlQoPz1bMDFdWzAtOV18MlswLTRdKXwkKVQ/KFsw LTldezJ9KT8iICsgICAgICAgICAgICAgICAgICAgICAgICAvLyBob3VycwogICAg ICAgICIoPzo6KD89WzAtNV1bMC05XSl8XFwrfC18WnwkKShbMC05XXsyfSk/IiAr ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWludXRlcwogICAgICAgICIoPzo6 KD89WzAtNV1bMC05XXw2MCR8NjBbK3wtfFpdfDYwLjArKXxcXCt8LXxafCQpOj8o WzAtOV17Mn0pPyIgKyAgLy8gc2Vjb25kcwogICAgICAgICIoXC5bMC05XSspPyIg KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gZnJhY3Rpb25hbCBzZWNvbmRzCiAgICAgICAgIihafFxcK1swMV1b MC05XXxcXCsyWzAtNF18LVswMV1bMC05XXwtMlswLTRdKT8iICsgICAgICAgICAg ICAgICAgICAvLyB0aW1lem9uZSBob3VycwogICAgICAgICI6PyhbMC01XVswLTld fDYwKT8kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gdGltZXpvbmUgbWludXRlcwogICAgKSwKICAgIAogICAgCiAgICBm cm9tSVNPU3RyaW5nOiBmdW5jdGlvbiggc3RyaW5nICkgewogICAgICAgIHZhciB0 ID0gdGhpcy5tYXRjaElTT1N0cmluZy5leGVjKCBzdHJpbmcgKTsKICAgICAgICBp ZiggIXQgKQogICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwoKICAgICAgICB2 YXIgeWVhciA9IGZpbml0ZUludCggdFsgMSBdLCAxMCApOwogICAgICAgIHZhciBt b250aCA9IGZpbml0ZUludCggdFsgMiBdLCAxMCApIC0gMTsKICAgICAgICB2YXIg ZGF5ID0gZmluaXRlSW50KCB0WyAzIF0sIDEwICk7CiAgICAgICAgdmFyIGhvdXJz ID0gZmluaXRlSW50KCB0WyA0IF0sIDEwICk7CiAgICAgICAgdmFyIG1pbnV0ZXMg PSBmaW5pdGVJbnQoIHRbIDUgXSwgMTAgKTsKICAgICAgICB2YXIgc2Vjb25kcyA9 IGZpbml0ZUludCggdFsgNiBdLCAxMCApOwogICAgICAgIHZhciBtaWxsaXNlY29u ZHMgPSBmaW5pdGVJbnQoIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIHRbIDcgXSAp ICogMTAwMCApICk7CiAgICAgICAgdmFyIHR6SG91cnMgPSBmaW5pdGVJbnQoIHRb IDggXSwgMTAgKTsKICAgICAgICB2YXIgdHpNaW51dGVzID0gZmluaXRlSW50KCB0 WyA5IF0sIDEwICk7CgogICAgICAgIHZhciBkYXRlID0gbmV3IHRoaXMoIDAgKTsK ICAgICAgICBpZiggZGVmaW5lZCggdFsgOCBdICkgKSB7CiAgICAgICAgICAgIGRh dGUuc2V0VVRDRnVsbFllYXIoIHllYXIsIG1vbnRoLCBkYXkgKTsKICAgICAgICAg ICAgZGF0ZS5zZXRVVENIb3VycyggaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1p bGxpc2Vjb25kcyApOwogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHR6SG91cnMg KiA2MCArIHR6TWludXRlcykgKiA2MDAwMDsKICAgICAgICAgICAgaWYoIG9mZnNl dCApCiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IHRoaXMoIGRhdGUgLSBvZmZz ZXQgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkYXRlLnNldEZ1bGxZ ZWFyKCB5ZWFyLCBtb250aCwgZGF5ICk7CiAgICAgICAgICAgIGRhdGUuc2V0SG91 cnMoIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMgKTsKICAg ICAgICB9CgogICAgICAgIHJldHVybiBkYXRlOwogICAgfQp9ICk7CgoKT2JqZWN0 LmV4dGVuZChEYXRlLnByb3RvdHlwZSwgewogICAgZ2V0SVNPVGltZXpvbmVPZmZz ZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBvZmZzZXQgPSAtdGhpcy5nZXRU aW1lem9uZU9mZnNldCgpOwogICAgICAgIHZhciBuZWdhdGl2ZSA9IGZhbHNlOwog ICAgICAgIGlmKCBvZmZzZXQgPCAwICkgewogICAgICAgICAgICBuZWdhdGl2ZSA9 IHRydWU7CiAgICAgICAgICAgIG9mZnNldCAqPSAtMTsKICAgICAgICB9CiAgICAg ICAgdmFyIG9mZnNldEhvdXJzID0gTWF0aC5mbG9vciggb2Zmc2V0IC8gNjAgKS50 b1N0cmluZygpLnBhZCggMiwgIjAiICk7CiAgICAgICAgdmFyIG9mZnNldE1pbnV0 ZXMgPSBNYXRoLmZsb29yKCBvZmZzZXQgJSA2MCApLnRvU3RyaW5nKCkucGFkKCAy LCAiMCIgKTsKICAgICAgICByZXR1cm4gKG5lZ2F0aXZlID8gIi0iIDogIisiKSAr IG9mZnNldEhvdXJzICsgIjoiICsgb2Zmc2V0TWludXRlczsKICAgIH0sCgoKICAg IHRvSVNPRGF0ZVN0cmluZzogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHllYXIg PSB0aGlzLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgdmFyIG1vbnRoID0gKHRoaXMu Z2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkKCAyLCAiMCIgKTsKICAgICAg ICB2YXIgZGF5ID0gdGhpcy5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWQoIDIsICIw IiApOwogICAgICAgIHJldHVybiB5ZWFyICsgIi0iICsgbW9udGggKyAiLSIgKyBk YXk7CiAgICB9LAoKCiAgICB0b1VUQ0lTT0RhdGVTdHJpbmc6IGZ1bmN0aW9uKCkg ewogICAgICAgIHZhciB5ZWFyID0gdGhpcy5nZXRVVENGdWxsWWVhcigpOwogICAg ICAgIHZhciBtb250aCA9ICh0aGlzLmdldFVUQ01vbnRoKCkgKyAxKS50b1N0cmlu ZygpLnBhZCggMiwgIjAiICk7CiAgICAgICAgdmFyIGRheSA9IHRoaXMuZ2V0VVRD RGF0ZSgpLnRvU3RyaW5nKCkucGFkKCAyLCAiMCIgKTsKICAgICAgICByZXR1cm4g eWVhciArICItIiArIG1vbnRoICsgIi0iICsgZGF5OwogICAgfSwKCgogICAgdG9J U09UaW1lU3RyaW5nOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgaG91cnMgPSB0 aGlzLmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWQoIDIsICIwIiApOwogICAgICAg IHZhciBtaW51dGVzID0gdGhpcy5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWQo IDIsICIwIiApOwogICAgICAgIHZhciBzZWNvbmRzID0gdGhpcy5nZXRTZWNvbmRz KCkudG9TdHJpbmcoKS5wYWQoIDIsICIwIiApOwogICAgICAgIHZhciBtaWxsaXNl Y29uZHMgPSB0aGlzLmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkKCAz LCAiMCIgKTsKICAgICAgICB2YXIgdGltZXpvbmUgPSB0aGlzLmdldElTT1RpbWV6 b25lT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIGhvdXJzICsgIjoiICsgbWludXRl cyArICI6IiArIHNlY29uZHMgKyAiLiIgKyBtaWxsaXNlY29uZHMgKyB0aW1lem9u ZTsKICAgIH0sCgoKICAgIHRvVVRDSVNPVGltZVN0cmluZzogZnVuY3Rpb24oKSB7 CiAgICAgICAgdmFyIGhvdXJzID0gdGhpcy5nZXRVVENIb3VycygpLnRvU3RyaW5n KCkucGFkKCAyLCAiMCIgKTsKICAgICAgICB2YXIgbWludXRlcyA9IHRoaXMuZ2V0 VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkKCAyLCAiMCIgKTsKICAgICAgICB2 YXIgc2Vjb25kcyA9IHRoaXMuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFk KCAyLCAiMCIgKTsKICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5nZXRV VENNaWxsaXNlY29uZHMoKS50b1N0cmluZygpLnBhZCggMywgIjAiICk7CiAgICAg ICAgcmV0dXJuIGhvdXJzICsgIjoiICsgbWludXRlcyArICI6IiArIHNlY29uZHMg KyAiLiIgKyBtaWxsaXNlY29uZHMgKyAiWiI7CiAgICB9LAoKCiAgICB0b0lTT1N0 cmluZzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudG9JU09EYXRl U3RyaW5nKCkgKyAiVCIgKyB0aGlzLnRvSVNPVGltZVN0cmluZygpOwogICAgfSwK CgogICAgdG9VVENJU09TdHJpbmc6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVy biB0aGlzLnRvVVRDSVNPRGF0ZVN0cmluZygpICsgIlQiICsgdGhpcy50b1VUQ0lT T1RpbWVTdHJpbmcoKTsKICAgIH0KfSApOwoKCi8qIGFqYXggKi8KCmlmKCAhZGVm aW5lZCggd2luZG93LlhNTEh0dHBSZXF1ZXN0ICkgKSB7CiAgICB3aW5kb3cuWE1M SHR0cFJlcXVlc3QgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdHlwZXMgPSBb CiAgICAgICAgICAgICJNaWNyb3NvZnQuWE1MSFRUUCIsCiAgICAgICAgICAgICJN U1hNTDIuWE1MSFRUUC41LjAiLAogICAgICAgICAgICAiTVNYTUwyLlhNTEhUVFAu NC4wIiwKICAgICAgICAgICAgIk1TWE1MMi5YTUxIVFRQLjMuMCIsCiAgICAgICAg ICAgICJNU1hNTDIuWE1MSFRUUCIKICAgICAgICBdOwogICAgICAgIAogICAgICAg IGZvciggdmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKysgKSB7CiAgICAg ICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFjdGl2ZVhP YmplY3QoIHR5cGVzWyBpIF0gKTsKICAgICAgICAgICAgfSBjYXRjaCggZSApIHt9 CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAg ICB9Cn0KLyoKRE9NIExpYnJhcnkgLSBDb3B5cmlnaHQgMjAwNSBTaXggQXBhcnQK JElkOiBkb20uanMgMjcxIDIwMDktMDMtMjMgMTI6MDU6MTdaIHBrb3JuaWxvdiAk CgpDb3B5cmlnaHQgKGMpIDIwMDUsIFNpeCBBcGFydCwgTHRkLgpBbGwgcmlnaHRz IHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cyBhcmUKbWV0OgoKICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgoK ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZQpjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCmluIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKZGlzdHJpYnV0aW9uLgoKICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiAiU2l4 IEFwYXJ0IiBub3IgdGhlIG5hbWVzIG9mIGl0cwpjb250cmlidXRvcnMgbWF5IGJl IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bQp0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwoiQVMgSVMiIEFORCBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VApMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKT1dO RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsClNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQpPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK Ki8KCgovKiBOb2RlIGNsYXNzICovCgppZighd2luZG93Lk5vZGUpCiAgICBOb2Rl ID0ge307Cgp0cnkgewogICAgT2JqZWN0LmV4dGVuZChOb2RlLCB7CiAgICAgICAg RUxFTUVOVF9OT0RFOiAxLAogICAgICAgIEFUVFJJQlVURV9OT0RFOiAyLAogICAg ICAgIFRFWFRfTk9ERTogMywKICAgICAgICBDREFUQV9TRUNUSU9OX05PREU6IDQs CiAgICAgICAgQ09NTUVOVF9OT0RFOiA4LAogICAgICAgIERPQ1VNRU5UX05PREU6 IDksCiAgICAgICAgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTogMTEKICAgIH0gKTsK fSBjYXRjaCggZSApIHt9CgoKLyogRE9NIGNsYXNzICovCgppZighd2luZG93LkRP TSkKICAgIERPTSA9IHt9OwoKCk9iamVjdC5leHRlbmQoRE9NLCB7CiAgICBnZXRF bGVtZW50OiBmdW5jdGlvbiggZSApIHsKICAgICAgICByZXR1cm4gKHR5cGVvZiBl ID09ICJzdHJpbmciIHx8IHR5cGVvZiBlID09ICJudW1iZXIiKSA/IGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCBlICkgOiBlOwogICAgfSwKCgogICAgYWRkRXZlbnRM aXN0ZW5lcjogZnVuY3Rpb24oIGUsIGV2ZW50TmFtZSwgZnVuYywgdXNlQ2FwdHVy ZSApIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiggZS5hZGRFdmVudExp c3RlbmVyICkKICAgICAgICAgICAgICAgIGUuYWRkRXZlbnRMaXN0ZW5lciggZXZl bnROYW1lLCBmdW5jLCB1c2VDYXB0dXJlICk7CiAgICAgICAgICAgIGVsc2UgaWYo IGUuYXR0YWNoRXZlbnQgKQogICAgICAgICAgICAgICAgZS5hdHRhY2hFdmVudCgg Im9uIiArIGV2ZW50TmFtZSwgZnVuYyApOwogICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICBlWyAib24iICsgZXZlbnROYW1lIF0gPSBmdW5jOwogICAgICAg IH0gY2F0Y2goIGUgKSB7fQogICAgfSwKCgogICAgcmVtb3ZlRXZlbnRMaXN0ZW5l cjogZnVuY3Rpb24oIGUsIGV2ZW50TmFtZSwgZnVuYywgdXNlQ2FwdHVyZSApIHsK ICAgICAgICB0cnkgewogICAgICAgICAgICBpZiggZS5yZW1vdmVFdmVudExpc3Rl bmVyICkKICAgICAgICAgICAgICAgIGUucmVtb3ZlRXZlbnRMaXN0ZW5lciggZXZl bnROYW1lLCBmdW5jLCB1c2VDYXB0dXJlICk7CiAgICAgICAgICAgIGVsc2UgaWYo IGUuZGV0YWNoRXZlbnQgKQogICAgICAgICAgICAgICAgZS5kZXRhY2hFdmVudCgg Im9uIiArIGV2ZW50TmFtZSwgZnVuYyApOwogICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICBlWyAib24iICsgZXZlbnROYW1lIF0gPSB1bmRlZmluZWQ7CiAg ICAgICAgfSBjYXRjaCggZSApIHt9CiAgICB9LAoKCiAgICByZWFkeTogZnVuY3Rp b24oZiwgZnJhbWUpIHsKICAgICAgICBpZiAoZnJhbWUpIHsKICAgICAgICAgICAg d2luID0gZnJhbWUuY29udGVudFdpbmRvdzsKICAgICAgICB9IGVsc2UgewogICAg ICAgICAgICB3aW4gPSB3aW5kb3c7CiAgICAgICAgfQogICAgICAgIGlmICgvKD8h Lio/Y29tcGF0aWJsZXwuKj93ZWJraXQpXm1vemlsbGF8b3BlcmEvaS50ZXN0KG5h dmlnYXRvci51c2VyQWdlbnQpICYmICFmcmFtZSkgewogICAgICAgICAgICBkb2N1 bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZiwgZmFs c2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBnbyA9IGZ1bmN0 aW9uKCkgeyB3aW4uZG9jdW1lbnQuYm9keSA/IGYoKSA6IHdpbi5zZXRUaW1lb3V0 KGdvLCAxKTsgfQogICAgICAgICAgICBnbygpOwogICAgICAgIH0KICAgIH0sCgoK ICAgIGZvY3VzOiBmdW5jdGlvbiggZSApIHsKICAgICAgICB0cnkgewogICAgICAg ICAgICBlID0gRE9NLmdldEVsZW1lbnQoIGUgKTsKICAgICAgICAgICAgZS5mb2N1 cygpOwogICAgICAgIH0gY2F0Y2goIGUgKSB7fQogICAgfSwKCgogICAgYmx1cjog ZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZSA9IERP TS5nZXRFbGVtZW50KCBlICk7CiAgICAgICAgICAgIGUuYmx1cigpOwogICAgICAg IH0gY2F0Y2goIGUgKSB7fQogICAgfSwKICAgIAoKICAgIC8qIHN0eWxlICovCiAg ICAKICAgIGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uKCBlICkgewogICAgICAg IGlmKCBlLmN1cnJlbnRTdHlsZSApCiAgICAgICAgICAgIHJldHVybiBlLmN1cnJl bnRTdHlsZTsKICAgICAgICB2YXIgc3R5bGUgPSB7fTsKICAgICAgICB2YXIgb3du ZXIgPSBET00uZ2V0T3duZXJEb2N1bWVudCggZSApOwogICAgICAgIGlmKCBvd25l ciAmJiBvd25lci5kZWZhdWx0VmlldyAmJiBvd25lci5kZWZhdWx0Vmlldy5nZXRD b21wdXRlZFN0eWxlICkgeyAgICAgICAgICAgIAogICAgICAgICAgICB0cnkgewog ICAgICAgICAgICAgICAgc3R5bGUgPSBvd25lci5kZWZhdWx0Vmlldy5nZXRDb21w dXRlZFN0eWxlKCBlLCBudWxsICk7CiAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7 fQogICAgICAgIH0KICAgICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKCiAgICBn ZXRTdHlsZTogZnVuY3Rpb24oIGUsIHAgKSB7CiAgICAgICAgdmFyIHMgPSBET00u Z2V0Q29tcHV0ZWRTdHlsZSggZSApOwogICAgICAgIHJldHVybiBzWyBwIF07CiAg ICB9LAoKCiAgICAvLyBnaXZlbiBhIHdpbmRvdyAob3IgZGVmYXVsdGluZyB0byBj dXJyZW50IHdpbmRvdyksIHJldHVybnMKICAgIC8vIG9iamVjdCB3aXRoIC54IGFu ZCAueSBvZiBjbGllbnQncyB1c2FibGUgYXJlYQogICAgZ2V0Q2xpZW50RGltZW5z aW9uczogZnVuY3Rpb24oIHcgKSB7CiAgICAgICAgaWYoICF3ICkKICAgICAgICAg ICAgdyA9IHdpbmRvdzsKCiAgICAgICAgdmFyIGQgPSB7fTsKCiAgICAgICAgLy8g bW9zdCBicm93c2VycwogICAgICAgIGlmKCB3LmlubmVySGVpZ2h0ICkgewogICAg ICAgICAgICBkLnggPSB3LmlubmVyV2lkdGg7CiAgICAgICAgICAgIGQueSA9IHcu aW5uZXJIZWlnaHQ7CiAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0KCiAg ICAgICAgLy8gSUU2LCBzdHJpY3QKICAgICAgICB2YXIgZGUgPSB3LmRvY3VtZW50 LmRvY3VtZW50RWxlbWVudDsKICAgICAgICBpZiggZGUgJiYgZGUuY2xpZW50SGVp Z2h0ICkgewogICAgICAgICAgICBkLnggPSBkZS5jbGllbnRXaWR0aDsKICAgICAg ICAgICAgZC55ID0gZGUuY2xpZW50SGVpZ2h0OwogICAgICAgICAgICByZXR1cm4g ZDsKICAgICAgICB9CgogICAgICAgIC8vIElFLCBtaXNjCiAgICAgICAgaWYoIGRv Y3VtZW50LmJvZHkgKSB7CiAgICAgICAgICAgIGQueCA9IGRvY3VtZW50LmJvZHku Y2xpZW50V2lkdGg7CiAgICAgICAgICAgIGQueSA9IGRvY3VtZW50LmJvZHkuY2xp ZW50SGVpZ2h0OwogICAgICAgICAgICByZXR1cm4gZDsKICAgICAgICB9CiAgICAg ICAgCiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0sCgoKICAgIGdldERp bWVuc2lvbnM6IGZ1bmN0aW9uKCBlICkgewogICAgICAgIGlmKCAhZSApCiAgICAg ICAgICAgIHJldHVybiB1bmRlZmluZWQ7CgogICAgICAgIHZhciBzdHlsZSA9IERP TS5nZXRDb21wdXRlZFN0eWxlKCBlICk7CgogICAgICAgIHJldHVybiB7CiAgICAg ICAgICAgIG9mZnNldExlZnQ6IGUub2Zmc2V0TGVmdCwKICAgICAgICAgICAgb2Zm c2V0VG9wOiBlLm9mZnNldFRvcCwKICAgICAgICAgICAgb2Zmc2V0V2lkdGg6IGUu b2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIG9mZnNldEhlaWdodDogZS5vZmZzZXRI ZWlnaHQsCiAgICAgICAgICAgIGNsaWVudFdpZHRoOiBlLmNsaWVudFdpZHRoLAog ICAgICAgICAgICBjbGllbnRIZWlnaHQ6IGUuY2xpZW50SGVpZ2h0LAogICAgICAg ICAgICAKICAgICAgICAgICAgb2Zmc2V0UmlnaHQ6IGUub2Zmc2V0TGVmdCArIGUu b2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIG9mZnNldEJvdHRvbTogZS5vZmZzZXRU b3AgKyBlLm9mZnNldEhlaWdodCwKICAgICAgICAgICAgY2xpZW50TGVmdDogZmlu aXRlSW50KCBzdHlsZS5ib3JkZXJMZWZ0V2lkdGggKSArIGZpbml0ZUludCggc3R5 bGUucGFkZGluZ0xlZnQgKSwKICAgICAgICAgICAgY2xpZW50VG9wOiBmaW5pdGVJ bnQoIHN0eWxlLmJvcmRlclRvcFdpZHRoICkgKyBmaW5pdGVJbnQoIHN0eWxlLnBh ZGRpbmdUb3AgKSwKICAgICAgICAgICAgY2xpZW50UmlnaHQ6IGUuY2xpZW50TGVm dCArIGUuY2xpZW50V2lkdGgsCiAgICAgICAgICAgIGNsaWVudEJvdHRvbTogZS5j bGllbnRUb3AgKyBlLmNsaWVudEhlaWdodAogICAgICAgIH07CiAgICB9LAoKCiAg ICBnZXRBYnNvbHV0ZURpbWVuc2lvbnM6IGZ1bmN0aW9uKCBlICkgewogICAgICAg IHZhciBkID0gRE9NLmdldERpbWVuc2lvbnMoIGUgKTsKICAgICAgICBpZiggIWQg KQogICAgICAgICAgICByZXR1cm4gZDsKICAgICAgICBkLmFic29sdXRlTGVmdCA9 IGQub2Zmc2V0TGVmdDsKICAgICAgICBkLmFic29sdXRlVG9wID0gZC5vZmZzZXRU b3A7CiAgICAgICAgZC5hYnNvbHV0ZVJpZ2h0ID0gZC5vZmZzZXRSaWdodDsKICAg ICAgICBkLmFic29sdXRlQm90dG9tID0gZC5vZmZzZXRCb3R0b207CiAgICAgICAg dmFyIGJvcmsgPSAwOwogICAgICAgIHdoaWxlKCBlICkgewogICAgICAgICAgICB0 cnkgeyAvLyBJRSA2IHNvbWV0aW1lcyBnaXZlcyBhbiB1bndhcnJhbnRlZCBlcnJv ciAoImh0bWxmaWxlOiBVbnNwZWNpZmllZCBlcnJvciIpLgogICAgICAgICAgICAg ICAgZSA9IGUub2Zmc2V0UGFyZW50OwogICAgICAgICAgICB9IGNhdGNoICggZXJy ICkgewogICAgICAgICAgICAgICAgbG9nKCAiSW4gRE9NLmdldEFic29sdXRlRGlt ZW5zaW9uczogIiArIGVyci5tZXNzYWdlICk7IAogICAgICAgICAgICAgICAgaWYg KCArK2JvcmsgPiAyNSApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7 CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoICFlICkKICAgICAgICAgICAg ICAgIHJldHVybiBkOwogICAgICAgICAgICBkLmFic29sdXRlTGVmdCArPSBlLm9m ZnNldExlZnQ7CiAgICAgICAgICAgIGQuYWJzb2x1dGVUb3AgKz0gZS5vZmZzZXRU b3A7CiAgICAgICAgICAgIGQuYWJzb2x1dGVSaWdodCArPSBlLm9mZnNldExlZnQ7 CiAgICAgICAgICAgIGQuYWJzb2x1dGVCb3R0b20gKz0gZS5vZmZzZXRUb3A7CiAg ICAgICAgfQogICAgICAgIHJldHVybiBkOwogICAgfSwKICAgIAogICAgCiAgICBn ZXRJZnJhbWVBYnNvbHV0ZURpbWVuc2lvbnM6IGZ1bmN0aW9uKCBlICkgewogICAg ICAgIHZhciBkID0gRE9NLmdldEFic29sdXRlRGltZW5zaW9ucyggZSApOwogICAg ICAgIGlmKCAhZCApCiAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgIHZhciBp ZnJhbWUgPSBET00uZ2V0T3duZXJJZnJhbWUoIGUgKTsKICAgICAgICBpZiggIWRl ZmluZWQoIGlmcmFtZSApICkKICAgICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAg CiAgICAgICAgdmFyIGQyID0gRE9NLmdldElmcmFtZUFic29sdXRlRGltZW5zaW9u cyggaWZyYW1lICk7CiAgICAgICAgdmFyIHNjcm9sbCA9IERPTS5nZXRXaW5kb3dT Y3JvbGwoIGlmcmFtZS5jb250ZW50V2luZG93ICk7CiAgICAgICAgdmFyIGxlZnQg PSBkMi5hYnNvbHV0ZUxlZnQgLSBzY3JvbGwubGVmdDsKICAgICAgICB2YXIgdG9w ID0gZDIuYWJzb2x1dGVUb3AgLSBzY3JvbGwudG9wOwogICAgICAgIAogICAgICAg IGQuYWJzb2x1dGVMZWZ0ICs9IGxlZnQ7CiAgICAgICAgZC5hYnNvbHV0ZVRvcCAr PSB0b3A7CiAgICAgICAgZC5hYnNvbHV0ZVJpZ2h0ICs9IGxlZnQ7CiAgICAgICAg ZC5hYnNvbHV0ZUJvdHRvbSArPSB0b3A7CiAgICAgICAgCiAgICAgICAgcmV0dXJu IGQ7CiAgICB9LAogICAgCiAgICAKICAgIHNldExlZnQ6IGZ1bmN0aW9uKCBlLCB2 ICkgeyBlLnN0eWxlLmxlZnQgPSBmaW5pdGVJbnQoIHYgKSArICJweCI7IH0sCiAg ICBzZXRUb3A6IGZ1bmN0aW9uKCBlLCB2ICkgeyBlLnN0eWxlLnRvcCA9IGZpbml0 ZUludCggdiApICsgInB4IjsgfSwKICAgIHNldFJpZ2h0OiBmdW5jdGlvbiggZSwg diApIHsgZS5zdHlsZS5yaWdodCA9IGZpbml0ZUludCggdiApICsgInB4IjsgfSwK ICAgIHNldEJvdHRvbTogZnVuY3Rpb24oIGUsIHYgKSB7IGUuc3R5bGUuYm90dG9t ID0gZmluaXRlSW50KCB2ICkgKyAicHgiOyB9LAogICAgc2V0V2lkdGg6IGZ1bmN0 aW9uKCBlLCB2ICkgeyBlLnN0eWxlLndpZHRoID0gbWF4KCAwLCBmaW5pdGVJbnQo IHYgKSApICsgInB4IjsgfSwKICAgIHNldEhlaWdodDogZnVuY3Rpb24oIGUsIHYg KSB7IGUuc3R5bGUuaGVpZ2h0ID0gbWF4KCAwLCBmaW5pdGVJbnQoIHYgKSApICsg InB4IjsgfSwKICAgIHNldFpJbmRleDogZnVuY3Rpb24oIGUsIHYgKSB7IGUuc3R5 bGUuekluZGV4ID0gZmluaXRlSW50KCB2ICk7IH0sCgoKICAgIGdldFdpbmRvd1Nj cm9sbDogZnVuY3Rpb24oIHcgKSB7CiAgICAgICAgdmFyIHMgPSB7CiAgICAgICAg ICAgIGxlZnQ6IDAsCiAgICAgICAgICAgIHRvcDogMAogICAgICAgIH07CgogICAg ICAgIGlmICghdykgdyA9IHdpbmRvdzsKICAgICAgICB2YXIgZCA9IHcuZG9jdW1l bnQ7CiAgICAgICAgdmFyIGRlID0gZC5kb2N1bWVudEVsZW1lbnQ7CgogICAgICAg IC8vIG1vc3QgYnJvd3NlcnMKICAgICAgICBpZiAoIGRlZmluZWQoIHcucGFnZVhP ZmZzZXQgKSApIHsKICAgICAgICAgICAgcy5sZWZ0ID0gdy5wYWdlWE9mZnNldDsK ICAgICAgICAgICAgcy50b3AgPSB3LnBhZ2VZT2Zmc2V0OwogICAgICAgIH0KCiAg ICAgICAgLy8gaWUKICAgICAgICBlbHNlIGlmKCBkZSAmJiBkZWZpbmVkKCBkZS5z Y3JvbGxMZWZ0ICkgKSB7CiAgICAgICAgICAgIHMubGVmdCA9IGRlLnNjcm9sbExl ZnQ7CiAgICAgICAgICAgIHMudG9wID0gZGUuc2Nyb2xsVG9wOwogICAgICAgIH0K CiAgICAgICAgLy8gc2FmYXJpCiAgICAgICAgZWxzZSBpZiggZGVmaW5lZCggdy5z Y3JvbGxYICkgKSB7CiAgICAgICAgICAgIHMubGVmdCA9IHcuc2Nyb2xsWDsKICAg ICAgICAgICAgcy50b3AgPSB3LnNjcm9sbFk7CiAgICAgICAgfQoKICAgICAgICAv LyBvcGVyYQogICAgICAgIGVsc2UgaWYoIGQuYm9keSAmJiBkZWZpbmVkKCBkLmJv ZHkuc2Nyb2xsTGVmdCApICkgewogICAgICAgICAgICBzLmxlZnQgPSBkLmJvZHku c2Nyb2xsTGVmdDsKICAgICAgICAgICAgcy50b3AgPSBkLmJvZHkuc2Nyb2xsVG9w OwogICAgICAgIH0KCgogICAgICAgIHJldHVybiBzOwogICAgfSwKCgogICAgZ2V0 QWJzb2x1dGVDdXJzb3JQb3NpdGlvbjogZnVuY3Rpb24oIGV2ZW50ICkgewogICAg ICAgIGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50OwogICAgICAgIHZhciBz ID0gRE9NLmdldFdpbmRvd1Njcm9sbCggd2luZG93ICk7CiAgICAgICAgcmV0dXJu IHsKICAgICAgICAgICAgeDogcy5sZWZ0ICsgZXZlbnQuY2xpZW50WCwKICAgICAg ICAgICAgeTogcy50b3AgKyBldmVudC5jbGllbnRZCiAgICAgICAgfTsKICAgIH0s CiAgICAKICAgIAogICAgaW52aXNpYmxlU3R5bGU6IHsKICAgICAgICBkaXNwbGF5 OiAiYmxvY2siLAogICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAogICAgICAg IGxlZnQ6IDAsCiAgICAgICAgdG9wOiAwLAogICAgICAgIHdpZHRoOiAwLAogICAg ICAgIGhlaWdodDogMCwKICAgICAgICBtYXJnaW46IDAsCiAgICAgICAgYm9yZGVy OiAwLAogICAgICAgIHBhZGRpbmc6IDAsCiAgICAgICAgZm9udFNpemU6ICIwLjFw eCIsCiAgICAgICAgbGluZUhlaWdodDogMCwKICAgICAgICBvcGFjaXR5OiAwLAog ICAgICAgIE1vek9wYWNpdHk6IDAsCiAgICAgICAgZmlsdGVyOiAiYWxwaGEob3Bh Y2l0eT0wKSIKICAgIH0sCiAgICAKICAgIAogICAgbWFrZUludmlzaWJsZTogZnVu Y3Rpb24oIGUgKSB7CiAgICAgICAgZm9yKCB2YXIgcCBpbiB0aGlzLmludmlzaWJs ZVN0eWxlICkgewogICAgICAgICAgICBlLnN0eWxlWyBwIF0gPSB0aGlzLmludmlz aWJsZVN0eWxlWyBwIF07CiAgICAgICAgfQogICAgfSwKCgogICAgLyogdGV4dCBh bmQgc2VsZWN0aW9uIHJlbGF0ZWQgbWV0aG9kcyAqLwoKICAgIG1lcmdlVGV4dE5v ZGVzOiBmdW5jdGlvbiggbiApIHsKICAgICAgICB2YXIgYyA9IDA7CiAgICAgICAg d2hpbGUoIG4gKSB7CiAgICAgICAgICAgIGlmKCBuLm5vZGVUeXBlID09IE5vZGUu VEVYVF9OT0RFICYmIG4ubmV4dFNpYmxpbmcgJiYgbi5uZXh0U2libGluZy5ub2Rl VHlwZSA9PSBOb2RlLlRFWFRfTk9ERSApIHsKICAgICAgICAgICAgICAgIG4ubm9k ZVZhbHVlICs9IG4ubmV4dFNpYmxpbmcubm9kZVZhbHVlOwogICAgICAgICAgICAg ICAgbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBuLm5leHRTaWJsaW5nICk7CiAg ICAgICAgICAgICAgICBjKys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg ICAgICAgICBpZiggbi5maXJzdENoaWxkICkKICAgICAgICAgICAgICAgICAgICBj ICs9IERPTS5tZXJnZVRleHROb2Rlcyggbi5maXJzdENoaWxkICk7CiAgICAgICAg ICAgICAgICBuID0gbi5uZXh0U2libGluZzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgICByZXR1cm4gYzsKICAgIH0sCiAgICAKICAgIAogICAgc2VsZWN0 RWxlbWVudDogZnVuY3Rpb24oIGUgKSB7ICAKICAgICAgICB2YXIgZCA9IGUub3du ZXJEb2N1bWVudDsgIAogICAgICAgIAogICAgICAgIC8vIGludGVybmV0IGV4cGxv cmVyICAKICAgICAgICBpZiggZC5ib2R5LmNyZWF0ZUNvbnRyb2xSYW5nZSApIHsg IAogICAgICAgICAgICB2YXIgciA9IGQuYm9keS5jcmVhdGVDb250cm9sUmFuZ2Uo KTsgIAogICAgICAgICAgICByLmFkZEVsZW1lbnQoIGUgKTsgIAogICAgICAgICAg ICByLnNlbGVjdCgpOyAgCiAgICAgICAgfSAgCiAgICB9LCAKICAgIAogICAgCiAg ICAvKiBkb20gbWV0aG9kcyAqLwogICAgCiAgICBpc0ltbXV0YWJsZTogZnVuY3Rp b24oIG4gKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYoIG4uZ2V0QXR0 cmlidXRlKCAiY29udGVudGVkaXRhYmxlIiApID09ICJmYWxzZSIgKQogICAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCggZSApIHt9CiAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKICAgIAogICAgCiAgICBnZXRJbW11 dGFibGU6IGZ1bmN0aW9uKCBuICkgewogICAgICAgIHZhciBpbW11dGFibGUgPSBu dWxsOwogICAgICAgIHdoaWxlKCBuICkgewogICAgICAgICAgICBpZiggRE9NLmlz SW1tdXRhYmxlKCBuICkgKQogICAgICAgICAgICAgICAgaW1tdXRhYmxlID0gbjsK ICAgICAgICAgICAgbiA9IG4ucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICAgICAg cmV0dXJuIGltbXV0YWJsZTsKICAgIH0sCgoKICAgIGdldE93bmVyRG9jdW1lbnQ6 IGZ1bmN0aW9uKCBuICkgewogICAgICAgIGlmKCAhbiApCiAgICAgICAgICAgIHJl dHVybiBkb2N1bWVudDsKICAgICAgICBpZiggbi5vd25lckRvY3VtZW50ICkKICAg ICAgICAgICAgcmV0dXJuIG4ub3duZXJEb2N1bWVudDsKICAgICAgICBpZiggbi5n ZXRFbGVtZW50QnlJZCApCiAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgIHJl dHVybiBkb2N1bWVudDsKICAgIH0sCgoKICAgIGdldE93bmVyV2luZG93OiBmdW5j dGlvbiggbiApIHsKICAgICAgICBpZiggIW4gKQogICAgICAgICAgICByZXR1cm4g d2luZG93OwogICAgICAgIGlmKCBuLnBhcmVudFdpbmRvdyApCiAgICAgICAgICAg IHJldHVybiBuLnBhcmVudFdpbmRvdzsKICAgICAgICB2YXIgZG9jID0gRE9NLmdl dE93bmVyRG9jdW1lbnQoIG4gKTsKICAgICAgICBpZiggZG9jICYmIGRvYy5kZWZh dWx0VmlldyApCiAgICAgICAgICAgIHJldHVybiBkb2MuZGVmYXVsdFZpZXc7CiAg ICAgICAgcmV0dXJuIHdpbmRvdzsKICAgIH0sCiAgICAKICAgIAogICAgZ2V0T3du ZXJJZnJhbWU6IGZ1bmN0aW9uKCBuICkgewogICAgICAgIGlmKCAhbiApCiAgICAg ICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgdmFyIG53ID0gRE9NLmdl dE93bmVyV2luZG93KCBuICk7CiAgICAgICAgdmFyIG5kID0gRE9NLmdldE93bmVy RG9jdW1lbnQoIG4gKTsKICAgICAgICB2YXIgcHcgPSBudy5wYXJlbnQgfHwgbncu cGFyZW50V2luZG93OwogICAgICAgIGlmKCAhcHcgKQogICAgICAgICAgICByZXR1 cm4gdW5kZWZpbmVkOwogICAgICAgIHZhciBwYXJlbnREb2N1bWVudCA9IHB3LmRv Y3VtZW50OwogICAgICAgIHZhciBlcyA9IHBhcmVudERvY3VtZW50LmdldEVsZW1l bnRzQnlUYWdOYW1lKCAiaWZyYW1lIiApOwogICAgICAgIGZvciggdmFyIGkgPSAw OyBpIDwgZXMubGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgIHZhciBlID0gZXNb IGkgXTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZhciBkID0g ZS5jb250ZW50RG9jdW1lbnQgfHwgZS5jb250ZW50V2luZG93LmRvY3VtZW50Owog ICAgICAgICAgICAgICAgaWYoIGQgPT09IG5kICkKICAgICAgICAgICAgICAgICAg ICByZXR1cm4gZTsKICAgICAgICAgICAgfWNhdGNoKGVycikge307CiAgICAgICAg fQogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICB9LAoKCiAgICBmaWx0ZXJF bGVtZW50c0J5Q2xhc3NOYW1lOiBmdW5jdGlvbiggZXMsIGNsYXNzTmFtZSApIHsK ICAgICAgICB2YXIgZmlsdGVyZWQgPSBbXTsKICAgICAgICBmb3IoIHZhciBpID0g MDsgaSA8IGVzLmxlbmd0aDsgaSsrICkgewogICAgICAgICAgICB2YXIgZSA9IGVz WyBpIF07CiAgICAgICAgICAgIGlmKCBET00uaGFzQ2xhc3NOYW1lKCBlLCBjbGFz c05hbWUgKSApCiAgICAgICAgICAgICAgICBmaWx0ZXJlZFsgZmlsdGVyZWQubGVu Z3RoIF0gPSBlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmlsdGVyZWQ7CiAg ICB9LAogICAgCiAgICAKICAgIGZpbHRlckVsZW1lbnRzQnlBdHRyaWJ1dGU6IGZ1 bmN0aW9uKCBlcywgYXR0ciApIHsKICAgICAgICBpZiggIWVzICkKICAgICAgICAg ICAgcmV0dXJuIFtdOwogICAgICAgIGlmKCAhZGVmaW5lZCggYXR0ciApIHx8IGF0 dHIgPT0gbnVsbCB8fCBhdHRyID09ICIiICkKICAgICAgICAgICAgcmV0dXJuIGVz OwogICAgICAgIHZhciBmaWx0ZXJlZCA9IFtdOwogICAgICAgIGZvciggdmFyIGkg PSAwOyBpIDwgZXMubGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgIHZhciBlbGVt ZW50ID0gZXNbIGkgXTsKICAgICAgICAgICAgaWYoICFlbGVtZW50ICkKICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiggZWxlbWVudC5nZXRB dHRyaWJ1dGUgJiYgKCBlbGVtZW50LmdldEF0dHJpYnV0ZSggYXR0ciApICkgKQog ICAgICAgICAgICAgICAgZmlsdGVyZWRbIGZpbHRlcmVkLmxlbmd0aCBdID0gZWxl bWVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZpbHRlcmVkOwogICAgfSwK CgogICAgZmlsdGVyRWxlbWVudHNCeVRhZ05hbWU6IGZ1bmN0aW9uKCBlcywgdGFn TmFtZSApIHsKICAgICAgICBpZiggdGFnTmFtZSA9PSAiKiIgKQogICAgICAgICAg ICByZXR1cm4gZXM7CiAgICAgICAgdmFyIGZpbHRlcmVkID0gW107CiAgICAgICAg dGFnTmFtZSA9IHRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICBmb3IoIHZh ciBpID0gMDsgaSA8IGVzLmxlbmd0aDsgaSsrICkgewogICAgICAgICAgICB2YXIg ZSA9IGVzWyBpIF07CiAgICAgICAgICAgIGlmKCBlLnRhZ05hbWUgJiYgZS50YWdO YW1lLnRvTG93ZXJDYXNlKCkgPT0gdGFnTmFtZSApCiAgICAgICAgICAgICAgICBm aWx0ZXJlZFsgZmlsdGVyZWQubGVuZ3RoIF0gPSBlOwogICAgICAgIH0KICAgICAg ICByZXR1cm4gZmlsdGVyZWQ7CiAgICB9LAoKCiAgICBnZXRFbGVtZW50c0J5VGFn QW5kQXR0cmlidXRlOiBmdW5jdGlvbiggcm9vdCwgdGFnTmFtZSwgYXR0ciApIHsK ICAgICAgICBpZiggIXJvb3QgKQogICAgICAgICAgICByb290ID0gZG9jdW1lbnQ7 CiAgICAgICAgdmFyIGVzID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFn TmFtZSApOwogICAgICAgIHJldHVybiBET00uZmlsdGVyRWxlbWVudHNCeUF0dHJp YnV0ZSggZXMsIGF0dHIgKTsKICAgIH0sCiAgICAKICAgIAogICAgZ2V0RWxlbWVu dHNCeUF0dHJpYnV0ZTogZnVuY3Rpb24oIHJvb3QsIGF0dHIgKSB7CiAgICAgICAg cmV0dXJuIERPTS5nZXRFbGVtZW50c0J5VGFnQW5kQXR0cmlidXRlKCByb290LCAi KiIsIGF0dHIgKTsKICAgIH0sCgoKICAgIGdldEVsZW1lbnRzQnlBdHRyaWJ1dGVB bmRWYWx1ZTogZnVuY3Rpb24oIHJvb3QsIGF0dHIsIHZhbHVlICkgewogICAgICAg IHZhciBlcyA9IERPTS5nZXRFbGVtZW50c0J5VGFnQW5kQXR0cmlidXRlKCByb290 LCAiKiIsIGF0dHIgKTsKICAgICAgICB2YXIgZmlsdGVyZWQgPSBbXTsKICAgICAg ICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBlcy5sZW5ndGg7IGkrKyApCiAgICAgICAg ICAgIGlmICggZXNbIGkgXS5nZXRBdHRyaWJ1dGUoIGF0dHIgKSA9PSB2YWx1ZSAp CiAgICAgICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKCBlc1sgaSBdICk7CiAgICAg ICAgcmV0dXJuIGZpbHRlcmVkOwogICAgfSwKICAgIAoKICAgIGdldEVsZW1lbnRz QnlUYWdBbmRDbGFzc05hbWU6IGZ1bmN0aW9uKCByb290LCB0YWdOYW1lLCBjbGFz c05hbWUgKSB7CiAgICAgICAgaWYoICFyb290ICkKICAgICAgICAgICAgcm9vdCA9 IGRvY3VtZW50OwogICAgICAgIHZhciBlbGVtZW50cyA9IHJvb3QuZ2V0RWxlbWVu dHNCeVRhZ05hbWUoIHRhZ05hbWUgKTsKICAgICAgICByZXR1cm4gRE9NLmZpbHRl ckVsZW1lbnRzQnlDbGFzc05hbWUoIGVsZW1lbnRzLCBjbGFzc05hbWUgKTsKICAg IH0sCgoKICAgIGdldEVsZW1lbnRzQnlDbGFzc05hbWU6IGZ1bmN0aW9uKCByb290 LCBjbGFzc05hbWUgKSB7CiAgICAgICAgcmV0dXJuIERPTS5nZXRFbGVtZW50c0J5 VGFnQW5kQ2xhc3NOYW1lKCByb290LCAiKiIsIGNsYXNzTmFtZSApOwogICAgfSwK CgogICAgZ2V0QW5jZXN0b3JzOiBmdW5jdGlvbiggbiwgaW5jbHVkZVNlbGYgKSB7 CiAgICAgICAgaWYoICFuICkKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAg IHZhciBhcyA9IGluY2x1ZGVTZWxmID8gWyBuIF0gOiBbXTsKICAgICAgICBuID0g bi5wYXJlbnROb2RlOwogICAgICAgIHdoaWxlKCBuICkgewogICAgICAgICAgICBh cy5wdXNoKCBuICk7CiAgICAgICAgICAgIG4gPSBuLnBhcmVudE5vZGU7CiAgICAg ICAgfQogICAgICAgIHJldHVybiBhczsKICAgIH0sCiAgICAKICAgIAogICAgZ2V0 QW5jZXN0b3JzQnlUYWdOYW1lOiBmdW5jdGlvbiggbiwgdGFnTmFtZSwgaW5jbHVk ZVNlbGYgKSB7CiAgICAgICAgdmFyIGVzID0gRE9NLmdldEFuY2VzdG9ycyggbiwg aW5jbHVkZVNlbGYgKTsKICAgICAgICByZXR1cm4gRE9NLmZpbHRlckVsZW1lbnRz QnlUYWdOYW1lKCBlcywgdGFnTmFtZSApOwogICAgfSwKICAgIAogICAgCiAgICBn ZXRGaXJzdEFuY2VzdG9yQnlUYWdOYW1lOiBmdW5jdGlvbiggbiwgdGFnTmFtZSwg aW5jbHVkZVNlbGYgKSB7CiAgICAgICAgcmV0dXJuIERPTS5nZXRBbmNlc3RvcnNC eVRhZ05hbWUoIG4sIHRhZ05hbWUsIGluY2x1ZGVTZWxmIClbIDAgXTsKICAgIH0s CgoKICAgIGdldEFuY2VzdG9yc0J5Q2xhc3NOYW1lOiBmdW5jdGlvbiggbiwgY2xh c3NOYW1lLCBpbmNsdWRlU2VsZiApIHsKICAgICAgICB2YXIgZXMgPSBET00uZ2V0 QW5jZXN0b3JzKCBuLCBpbmNsdWRlU2VsZiApOwogICAgICAgIHJldHVybiBET00u ZmlsdGVyRWxlbWVudHNCeUNsYXNzTmFtZSggZXMsIGNsYXNzTmFtZSApOwogICAg fSwKCgogICAgZ2V0Rmlyc3RBbmNlc3RvckJ5Q2xhc3NOYW1lOiBmdW5jdGlvbigg biwgY2xhc3NOYW1lLCBpbmNsdWRlU2VsZiApIHsKICAgICAgICByZXR1cm4gRE9N LmdldEFuY2VzdG9yc0J5Q2xhc3NOYW1lKCBuLCBjbGFzc05hbWUsIGluY2x1ZGVT ZWxmIClbIDAgXTsKICAgIH0sCgoKICAgIGdldEFuY2VzdG9yc0J5VGFnQW5kQ2xh c3NOYW1lOiBmdW5jdGlvbiggbiwgdGFnTmFtZSwgY2xhc3NOYW1lLCBpbmNsdWRl U2VsZiApIHsKICAgICAgICB2YXIgZXMgPSBET00uZ2V0QW5jZXN0b3JzQnlUYWdO YW1lKCBuLCB0YWdOYW1lLCBpbmNsdWRlU2VsZiApOwogICAgICAgIHJldHVybiBE T00uZmlsdGVyRWxlbWVudHNCeUNsYXNzTmFtZSggZXMsIGNsYXNzTmFtZSApOwog ICAgfSwKCgogICAgZ2V0Rmlyc3RBbmNlc3RvckJ5VGFnQW5kQ2xhc3NOYW1lOiBm dW5jdGlvbiggbiwgdGFnTmFtZSwgY2xhc3NOYW1lLCBpbmNsdWRlU2VsZiApIHsK ICAgICAgICByZXR1cm4gRE9NLmdldEFuY2VzdG9yc0J5VGFnQW5kQ2xhc3NOYW1l KCBuLCB0YWdOYW1lLCBjbGFzc05hbWUsIGluY2x1ZGVTZWxmIClbIDAgXTsKICAg IH0sCgoKICAgIGdldFByZXZpb3VzRWxlbWVudDogZnVuY3Rpb24oIG4gKSB7CiAg ICAgICAgbiA9IG4ucHJldmlvdXNTaWJsaW5nOwogICAgICAgIHdoaWxlKCBuICkg ewogICAgICAgICAgICBpZiggbi5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9E RSApCiAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgbiA9IG4u cHJldmlvdXNTaWJsaW5nOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsK ICAgIH0sCgoKICAgIGdldE5leHRFbGVtZW50OiBmdW5jdGlvbiggbiApIHsKICAg ICAgICBuID0gbi5uZXh0U2libGluZzsKICAgICAgICB3aGlsZSggbiApIHsKICAg ICAgICAgICAgaWYoIG4ubm9kZVR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUgKQog ICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgIG4gPSBuLm5leHRT aWJsaW5nOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0sCgoK ICAgIGlzSW5saW5lTm9kZTogZnVuY3Rpb24oIG4gKSB7CiAgICAgICAgLy8gdGV4 dCBub2RlcyBhcmUgaW5saW5lCiAgICAgICAgaWYoIG4ubm9kZVR5cGUgPT0gTm9k ZS5URVhUX05PREUgKQogICAgICAgICAgICByZXR1cm4gbjsKCiAgICAgICAgLy8g ZG9jdW1lbnQgbm9kZXMgYXJlIG5vbi1pbmxpbmUKICAgICAgICBpZiggbi5ub2Rl VHlwZSA9PSBOb2RlLkRPQ1VNRU5UX05PREUgKQogICAgICAgICAgICByZXR1cm4g ZmFsc2U7CgogICAgICAgIC8vIGFsbCBub25lbGVtZW50IG5vZGVzIGFyZSBpbmxp bmUKICAgICAgICBpZiggbi5ub2RlVHlwZSAhPSBOb2RlLkVMRU1FTlRfTk9ERSAp CiAgICAgICAgICAgIHJldHVybiBuOwoKICAgICAgICAvLyBiciBlbGVtZW50cyBh cmUgbm90IGlubGluZQogICAgICAgIGlmKCBuLnRhZ05hbWUgJiYgbi50YWdOYW1l LnRvTG93ZXJDYXNlKCkgPT0gImJyIiApCiAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKCiAgICAgICAgLy8gZXhhbWluZSB0aGUgc3R5bGUgcHJvcGVydHkgb2YgdGhl IGlubGluZSBuCiAgICAgICAgdmFyIGRpc3BsYXkgPSBET00uZ2V0U3R5bGUoIG4s ICJkaXNwbGF5IiApOyAKICAgICAgICBpZiggZGlzcGxheSAmJiBkaXNwbGF5Lmlu ZGV4T2YoICJpbmxpbmUiICkgPj0gMCApIAogICAgICAgICAgICByZXR1cm4gbjsK ICAgIH0sCiAgICAKICAgIAogICAgaXNUZXh0Tm9kZTogZnVuY3Rpb24oIG4gKSB7 CiAgICAgICAgaWYoIG4ubm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREUgKQogICAg ICAgICAgICByZXR1cm4gbjsKICAgIH0sCiAgICAKICAgIAogICAgaXNJbmxpbmVU ZXh0Tm9kZTogZnVuY3Rpb24oIG4gKSB7CiAgICAgICAgaWYoIG4ubm9kZVR5cGUg PT0gTm9kZS5URVhUX05PREUgKQogICAgICAgICAgICByZXR1cm4gbjsKICAgICAg ICBpZiggIURPTS5pc0lubGluZU5vZGUoIG4gKSApCiAgICAgICAgICAgIHJldHVy biBudWxsOwogICAgfSwKCgogICAgLyogdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBj bGFzc25hbWUgZnVuY3Rpb25zIGhvbm9yIHczYyBjYXNlLXNlbnNpdGl2ZSBjbGFz c25hbWVzICovCgogICAgZ2V0Q2xhc3NOYW1lczogZnVuY3Rpb24oIGUgKSB7CiAg ICAgICAgaWYoICFlIHx8ICFlLmNsYXNzTmFtZSApCiAgICAgICAgICAgIHJldHVy biBbXTsKICAgICAgICByZXR1cm4gZS5jbGFzc05hbWUuc3BsaXQoIC9ccysvZyAp OwogICAgfSwKCgogICAgaGFzQ2xhc3NOYW1lOiBmdW5jdGlvbiggZSwgY2xhc3NO YW1lICkgewogICAgICAgIGlmKCAhZSB8fCAhZS5jbGFzc05hbWUgKQogICAgICAg ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgdmFyIGNzID0gRE9NLmdldENsYXNz TmFtZXMoIGUgKTsKICAgICAgICBmb3IoIHZhciBpID0gMDsgaSA8IGNzLmxlbmd0 aDsgaSsrICkgewogICAgICAgICAgICBpZiggY3NbIGkgXSA9PSBjbGFzc05hbWUg KQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAg IHJldHVybiBmYWxzZTsKICAgIH0sCgoKICAgIGFkZENsYXNzTmFtZTogZnVuY3Rp b24oIGUsIGNsYXNzTmFtZSApIHsKICAgICAgICBpZiggIWUgfHwgIWNsYXNzTmFt ZSApCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB2YXIgY3MgPSBE T00uZ2V0Q2xhc3NOYW1lcyggZSApOwogICAgICAgIGZvciggdmFyIGkgPSAwOyBp IDwgY3MubGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgIGlmKCBjc1sgaSBdID09 IGNsYXNzTmFtZSApCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg ICB9CiAgICAgICAgY3MucHVzaCggY2xhc3NOYW1lICk7CiAgICAgICAgZS5jbGFz c05hbWUgPSBjcy5qb2luKCAiICIgKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAg ICB9LAoKCiAgICByZW1vdmVDbGFzc05hbWU6IGZ1bmN0aW9uKCBlLCBjbGFzc05h bWUgKSB7CiAgICAgICAgdmFyIHIgPSBmYWxzZTsKICAgICAgICBpZiggIWUgfHwg IWUuY2xhc3NOYW1lIHx8ICFjbGFzc05hbWUgKQogICAgICAgICAgICByZXR1cm4g cjsKICAgICAgICB2YXIgY3MgPSAoZS5jbGFzc05hbWUgJiYgZS5jbGFzc05hbWUu bGVuZ3RoKQogICAgICAgICAgICA/IGUuY2xhc3NOYW1lLnNwbGl0KCAvXHMrL2cg KQogICAgICAgICAgICA6IFtdOwogICAgICAgIHZhciBuY3MgPSBbXTsKICAgICAg ICBmb3IoIHZhciBpID0gMDsgaSA8IGNzLmxlbmd0aDsgaSsrICkgewogICAgICAg ICAgICBpZiggY3NbIGkgXSA9PSBjbGFzc05hbWUgKSB7CiAgICAgICAgICAgICAg ICByID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg ICB9CiAgICAgICAgICAgIG5jcy5wdXNoKCBjc1sgaSBdICk7CiAgICAgICAgfQog ICAgICAgIGlmKCByICkKICAgICAgICAgICAgZS5jbGFzc05hbWUgPSBuY3Muam9p biggIiAiICk7CiAgICAgICAgcmV0dXJuIHI7CiAgICB9LAogICAgCiAgICAKICAg IC8qIHRyZWUgbWFuaXB1bGF0aW9uIG1ldGhvZHMgKi8KICAgIAogICAgcmVwbGFj ZVdpdGhDaGlsZE5vZGVzOiBmdW5jdGlvbiggbiApIHsKICAgICAgICB2YXIgZmly c3RDaGlsZCA9IG4uZmlyc3RDaGlsZDsKICAgICAgICB2YXIgcGFyZW50Tm9kZSA9 IG4ucGFyZW50Tm9kZTsKICAgICAgICB3aGlsZSggbi5maXJzdENoaWxkICkKICAg ICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIG4ucmVtb3ZlQ2hpbGQo IG4uZmlyc3RDaGlsZCApLCBuICk7CiAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVD aGlsZCggbiApOwogICAgICAgIHJldHVybiBmaXJzdENoaWxkOwogICAgfSwKICAg IAogICAgCiAgICAvKiBmYWN0b3J5IG1ldGhvZHMgKi8KICAgIAogICAgY3JlYXRl SW52aXNpYmxlSW5wdXQ6IGZ1bmN0aW9uKCBkICkgewogICAgICAgIGlmKCAhZCAp CiAgICAgICAgICAgIGQgPSB3aW5kb3cuZG9jdW1lbnQ7CiAgICAgICAgdmFyIGUg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7CiAgICAgICAgZS5z ZXRBdHRyaWJ1dGUoICJhdXRvY29tcGxldGUiLCAib2ZmIiApOwogICAgICAgIGUu YXV0b2NvbXBsZXRlID0gIm9mZiI7CiAgICAgICAgRE9NLm1ha2VJbnZpc2libGUo IGUgKTsKICAgICAgICByZXR1cm4gZTsKICAgIH0sCgoKICAgIGdldE1vdXNlRXZl bnRBdHRyaWJ1dGU6IGZ1bmN0aW9uKCBldmVudCwgYSApIHsKICAgICAgICBpZigg IWEgKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIGVzID0gRE9NLmdl dEFuY2VzdG9ycyggZXZlbnQudGFyZ2V0LCB0cnVlICk7CiAgICAgICAgZm9yKCB2 YXIgaSA9IDA7IGkgPCBlcy5sZW5ndGg7IGkrKyApIHsKICAgICAgICAgICAgdHJ5 IHsKICAgICAgICAgICAgICAgIHZhciBlID0gZXNbIGkgXQogICAgICAgICAgICAg ICAgdmFyIHYgPSBlLmdldEF0dHJpYnV0ZSA/IGUuZ2V0QXR0cmlidXRlKCBhICkg OiBudWxsOwogICAgICAgICAgICAgICAgaWYoIHYgKSB7CiAgICAgICAgICAgICAg ICAgICAgZXZlbnQuYXR0cmlidXRlRWxlbWVudCA9IGU7CiAgICAgICAgICAgICAg ICAgICAgZXZlbnQuYXR0cmlidXRlID0gdjsKICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gdjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCgg ZSApIHt9CiAgICAgICAgfQogICAgfSwKICAgIAoKICAgIHNldEVsZW1lbnRBdHRy aWJ1dGU6IGZ1bmN0aW9uKCBlLCBhLCB2ICkgewogICAgICAgIC8qIHNhZmFyaSB3 b3JrYXJvdW5kCiAgICAgICAgICogc2FmYXJpJ3Mgc2V0QXR0cmlidXRlIGFzc3Vt ZXMgeW91IHdhbnQgdG8gdXNlIGEgbmFtZXNwYWNlCiAgICAgICAgICogd2hlbiB5 b3UgaGF2ZSBhIGNvbG9uIGluIHlvdXIgYXR0cmlidXRlCiAgICAgICAgICovCiAg ICAgICAgaWYgKCBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0 Y2goL3dlYmtpdC8pICkgewogICAgICAgICAgICB2YXIgYXQgPSBlLmF0dHJpYnV0 ZXM7CiAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGF0Lmxlbmd0aDsg aSsrICkKICAgICAgICAgICAgICAgIGlmICggYXRbIGkgXS5uYW1lID09IGEgKQog ICAgICAgICAgICAgICAgICAgIHJldHVybiBhdFsgaSBdLm5vZGVWYWx1ZSA9IHY7 CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKCBhLCB2 ICk7CiAgICB9LAoKCiAgICBzd2FwQXR0cmlidXRlczogZnVuY3Rpb24oIGUsIHRn LCBhdCApIHsKICAgICAgICB2YXIgYXIgPSBlLmdldEF0dHJpYnV0ZSggdGcgKTsK ICAgICAgICBpZiggIWFyICkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICAgIAogICAgICAgIC8qIGNsb25lIHRoZSBub2RlIHdpdGggYWxsIGNoaWxkcmVu ICovCiAgICAgICAgaWYgKCBlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnc2Ny aXB0JyApIHsKICAgICAgICAgICAgLyogb25seSBjbG9uZSBhbmQgcmVwbGFjZSBz Y3JpcHQgdGFncyAqLwogICAgICAgICAgICB2YXIgY2wgPSBlLmNsb25lTm9kZSgg dHJ1ZSApOwogICAgICAgICAgICBpZiAoICFjbCApCiAgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CgogICAgICAgICAgICBET00uc2V0RWxlbWVudEF0dHJpYnV0 ZSggY2wsIGF0LCBhciApOwogICAgICAgICAgICBjbC5yZW1vdmVBdHRyaWJ1dGUo IHRnICk7CiAgICAgICAgCiAgICAgICAgICAgIC8qIHJlcGxhY2UgbmV3LCBvbGQg Ki8KICAgICAgICAgICAgcmV0dXJuIGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQo IGNsLCBlICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgRE9NLnNldEVs ZW1lbnRBdHRyaWJ1dGUoIGUsIGF0LCBhciApOwogICAgICAgICAgICBlLnJlbW92 ZUF0dHJpYnV0ZSggdGcgKTsKICAgICAgICB9CiAgICB9LAoKCiAgICBmaW5kUG9z WDogZnVuY3Rpb24oIGUgKSB7CiAgICAgICAgdmFyIGN1cmxlZnQgPSAwOwoKICAg ICAgICBpZiAoZS5vZmZzZXRQYXJlbnQpIHsKICAgICAgICAgICAgd2hpbGUgKDEp IHsKICAgICAgICAgICAgICAgIGN1cmxlZnQgKz0gZS5vZmZzZXRMZWZ0OwogICAg ICAgICAgICAgICAgaWYgKCFlLm9mZnNldFBhcmVudCkgewogICAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ZSA9IGUub2Zmc2V0UGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNl IGlmIChlLngpIHsKICAgICAgICAgICAgY3VybGVmdCArPSBlLng7CiAgICAgICAg fQoKICAgICAgICByZXR1cm4gY3VybGVmdDsKICAgIH0sCgoKICAgIGZpbmRQb3NZ OiBmdW5jdGlvbiggZSApIHsKICAgICAgICB2YXIgY3VydG9wID0gMDsKCiAgICAg ICAgaWYgKGUub2Zmc2V0UGFyZW50KSB7CiAgICAgICAgICAgIHdoaWxlICgxKSB7 CiAgICAgICAgICAgICAgICBjdXJ0b3AgKz0gZS5vZmZzZXRUb3A7CiAgICAgICAg ICAgICAgICBpZiAoIWUub2Zmc2V0UGFyZW50KSB7CiAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlID0g ZS5vZmZzZXRQYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYg KGUueSkgewogICAgICAgICAgICBjdXJ0b3AgKz0gZS55OwogICAgICAgIH0KCiAg ICAgICAgcmV0dXJuIGN1cnRvcDsKICAgIH0KICAgIAogICAgCn0gKTsKCgokID0g RE9NLmdldEVsZW1lbnQ7CnZhciBIVFRQUmVxID0gbmV3IE9iamVjdDsKCkhUVFBS ZXEuY3JlYXRlID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHh0cjsKICAgIHZhciBl eDsKCiAgICBpZiAodHlwZW9mKFhNTEh0dHBSZXF1ZXN0KSAhPSAidW5kZWZpbmVk IikgewogICAgICAgIHh0ciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgfSBl bHNlIHsKICAgICAgICB0cnkgewogICAgICAgICAgICB4dHIgPSBuZXcgQWN0aXZl WE9iamVjdCgiTXN4bWwyLlhNTEhUVFAuNC4wIik7CiAgICAgICAgfSBjYXRjaCAo ZXgpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHh0ciA9IG5l dyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOwogICAgICAgICAgICB9 IGNhdGNoIChleCkgewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAg IC8vIGxldCBtZSBleHBsYWluIHRoaXMuICBPcGVyYSA4IGRvZXMgWE1MSHR0cFJl cXVlc3QsIGJ1dCBub3Qgc2V0UmVxdWVzdEhlYWRlci4KICAgIC8vIG5vIHByb2Js ZW0sIHdlIHRob3VnaHQ6ICB3ZSdsbCB0ZXN0IGZvciBzZXRSZXF1ZXN0SGVhZGVy IGFuZCBpZiBpdCdzIG5vdCBwcmVzZW50CiAgICAvLyB0aGVuIGZhbGwgYmFjayB0 byB0aGUgb2xkIGJlaGF2aW9yICh0cmVhdCBpdCBhcyBub3Qgd29ya2luZykuICBC VVQgLS0tIElFNiB3b24ndAogICAgLy8gbGV0IHlvdSBldmVuIHRlc3QgZm9yIHNl dFJlcXVlc3RIZWFkZXIgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24gKHlv dSBuZWVkCiAgICAvLyB0byBjYWxsIC5vcGVuIG9uIHRoZSAueHRyIGZpcnN0IG9y IHNvbWV0aGluZykKICAgIHRyeSB7CiAgICAgICAgaWYgKHh0ciAmJiAhIHh0ci5z ZXRSZXF1ZXN0SGVhZGVyKQogICAgICAgICAgICB4dHIgPSBudWxsOwogICAgfSBj YXRjaCAoZXgpIHsgfQoKICAgIHJldHVybiB4dHI7Cn07CgovLyBvcHRzOgovLyB1 cmwsIG9uRXJyb3IsIG9uRGF0YSwgbWV0aG9kIChHRVQgb3IgUE9TVCksIGRhdGEK Ly8gdXJsOiB3aGVyZSB0byBnZXQvcG9zdCB0bwovLyBvbkVycm9yOiBjYWxsYmFj ayBvbiBlcnJvcgovLyBvbkRhdGE6IGNhbGxiYWNrIG9uIGRhdGEgcmVjZWl2ZWQK Ly8gbWV0aG9kOiBIVFRQIG1ldGhvZCwgR0VUIGJ5IGRlZmF1bHQKLy8gZGF0YTog d2hhdCB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIgKHVybGVuY29kZWQpCkhUVFBSZXEu Z2V0SlNPTiA9IGZ1bmN0aW9uIChvcHRzKSB7CiAgICB2YXIgcmVxID0gSFRUUFJl cS5jcmVhdGUoKTsKICAgIGlmICghIHJlcSkgewogICAgICAgIGlmIChvcHRzLm9u RXJyb3IpIG9wdHMub25FcnJvcigibm94bWxodHRwcmVxdWVzdCIpOwogICAgICAg IHJldHVybjsKICAgIH0KCiAgICB2YXIgc3RhdGVfY2FsbGJhY2sgPSBmdW5jdGlv biAoKSB7CiAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlICE9IDQpIHJldHVybjsK CiAgICAgICAgaWYgKHJlcS5zdGF0dXMgIT0gMjAwKSB7CiAgICAgICAgICAgIGlm IChvcHRzLm9uRXJyb3IpIG9wdHMub25FcnJvcihyZXEuc3RhdHVzID8gInN0YXR1 czogIiArIHJlcS5zdGF0dXMgOiAibm8gZGF0YSIpOwogICAgICAgICAgICByZXR1 cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVzT2JqOwogICAgICAgIHZhciBl OwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGV2YWwoInJlc09iaiA9ICIgKyBy ZXEucmVzcG9uc2VUZXh0ICsgIjsiKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAg ICAgICAgfQoKICAgICAgICBpZiAoZSB8fCAhIHJlc09iaikgewogICAgICAgICAg ICBpZiAob3B0cy5vbkVycm9yKQogICAgICAgICAgICAgICAgb3B0cy5vbkVycm9y KCJFcnJvciBwYXJzaW5nIHJlc3BvbnNlOiBcIiIgKyByZXEucmVzcG9uc2VUZXh0 ICsgIlwiIik7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAg ICBpZiAob3B0cy5vbkRhdGEpCiAgICAgICAgICAgIG9wdHMub25EYXRhKHJlc09i aik7CiAgICB9OwoKICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBzdGF0ZV9j YWxsYmFjazsKCiAgICB2YXIgbWV0aG9kID0gb3B0cy5tZXRob2QgfHwgIkdFVCI7 CiAgICB2YXIgZGF0YSA9IG9wdHMuZGF0YSB8fCBudWxsOwoKICAgIHZhciB1cmwg PSBvcHRzLnVybDsKICAgIGlmIChvcHRzLm1ldGhvZCA9PSAiR0VUIiAmJiBvcHRz LmRhdGEpIHsKICAgICAgICB1cmwgKz0gdXJsLm1hdGNoKC9cPy8pID8gIiYiIDog Ij8iOwogICAgICAgIHVybCArPSBvcHRzLmRhdGEKICAgIH0KCiAgICB1cmwgKz0g dXJsLm1hdGNoKC9cPy8pID8gIiYiIDogIj8iOwogICAgdXJsICs9ICJfcmFuZD0i ICsgTWF0aC5yYW5kb20oKTsKCiAgICByZXEub3BlbihtZXRob2QsIHVybCwgdHJ1 ZSk7CgogICAgLy8gd2Ugc2hvdWxkIHNlbmQgbnVsbCB1bmxlc3Mgd2UncmUgaW4g YSBQT1NUCiAgICB2YXIgdG9fc2VuZCA9IG51bGw7CgogICAgaWYgKG1ldGhvZC50 b1VwcGVyQ2FzZSgpID09ICJQT1NUIikgewogICAgICAgIHJlcS5zZXRSZXF1ZXN0 SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11 cmxlbmNvZGVkIik7CiAgICAgICAgdG9fc2VuZCA9IGRhdGE7CiAgICB9CgogICAg cmVxLnNlbmQodG9fc2VuZCk7Cn07CgpIVFRQUmVxLmZvcm1FbmNvZGVkID0gZnVu Y3Rpb24gKHZhcnMpIHsKICAgIHZhciBlbmMgPSBbXTsKICAgIHZhciBlOwogICAg Zm9yICh2YXIga2V5IGluIHZhcnMpIHsKICAgICAgICB0cnkgewogICAgICAgICAg ICBlbmMucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICI9IiArIGVuY29k ZVVSSUNvbXBvbmVudCh2YXJzW2tleV0pKTsKICAgICAgICB9IGNhdGNoKCBlICkg e30KICAgIH0KICAgIHJldHVybiBlbmMuam9pbigiJiIpOwoKfTsKCi8vIFRoaXMg ZmlsZSBjb250YWlucyBnZW5lcmFsLXB1cnBvc2UgTEogY29kZQoKdmFyIExpdmVK b3VybmFsID0gbmV3IE9iamVjdDsKCi8vIFRoZSBob29rIG1hcHBpbmdzCkxpdmVK b3VybmFsLmhvb2tzID0ge307CgpMaXZlSm91cm5hbC5yZWdpc3Rlcl9ob29rID0g ZnVuY3Rpb24gKGhvb2ssIGZ1bmMpIHsKICAgIGlmICghIExpdmVKb3VybmFsLmhv b2tzW2hvb2tdKQogICAgICAgIExpdmVKb3VybmFsLmhvb2tzW2hvb2tdID0gW107 CgogICAgTGl2ZUpvdXJuYWwuaG9va3NbaG9va10ucHVzaChmdW5jKTsKfTsKCi8v IGFyZ3M6IGhvb2ssIHBhcmFtcyB0byBwYXNzIHRvIGhvb2sKTGl2ZUpvdXJuYWwu cnVuX2hvb2sgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgYSA9IGFyZ3VtZW50czsK CiAgICB2YXIgaG9va2Z1bmNzID0gTGl2ZUpvdXJuYWwuaG9va3NbYVswXV07CiAg ICBpZiAoIWhvb2tmdW5jcyB8fCAhaG9va2Z1bmNzLmxlbmd0aCkgcmV0dXJuOwoK ICAgIHZhciBob29rYXJncyA9IFtdOwoKICAgIGZvciAodmFyIGkgPSAxOyBpIDwg YS5sZW5ndGg7IGkrKykgewogICAgICAgIGhvb2thcmdzLnB1c2goYVtpXSk7CiAg ICB9CgogICAgdmFyIHJ2ID0gbnVsbDsKCiAgICBob29rZnVuY3MuZm9yRWFjaChm dW5jdGlvbiAoaG9va2Z1bmMpIHsKICAgICAgICBydiA9IGhvb2tmdW5jLmFwcGx5 KG51bGwsIGhvb2thcmdzKTsKICAgIH0pOwoKICAgIHJldHVybiBydjsKfTsKCkxp dmVKb3VybmFsLnBhZ2VMb2FkZWQgPSBmYWxzZTsKCkxpdmVKb3VybmFsLmluaXRQ YWdlID0gZnVuY3Rpb24gKCkgewogICAgLy8gb25seSBydW4gb25jZQogICAgaWYg KExpdmVKb3VybmFsLnBhZ2VMb2FkZWQpCiAgICAgICAgcmV0dXJuOwogICAgTGl2 ZUpvdXJuYWwucGFnZUxvYWRlZCA9IDE7CgogICAgLy8gc2V0IHVwIHZhcmlvdXMg aGFuZGxlcnMgZm9yIGV2ZXJ5IHBhZ2UKICAgIExpdmVKb3VybmFsLmluaXRQbGFj ZWhvbGRlcnMoKTsKICAgIExpdmVKb3VybmFsLmluaXRMYWJlbHMoKTsKICAgIExp dmVKb3VybmFsLmluaXRJbmJveFVwZGF0ZSgpOwogICAgTGl2ZUpvdXJuYWwuaW5p dEFkcygpOwogICAgTGl2ZUpvdXJuYWwuaW5pdFBvbGxzKCk7CgogICAgLy8gcnVu IG90aGVyIGhvb2tzCiAgICBMaXZlSm91cm5hbC5ydW5faG9vaygicGFnZV9sb2Fk Iik7Cn07CgovLyBTZXQgdXAgdHdvIGRpZmZlcmVudCB3YXlzIHRvIHRlc3QgaWYg dGhlIHBhZ2UgaXMgbG9hZGVkIHlldC4KLy8gVGhlIHByb3BlciB3YXkgaXMgdXNp bmcgRE9NQ29udGVudExvYWRlZCwgYnV0IG9ubHkgTW96aWxsYSBzdXBwb3J0cyBp dC4KewogICAgLy8gT3RoZXJzCiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih3aW5k b3csICJsb2FkIiwgTGl2ZUpvdXJuYWwuaW5pdFBhZ2UpOwoKICAgIC8vIE1vemls bGEKICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdywgIkRPTUNvbnRlbnRM b2FkZWQiLCBMaXZlSm91cm5hbC5pbml0UGFnZSk7Cn0KCi8vIFNldCB1cCBhIHRp bWVyIHRvIGtlZXAgdGhlIGluYm94IGNvdW50IHVwZGF0ZWQKTGl2ZUpvdXJuYWwu aW5pdEluYm94VXBkYXRlID0gZnVuY3Rpb24gKCkgewogICAgLy8gRG9uJ3QgcnVu IGlmIG5vdCBsb2dnZWQgaW4gb3IgdGhpcyBpcyBkaXNhYmxlZAogICAgaWYgKCEg U2l0ZSB8fCAhIFNpdGUuaGFzX3JlbW90ZSB8fCAhIFNpdGUuaW5ib3hfdXBkYXRl X3BvbGwpIHJldHVybjsKCiAgICAvLyBEb24ndCBydW4gaWYgbm8gaW5ib3ggY291 bnQKICAgIHZhciB1bnJlYWQgPSAkKCJMSl9JbmJveF9VbnJlYWRfQ291bnQiKTsK ICAgIGlmICghIHVucmVhZCkgcmV0dXJuOwoKICAgIC8vIFVwZGF0ZSBldmVyeSBm aXZlIG1pbnV0ZXMKICAgIHdpbmRvdy5zZXRJbnRlcnZhbChMaXZlSm91cm5hbC51 cGRhdGVJbmJveCwgMTAwMCAqIDYwICogNSk7Cn07CgovLyBEbyBBSkFYIHJlcXVl c3QgdG8gZmluZCB0aGUgbnVtYmVyIG9mIHVucmVhZCBpdGVtcyBpbiB0aGUgaW5i b3gKTGl2ZUpvdXJuYWwudXBkYXRlSW5ib3ggPSBmdW5jdGlvbiAoKSB7CiAgICB2 YXIgcG9zdERhdGEgPSB7CiAgICAgICAgImFjdGlvbiI6ICJnZXRfdW5yZWFkX2l0 ZW1zIgogICAgfTsKCiAgICB2YXIgb3B0cyA9IHsKICAgICAgICAiZGF0YSI6IEhU VFBSZXEuZm9ybUVuY29kZWQocG9zdERhdGEpLAogICAgICAgICJtZXRob2QiOiAi UE9TVCIsCiAgICAgICAgIm9uRGF0YSI6IExpdmVKb3VybmFsLmdvdEluYm94VXBk YXRlCiAgICB9OwoKICAgIG9wdHMudXJsID0gU2l0ZS5jdXJyZW50Sm91cm5hbCA/ ICIvIiArIFNpdGUuY3VycmVudEpvdXJuYWwgKyAiL19fcnBjX2Vzbl9pbmJveCIg OiAiL19fcnBjX2Vzbl9pbmJveCI7CgogICAgSFRUUFJlcS5nZXRKU09OKG9wdHMp Owp9OwoKLy8gV2UgcmVjZWl2ZWQgdGhlIG51bWJlciBvZiB1bnJlYWQgaW5ib3gg aXRlbXMgZnJvbSB0aGUgc2VydmVyCkxpdmVKb3VybmFsLmdvdEluYm94VXBkYXRl ID0gZnVuY3Rpb24gKHJlc3ApIHsKICAgIGlmICghIHJlc3AgfHwgcmVzcC5lcnJv cikgcmV0dXJuOwoKICAgIHZhciB1bnJlYWQgPSAkKCJMSl9JbmJveF9VbnJlYWRf Q291bnQiKTsKICAgIGlmICghIHVucmVhZCkgcmV0dXJuOwoKICAgIHVucmVhZC5p bm5lckhUTUwgPSByZXNwLnVucmVhZF9jb3VudCA/ICIgICgiICsgcmVzcC51bnJl YWRfY291bnQgKyAiKSIgOiAiIjsKfTsKCi8vIFNlYXJjaCBmb3IgcGxhY2Vob2xk ZXJzIGFuZCBpbml0aWFsaXplIHRoZW0KTGl2ZUpvdXJuYWwuaW5pdFBsYWNlaG9s ZGVycyA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBwbGFjZWhvbGRlcnMgPSBET00u Z2V0RWxlbWVudHNCeVRhZ0FuZENsYXNzTmFtZShkb2N1bWVudCwgImltZyIsICJM Sl9QbGFjZWhvbGRlciIpIHx8IFtdOwoKICAgIEFycmF5LnByb3RvdHlwZS5mb3JF YWNoLmNhbGwocGxhY2Vob2xkZXJzLCBmdW5jdGlvbiAocGxhY2Vob2xkZXIpIHsK ICAgICAgICB2YXIgcGFyZW50ID0gRE9NLmdldEZpcnN0QW5jZXN0b3JCeUNsYXNz TmFtZShwbGFjZWhvbGRlciwgIkxKX1BsYWNlaG9sZGVyX0NvbnRhaW5lciIsIGZh bHNlKTsKICAgICAgICBpZiAoIXBhcmVudCkgcmV0dXJuOwoKICAgICAgICB2YXIg Y29udGFpbmVyID0gRE9NLmZpbHRlckVsZW1lbnRzQnlDbGFzc05hbWUocGFyZW50 LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYiKSwgIkxKX0NvbnRhaW5lciIpWzBd OwogICAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm47CgogICAgICAgIHZhciBo dG1sID0gRE9NLmZpbHRlckVsZW1lbnRzQnlDbGFzc05hbWUocGFyZW50LmdldEVs ZW1lbnRzQnlUYWdOYW1lKCJkaXYiKSwgIkxKX1BsYWNlaG9sZGVyX0hUTUwiKVsw XTsKICAgICAgICBpZiAoIWh0bWwpIHJldHVybjsKCiAgICAgICAgdmFyIHBsYWNl aG9sZGVyX2h0bWwgPSB1bmVzY2FwZShodG1sLmlubmVySFRNTCk7CgogICAgICAg IHZhciBwbGFjZWhvbGRlckNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7CiAg ICAgICAgICAgIEV2ZW50LnN0b3AoZSk7CiAgICAgICAgICAgIC8vIGhhdmUgdG8g d3JhcCBwbGFjZWhvbGRlcl9odG1sIGluIGFub3RoZXIgYmxvY2ssIElFIGlzIHdl aXJkCiAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiPHNwYW4+IiAr IHBsYWNlaG9sZGVyX2h0bWwgKyAiPC9zcGFuPiI7CiAgICAgICAgICAgIERPTS5t YWtlSW52aXNpYmxlKHBsYWNlaG9sZGVyKTsKICAgICAgICB9OwoKICAgICAgICBE T00uYWRkRXZlbnRMaXN0ZW5lcihwbGFjZWhvbGRlciwgImNsaWNrIiwgcGxhY2Vo b2xkZXJDbGlja0hhbmRsZXIpOwoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9 KTsKfTsKCi8vIHNldCB1cCBsYWJlbHMgZm9yIFNhZmFyaQpMaXZlSm91cm5hbC5p bml0TGFiZWxzID0gZnVuY3Rpb24gKCkgewogICAgLy8gZGlzYWJsZWQgYmVjYXVz ZSBuZXcgd2Via2l0IGhhcyBsYWJlbHMgdGhhdCB3b3JrCiAgICByZXR1cm47Cgog ICAgLy8gc2FmYXJpIGRvZXNuJ3Qga25vdyB3aGF0IDxsYWJlbD4gdGFncyBhcmUs IGxldHMgZml4IHRoZW0KICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4 T2YoJ1NhZmFyaScpID09IC0xKSByZXR1cm47CgogICAgLy8gZ2V0IGFsbCBsYWJl bHMKICAgIHZhciBsYWJlbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt ZSgibGFiZWwiKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5n dGg7IGkrKykgewogICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGxhYmVsc1tp XSwgImNsaWNrIiwgTGl2ZUpvdXJuYWwubGFiZWxDbGlja0hhbmRsZXIpOwogICAg fQp9OwoKTGl2ZUpvdXJuYWwubGFiZWxDbGlja0hhbmRsZXIgPSBmdW5jdGlvbiAo ZXZ0KSB7CiAgICBFdmVudC5wcmVwKGV2dCk7CgogICAgdmFyIGxhYmVsID0gRE9N LmdldEFuY2VzdG9yc0J5VGFnTmFtZShldnQudGFyZ2V0LCAibGFiZWwiLCB0cnVl KVswXTsKICAgIGlmICghIGxhYmVsKSByZXR1cm47CgogICAgdmFyIHRhcmdldElk ID0gbGFiZWwuZ2V0QXR0cmlidXRlKCJmb3IiKTsKICAgIGlmICghIHRhcmdldElk KSByZXR1cm47CgogICAgdmFyIHRhcmdldCA9ICQodGFyZ2V0SWQpOwogICAgaWYg KCEgdGFyZ2V0KSByZXR1cm47CgogICAgdGFyZ2V0LmNsaWNrKCk7CgogICAgcmV0 dXJuIGZhbHNlOwp9OwoKLy8gY2hhbmdlIGRyc2MgdG8gc3JjIGZvciBhZHMKTGl2 ZUpvdXJuYWwuaW5pdEFkcyA9IGZ1bmN0aW9uICgpIHsKICAgIEFkRW5naW5lLmlu aXQoKTsKfTsKCi8vIGhhbmR5IHV0aWxpdGllcyB0byBjcmVhdGUgZWxlbWVudHMg d2l0aCBqdXN0IHRleHQgaW4gdGhlbQpmdW5jdGlvbiBfdGV4dFNwYW4gKCkgeyBy ZXR1cm4gX3RleHRFbGVtZW50cygic3BhbiIsIGFyZ3VtZW50cyk7IH0KZnVuY3Rp b24gX3RleHREaXYgICgpIHsgcmV0dXJuIF90ZXh0RWxlbWVudHMoImRpdiIsIGFy Z3VtZW50cyk7ICB9CgpmdW5jdGlvbiBfdGV4dEVsZW1lbnRzIChlbGVUeXBlLCB0 eHRzKSB7CiAgICB2YXIgZWxlID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8 IHR4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgbm9kZSA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoZWxlVHlwZSk7CiAgICAgICAgbm9kZS5pbm5lckhUTUwg PSB0eHRzW2ldOwogICAgICAgIGVsZS5wdXNoKG5vZGUpOwogICAgfQoKICAgIHJl dHVybiBlbGUubGVuZ3RoID09IDEgPyBlbGVbMF0gOiBlbGU7Cn07Cgp2YXIgUG9s bFBhZ2VzID0gewogICAgImhvdXJnbGFzcyI6IG51bGwKfTsKCkxpdmVKb3VybmFs LmluaXRQb2xscyA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBwb2xsTGlua3MgPSBE T00uZ2V0RWxlbWVudHNCeVRhZ0FuZENsYXNzTmFtZShkb2N1bWVudCwgJ2EnLCAi TEpfUG9sbEFuc3dlckxpbmsiKSB8fCBbXTsgIAoKICAgIC8vIGF0dGFjaCBjbGlj ayBoYW5kbGVycyB0byBlYWNoIGFuc3dlciBsaW5rCiAgICBBcnJheS5wcm90b3R5 cGUuZm9yRWFjaC5jYWxsKHBvbGxMaW5rcywgZnVuY3Rpb24gKHBvbGxMaW5rKSB7 CiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIocG9sbExpbmssICJjbGljayIs IExpdmVKb3VybmFsLnBvbGxBbnN3ZXJMaW5rQ2xpY2tlZC5iaW5kRXZlbnRMaXN0 ZW5lcihwb2xsTGluaykpOwogICAgfSk7Cn07CgovLyBpbnZvY2FudCBpcyB0aGUg cG9sbExpbmsgZnJvbSBhYm92ZQpMaXZlSm91cm5hbC5wb2xsQW5zd2VyTGlua0Ns aWNrZWQgPSBmdW5jdGlvbiAoZSkgewogICAgRXZlbnQuc3RvcChlKTsKCiAgICBp ZiAoISB0aGlzIHx8ICEgdGhpcy50YWdOYW1lIHx8IHRoaXMudGFnTmFtZS50b0xv d2VyQ2FzZSgpICE9ICJhIikKICAgIHJldHVybiB0cnVlOwoKICAgIHZhciBwb2xs aWQgPSB0aGlzLmdldEF0dHJpYnV0ZSgibGpfcG9sbGlkIik7CiAgICBpZiAoISBw b2xsaWQpIHJldHVybiB0cnVlOwoKICAgIHZhciBwb2xscWlkID0gdGhpcy5nZXRB dHRyaWJ1dGUoImxqX3FpZCIpOwogICAgaWYgKCEgcG9sbHFpZCkgcmV0dXJuIHRy dWU7CgogICAgdmFyIHBhZ2UgICAgID0gdGhpcy5nZXRBdHRyaWJ1dGUoImxqX3Bh Z2UiKTsKICAgIHZhciBwYWdlc2l6ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCJsal9w YWdlc2l6ZSIpOwoKICAgIHZhciBhY3Rpb24gPSAiZ2V0X2Fuc3dlcnMiOwoKICAg IC8vIERvIGFqYXggcmVxdWVzdCB0byByZXBsYWNlIHRoZSBsaW5rIHdpdGggdGhl IGFuc3dlcnMKICAgIHZhciBwYXJhbXMgPSB7CiAgICAgICAgInBvbGxpZCIgICA6 IHBvbGxpZCwKICAgICAgICAicG9sbHFpZCIgIDogcG9sbHFpZCwKICAgICAgICAi cGFnZSIgICAgIDogcGFnZSwKICAgICAgICAicGFnZXNpemUiIDogcGFnZXNpemUs CiAgICAgICAgImFjdGlvbiIgICA6IGFjdGlvbgogICAgfTsKCiAgICB2YXIgb3B0 cyA9IHsKICAgICAgICAidXJsIiAgICA6IExpdmVKb3VybmFsLmdldEFqYXhVcmwo InBvbGwiKSwKICAgICAgICAibWV0aG9kIiA6ICJQT1NUIiwKICAgICAgICAiZGF0 YSIgICA6IEhUVFBSZXEuZm9ybUVuY29kZWQocGFyYW1zKSwKICAgICAgICAib25E YXRhIiA6IExpdmVKb3VybmFsLnBvbGxBbnN3ZXJzUmVjZWl2ZWQsCiAgICAgICAg Im9uRXJyb3IiOiBMaXZlSm91cm5hbC5hamF4RXJyb3IKICAgIH07CgogICAgSFRU UFJlcS5nZXRKU09OKG9wdHMpOwoKICAgIGlmICghUG9sbFBhZ2VzLmhvdXJnbGFz cykgewogICAgICAgIHZhciBjb29yZHMgPSBET00uZ2V0QWJzb2x1dGVDdXJzb3JQ b3NpdGlvbihlKTsKICAgICAgICBQb2xsUGFnZXMuaG91cmdsYXNzID0gbmV3IEhv dXJnbGFzcygpOwogICAgICAgIFBvbGxQYWdlcy5ob3VyZ2xhc3MuaW5pdCgpOwog ICAgICAgIFBvbGxQYWdlcy5ob3VyZ2xhc3MuaG91cmdsYXNzX2F0KGNvb3Jkcy54 LCBjb29yZHMueSk7CiAgICAgICAgUG9sbFBhZ2VzLmUgPSBlOwogICAgfQoKICAg IHJldHVybiBmYWxzZTsKfTsKCkxpdmVKb3VybmFsLnBvbGxBbnN3ZXJzUmVjZWl2 ZWQgPSBmdW5jdGlvbiAoYW5zd2VycykgewogICAgaWYgKCEgYW5zd2VycykgcmV0 dXJuIGZhbHNlOwoKICAgIGlmIChQb2xsUGFnZXMuaG91cmdsYXNzKSB7CiAgICAg ICAgUG9sbFBhZ2VzLmhvdXJnbGFzcy5oaWRlKCk7CiAgICAgICAgUG9sbFBhZ2Vz LmhvdXJnbGFzcyA9IG51bGw7CiAgICB9CgogICAgaWYgKGFuc3dlcnMuZXJyb3Ip IHJldHVybiBMaXZlSm91cm5hbC5hamF4RXJyb3IoYW5zd2Vycy5lcnJvcik7Cgog ICAgdmFyIHBvbGxpZCA9IGFuc3dlcnMucG9sbGlkOwogICAgdmFyIHBvbGxxaWQg PSBhbnN3ZXJzLnBvbGxxaWQ7CiAgICBpZiAoISBwb2xsaWQgfHwgISBwb2xscWlk KSByZXR1cm4gZmFsc2U7CiAgICB2YXIgcGFnZSAgICAgPSBhbnN3ZXJzLnBhZ2U7 CgogICAgdmFyIGFuc3dlclBhZ0VsZTsKICAgIHZhciBhbnN3ZXJFbGU7CiAgICBp ZiAocGFnZSkgewogICAgICAgIGFuc3dlclBhZ0VsZSA9IERPTS5nZXRFbGVtZW50 c0J5VGFnQW5kQ2xhc3NOYW1lKGRvY3VtZW50LCAnZGl2JywgImxqX3BvbGxhbnN3 ZXJfcGFnaW5nIilbMF07CiAgICAgICAgYW5zd2VyRWxlICAgID0gRE9NLmdldEVs ZW1lbnRzQnlUYWdBbmRDbGFzc05hbWUoZG9jdW1lbnQsICdkaXYnLCAibGpfcG9s bGFuc3dlciIpWzBdOwogICAgfSBlbHNlIHsKICAgICAgICB2YXIgbGlua0VsZSA9 ICQoIkxKX1BvbGxBbnN3ZXJMaW5rXyIgKyBwb2xsaWQgKyAiXyIgKyBwb2xscWlk KTsKICAgICAgICBpZiAoISBsaW5rRWxlKSByZXR1cm4gZmFsc2U7CgogICAgICAg IGFuc3dlclBhZ0VsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwog ICAgICAgIERPTS5hZGRDbGFzc05hbWUoYW5zd2VyUGFnRWxlLCAibGpfcG9sbGFu c3dlcl9wYWdpbmciKTsKCiAgICAgICAgYW5zd2VyRWxlID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgRE9NLmFkZENsYXNzTmFtZShhbnN3 ZXJFbGUsICJsal9wb2xsYW5zd2VyIik7CgogICAgICAgIGxpbmtFbGUucGFyZW50 Tm9kZS5pbnNlcnRCZWZvcmUoYW5zd2VyRWxlLCAgICBsaW5rRWxlKTsKICAgICAg ICBsaW5rRWxlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGFuc3dlclBhZ0VsZSwg bGlua0VsZSk7CgogICAgICAgIGxpbmtFbGUucGFyZW50Tm9kZS5yZW1vdmVDaGls ZChsaW5rRWxlKTsKICAgIH0KCiAgICBhbnN3ZXJQYWdFbGUuaW5uZXJIVE1MICA9 IGFuc3dlcnMucGFnaW5nX2h0bWwgPyBhbnN3ZXJzLnBhZ2luZ19odG1sIDogIiI7 CiAgICBhbnN3ZXJFbGUuaW5uZXJIVE1MICAgICA9IGFuc3dlcnMuYW5zd2VyX2h0 bWwgPyBhbnN3ZXJzLmFuc3dlcl9odG1sIDogIihObyBhbnN3ZXJzKSI7CgogICAg TGl2ZUpvdXJuYWwuaW5pdFBvbGxzKCk7Cn07CgovLyBnZXRzIGEgdXJsIGZvciBk b2luZyBhamF4IHJlcXVlc3RzCkxpdmVKb3VybmFsLmdldEFqYXhVcmwgPSBmdW5j dGlvbiAoYWN0aW9uKSB7CiAgICAvLyBpZiB3ZSBhcmUgb24gYSBqb3VybmFsIHN1 YmRvbWFpbiB0aGVuIG91ciB1cmwgd2lsbCBiZQogICAgLy8gL2pvdXJuYWxuYW1l L19fcnBjX2FjdGlvbiBpbnN0ZWFkIG9mIC9fX3JwY19hY3Rpb24KICAgIHJldHVy biBTaXRlLmN1cnJlbnRKb3VybmFsCiAgICAgICAgPyAiLyIgKyBTaXRlLmN1cnJl bnRKb3VybmFsICsgIi9fX3JwY18iICsgYWN0aW9uCiAgICAgICAgOiAiL19fcnBj XyIgKyBhY3Rpb247Cn07CgovLyBnZW5lcmljIGhhbmRsZXIgZm9yIGFqYXggZXJy b3JzCkxpdmVKb3VybmFsLmFqYXhFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHsKICAg IGlmIChMSl9JUFBVKSB7CiAgICAgICAgTEpfSVBQVS5zaG93Tm90ZSgiRXJyb3I6 ICIgKyBlcnIpOwogICAgfSBlbHNlIHsKICAgICAgICBhbGVydCgiRXJyb3I6ICIg KyBlcnIpOwogICAgfQp9OwoKLy8gdXRpbGl0eSBtZXRob2QgdG8gZ2V0IGFsbCBp dGVtcyBvbiB0aGUgcGFnZSB3aXRoIGEgY2VydGFpbiBjbGFzcyBuYW1lCkxpdmVK b3VybmFsLmdldERvY3VtZW50RWxlbWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0aW9u IChjbGFzc05hbWUpIHsKICB2YXIgZG9tT2JqZWN0cyA9IGRvY3VtZW50LmdldEVs ZW1lbnRzQnlUYWdOYW1lKCIqIik7CiAgdmFyIGl0ZW1zID0gRE9NLmZpbHRlckVs ZW1lbnRzQnlDbGFzc05hbWUoZG9tT2JqZWN0cywgY2xhc3NOYW1lKSB8fCBbXTsK CiAgcmV0dXJuIGl0ZW1zOwp9OwoKLy8gdXRpbGl0eSBtZXRob2QgdG8gYWRkIGFu IG9uY2xpY2sgY2FsbGJhY2sgb24gYWxsIGl0ZW1zIHdpdGggYSBjbGFzc25hbWUK TGl2ZUpvdXJuYWwuYWRkQ2xpY2tIYW5kbGVyVG9FbGVtZW50c1dpdGhDbGFzc05h bWUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGNsYXNzTmFtZSkgewogIHZhciBpdGVt cyA9IExpdmVKb3VybmFsLmdldERvY3VtZW50RWxlbWVudHNCeUNsYXNzTmFtZShj bGFzc05hbWUpOwoKICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAg ICBET00uYWRkRXZlbnRMaXN0ZW5lcihpdGVtLCAiY2xpY2siLCBjYWxsYmFjayk7 CiAgfSkKfTsKCkxpdmVKb3VybmFsLmluc2VydEFkc011bHRpID0gZnVuY3Rpb24g KHBhcmFtcykgewogIHZhciBpID0gMDsKICB2YXIgY29udGFpbmVycyA9IFtdOwoK ICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICBpZiAo ISBwYXJhbXNbaV0uaHRtbCB8fCBwYXJhbXNbaV0uaHRtbCA9PSAiPHVsPlxuPC91 bD4iKSBjb250aW51ZTsKICAgIEFkRW5naW5lLmluc2VydEFkUmVzcG9uc2UoIHBh cmFtc1tpXSApOwogICAgY29udGFpbmVycy5wdXNoKGRvY3VtZW50LmdldEVsZW1l bnRCeUlkKHBhcmFtc1tpXS5pZCkpOwogIH0KCiAgICAvLyBhZGQgdGhlIGFkIGJv eCBzdHlsZSB0byB0aGUgY29udGFpbmVycwogICAgY29udGFpbmVycy5mb3JFYWNo KGZ1bmN0aW9uIChjb250YWluZXIpIHsKICAgICAgaWYgKCEgY29udGFpbmVyKSBy ZXR1cm47CgogICAgICBET00uYWRkQ2xhc3NOYW1lKGNvbnRhaW5lci5wYXJlbnRO b2RlLCAibGpfY29udGVudF9hZCIpOwogICAgICBET00ucmVtb3ZlQ2xhc3NOYW1l KGNvbnRhaW5lci5wYXJlbnROb2RlLCAibGpfaW5hY3RpdmVfYWQiKTsKICAgIH0p Owp9OwoKLy8gZ2l2ZW4gYSBVUkwsIHBhcnNlIG91dCB0aGUgR0VUIGFyZ3MgYW5k IHJldHVybiB0aGVtIGluIGEgaGFzaApMaXZlSm91cm5hbC5wYXJzZUdldEFyZ3Mg PSBmdW5jdGlvbiAodXJsKSB7CiAgICB2YXIgZ2V0QXJnc0hhc2ggPSB7fTsKCiAg ICB2YXIgdXJsUGFydHMgPSB1cmwuc3BsaXQoIj8iKTsKICAgIGlmICghdXJsUGFy dHNbMV0pIHJldHVybiBnZXRBcmdzSGFzaDsKICAgIHZhciBnZXRBcmdzID0gdXJs UGFydHNbMV0uc3BsaXQoIiYiKTsKICAgIGZvciAodmFyIGFyZyBpbiBnZXRBcmdz KSB7CiAgICAgICAgdmFyIHBhaXIgPSBnZXRBcmdzW2FyZ10uc3BsaXQoIj0iKTsK ICAgICAgICBnZXRBcmdzSGFzaFtwYWlyWzBdXSA9IHBhaXJbMV07CiAgICB9Cgog ICAgcmV0dXJuIGdldEFyZ3NIYXNoOwp9OwovKiAKQWRFbmdpbmUKJElkOiBBZEVu Z2luZS5qcyAyMjYgMjAwNy0wOS0xOCAxODoyMDo1N1ogamFuaW5lICQKCkNvcHly aWdodCAoYykgMjAwNiwgU2l4IEFwYXJ0LCBMdGQuCkFsbCByaWdodHMgcmVzZXJ2 ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpt ZXQ6CgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodApub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCgogICAgKiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlCmNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKaW4gdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQpkaXN0 cmlidXRpb24uCgogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mICJTaXggQXBhcnQi IG5vciB0aGUgbmFtZXMgb2YgaXRzCmNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0 byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCnRoaXMg c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlU RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVApPV05FUiBPUiBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVApMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT RSwKREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZClRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFCk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiovCgpBZEVu Z2luZSA9IHsKCiAgICAvKiBjYWxsZWQgZnJvbSB3aW5kb3cub25sb2FkIE9OTFkg b24gdGhlIGxvZ2dlZCBvdXQgYmxvZyBzaWRlICh2aWV3KSAqLwogICAgaW5pdDog ZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVu dHNCeVRhZ05hbWUoICJzY3JpcHQiICk7CiAgICAgICAgZm9yICggdmFyIGkgPSAw OyBpIDwgZXMubGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgIHZhciBhciA9IGVz WyBpIF0uZ2V0QXR0cmlidXRlKCAiZGVmZXJzcmMiICk7CiAgICAgICAgICAgIGlm KCAhYXIgKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgCiAgICAg ICAgICAgIHZhciBjbCA9IGVzWyBpIF0uY2xvbmVOb2RlKCB0cnVlICk7CiAgICAg ICAgICAgIGlmICggIWNsICkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAg ICAgICAgICAgY2wuc2V0QXR0cmlidXRlKCAic3JjIiwgYXIgKTsKICAgICAgICAg ICAgY2wucmVtb3ZlQXR0cmlidXRlKCAiZGVmZXJzcmMiICk7CiAgICAgICAgCiAg ICAgICAgICAgIC8qIHJlcGxhY2UgbmV3LCBvbGQgKi8KICAgICAgICAgICAgdHJ5 IHsKICAgICAgICAgICAgICAgIGVzWyBpIF0ucGFyZW50Tm9kZS5yZXBsYWNlQ2hp bGQoIGNsLCBlc1sgaSBdICk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAg ICAgICAgfQogICAgfSwKICAgIAogICAgCiAgICBpbnNlcnRBZFJlc3BvbnNlOiBm dW5jdGlvbiggcGFyYW1zICkgewogICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoIHBhcmFtcy5pZCApOwogICAgICAgIGlmKCAhZSApCiAgICAg ICAgICAgIHJldHVybjsKICAgICAgICBpZiggcGFyYW1zLmh0bWwgKSB7CiAgICAg ICAgICAgIHZhciBlMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7 CiAgICAgICAgICAgIGUyLmlubmVySFRNTCA9IHBhcmFtcy5odG1sOwogICAgICAg ICAgICBlLmlubmVySFRNTCA9ICIiOyAvLyBjbGVhciBvbGQgY29udGVudAogICAg ICAgICAgICBlLmFwcGVuZENoaWxkKCBlMiApOwogICAgICAgIH0KICAgICAgICBp ZiggcGFyYW1zLmpzICkKICAgICAgICAgICAgcmV0dXJuIGV2YWwoICIoIiArIHBh cmFtcy5qcyArICIpIiApOwogICAgfSwKCiAgICBpbnNlcnRBZHNNdWx0aTogZnVu Y3Rpb24oIHBhcmFtcyApIHsKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgZm9y IChpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBB ZEVuZ2luZS5pbnNlcnRBZFJlc3BvbnNlKCBwYXJhbXNbaV0gKTsKICAgICAgICB9 CiAgICB9Cgp9Owp2YXIgRVNOID0gbmV3IE9iamVjdCgpOwoKTGl2ZUpvdXJuYWwu cmVnaXN0ZXJfaG9vaygicGFnZV9sb2FkIiwgZnVuY3Rpb24gKCkgewogIEVTTi5p bml0Q2hlY2tBbGxCdG5zKCk7CiAgRVNOLmluaXRFdmVudENoZWNrQnRucygpOwog IEVTTi5pbml0VHJhY2tCdG5zKCk7Cn0pOwoKLy8gV2hlbiBwYWdlIGxvYWRzLCBz ZXQgdXAgImNoZWNrIGFsbCIgY2hlY2tib3hlcwpFU04uaW5pdENoZWNrQWxsQnRu cyA9IGZ1bmN0aW9uICgpIHsKICB2YXIgbnRpZHMgID0gJCgibnR5cGVpZHMiKTsK ICB2YXIgY2F0aWRzID0gJCgiY2F0aWRzIik7CgogIGlmICghbnRpZHMgfHwgIWNh dGlkcykKICAgIHJldHVybjsKCiAgbnRpZExpc3QgID0gbnRpZHMudmFsdWU7CiAg Y2F0aWRMaXN0ID0gY2F0aWRzLnZhbHVlOwoKICBpZiAoIW50aWRMaXN0IHx8ICFj YXRpZExpc3QpCiAgICByZXR1cm47CgogIG50aWRzICA9IG50aWRMaXN0LnNwbGl0 KCIsIik7CiAgY2F0aWRzID0gY2F0aWRMaXN0LnNwbGl0KCIsIik7CgogIGNhdGlk cy5mb3JFYWNoKCBmdW5jdGlvbiAoY2F0aWQpIHsKICAgIG50aWRzLmZvckVhY2go IGZ1bmN0aW9uIChudHlwZWlkKSB7CiAgICAgIHZhciBjbGFzc05hbWUgPSAiU3Vi c2NyaWJlQ2hlY2tib3gtIiArIGNhdGlkICsgIi0iICsgbnR5cGVpZDsKCiAgICAg IHZhciBjYWIgPSBuZXcgQ2hlY2thbGxCdXR0b24oKTsKICAgICAgY2FiLmluaXQo ewogICAgICAgICJjbGFzcyI6IGNsYXNzTmFtZSwKICAgICAgICAgICJidXR0b24i OiAkKCJDaGVja0FsbC0iICsgY2F0aWQgKyAiLSIgKyBudHlwZWlkKSwKICAgICAg ICAgICJwYXJlbnQiOiAkKCJDYXRlZ29yeVJvdy0iICsgY2F0aWQpCiAgICAgICAg ICB9KTsKICAgIH0pOwogIH0pOwp9CgovLyBzZXQgdXAgYXV0byBzaG93L2hpZGlu ZyBvZiBub3RpZmljYXRpb24gbWV0aG9kcwpFU04uaW5pdEV2ZW50Q2hlY2tCdG5z ID0gZnVuY3Rpb24gKCkgewogIHZhciB2aWV3T2JqZWN0cyA9IGRvY3VtZW50Lmdl dEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CiAgdmFyIGJveGVzID0gRE9NLmZpbHRl ckVsZW1lbnRzQnlDbGFzc05hbWUodmlld09iamVjdHMsICJTdWJzY3JpcHRpb25J bmJveENoZWNrIikgfHwgW107CgogIGJveGVzLmZvckVhY2goIGZ1bmN0aW9uIChi b3gpIHsKICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGJveCwgImNsaWNrIiwgRVNO LmV2ZW50Q2hlY2tlZC5iaW5kRXZlbnRMaXN0ZW5lcigpKTsKICB9KTsKfQoKRVNO LmV2ZW50Q2hlY2tlZCA9IGZ1bmN0aW9uIChldnQpIHsKICB2YXIgdGFyZ2V0ID0g ZXZ0LnRhcmdldDsKICBpZiAoIXRhcmdldCkKICAgIHJldHVybjsKCiAgdmFyIHBh cmVudFJvdyA9IERPTS5nZXRGaXJzdEFuY2VzdG9yQnlUYWdOYW1lKHRhcmdldCwg InRyIiwgZmFsc2UpOwoKICB2YXIgdmlld09iamVjdHMgPSBwYXJlbnRSb3cuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKICB2YXIgYm94ZXMgPSBET00uZmlsdGVy RWxlbWVudHNCeUNsYXNzTmFtZSh2aWV3T2JqZWN0cywgIk5vdGlmaWNhdGlvbk9w dGlvbnMiKSB8fCBbXTsKCiAgYm94ZXMuZm9yRWFjaCggZnVuY3Rpb24gKGJveCkg ewogICAgYm94LnN0eWxlLnZpc2liaWxpdHkgPSB0YXJnZXQuY2hlY2tlZCA/ICJ2 aXNpYmxlIiA6ICJoaWRkZW4iOwogIH0pOwp9CgovLyBhdHRhY2ggZXZlbnQgaGFu ZGxlcnMgdG8gYWxsIHRyYWNrIGJ1dHRvbnMKRVNOLmluaXRUcmFja0J0bnMgPSBm dW5jdGlvbiAobm9kZSkgewogICAgLy8gZG9uJ3QgZG8gYW55dGhpbmcgaWYgbm8g cmVtb3RlCiAgICBpZiAoIVNpdGUuaGFzX3JlbW90ZSkgcmV0dXJuOwoKICAgIG5v ZGUgPSBub2RlIHx8IGRvY3VtZW50OwogICAgdmFyIHRyYWNrQnRucyA9IERPTS5n ZXRFbGVtZW50c0J5VGFnQW5kQ2xhc3NOYW1lKG5vZGUsICdpbWcnLCAnVHJhY2tC dXR0b24nKTsKCiAgICB0cmFja0J0bnMuZm9yRWFjaChmdW5jdGlvbiAodHJhY2tC dG4pIHsKICAgICAgICBpZiAoIXRyYWNrQnRuIHx8ICF0cmFja0J0bi5nZXRBdHRy aWJ1dGUpIHJldHVybjsKCiAgICAgICAgaWYgKCF0cmFja0J0bi5nZXRBdHRyaWJ1 dGUoImxqX3N1YmlkIikgJiYgIXRyYWNrQnRuLmdldEF0dHJpYnV0ZSgibGpfam91 cm5hbGlkIikpIHJldHVybjsKCiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIo dHJhY2tCdG4sICdjbGljaycsIEVTTi50cmFja0J0bkNsaWNrSGFuZGxlci5iaW5k RXZlbnRMaXN0ZW5lcih0cmFja0J0bikpOwogICAgfSk7Cn07CgpFU04udHJhY2tC dG5DbGlja0hhbmRsZXIgPSBmdW5jdGlvbiAoZXZ0KSB7CiAgICB2YXIgdHJhY2tC dG4gPSBldnQudGFyZ2V0OwogICAgaWYgKCEgdHJhY2tCdG4gfHwgdHJhY2tCdG4u dGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICJpbWciKSByZXR1cm4gdHJ1ZTsKCiAg ICBFdmVudC5zdG9wKGV2dCk7CgogICAgdmFyIGJ0bkluZm8gPSB7fTsKCiAgICBb J2FyZzEnLCAnYXJnMicsICdldHlwZWlkJywgJ25ld2VudHJ5X2V0eXBlaWQnLCAn bmV3ZW50cnlfdG9rZW4nLCAnbmV3ZW50cnlfc3ViaWQnLAogICAgICdqb3VybmFs aWQnLCAnc3ViaWQnLCAnYXV0aF90b2tlbiddLmZvckVhY2goZnVuY3Rpb24gKGFy ZykgewogICAgICAgIGJ0bkluZm9bYXJnXSA9IHRyYWNrQnRuLmdldEF0dHJpYnV0 ZSgibGpfIiArIGFyZyk7CiAgICB9KTsKCiAgICAvLyBwb3AgdXAgbGl0dGxlIGRp YWxvZyB0byBlaXRoZXIgdHJhY2sgYnkgaW5ib3gvZW1haWwgb3IgZ28gdG8gbW9y ZSBvcHRpb25zCiAgICB2YXIgZGxnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi ZGl2Iik7CiAgICB2YXIgdGl0bGUgPSBfdGV4dERpdigiRW1haWwgbWUgd2hlbiIp OwogICAgRE9NLmFkZENsYXNzTmFtZSh0aXRsZSwgInRyYWNrX3RpdGxlIik7CiAg ICBkbGcuYXBwZW5kQ2hpbGQodGl0bGUpOwoKICAgIHZhciBUcmFja0NoZWNrYm94 ID0gZnVuY3Rpb24gKHRpdGxlLCBjaGVja2VkKSB7CiAgICAgICAgdmFyIGNoZWNr Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgogICAg ICAgIHZhciBuZXdDaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlu cHV0Iik7CiAgICAgICAgbmV3Q2hlY2tib3gudHlwZSA9ICJjaGVja2JveCI7CiAg ICAgICAgbmV3Q2hlY2tib3guaWQgPSAibmV3ZW50cnl0cmFjayIgKyBVbmlxdWUu aWQoKTsKICAgICAgICB2YXIgbmV3Q2hlY2tib3hMYWJlbCA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgbmV3Q2hlY2tib3hMYWJlbC5z ZXRBdHRyaWJ1dGUoImZvciIsIG5ld0NoZWNrYm94LmlkKTsKICAgICAgICBuZXdD aGVja2JveExhYmVsLmlubmVySFRNTCA9IHRpdGxlOwoKICAgICAgICBjaGVja0Nv bnRhaW5lci5hcHBlbmRDaGlsZChuZXdDaGVja2JveCk7CiAgICAgICAgY2hlY2tD b250YWluZXIuYXBwZW5kQ2hpbGQobmV3Q2hlY2tib3hMYWJlbCk7CiAgICAgICAg ZGxnLmFwcGVuZENoaWxkKGNoZWNrQ29udGFpbmVyKTsKCiAgICAgICAgbmV3Q2hl Y2tib3guY2hlY2tlZCA9IGNoZWNrZWQgPyB0cnVlIDogZmFsc2U7CgogICAgICAg IHJldHVybiBuZXdDaGVja2JveDsKICAgIH07CgogICAgLy8gZ2xvYmFsIHRyYWNr UG9wdXAgc28gd2UgY2FuIG9ubHkgaGF2ZSBvbmUKICAgIGlmIChFU04udHJhY2tQ b3B1cCkgewogICAgICAgIEVTTi50cmFja1BvcHVwLmhpZGUoKTsKICAgICAgICBF U04udHJhY2tQb3B1cCA9IG51bGw7CiAgICB9CgogICAgdmFyIHNhdmVDaGFuZ2Vz QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgIHNhdmVD aGFuZ2VzQnRuLnR5cGUgPSAiYnV0dG9uIjsKICAgIHNhdmVDaGFuZ2VzQnRuLnZh bHVlID0gIlNhdmUgQ2hhbmdlcyI7CiAgICBET00uYWRkQ2xhc3NOYW1lKHNhdmVD aGFuZ2VzQnRuLCAidHJhY2tfc2F2ZWNoYW5nZXMiKTsKCiAgICB2YXIgdHJhY2tp bmdOZXdFbnRyaWVzICA9IE51bWJlcihidG5JbmZvWyduZXdlbnRyeV9zdWJpZCdd KSA/IDEgOiAwOwogICAgdmFyIHRyYWNraW5nTmV3Q29tbWVudHMgPSBOdW1iZXIo YnRuSW5mb1snc3ViaWQnXSkgPyAxIDogMDsKCiAgICB2YXIgbmV3RW50cnlUcmFj a0J0bjsKICAgIHZhciBjb21tZW50c1RyYWNrQnRuOwoKICAgIGlmIChOdW1iZXIo dHJhY2tCdG4uZ2V0QXR0cmlidXRlKCJsal9kdGFsa2lkIikpKSB7CiAgICAgICAg Ly8gdGhpcyBpcyBhIHRocmVhZCB0cmFja2luZyBidXR0b24KICAgICAgICAvLyBh bHdheXMgY2hlY2tlZDogZWl0aGVyIGJlY2F1c2UgdGhleSdyZSBzdWJzY3JpYmVk LCBvciBiZWNhdXNlCiAgICAgICAgLy8gdGhleSdyZSBnb2luZyB0byBzdWJzY3Jp YmUuCiAgICAgICAgY29tbWVudHNUcmFja0J0biA9IFRyYWNrQ2hlY2tib3goInNv bWVvbmUgcmVwbGllcyBpbiB0aGlzIGNvbW1lbnQgdGhyZWFkIiwgMSk7CiAgICB9 IGVsc2UgewogICAgICAgIC8vIGVudHJ5IHRyYWNraW5nIGJ1dHRvbgogICAgICAg IG5ld0VudHJ5VHJhY2tCdG4gPSBUcmFja0NoZWNrYm94KExKX2NtdGluZm9bImpv dXJuYWwiXSArICIgcG9zdHMgYSBuZXcgZW50cnkiLCB0cmFja2luZ05ld0VudHJp ZXMpOwogICAgICAgIGNvbW1lbnRzVHJhY2tCdG4gPSBUcmFja0NoZWNrYm94KCJz b21lb25lIGNvbW1lbnRzIG9uIHRoaXMgcG9zdCIsIHRyYWNraW5nTmV3Q29tbWVu dHMpOwogICAgfQoKICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHNhdmVDaGFuZ2Vz QnRuLCAiY2xpY2siLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgRVNOLnRvZ2dsZVN1 YnNjcmlwdGlvbnMoYnRuSW5mbywgZXZ0LCB0cmFja0J0biwgewogICAgICAgICAg ICBuZXdFbnRyeTogbmV3RW50cnlUcmFja0J0biA/IG5ld0VudHJ5VHJhY2tCdG4u Y2hlY2tlZCA6IGZhbHNlLAogICAgICAgICAgICBuZXdDb21tZW50czogY29tbWVu dHNUcmFja0J0bi5jaGVja2VkCiAgICAgICAgfSk7CiAgICAgICAgaWYgKEVTTi50 cmFja1BvcHVwKSBFU04udHJhY2tQb3B1cC5oaWRlKCk7CiAgICB9KTsKCiAgICB2 YXIgYnRuc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp OwogICAgRE9NLmFkZENsYXNzTmFtZShidG5zQ29udGFpbmVyLCAidHJhY2tfYnRu Y29udGFpbmVyIik7CiAgICBkbGcuYXBwZW5kQ2hpbGQoYnRuc0NvbnRhaW5lcik7 CgogICAgYnRuc0NvbnRhaW5lci5hcHBlbmRDaGlsZChzYXZlQ2hhbmdlc0J0bik7 CgogICAgdmFyIGN1c3RUcmFja0xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 KCJhIik7CiAgICBjdXN0VHJhY2tMaW5rLmhyZWYgPSB0cmFja0J0bi5wYXJlbnRO b2RlLmhyZWY7CiAgICBidG5zQ29udGFpbmVyLmFwcGVuZENoaWxkKGN1c3RUcmFj a0xpbmspOwogICAgY3VzdFRyYWNrTGluay5pbm5lckhUTUwgPSAiTW9yZSBPcHRp b25zIjsKICAgIERPTS5hZGRDbGFzc05hbWUoY3VzdFRyYWNrTGluaywgInRyYWNr X21vcmVvcHRzIik7CgogICAgRVNOLnRyYWNrUG9wdXAgPSBuZXcgTEpfSVBQVS5z aG93Tm90ZUVsZW1lbnQoZGxnLCB0cmFja0J0biwgMCk7CgogICAgRE9NLmFkZEV2 ZW50TGlzdGVuZXIoY3VzdFRyYWNrTGluaywgImNsaWNrIiwgZnVuY3Rpb24gKGV2 dCkgewogICAgICAgIEV2ZW50LnN0b3AoZXZ0KTsKICAgICAgICBkb2N1bWVudC5s b2NhdGlvbi5ocmVmID0gdHJhY2tCdG4ucGFyZW50Tm9kZS5ocmVmOwogICAgICAg IGlmIChFU04udHJhY2tQb3B1cCkgRVNOLnRyYWNrUG9wdXAuaGlkZSgpOwogICAg ICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgIHJldHVybiBmYWxzZTsKfQoK Ly8gdG9nZ2xlcyBzdWJzY3JpcHRpb25zCkVTTi50b2dnbGVTdWJzY3JpcHRpb25z ID0gZnVuY3Rpb24gKHN1YkluZm8sIGV2dCwgYnRuLCBzdWJzKSB7CiAgICBzdWJJ bmZvWyJzdWJpZCJdID0gTnVtYmVyKHN1YkluZm9bInN1YmlkIl0pOwogICAgaWYg KChzdWJJbmZvWyJzdWJpZCJdICYmICEgc3Vic1sibmV3Q29tbWVudHMiXSkKICAg ICAgICB8fCAoISBzdWJJbmZvWyJzdWJpZCJdICYmIHN1YnNbIm5ld0NvbW1lbnRz Il0pKSB7CiAgICAgICAgRVNOLnRvZ2dsZVN1YnNjcmlwdGlvbihzdWJJbmZvLCBl dnQsIGJ0biwgIm5ld0NvbW1lbnRzIik7CiAgICB9CgogICAgc3ViSW5mb1sibmV3 ZW50cnlfc3ViaWQiXSA9IE51bWJlcihzdWJJbmZvWyJuZXdlbnRyeV9zdWJpZCJd KTsKICAgIGlmICgoc3ViSW5mb1sibmV3ZW50cnlfc3ViaWQiXSAmJiAhIHN1YnNb Im5ld0VudHJ5Il0pCiAgICAgICAgfHwgKCEgc3ViSW5mb1sibmV3ZW50cnlfc3Vi aWQiXSAmJiBzdWJzWyJuZXdFbnRyeSJdKSkgewogICAgICAgICAgICB2YXIgbmV3 ZW50cnlTdWJJbmZvID0gbmV3IE9iamVjdChzdWJJbmZvKTsKICAgICAgICAgICAg bmV3ZW50cnlTdWJJbmZvWyJzdWJpZCJdID0gTnVtYmVyKGJ0bi5nZXRBdHRyaWJ1 dGUoImxqX25ld2VudHJ5X3N1YmlkIikpOwogICAgICAgICAgICBFU04udG9nZ2xl U3Vic2NyaXB0aW9uKG5ld2VudHJ5U3ViSW5mbywgZXZ0LCBidG4sICJuZXdFbnRy eSIpOwogICAgfQp9OwoKLy8gKFVuKXN1YnNjcmliZXMgdG8gYW4gZXZlbnQKRVNO LnRvZ2dsZVN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJJbmZvLCBldnQsIGJ0 biwgc3ViKSB7CiAgICB2YXIgYWN0aW9uID0gIiI7CiAgICB2YXIgcGFyYW1zID0g ewogICAgICAgIGF1dGhfdG9rZW46IHN1YiA9PSAibmV3RW50cnkiID8gc3ViSW5m by5uZXdlbnRyeV90b2tlbiA6IHN1YkluZm8uYXV0aF90b2tlbgogICAgfTsKCiAg ICBpZiAoTnVtYmVyKHN1YkluZm8uc3ViaWQpKSB7CiAgICAgICAgLy8gc3Vic2Ny aXB0aW9uIGV4aXN0cwogICAgICAgIGFjdGlvbiA9ICJkZWxzdWIiOwogICAgICAg IHBhcmFtcy5zdWJpZCA9IHN1YkluZm8uc3ViaWQ7CiAgICB9IGVsc2UgewogICAg ICAgIC8vIGNyZWF0ZSBhIG5ldyBzdWJzY3JpcHRpb24KICAgICAgICBhY3Rpb24g PSAiYWRkc3ViIjsKCiAgICAgICAgdmFyIHBhcmFtX2tleXM7CiAgICAgICAgaWYg KHN1YiA9PSAibmV3RW50cnkiKSB7CiAgICAgICAgICAgIHBhcmFtcy5ldHlwZWlk ID0gc3ViSW5mby5uZXdlbnRyeV9ldHlwZWlkOwogICAgICAgICAgICBwYXJhbV9r ZXlzID0gWyJqb3VybmFsaWQiXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICBwYXJhbV9rZXlzID0gWyJqb3VybmFsaWQiLCAiYXJnMSIsICJhcmcyIiwgImV0 eXBlaWQiXTsKICAgICAgICB9CgogICAgICAgIHBhcmFtX2tleXMuZm9yRWFjaChm dW5jdGlvbiAocGFyYW0pIHsKICAgICAgICAgICAgaWYgKE51bWJlcihzdWJJbmZv W3BhcmFtXSkpCiAgICAgICAgICAgICAgICBwYXJhbXNbcGFyYW1dID0gcGFyc2VJ bnQoc3ViSW5mb1twYXJhbV0pOwogICAgICAgIH0pOwogICAgfQoKICAgIHBhcmFt cy5hY3Rpb24gPSBhY3Rpb247CgogICAgdmFyIHJlcUluZm8gPSB7CiAgICAgICAg Im1ldGhvZCI6ICJQT1NUIiwKICAgICAgICAidXJsIjogICAgTGl2ZUpvdXJuYWwu Z2V0QWpheFVybCgnZXNuX3N1YnMnKSwKICAgICAgICAiZGF0YSI6ICAgSFRUUFJl cS5mb3JtRW5jb2RlZChwYXJhbXMpCiAgICB9OwoKICAgIHZhciBnb3RJbmZvQ2Fs bGJhY2sgPSBmdW5jdGlvbiAoaW5mbykgewogICAgICAgIGlmICghIGluZm8pIHJl dHVybiBMSl9JUFBVLnNob3dOb3RlKCJFcnJvciBjaGFuZ2luZyBzdWJzY3JpcHRp b24iLCBidG4pOwoKICAgICAgICBpZiAoaW5mby5lcnJvcikgcmV0dXJuIExKX0lQ UFUuc2hvd05vdGUoaW5mby5lcnJvciwgYnRuKTsKCiAgICAgICAgaWYgKGluZm8u c3VjY2VzcykgewogICAgICAgICAgICBpZiAoaW5mby5tc2cpCiAgICAgICAgICAg ICAgICBMSl9JUFBVLnNob3dOb3RlKGluZm8ubXNnLCBidG4pOwoKICAgICAgICAg ICAgaWYgKGluZm8uc3Vic2NyaWJlZCkgewogICAgICAgICAgICAgICAgaWYgKGlu Zm8uc3ViaWQpCiAgICAgICAgICAgICAgICAgICAgRE9NLnNldEVsZW1lbnRBdHRy aWJ1dGUoYnRuLCAibGpfc3ViaWQiLCBpbmZvLnN1YmlkKTsKICAgICAgICAgICAg ICAgIGlmIChpbmZvLm5ld2VudHJ5X3N1YmlkKQogICAgICAgICAgICAgICAgICAg IERPTS5zZXRFbGVtZW50QXR0cmlidXRlKGJ0biwgImxqX25ld2VudHJ5X3N1Ymlk IiwgaW5mby5uZXdlbnRyeV9zdWJpZCk7CgogICAgICAgICAgICAgICAgWyJqb3Vy bmFsaWQiLCAiYXJnMSIsICJhcmcyIiwgImV0eXBlaWQiXS5mb3JFYWNoKGZ1bmN0 aW9uIChwYXJhbSkgewogICAgICAgICAgICAgICAgICAgIERPTS5zZXRFbGVtZW50 QXR0cmlidXRlKGJ0biwgImxqXyIgKyBwYXJhbSwgMCk7CiAgICAgICAgICAgICAg ICB9KTsKCiAgICAgICAgICAgICAgICBET00uc2V0RWxlbWVudEF0dHJpYnV0ZShi dG4sICJ0aXRsZSIsICdVbnRyYWNrIFRoaXMnKTsKCiAgICAgICAgICAgICAgICAv LyB1cGRhdGUgc3VidGhyZWFkIHRyYWNraW5nIGljb25zCiAgICAgICAgICAgICAg ICB2YXIgZHRhbGtpZCA9IGJ0bi5nZXRBdHRyaWJ1dGUoImxqX2R0YWxraWQiKTsK ICAgICAgICAgICAgICAgIGlmIChkdGFsa2lkKQogICAgICAgICAgICAgICAgICAg IEVTTi51cGRhdGVUaHJlYWRJY29ucyhkdGFsa2lkLCAib24iKTsKICAgICAgICAg ICAgICAgIGVsc2UgLy8gbm90IHRocmVhZCB0cmFja2luZyBidXR0b24KICAgICAg ICAgICAgICAgICAgICBidG4uc3JjID0gU2l0ZS5pbWdwcmVmaXggKyAiL2J0bl90 cmFja2luZy5naWYiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg ICAgaWYgKGluZm9bImV2ZW50X2NsYXNzIl0gPT0gIkxKOjpFdmVudDo6Sm91cm5h bE5ld0NvbW1lbnQiKQogICAgICAgICAgICAgICAgICAgIERPTS5zZXRFbGVtZW50 QXR0cmlidXRlKGJ0biwgImxqX3N1YmlkIiwgMCk7CiAgICAgICAgICAgICAgICBl bHNlIGlmIChpbmZvWyJldmVudF9jbGFzcyJdID09ICJMSjo6RXZlbnQ6OkpvdXJu YWxOZXdFbnRyeSIpCiAgICAgICAgICAgICAgICAgICAgRE9NLnNldEVsZW1lbnRB dHRyaWJ1dGUoYnRuLCAibGpfbmV3ZW50cnlfc3ViaWQiLCAwKTsKCiAgICAgICAg ICAgICAgICBbImpvdXJuYWxpZCIsICJhcmcxIiwgImFyZzIiLCAiZXR5cGVpZCJd LmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7CiAgICAgICAgICAgICAgICAgICAg RE9NLnNldEVsZW1lbnRBdHRyaWJ1dGUoYnRuLCAibGpfIiArIHBhcmFtLCBpbmZv W3BhcmFtXSk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBE T00uc2V0RWxlbWVudEF0dHJpYnV0ZShidG4sICJ0aXRsZSIsICdUcmFjayBUaGlz Jyk7CgogICAgICAgICAgICAgICAgLy8gdXBkYXRlIHN1YnRocmVhZCB0cmFja2lu ZyBpY29ucwogICAgICAgICAgICAgICAgdmFyIGR0YWxraWQgPSBidG4uZ2V0QXR0 cmlidXRlKCJsal9kdGFsa2lkIik7CiAgICAgICAgICAgICAgICBpZiAoZHRhbGtp ZCkgewogICAgICAgICAgICAgICAgICAgIC8vIHNldCBzdGF0ZSB0byAib2ZmIiBp ZiBubyBwYXJlbnRzIHRyYWNraW5nIHRoaXMsCiAgICAgICAgICAgICAgICAgICAg Ly8gb3RoZXJ3aXNlIHNldCBzdGF0ZSB0byAicGFyZW50IgogICAgICAgICAgICAg ICAgICAgIHZhciBzdGF0ZSA9ICJvZmYiOwogICAgICAgICAgICAgICAgICAgIHZh ciBwYXJlbnRCdG47CiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF9kdGFs a2lkID0gZHRhbGtpZDsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50 QnRuID0gRVNOLmdldFRocmVhZFBhcmVudEJ0bihwYXJlbnRfZHRhbGtpZCkpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X2R0YWxraWQgPSBwYXJlbnRC dG4uZ2V0QXR0cmlidXRlKCJsal9kdGFsa2lkIik7CiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghIHBhcmVudF9kdGFsa2lkKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsb2coImNvdWxkIG5vdCBmaW5kIHBhcmVudF9kdGFsa2lkIik7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgTnVt YmVyKHBhcmVudEJ0bi5nZXRBdHRyaWJ1dGUoImxqX3N1YmlkIikpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXRlID0gInBhcmVudCI7CiAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg ICAgRVNOLnVwZGF0ZVRocmVhZEljb25zKGR0YWxraWQsIHN0YXRlKTsKICAgICAg ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gbm90IHRo cmVhZCB0cmFja2luZyBidXR0b24KICAgICAgICAgICAgICAgICAgICBidG4uc3Jj ID0gU2l0ZS5pbWdwcmVmaXggKyAiL2J0bl90cmFjay5naWYiOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaW5mby5hdXRo X3Rva2VuKQogICAgICAgICAgICAgICAgRE9NLnNldEVsZW1lbnRBdHRyaWJ1dGUo YnRuLCAibGpfYXV0aF90b2tlbiIsIGluZm8uYXV0aF90b2tlbik7CiAgICAgICAg ICAgIGlmIChpbmZvLm5ld2VudHJ5X3Rva2VuKQogICAgICAgICAgICAgICAgRE9N LnNldEVsZW1lbnRBdHRyaWJ1dGUoYnRuLCAibGpfbmV3ZW50cnlfdG9rZW4iLCBp bmZvLm5ld2VudHJ5X3Rva2VuKTsKICAgICAgICB9CiAgICB9OwoKICAgIHJlcUlu Zm8ub25EYXRhID0gZ290SW5mb0NhbGxiYWNrOwogICAgcmVxSW5mby5vbkVycm9y ID0gZnVuY3Rpb24gKGVycikgeyBMSl9JUFBVLnNob3dOb3RlKCJFcnJvcjogIiAr IGVycikgfTsKCiAgICBIVFRQUmVxLmdldEpTT04ocmVxSW5mbyk7Cn07CgovLyBn aXZlbiBhIGR0YWxraWQsIGZpbmQgdGhlIHRyYWNrIGJ1dHRvbiBmb3IgaXRzIHBh cmVudCBjb21tZW50IChpZiBhbnkpCkVTTi5nZXRUaHJlYWRQYXJlbnRCdG4gPSBm dW5jdGlvbiAoZHRhbGtpZCkgewogICAgdmFyIGNtdEluZm8gPSBMSl9jbXRpbmZv W2R0YWxraWQgKyAiIl07CiAgICBpZiAoISBjbXRJbmZvKSB7CiAgICAgICAgbG9n KCJubyBjb21tZW50IGluZm8iKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0K CiAgICB2YXIgcGFyZW50X2R0YWxraWQgPSBjbXRJbmZvLnBhcmVudDsKICAgIGlm ICghIHBhcmVudF9kdGFsa2lkKQogICAgICAgIHJldHVybiBudWxsOwoKICAgIHJl dHVybiAkKCJsal90cmFja19idG5fIiArIHBhcmVudF9kdGFsa2lkKTsKfTsKCi8v IHVwZGF0ZSBhbGwgdGhlIHRyYWNraW5nIGljb25zIHVuZGVyIGEgcGFyZW50IGNv bW1lbnQKRVNOLnVwZGF0ZVRocmVhZEljb25zID0gZnVuY3Rpb24gKGR0YWxraWQs IHRyYWNraW5nKSB7CiAgICB2YXIgYnRuID0gJCgibGpfdHJhY2tfYnRuXyIgKyBk dGFsa2lkKTsKICAgIGlmICghIGJ0bikgewogICAgICAgIGxvZygibm8gYnV0dG9u Iik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBjbXRJbmZvID0gTEpf Y210aW5mb1tkdGFsa2lkICsgIiJdOwogICAgaWYgKCEgY210SW5mbykgewogICAg ICAgIGxvZygibm8gY29tbWVudCBpbmZvIik7CiAgICAgICAgcmV0dXJuOwogICAg fQoKICAgIGlmIChOdW1iZXIoYnRuLmdldEF0dHJpYnV0ZSgibGpfc3ViaWQiKSkg JiYgdHJhY2tpbmcgIT0gIm9uIikgewogICAgICAgIC8vIHN1YnNjcmlwdGlvbiBh bHJlYWR5IGV4aXN0cyBvbiB0aGlzIGJ1dHRvbiwgZG9uJ3QgbWVzcyB3aXRoIGl0 CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChjbXRJbmZvLnJjICYmIGNt dEluZm8ucmMubGVuZ3RoKSB7CiAgICAgICAgLy8gdXBkYXRlIGNoaWxkcmVuCiAg ICAgICAgY210SW5mby5yYy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZF9kdGFsa2lk KSB7CiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsK ICAgICAgICAgICAgICAgIHZhciBzdGF0ZTsKICAgICAgICAgICAgICAgIHN3aXRj aCAodHJhY2tpbmcpIHsKICAgICAgICAgICAgICAgIGNhc2UgIm9uIjoKICAgICAg ICAgICAgICAgICAgICBzdGF0ZSA9ICJwYXJlbnQiOwogICAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAib2ZmIjoKICAgICAgICAg ICAgICAgICAgICBzdGF0ZSA9ICJvZmYiOwogICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSAicGFyZW50IjoKICAgICAgICAgICAg ICAgICAgICBzdGF0ZSA9ICJwYXJlbnQiOwogICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAg ICBhbGVydCgiVW5rbm93biB0cmFja2luZyBzdGF0ZSAiICsgdHJhY2tpbmcpOwog ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgRVNOLnVwZGF0ZVRocmVhZEljb25zKGNoaWxkX2R0YWxraWQs IHN0YXRlKTsKICAgICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9KTsKICAgIH0K CiAgICAvLyB1cGRhdGUgaWNvbgogICAgdmFyIHVyaTsKICAgIHN3aXRjaCAodHJh Y2tpbmcpIHsKICAgICAgICBjYXNlICJvbiI6CiAgICAgICAgICAgIHVyaSA9ICIv YnRuX3RyYWNraW5nLmdpZiI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNh c2UgIm9mZiI6CiAgICAgICAgICAgIHVyaSA9ICIvYnRuX3RyYWNrLmdpZiI7CiAg ICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInBhcmVudCI6CiAgICAgICAg ICAgIHVyaSA9ICIvYnRuX3RyYWNraW5nX3RocmVhZC5naWYiOwogICAgICAgICAg ICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBhbGVydCgiVW5r bm93biB0cmFja2luZyBzdGF0ZSAiICsgdHJhY2tpbmcpOwogICAgICAgICAgICBi cmVhazsKICAgIH0KCiAgICBidG4uc3JjID0gU2l0ZS5pbWdwcmVmaXggKyB1cmk7 Cn07Ci8qCiAgSVBQVSBtZXRob2RzOgogICAgIGluaXQoW2lubmVySFRNTF0pIC0t IHRha2VzIGlubmVySFRNTCBhcyBvcHRpb25hbCBhcmd1bWVudAogICAgIHNob3co KSAtLSBzaG93cyB0aGUgcG9wdXAKICAgICBoaWRlKCkgLS0gaGlkZXMgcG9wdXAK ICAgICBjYW5jZWwoKSAtLSBoaWRlcyBhbmQgY2FsbHMgY2FuY2VsIGNhbGxiYWNr CgogIENvbnRlbnQgc2V0dGVyczoKICAgICBzZXRDb250ZW50KGlubmVySFRNTCkg LS0gc2V0IGlubmVySFRNTAogICAgIHNldENvbnRlbnRFbGVtZW50KGVsZW1lbnQp IC0tIGFkZHMgZWxlbWVudCBhcyBhIGNoaWxkIG9mIHRoZSBwb3B1cAoKICAgQWNj ZXNzb3JzOgogICAgIGdldEVsZW1lbnQoKSAtLSByZXR1cm5zIHBvcHVwIERJViBl bGVtZW50CiAgICAgdmlzaWJsZSgpIC0tIHJldHVybnMgd2hldGhlciB0aGUgcG9w dXAgaXMgdmlzaWJsZSBvciBub3QKCiAgIFRpdGxlYmFyOgogICAgIHNldFRpdGxl YmFyKHNob3cpIC0tIHRydWU6IHNob3cgdGl0bGViYXIgLyBmYWxzZTogbm8gdGl0 bGViYXIKICAgICBzZXRUaXRsZSh0aXRsZSkgLS0gc2V0cyB0aGUgdGl0bGViYXIg dGV4dAogICAgIGdldFRpdGxlYmFyRWxlbWVudCgpIC0tIHJldHVybnMgdGhlIHRp dGxlYmFyIGVsZW1lbnQKICAgICBzZXRUaXRsZWJhckNsYXNzKGNsYXNzTmFtZSkg LS0gc2V0IHRoZSBjbGFzcyBvZiB0aGUgdGl0bGViYXIKCiAgIFN0eWxpbmc6CiAg ICAgc2V0T3ZlcmZsb3cob3ZlcmZsb3cpIC0tIHNldHMgZWxlLnN0eWxlLm92ZXJm bG93IHRvIG92ZXJmbG93CiAgICAgYWRkQ2xhc3MoY2xhc3NOYW1lKSAtLSBhZGRz IGNsYXNzIHRvIHBvcHVwCiAgICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKSAtLSBy ZW1vdmVzIGNsYXNzIHRvIHBvcHVwCgogICBCcm93c2VyIEhhY2tzOgogICAgIHNl dEF1dG9IaWRlU2VsZWN0cyhhdXRvaGlkZSkgLS0gd2hlbiB0aGUgcG9wdXAgaXMg c2hvd24gc2hvdWxkIGl0IGZpbmQgYWxsIHRoZSBzZWxlY3RzCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHBhZ2UgYW5kIGhpZGUgdGhlbSAo YW5kIHNob3cgdGhlbSBhZ2FpbikgKGZvciBJRSkKCiAgIFBvc2l0aW9uaW5nL1Np emluZzoKICAgICBzZXRMb2NhdGlvbihsZWZ0LCB0b3ApIC0tIHNldCBwb3B1cCBs b2NhdGlvbjogd2lsbCBiZSBwaXhlbHMgaWYgdW5pdHMgbm90IHNwZWNpZmllZAog ICAgIHNldExlZnQobGVmdCkgLS0gc2V0IGxlZnQgbG9jYXRpb24KICAgICBzZXRU b3AodG9wKSAgIC0tIHNldCB0b3AgbG9jYXRpb24KICAgICBzZXREaW1lbnNpb25z KHdpZHRoLCBoZWlnaHQpIC0tIHNldCBwb3B1cCBkaW1lbnNpb25zOiB3aWxsIGJl IHBpeGVscyBpZiB1bml0cyBub3Qgc3BlY2lmaWVkCiAgICAgc2V0QXV0b0NlbnRl cih4LCB5KSAtLSB3aGF0IGRpbWVuc2lvbnMgdG8gYXV0by1jZW50ZXIKICAgICBj ZW50ZXIoKSAtLSBjZW50ZXJzIHBvcHVwIG9uIHNjcmVlbgogICAgIGNlbnRlclgo KSAtLSBjZW50ZXJzIHBvcHVwIGhvcml6b250YWxseQogICAgIGNlbnRlclkoKSAt LSBjZW50ZXJzIHBvcHVwIHZlcnRpY2FsbHkKICAgICBzZXRGaXhlZFBvc2l0aW9u KGZpeGVkKSAtLSBzaG91bGQgdGhlIHBvcHVwIHN0YXkgZml4ZWQgb24gdGhlIHBh Z2Ugd2hlbiBpdCBzY3JvbGxzPwogICAgIGNlbnRlck9uV2lkZ2V0KHdpZGdldCkg LS0gY2VudGVyIHBvcHVwIG9uIHRoaXMgd2lkZ2V0CiAgICAgc2V0QXV0b0NlbnRl ckNhbGxiYWNrKGNhbGxiYWNrKSAtLSBjYWxscyBjYWxsYmFjayB3aXRoIHRoaXMg SVBQVSBpbnN0YW5jZSBhcyBhIHBhcmFtZXRlcgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIGF1dG8tY2VudGVyaW5nLiBTb21lIGNv bW1vbiBidWlsdC1pbiBjbGFzcyBtZXRob2RzCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSBhcyBjYWxsYmFja3MgYXJl OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBQVS5j ZW50ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQ UFUuY2VudGVyWAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSVBQVS5jZW50ZXJZCgogICAgIG1vdmVGb3J3YXJkKGFtb3VudCkgLS0gaW5j cmVhc2VzIHRoZSB6SW5kZXggYnkgb25lIG9yIGFtb3VudCBpZiBzcGVjaWZpZWQK ICAgICBtb3ZlQmFja3dhcmQoYW1vdW50KSAtLSBkZWNyZWFzZXMgdGhlIHpJbmRl eCBieSBvbmUgb3IgYW1vdW50IGlmIHNwZWNpZmllZAoKICAgTW9kYWxpdHk6CiAg ICAgc2V0Q2xpY2tUb0Nsb3NlKGNsaWNrVG9DbG9zZSkgLS0gaWYgY2xpY2tUb0Ns b3NlIGlzIHRydWUsIGNsaWNraW5nIG91dHNpZGUgb2YgdGhlIHBvcHVwCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBjbG9zZSBpdAog ICAgIHNldE1vZGFsKG1vZGFsaXR5KSAtLSBJZiBtb2RhbGl0eSBpcyB0cnVlLCB0 aGVuIHBvcHVwIHdpbGwgY2FwdHVyZSBhbGwgbW91c2UgZXZlbnRzCiAgICAgICAg ICAgICAgICAgICAgIGFuZCBvcHRpb25hbGx5IGdyYXkgb3V0IHRoZSByZXN0IG9m IHRoZSBwYWdlLiAob3ZlcnJpZGVzIGNsaWNrVG9DbG9zZSkKICAgICBzZXRPdmVy bGF5VmlzaWJsZSh2aXNpYmxlKSAtLSBJZiB2aXNpYmxlIGlzIHRydWUsIHdoZW4g dGhpcyBwb3B1cCBpcyBvbiB0aGUgcGFnZSBpdAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHdpbGwgZ3JheSBvdXQgdGhlIHJlc3Qgb2YgdGhlIHBh Z2UgaWYgdGhpcyBpcyBtb2RhbAoKICAgQ2FsbGJhY2tzOgogICAgIHNldENhbmNl bGxlZENhbGxiYWNrKGNhbGxiYWNrKSAtLSBjYWxsIHRoaXMgd2hlbiB0aGUgZGlh bG9nIGlzIGNsb3NlZCB0aHJvdWdoIGNsaWNraW5nCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG91dHNpZGUsIHRpdGxlYmFyIGNsb3NlIGJ1 dHRvbiwgZXRjLi4uCiAgICAgc2V0SGlkZGVuQ2FsbGJhY2soY2FsbGJhY2spIC0t IGNhbGxlZCB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2VkIGluIGFueSBmYXNoaW9u CgogICBGYWRpbmc6CiAgICAgc2V0RmFkZUluKGZhZGVJbikgLS0gc2V0IHdoZXRo ZXIgb3Igbm90IHRvIGF1dG9tYXRpY2FsbHkgZmFkZSB0aGUgaXBwdSBpbgogICAg IHNldEZhZGVPdXQoZmFkZU91dCkgLS0gc2V0IHdoZXRoZXIgb3Igbm90IHRvIGF1 dG9tYXRpY2FsbHkgZmFkZSB0aGUgaXBwdSBvdXQKICAgICBzZXRGYWRlU3BlZWQo c2VjcykgLS0gc2V0cyBmYWRlIHNwZWVkCgogIENsYXNzIE1ldGhvZHM6CiAgIEhh bmR5IGNhbGxiYWNrczoKICAgICBJUFBVLmNlbnRlcgogICAgIElQUFUuY2VudGVy WAogICAgIElQUFUuY2VudGVyWQogICBCcm93c2VyIHRlc3Rpbmc6CiAgICAgSVBQ VS5pc0lFKCkgLS0gaXMgdGhlIGJyb3dzZXIgaW50ZXJuZXQgZXhwbG9kZXI/CiAg ICAgSVBQVS5pZVNhZmFyaSgpIC0tIGlzIHRoaXMgc2FmYXJpPwoKLy8vLy8vLy8v Ly8vLy8vLy8vLy8KCgppcHB1LnNldE1vZGFsRGVuaWFsQ2FsbGJhY2soSVBQVS5j c3NCb3JkZXJGbGFzaCk7CgoKICAgcHJpdmF0ZToKICAgIFByb3BlcnRpZXM6CiAg ICAgZWxlIC0tIERPTSBub2RlIG9mIGRpdgogICAgIHNob3duIC0tIGJvb2xlYW47 IGlmIGVsZW1lbnQgaXMgaW4gRE9NCiAgICAgYXV0b0NlbnRlclggLS0gYm9vbGVh bjsgYXV0by1jZW50ZXIgaG9yaXoKICAgICBhdXRvQ2VudGVyWSAtLSBib29sZWFu OyBhdXRvLWNlbnRlciB2ZXJ0aWNhbAogICAgIGZpeGVkUG9zaXRpb24gLS0gYm9v bGVhbjsgc3RheSBpbiBmaXhlZCBwb3NpdGlvbiB3aGVuIGJyb3dzZXIgc2Nyb2xs cz8KICAgICB0aXRsZWJhciAtLSB0aXRsZWJhciBlbGVtZW50CiAgICAgdGl0bGUg LS0gc3RyaW5nOyB0ZXh0IHRvIGdvIGluIHRpdGxlYmFyCiAgICAgc2hvd1RpdGxl YmFyIC0tIGJvb2xlYW47IHdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGl0bGViYXIK ICAgICBjb250ZW50IC0tIERJViBjb250YWluaW5nIHVzZXIncyBzcGVjaWZpZWQg Y29udGVudAogICAgIGNsaWNrVG9DbG9zZSAtLSBib29sZWFuOyBjbGlja2luZyBv dXRzaWRlIHBvcHVwIHdpbGwgY2xvc2UgaXQKICAgICBjbGlja0hhbmRsZXJTZXR1 cCAtLSBib29sZWFuOyBoYXZlIHdlIHNldCB1cCB0aGUgY2xpY2sgaGFuZGxlcnM/ CiAgICAgZG9jT3ZlcmxheSAtLSBESVYgdGhhdCBvdmVybGF5cyB0aGUgZG9jdW1l bnQgZm9yIGNhcHR1cmluZyBjbGlja3MKICAgICBtb2RhbCAtLSBib29sZWFuOyBj YXB0dXJlIGFsbCBldmVudHMgYW5kIHByZXZlbnQgdXNlciBmcm9tIGRvaW5nIGFu eXRoaW5nCiAgICAgICAgICAgICAgICAgICAgICAgdW50aWwgZGlhbG9nIGlzIGRp c21pc3NlZAogICAgIHZpc2libGVPdmVybGF5IC0tIGJvb2xlYW47IG1ha2Ugb3Zl cmxheSBzbGlnaHRseSBvcGFxdWUKICAgICBjbGlja0hhbmRsZXJGdW5jIC0tIGZ1 bmN0aW9uOyBmdW5jdGlvbiB0byBoYW5kbGUgZG9jdW1lbnQgY2xpY2tzCiAgICAg cmVzaXplSGFuZGxlckZ1bmMgLS0gZnVuY3Rpb247IGZ1bmN0aW9uIHRvIGhhbmRs ZSBkb2N1bWVudCByZXNpemluZwogICAgIGF1dG9DZW50ZXJDYWxsYmFjayAtLSBm dW5jdGlvbjsgd2hhdCBjYWxsYmFjayB0byBjYWxsIGZvciBhdXRvLWNlbnRlcmlu ZwogICAgIGNhbmNlbGxlZENhbGxiYWNrIC0tIGZ1bmN0aW9uOyBjYWxsZWQgd2hl biBkaWFsb2cgaXMgY2FuY2VsbGVkCiAgICAgc2V0QXV0b0hpZGVTZWxlY3RzIC0t IGJvb2xlYW47IGF1dG9oaWRlIGFsbCBTRUxFQ1QgZWxlbWVudHMgb24gdGhlIHBh Z2Ugd2hlbiBwb3B1cCBpcyB2aXNpYmxlCiAgICAgaGlkZGVuU2VsZWN0cyAtLSBh cnJheTsgU0VMRUNUIGVsZW1lbnRzIHRoYXQgaGF2ZSBiZWVuIGhpZGRlbgogICAg IGhpZGRlbkNhbGxiYWNrIC0tIGZ1bmNpdG9uOyBjYWxsZWQgd2hlbiBkaWFsb2cg aXMgaGlkZGVuCiAgICAgZmFkZUluLCBmYWRlT3V0LCBmYWRlU3BlZWQgLS0gZmFk aW5nIHNldHRpbmdzCiAgICAgZmFkZU1vZGUgLS0gY3VycmVudCBmYWRpbmcgbW9k ZSAoaW4sIG91dCkgaWYgdGhlcmUgaXMgZmFkaW5nIGdvaW5nIG9uCgogICAgTWV0 aG9kczoKICAgICB1cGRhdGVUaXRsZWJhcigpIC0tIGNyZWF0ZSB0aXRsZWJhciBp ZiBpdCBkb2Vzbid0IGV4aXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaGlk ZSBpdCBpZiB0aXRsZWJhciA9PSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIHVwZGF0ZSB0aXRsZWJhciB0ZXh0CiAgICAgdXBkYXRlQ29udGVudCgpIC0t IG1ha2VzIHN1cmUgYWxsIGN1cnJlbnRseSBzcGVjaWZpZWQgcHJvcGVydGllcyBh cmUgYXBwbGllZAogICAgIHNldHVwQ2xpY2tDYXB0dXJlKCkgLS0gaWYgbW9kYWws IGNyZWF0ZSBkb2N1bWVudC1zaXplZCBkaXYgb3ZlcmxheSB0byBjYXB0dXJlIGNs aWNrIGV2ZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNl IGluc3RhbGwgZG9jdW1lbnQgb25jbGljayBoYW5kbGVyCiAgICAgcmVtb3ZlQ2xp Y2tIYW5kbGVycygpIC0tIHJlbW92ZSBvdmVybGF5LCBldmVudCBoYW5kbGVycwog ICAgIGNsaWNrSGFuZGxlcigpIC0tIGV2ZW50IGhhbmRsZXIgZm9yIGNsaWNrcwog ICAgIHVwZGF0ZU92ZXJsYXkoKSAtLSBpZiB3ZSBoYXZlIGFuIG92ZXJsYXksIG1h a2Ugc3VyZSBpdCdzIHdoZXJlIGl0IHNob3VsZCBiZSBhbmQgKGluKXZpc2libGUK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgc2hvdWxkIGJlCiAgICAgYXV0 b0NlbnRlcigpIC0tIGNlbnRlcnMgcG9wdXAgb24gc2NyZWVuIGFjY29yZGluZyB0 byBhdXRvQ2VudGVyWCBhbmQgYXV0b0NlbnRlclkKICAgICBoaWRlU2VsZWN0cygp IC0tIGhpZGUgYWxsIHNlbGVjdCBlbGVtZW50IG9uIHBhZ2UKICAgICBzaG93U2Vs ZWN0cygpIC0tIHNob3cgYWxsIHNlbGVjdHMKICAgICBfaGlkZSAoKSAtLSBhY3R1 YWxseSBoaWRlcyBldmVyeXRoaW5nLCBjYWxsZWQgYnkgaGlkZSgpLCB3aGljaCBk b2VzIGZhZGluZyBpZiBuZWNlc3NhcnkKKi8KCi8vIHRoaXMgYmVsb25ncyBzb21l d2hlcmUgZWxzZToKZnVuY3Rpb24gY2hhbmdlT3BhYyhpZCwgb3BhY2l0eSkgewog ICAgdmFyIGUgPSAgJChpZCk7CiAgICBpZiAoZSAmJiBlLnN0eWxlKSB7CiAgICAg ICAgdmFyIG9iamVjdCA9IGUuc3R5bGU7CiAgICAgICAgaWYgKG9iamVjdCkgewog ICAgICAgICAgICAvL3JlZHVjZSBmbGlja2VyCiAgICAgICAgICAgIGlmIChJUFBV LmlzU2FmYXJpKCkgJiYgb3BhY2l0eSA+PSAxMDApCiAgICAgICAgICAgICAgICBv cGFjaXR5ID0gOTkuOTk7CgogICAgICAgICAgICAvLyBJRQogICAgICAgICAgICBp ZiAob2JqZWN0LmZpbHRlcnMpCiAgICAgICAgICAgICAgICBvYmplY3QuZmlsdGVy cy5hbHBoYS5vcGFjaXR5ID0gb3BhY2l0eSAqIDEwMDsKCiAgICAgICAgICAgIG9i amVjdC5vcGFjaXR5ID0gb3BhY2l0eTsKICAgICAgICB9CiAgICB9Cn0KCklQUFUg PSBuZXcgQ2xhc3MoIE9iamVjdCwgewogIHNldEZpeGVkUG9zaXRpb246IGZ1bmN0 aW9uIChmaXhlZCkgewogICAgLy8gbm8gZml4ZWQgcG9zaXRpb24gZm9yIElFCiAg ICBpZiAoSVBQVS5pc0lFKCkpCiAgICAgIHJldHVybjsKCiAgICB0aGlzLmZpeGVk UG9zaXRpb24gPSBmaXhlZDsKICAgIHRoaXMudXBkYXRlQ29udGVudCgpOwogIH0s CgogIGNsaWNrSGFuZGxlciA6IGZ1bmN0aW9uIChldnQpIHsKICAgIGlmICghdGhp cy5jbGlja1RvQ2xvc2UpIHJldHVybjsKICAgIGlmICghdGhpcy52aXNpYmxlKCkp IHJldHVybjsKCiAgICBldnQgPSBFdmVudC5wcmVwKGV2dCk7CiAgICB2YXIgdGFy Z2V0ID0gZXZ0LnRhcmdldDsKICAgIC8vIGRvbid0IGRvIGFueXRoaW5nIGlmIGlu c2lkZSB0aGUgcG9wdXAKICAgIGlmIChET00uZ2V0QW5jZXN0b3JzQnlDbGFzc05h bWUodGFyZ2V0LCAiaXBwdSIsIHRydWUpLmxlbmd0aCA+IDApIHJldHVybjsKICAg IHRoaXMuY2FuY2VsKCk7CiAgfSwKCiAgc2V0Q2FuY2VsbGVkQ2FsbGJhY2sgOiBm dW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIHRoaXMuY2FuY2VsbGVkQ2FsbGJhY2sg PSBjYWxsYmFjazsKICB9LAoKICBjYW5jZWwgOiBmdW5jdGlvbiAoKSB7CiAgICBp ZiAodGhpcy5jYW5jZWxsZWRDYWxsYmFjaykKICAgICAgdGhpcy5jYW5jZWxsZWRD YWxsYmFjaygpOwogICAgdGhpcy5oaWRlKCk7CiAgfSwKCiAgc2V0SGlkZGVuQ2Fs bGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgdGhpcy5oaWRkZW5DYWxs YmFjayA9IGNhbGxiYWNrOwogIH0sCgogIHNldHVwQ2xpY2tDYXB0dXJlIDogZnVu Y3Rpb24gKCkgewogICAgaWYgKCF0aGlzLnZpc2libGUoKSB8fCB0aGlzLmNsaWNr SGFuZGxlclNldHVwKXtyZXR1cm47fQogICAgaWYgKCF0aGlzLmNsaWNrVG9DbG9z ZSAmJiAhdGhpcy5tb2RhbCkge3JldHVybjt9CgogICAgdGhpcy5jbGlja0hhbmRs ZXJGdW5jID0gdGhpcy5jbGlja0hhbmRsZXIuYmluZEV2ZW50TGlzdGVuZXIodGhp cyk7CgogICAgaWYgKHRoaXMubW9kYWwpIHsKICAgICAgLy8gY3JlYXRlIGRvY3Vt ZW50LXNpemVkIGRpdiB0byBjYXB0dXJlIGV2ZW50cwogICAgICBpZiAodGhpcy5v dmVybGF5KSByZXR1cm47IC8vIHd0Zj8gc2hvdWxkbid0IGV4aXN0IHlldAogICAg ICB0aGlzLm92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK ICAgICAgdGhpcy5vdmVybGF5LnN0eWxlLmxlZnQgPSAiMHB4IjsKICAgICAgdGhp cy5vdmVybGF5LnN0eWxlLnRvcCA9ICIwcHgiOwogICAgICB0aGlzLm92ZXJsYXku c3R5bGUubWFyZ2luID0gIjBweCI7CiAgICAgIHRoaXMub3ZlcmxheS5zdHlsZS5w YWRkaW5nID0gIjBweCI7CiAgICAgIAogICAgICB0aGlzLm92ZXJsYXkuc3R5bGUu YmFja2dyb3VuZENvbG9yID0gIiMwMDAwMDAiOwogICAgICB0aGlzLm92ZXJsYXku c3R5bGUuekluZGV4PSI5MDAiOwogICAgICBpZiAoSVBQVS5pc0lFKCkpewogICAg ICAJCXRoaXMub3ZlcmxheS5zdHlsZS5maWx0ZXI9InByb2dpZDpEWEltYWdlVHJh bnNmb3JtLk1pY3Jvc29mdC5BbHBoYShvcGFjaXR5PTUwKSI7CgkJdGhpcy5vdmVy bGF5LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7CgkJdGhpcy5vdmVybGF5LnN0 eWxlLndpZHRoPWRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7CgkJdGhpcy5vdmVy bGF5LnN0eWxlLmhlaWdodD1kb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDsKICAg ICAgfQogICAgICBlbHNlewogICAgICAJdGhpcy5vdmVybGF5LnN0eWxlLnBvc2l0 aW9uID0gImZpeGVkIjsKICAgICAgfQoKICAgICAgdGhpcy5lbGUucGFyZW50Tm9k ZS5pbnNlcnRCZWZvcmUodGhpcy5vdmVybGF5LCB0aGlzLmVsZSk7CiAgICAgIHRo aXMudXBkYXRlT3ZlcmxheSgpOwoKICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIo dGhpcy5vdmVybGF5LCAiY2xpY2siLCB0aGlzLmNsaWNrSGFuZGxlckZ1bmMpOwog ICAgfSBlbHNlIHsKICAgICAgLy8gc2ltcGxlIGRvY3VtZW50IG9uY2xpY2sgaGFu ZGxlcgogICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwgImNsaWNr IiwgdGhpcy5jbGlja0hhbmRsZXJGdW5jKTsKICAgIH0KCiAgICB0aGlzLmNsaWNr SGFuZGxlclNldHVwID0gdHJ1ZTsKICB9LAoKICB1cGRhdGVPdmVybGF5IDogZnVu Y3Rpb24gKCkgewogICAgaWYgKHRoaXMub3ZlcmxheSkgewogICAgICB2YXIgY2Qg PSBET00uZ2V0Q2xpZW50RGltZW5zaW9ucygpOwogICAgICB0aGlzLm92ZXJsYXku c3R5bGUud2lkdGggPSAoY2QueCAtIDEpICsgInB4IjsKICAgICAgaWYoIUlQUFUu aXNJRSgpKXsKICAgICAgCXRoaXMub3ZlcmxheS5zdHlsZS5oZWlnaHQgPSAoY2Qu eSAtIDEpICsgInB4IjsKICAgICAgfQkKICAgICAgaWYgKHRoaXMudmlzaWJsZU92 ZXJsYXkpIHsKICAgICAgICB0aGlzLm92ZXJsYXkuYmFja2dyb3VuZENvbG9yID0g IiMwMDAwMDAiOwogICAgICAgIGNoYW5nZU9wYWModGhpcy5vdmVybGF5LCAwLjUw KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLm92ZXJsYXkuYmFja2dyb3Vu ZENvbG9yID0gIiNGRkZGRkYiOwogICAgICAgIGNoYW5nZU9wYWModGhpcy5vdmVy bGF5LCAwLjApOwogICAgICB9CiAgICB9CiAgfSwKCiAgcmVzaXplSGFuZGxlciA6 IGZ1bmN0aW9uIChldnQpIHsKICAgIHRoaXMudXBkYXRlQ29udGVudCgpOwogIH0s CgogIHJlbW92ZUNsaWNrSGFuZGxlcnMgOiBmdW5jdGlvbiAoKSB7CiAgICBpZiAo IXRoaXMuY2xpY2tIYW5kbGVyU2V0dXApIHJldHVybjsKCiAgICB2YXIgbXlzZWxm ID0gdGhpczsKICAgIHZhciBoYW5kbGVyRnVuYyA9IGZ1bmN0aW9uIChldnQpIHsK ICAgICAgbXlzZWxmLmNsaWNrSGFuZGxlcihldnQpOwogICAgfTsKCiAgICBET00u cmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwgImNsaWNrIiwgdGhpcy5jbGlj a0hhbmRsZXJGdW5jLCBmYWxzZSk7CgogICAgaWYgKHRoaXMub3ZlcmxheSkgewog ICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm92ZXJsYXksICJjbGlj ayIsIHRoaXMuY2xpY2tIYW5kbGVyRnVuYywgdHJ1ZSk7CiAgICAgIHRoaXMub3Zl cmxheS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMub3ZlcmxheSk7CiAgICAg IHRoaXMub3ZlcmxheSA9IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0aGlzLmNsaWNr SGFuZGxlckZ1bmMgPSB1bmRlZmluZWQ7CiAgICB0aGlzLmNsaWNrSGFuZGxlclNl dHVwID0gZmFsc2U7CiAgfSwKCiAgc2V0Q2xpY2tUb0Nsb3NlIDogZnVuY3Rpb24g KGNsaWNrVG9DbG9zZSkgewogICAgdGhpcy5jbGlja1RvQ2xvc2UgPSBjbGlja1Rv Q2xvc2U7CgogICAgaWYgKCF0aGlzLmNsaWNrSGFuZGxlclNldHVwICYmIGNsaWNr VG9DbG9zZSAmJiB0aGlzLnZpc2libGUoKSkgewogICAgICAvLyBwb3B1cCBpcyBh bHJlYWR5IHZpc2libGUsIG5lZWQgdG8gc2V0IHVwIGNsaWNrIGhhbmRsZXIKICAg ICAgdmFyIHNldHVwQ2xpY2tDYXB0dXJlQ2FsbGJhY2sgPSB0aGlzLnNldHVwQ2xp Y2tDYXB0dXJlLmJpbmQodGhpcyk7CiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHNl dHVwQ2xpY2tDYXB0dXJlQ2FsbGJhY2ssIDEwMCk7CiAgICB9IGVsc2UgaWYgKCFj bGlja1RvQ2xvc2UgJiYgdGhpcy5jbGlja0hhbmRsZXJTZXR1cCkgewogICAgICB0 aGlzLnJlbW92ZUNsaWNrSGFuZGxlcnMoKTsKICAgIH0KCiAgICB0aGlzLnVwZGF0 ZUNvbnRlbnQoKTsKICB9LAoKICBzZXRNb2RhbCA6IGZ1bmN0aW9uIChtb2RhbCkg ewogICAgdmFyIGNoYW5nZWQgPSAodGhpcy5tb2RhbCA9PSBtb2RhbCk7CgogICAg Ly8gaWYgaXQncyBtb2RhbCwgd2UgZG9uJ3Qgd2FudCBjbGljay10by1jbG9zZQog ICAgaWYgKG1vZGFsKQogICAgICB0aGlzLnNldENsaWNrVG9DbG9zZShmYWxzZSk7 CgogICAgdGhpcy5tb2RhbCA9IG1vZGFsOwogICAgaWYgKGNoYW5nZWQpIHsKICAg ICAgdGhpcy5yZW1vdmVDbGlja0hhbmRsZXJzKCk7CiAgICAgIHRoaXMudXBkYXRl Q29udGVudCgpOwogICAgfQogIH0sCgogIHNldE92ZXJsYXlWaXNpYmxlIDogZnVu Y3Rpb24gKHZpcykgewogICAgdGhpcy52aXNpYmxlT3ZlcmxheSA9IHZpczsKICAg IHRoaXMudXBkYXRlQ29udGVudCgpOwogIH0sCgogIHVwZGF0ZUNvbnRlbnQgOiBm dW5jdGlvbiAoKSB7CiAgICB0aGlzLmF1dG9DZW50ZXIoKTsKICAgIHRoaXMudXBk YXRlVGl0bGViYXIoKTsKICAgIHRoaXMudXBkYXRlT3ZlcmxheSgpOwogICAgaWYg KHRoaXMudGl0bGViYXIpCiAgICAgIHRoaXMuc2V0VGl0bGViYXJDbGFzcyh0aGlz LnRpdGxlYmFyLmNsYXNzTmFtZSk7CgogICAgdmFyIHNldHVwQ2xpY2tDYXB0dXJl Q2FsbGJhY2sgPSB0aGlzLnNldHVwQ2xpY2tDYXB0dXJlLmJpbmQodGhpcyk7CiAg ICB3aW5kb3cuc2V0VGltZW91dChzZXR1cENsaWNrQ2FwdHVyZUNhbGxiYWNrLCAx MDApOwoKICAgIGlmICh0aGlzLmZpeGVkUG9zaXRpb24gJiYgdGhpcy5lbGUuc3R5 bGUucG9zaXRpb24gIT0gImZpeGVkIikKICAgICAgdGhpcy5lbGUuc3R5bGUucG9z aXRpb24gPSAiZml4ZWQiOwogICAgZWxzZSBpZiAoIXRoaXMuZml4ZWRQb3NpdGlv biAmJiB0aGlzLmVsZS5zdHlsZS5wb3NpdGlvbiA9PSAiZml4ZWQiKQogICAgICB0 aGlzLmVsZS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgfSwKCiAgZ2V0 VGl0bGViYXJFbGVtZW50IDogZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMu dGl0bGViYXI7CiAgfSwKCiAgc2V0VGl0bGViYXJDbGFzcyA6IGZ1bmN0aW9uIChj bGFzc05hbWUpIHsKICAgIGlmICh0aGlzLnRpdGxlYmFyKQogICAgICB0aGlzLnRp dGxlYmFyLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICB9LAoKICBzZXRPdmVyZmxv dyA6IGZ1bmN0aW9uIChvdmVyZmxvdykgewogICAgaWYgKHRoaXMuZWxlKQogICAg ICB0aGlzLmVsZS5zdHlsZS5vdmVyZmxvdyA9IG92ZXJmbG93OwogIH0sCgogIHZp c2libGUgOiBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy5zaG93bjsKICB9 LAoKICBzZXRUaXRsZWJhciA6IGZ1bmN0aW9uIChzaG93KSB7CiAgICB0aGlzLnNo b3dUaXRsZWJhciA9IHNob3c7CgogICAgaWYgKHNob3cpIHsKICAgICAgaWYgKCF0 aGlzLnRpdGxlYmFyKSB7CiAgICAgICAgLy8gdGl0bGViYXIgaGFzbid0IGJlZW4g Y3JlYXRlZC4gQ3JlYXRlIGl0LgogICAgICAgIHZhciB0YmFyID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgaWYgKCF0YmFyKSByZXR1cm47 CiAgICAgICAgdGJhci5zdHlsZS53aWR0aCA9ICIxMDAlIjsKCiAgICAgICAgaWYg KHRoaXMudGl0bGUpIHRiYXIuaW5uZXJIVE1MID0gdGhpcy50aXRsZTsKICAgICAg ICB0aGlzLmVsZS5pbnNlcnRCZWZvcmUodGJhciwgdGhpcy5jb250ZW50KTsKICAg ICAgICB0aGlzLnRpdGxlYmFyID0gdGJhcjsKCiAgICAgIH0KICAgIH0gZWxzZSBp ZiAodGhpcy50aXRsZWJhcikgewogICAgICB0aGlzLmVsZS5yZW1vdmVDaGlsZCh0 aGlzLnRpdGxlYmFyKTsKICAgICAgdGhpcy50aXRsZWJhciA9IGZhbHNlOwogICAg fQogIH0sCgogIHNldFRpdGxlIDogZnVuY3Rpb24gKHRpdGxlKSB7CiAgICB0aGlz LnRpdGxlID0gdGl0bGU7CiAgICB0aGlzLnVwZGF0ZVRpdGxlYmFyKCk7CiAgfSwK CiAgdXBkYXRlVGl0bGViYXIgOiBmdW5jdGlvbigpIHsKICAgIGlmICh0aGlzLnNo b3dUaXRsZWJhciAmJiB0aGlzLnRpdGxlYmFyICYmIHRoaXMudGl0bGUgIT0gdGhp cy50aXRsZWJhci5pbm5lckhUTUwpIHsKICAgICAgdGhpcy50aXRsZWJhci5pbm5l ckhUTUwgPSB0aGlzLnRpdGxlOwogICAgfQogIH0sCgogIGFkZENsYXNzIDogZnVu Y3Rpb24gKGNsYXNzTmFtZSkgewogICAgRE9NLmFkZENsYXNzTmFtZSh0aGlzLmVs ZSwgY2xhc3NOYW1lKTsKICB9LAoKICByZW1vdmVDbGFzcyA6IGZ1bmN0aW9uIChj bGFzc05hbWUpIHsKICAgIERPTS5yZW1vdmVDbGFzc05hbWUodGhpcy5lbGUsIGNs YXNzTmFtZSk7CiAgfSwKCiAgc2V0QXV0b0NlbnRlckNhbGxiYWNrIDogZnVuY3Rp b24gKGNhbGxiYWNrKSB7CiAgICB0aGlzLmF1dG9DZW50ZXJDYWxsYmFjayA9IGNh bGxiYWNrOwogIH0sCgogIGF1dG9DZW50ZXIgOiBmdW5jdGlvbiAoKSB7CiAgICBp ZiAoIXRoaXMudmlzaWJsZSB8fCAhdGhpcy52aXNpYmxlKCkpIHJldHVybjsKCiAg ICBpZiAodGhpcy5hdXRvQ2VudGVyQ2FsbGJhY2spIHsKICAgICAgdGhpcy5hdXRv Q2VudGVyQ2FsbGJhY2sodGhpcyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBp ZiAodGhpcy5hdXRvQ2VudGVyWCkKICAgICAgdGhpcy5jZW50ZXJYKCk7CgogICAg aWYgKHRoaXMuYXV0b0NlbnRlclkpCiAgICAgIHRoaXMuY2VudGVyWSgpOwogIH0s CgogIGNlbnRlciA6IGZ1bmN0aW9uICgpIHsKICAgIHRoaXMuY2VudGVyWCgpOwog ICAgdGhpcy5jZW50ZXJZKCk7CiAgfSwKCiAgY2VudGVyT25XaWRnZXQgOiBmdW5j dGlvbiAod2lkZ2V0LCBvZmZzZXRUb3AsIG9mZnNldExlZnQpIHsKICAgICAgICBv ZmZzZXRUb3AgPSBvZmZzZXRUb3AgfHwgMDsKICAgICAgICBvZmZzZXRMZWZ0ID0g b2Zmc2V0TGVmdCB8fCAwOwogICAgICAgIHRoaXMuc2V0QXV0b0NlbnRlcihmYWxz ZSwgZmFsc2UpOwogICAgICAgIHRoaXMuc2V0QXV0b0NlbnRlckNhbGxiYWNrKG51 bGwpOwogIHZhciB3ZCA9IERPTS5nZXRBYnNvbHV0ZURpbWVuc2lvbnMod2lkZ2V0 KTsKICAgIHZhciBlZCA9IERPTS5nZXRBYnNvbHV0ZURpbWVuc2lvbnModGhpcy5l bGUpOwogICAgdmFyIG5ld2xlZnQgPSAod2QuYWJzb2x1dGVSaWdodCAtIHdkLm9m ZnNldFdpZHRoIC8gMiAtIGVkLm9mZnNldFdpZHRoIC8gMikgKyBvZmZzZXRMZWZ0 OwogICAgdmFyIG5ld3RvcCA9ICh3ZC5hYnNvbHV0ZUJvdHRvbSAtIHdkLm9mZnNl dEhlaWdodCAvIDIgLSBlZC5vZmZzZXRIZWlnaHQgLyAyKSArIG9mZnNldFRvcDsK CiAgICAgICAgbmV3bGVmdCA9IG5ld2xlZnQgPCAwID8gMCA6IG5ld2xlZnQ7CiAg ICAgICAgbmV3dG9wICA9IG5ld3RvcCAgPCAwID8gMCA6IG5ld3RvcDsKICAgIERP TS5zZXRMZWZ0KHRoaXMuZWxlLCBuZXdsZWZ0KTsKICAgIERPTS5zZXRUb3AodGhp cy5lbGUsIG5ld3RvcCk7CiAgfSwKCiAgY2VudGVyWCA6IGZ1bmN0aW9uICgpIHsK ICAgIGlmICghdGhpcy52aXNpYmxlIHx8ICF0aGlzLnZpc2libGUoKSkgcmV0dXJu OwoKICAgIHZhciBjZCA9IERPTS5nZXRDbGllbnREaW1lbnNpb25zKCk7CiAgICB2 YXIgbmV3bGVmdCA9IGNkLnggLyAyIC0gRE9NLmdldERpbWVuc2lvbnModGhpcy5l bGUpLm9mZnNldFdpZHRoIC8gMjsKCiAgICAvLyBJZiBub3QgZml4ZWQgcG9zaXRp b24sIGNlbnRlciByZWxhdGl2ZSB0byB0aGUgbGVmdCBvZiB0aGUgcGFnZQogICAg aWYgKCF0aGlzLmZpeGVkUG9zaXRpb24pIHsKICAgICAgICB2YXIgd2QgPSBET00u Z2V0V2luZG93U2Nyb2xsKCk7CiAgICAgICAgbmV3bGVmdCArPSB3ZC5sZWZ0Owog ICAgfQoKICAgRE9NLnNldExlZnQodGhpcy5lbGUsIG5ld2xlZnQpOwogIH0sCgog IGNlbnRlclkgOiBmdW5jdGlvbiAoKSB7CiAgICBpZiAoIXRoaXMudmlzaWJsZSB8 fCAhdGhpcy52aXNpYmxlKCkpIHJldHVybjsKCiAgICB2YXIgY2QgPSBET00uZ2V0 Q2xpZW50RGltZW5zaW9ucygpOwogICAgdmFyIG5ld3RvcCA9IGNkLnkgLyAyIC0g RE9NLmdldERpbWVuc2lvbnModGhpcy5lbGUpLm9mZnNldEhlaWdodCAvIDI7Cgog ICAgLy8gSWYgbm90IGZpeGVkIHBvc2l0aW9uLCBjZW50ZXIgcmVsYXRpdmUgdG8g dGhlIHRvcCBvZiB0aGUgcGFnZQogICAgaWYgKCF0aGlzLmZpeGVkUG9zaXRpb24p IHsKICAgICAgICB2YXIgd2QgPSBET00uZ2V0V2luZG93U2Nyb2xsKCk7CiAgICAg ICAgbmV3dG9wICs9IHdkLnRvcDsKICAgIH0KCiAgICBET00uc2V0VG9wKHRoaXMu ZWxlLCBuZXd0b3ApOwogIH0sCgogIHNldEF1dG9DZW50ZXIgOiBmdW5jdGlvbiAo YXV0b0NlbnRlclgsIGF1dG9DZW50ZXJZKSB7CiAgICB0aGlzLmF1dG9DZW50ZXJY ID0gYXV0b0NlbnRlclggfHwgZmFsc2U7CiAgICB0aGlzLmF1dG9DZW50ZXJZID0g YXV0b0NlbnRlclkgfHwgZmFsc2U7CgogICAgaWYgKCFhdXRvQ2VudGVyWCAmJiAh YXV0b0NlbnRlclkpIHsKICAgICAgICB0aGlzLnNldEF1dG9DZW50ZXJDYWxsYmFj ayhudWxsKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdGhpcy5hdXRvQ2Vu dGVyKCk7CiAgfSwKCiAgc2V0RGltZW5zaW9ucyA6IGZ1bmN0aW9uICh3aWR0aCwg aGVpZ2h0KSB7CiAgICB3aWR0aCA9IHdpZHRoICsgIiI7CiAgICBoZWlnaHQgPSBo ZWlnaHQgKyAiIjsKICAgIGlmICh3aWR0aC5tYXRjaCgvXlxkKyQvKSkgd2lkdGgg Kz0gInB4IjsKICAgIGlmIChoZWlnaHQubWF0Y2goL15cZCskLykpIGhlaWdodCAr PSAicHgiOwoKICAgIHRoaXMuZWxlLnN0eWxlLndpZHRoICA9IHdpZHRoOwogICAg dGhpcy5lbGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0OwogIH0sCgogIG1vdmVGb3J3 YXJkIDogZnVuY3Rpb24gKGhvd011Y2gpIHsKICAgICAgaWYgKCFob3dNdWNoKSBo b3dNdWNoID0gMTsKICAgICAgaWYgKCEgdGhpcy5lbGUpIHJldHVybjsKCiAgICAg IHRoaXMuZWxlLnN0eWxlLnpJbmRleCArPSBob3dNdWNoOwogIH0sCgogIG1vdmVC YWNrd2FyZCA6IGZ1bmN0aW9uIChob3dNdWNoKSB7CiAgICAgIGlmICghaG93TXVj aCkgaG93TXVjaCA9IDE7CiAgICAgIGlmICghIHRoaXMuZWxlKSByZXR1cm47Cgog ICAgICB0aGlzLmVsZS5zdHlsZS56SW5kZXggLT0gaG93TXVjaDsKICB9LAoKICBz ZXRMb2NhdGlvbiA6IGZ1bmN0aW9uIChsZWZ0LCB0b3ApIHsKICAgICAgdGhpcy5z ZXRMZWZ0KGxlZnQpOwogICAgICB0aGlzLnNldFRvcCh0b3ApOwogIH0sCgogIHNl dFRvcCA6IGZ1bmN0aW9uICh0b3ApIHsKICAgIHRvcCA9IHRvcCArICIiOwogICAg aWYgKHRvcC5tYXRjaCgvXlxkKyQvKSkgdG9wICs9ICJweCI7CiAgICB0aGlzLmVs ZS5zdHlsZS50b3AgPSB0b3A7CiAgfSwKCiAgc2V0TGVmdCA6IGZ1bmN0aW9uIChs ZWZ0KSB7CiAgICBsZWZ0ID0gbGVmdCArICIiOwogICAgaWYgKGxlZnQubWF0Y2go L15cZCskLykpIGxlZnQgKz0gInB4IjsKICAgIHRoaXMuZWxlLnN0eWxlLmxlZnQg PSBsZWZ0OwogIH0sCgogIGdldEVsZW1lbnQgOiBmdW5jdGlvbiAoKSB7CiAgICBy ZXR1cm4gdGhpcy5lbGU7CiAgfSwKCiAgc2V0Q29udGVudCA6IGZ1bmN0aW9uICho dG1sKSB7CiAgICB0aGlzLmNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDsKICB9LAoK ICBzZXRDb250ZW50RWxlbWVudCA6IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICAg IC8vIHJlbW92ZSBjaGlsZCBub2RlcwogICAgICB3aGlsZSAodGhpcy5jb250ZW50 LmZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHRoaXMuY29udGVudC5yZW1vdmVDaGls ZCh0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCk7CiAgICAgIH07CgogICAgdGhpcy5j b250ZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpOwogIH0sCgogIHNldEZhZGVJbiA6 IGZ1bmN0aW9uIChmYWRlSW4pIHsKICAgICAgdGhpcy5mYWRlSW4gPSBmYWRlSW47 CiAgfSwKCiAgc2V0RmFkZU91dCA6IGZ1bmN0aW9uIChmYWRlT3V0KSB7CiAgICAg IHRoaXMuZmFkZU91dCA9IGZhZGVPdXQ7CiAgfSwKCiAgc2V0RmFkZVNwZWVkIDog ZnVuY3Rpb24gKGZhZGVTcGVlZCkgewogICAgICB0aGlzLmZhZGVTcGVlZCA9IGZh ZGVTcGVlZDsKICB9LAoKICBzaG93IDogZnVuY3Rpb24gKCkgewogICAgdGhpcy5z aG93biA9IHRydWU7CgogICAgaWYgKHRoaXMuZmFkZUluKSB7CiAgICAgICAgdmFy IG9wcCA9IDAuMDE7CgogICAgICAgIGNoYW5nZU9wYWModGhpcy5lbGUsIG9wcCk7 CiAgICB9CgogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmVsZSk7 CiAgICB0aGlzLmVsZS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICBp ZiAodGhpcy5hdXRvQ2VudGVyWCB8fCB0aGlzLmF1dG9DZW50ZXJZKSB0aGlzLmNl bnRlcigpOwoKICAgIHRoaXMudXBkYXRlQ29udGVudCgpOwoKICAgIGlmICghdGhp cy5yZXNpemVIYW5kbGVyRnVuYykgewogICAgICB0aGlzLnJlc2l6ZUhhbmRsZXJG dW5jID0gdGhpcy5yZXNpemVIYW5kbGVyLmJpbmRFdmVudExpc3RlbmVyKHRoaXMp OwogICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICJyZXNpemUiLCB0 aGlzLnJlc2l6ZUhhbmRsZXJGdW5jLCBmYWxzZSk7CiAgICB9CgogICAgaWYgKHRo aXMuZmFkZUluKQogICAgICAgIHRoaXMuZmFkZSgiaW4iKTsKCiAgICB0aGlzLmhp ZGVTZWxlY3RzKCk7CiAgfSwKCiAgZmFkZSA6IGZ1bmN0aW9uIChtb2RlLCBjYWxs YmFjaykgewogICAgICB2YXIgb3BwOwogICAgICB2YXIgZGVsdGE7CgogICAgICB2 YXIgc3RlcHMgPSAxMC4wOwoKICAgICAgaWYgKG1vZGUgPT0gImluIikgewogICAg ICAgICAgZGVsdGEgPSAxIC8gc3RlcHM7CiAgICAgICAgICBvcHAgPSAwLjE7CiAg ICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAodGhpcy5lbGUuc3R5bGUub3BhY2l0 eSkKICAgICAgICAgIG9wcCA9IGZpbml0ZUZsb2F0KHRoaXMuZWxlLnN0eWxlLm9w YWNpdHkpOwogICAgICAgICAgZWxzZQogICAgICAgICAgb3BwID0gMC45OTsKCiAg ICAgICAgICBkZWx0YSA9IC0xIC8gc3RlcHM7CiAgICAgIH0KCiAgICAgIHZhciBm YWRlU3BlZWQgPSB0aGlzLmZhZGVTcGVlZDsKICAgICAgaWYgKCFmYWRlU3BlZWQp IGZhZGVTcGVlZCA9IDE7CgogICAgICB2YXIgZmFkZUludGVydmFsID0gc3RlcHMg LyBmYWRlU3BlZWQgKiA1OwoKICAgICAgdGhpcy5mYWRlTW9kZSA9IG1vZGU7Cgog ICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgIHZhciBmYWRlID0gZnVuY3Rpb24g KCkgewogICAgICAgICAgb3BwICs9IGRlbHRhOwoKICAgICAgICAgIC8vIGRpZCBz b21lb25lIHN0YXJ0IGEgZmFkZSBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uPyBpZiBz bywKICAgICAgICAgIC8vIGNhbmNlbCB0aGlzIGZhZGUKICAgICAgICAgIGlmIChz ZWxmLmZhZGVNb2RlICYmIHNlbGYuZmFkZU1vZGUgIT0gbW9kZSkgewogICAgICAg ICAgICAgIGlmIChjYWxsYmFjaykKICAgICAgICAgICAgICAgICAgY2FsbGJhY2su Y2FsbChzZWxmLCBbXSk7CgogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg IH0KCiAgICAgICAgICBpZiAob3BwIDw9IDAuMSkgewogICAgICAgICAgICAgIGlm IChjYWxsYmFjaykKICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChzZWxm LCBbXSk7CgogICAgICAgICAgICAgIHNlbGYuZmFkZU1vZGUgPSBudWxsOwoKICAg ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgaWYgKG9wcCA+PSAx LjApIHsKICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spCiAgICAgICAgICAgICAg ICAgIGNhbGxiYWNrLmNhbGwoc2VsZiwgW10pOwoKICAgICAgICAgICAgICBzZWxm LmZhZGVNb2RlID0gbnVsbDsKCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg ICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjaGFuZ2VPcGFjKHNlbGYuZWxlLCBv cHApOwogICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZhZGUsIGZhZGVJ bnRlcnZhbCk7CiAgICAgICAgICB9CiAgICAgIH07CgogICAgICBmYWRlKCk7CiAg fSwKCiAgaGlkZSA6IGZ1bmN0aW9uICgpIHsKICAgIGlmICghIHRoaXMudmlzaWJs ZSgpKSByZXR1cm47CgogICAgaWYgKHRoaXMuZmFkZU91dCAmJiB0aGlzLmVsZSkg ewogICAgICAgIHRoaXMuZmFkZSgib3V0IiwgdGhpcy5faGlkZS5iaW5kKHRoaXMp KTsKICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5faGlkZSgpOwogICAgfQogIH0s CgogIF9oaWRlIDogZnVuY3Rpb24gKCkgewogICAgaWYgKHRoaXMuaGlkZGVuQ2Fs bGJhY2spCiAgICAgIHRoaXMuaGlkZGVuQ2FsbGJhY2soKTsKCiAgICB0aGlzLnNo b3duID0gZmFsc2U7CiAgICB0aGlzLnJlbW92ZUNsaWNrSGFuZGxlcnMoKTsKCiAg ICBpZiAodGhpcy5lbGUpCiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRo aXMuZWxlKTsKCiAgICBpZiAodGhpcy5yZXNpemVIYW5kbGVyRnVuYykKICAgICAg RE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCAicmVzaXplIiwgdGhpcy5y ZXNpemVIYW5kbGVyRnVuYyk7CgogICAgdGhpcy5zaG93U2VsZWN0cygpOwogIH0s CgogIC8vIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgZm9yIElFIGJlaW5nIGR1bWIK ICAvLyAoSUUgdGhpbmtzIHNlbGVjdCBlbGVtZW50cyBhcmUgY29vbCBhbmQgcHV0 cyB0aGVtIGluIGZyb250IG9mIGV2ZXJ5IGVsZW1lbnQgb24gdGhlIHBhZ2UpCiAg c2V0QXV0b0hpZGVTZWxlY3RzIDogZnVuY3Rpb24gKGF1dG9oaWRlKSB7CiAgICB0 aGlzLmF1dG9IaWRlU2VsZWN0cyA9IGF1dG9oaWRlOwogICAgdGhpcy51cGRhdGVD b250ZW50KCk7CiAgfSwKCiAgaGlkZVNlbGVjdHMgOiBmdW5jdGlvbiAoKSB7CiAg ICBpZiAoIXRoaXMuYXV0b0hpZGVTZWxlY3RzIHx8ICFJUFBVLmlzSUUoKSkgcmV0 dXJuOwogICAgdmFyIHNlbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt ZSgic2VsZWN0Iik7CiAgICB2YXIgZWxlOwogICAgZm9yICh2YXIgaSA9IDA7IGkg PCBzZWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGVsZSA9IHNlbHNbaV07CiAgICAg IGlmICghZWxlKSBjb250aW51ZTsKCiAgICAgIC8vIGlmIHRoaXMgZWxlbWVudCBp cyBpbnNpZGUgdGhlIGlwcHUsIHNraXAgaXQKICAgICAgaWYgKERPTS5nZXRBbmNl c3RvcnNCeUNsYXNzTmFtZShlbGUsICJpcHB1IiwgdHJ1ZSkubGVuZ3RoID4gMCkg Y29udGludWU7CgogICAgICBpZiAoZWxlLnN0eWxlLnZpc2liaWxpdHkgIT0gJ2hp ZGRlbicpIHsKICAgICAgICBlbGUuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4n OwogICAgICAgIHRoaXMuaGlkZGVuU2VsZWN0cy5wdXNoKGVsZSk7CiAgICAgIH0K ICAgIH0KICB9LAoKICBzaG93U2VsZWN0cyA6IGZ1bmN0aW9uICgpIHsKICAgIGlm ICghIHRoaXMuYXV0b0hpZGVTZWxlY3RzKSByZXR1cm47CiAgICB2YXIgZWxlOwog ICAgd2hpbGUgKGVsZSA9IHRoaXMuaGlkZGVuU2VsZWN0cy5wb3AoKSkKICAgICAg ZWxlLnN0eWxlLnZpc2liaWxpdHkgPSAnJzsKICB9LAoKICBpbml0OiBmdW5jdGlv biAoaHRtbCkgewogICAgdmFyIGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo ImRpdiIpOwogICAgdGhpcy5lbGUgPSBlbGU7CiAgICB0aGlzLnNob3duID0gZmFs c2U7CiAgICB0aGlzLmF1dG9DZW50ZXJYID0gZmFsc2U7CiAgICB0aGlzLmF1dG9D ZW50ZXJZID0gZmFsc2U7CiAgICB0aGlzLnRpdGxlYmFyID0gbnVsbDsKICAgIHRo aXMudGl0bGUgPSAiIjsKICAgIHRoaXMuc2hvd1RpdGxlYmFyID0gZmFsc2U7CiAg ICB0aGlzLmNsaWNrVG9DbG9zZSA9IGZhbHNlOwogICAgdGhpcy5tb2RhbCA9IGZh bHNlOwogICAgdGhpcy5jbGlja0hhbmRsZXJTZXR1cCA9IGZhbHNlOwogICAgdGhp cy5kb2NPdmVybGF5ID0gZmFsc2U7CiAgICB0aGlzLnZpc2libGVPdmVybGF5ID0g ZmFsc2U7CiAgICB0aGlzLmNsaWNrSGFuZGxlckZ1bmMgPSBmYWxzZTsKICAgIHRo aXMucmVzaXplSGFuZGxlckZ1bmMgPSBmYWxzZTsKICAgIHRoaXMuZml4ZWRQb3Np dGlvbiA9IGZhbHNlOwogICAgdGhpcy5hdXRvQ2VudGVyQ2FsbGJhY2sgPSBudWxs OwogICAgdGhpcy5jYW5jZWxsZWRDYWxsYmFjayA9IG51bGw7CiAgICB0aGlzLmF1 dG9IaWRlU2VsZWN0cyA9IGZhbHNlOwogICAgdGhpcy5oaWRkZW5DYWxsYmFjayA9 IG51bGw7CiAgICB0aGlzLmZhZGVPdXQgPSBmYWxzZTsKICAgIHRoaXMuZmFkZUlu ID0gZmFsc2U7CiAgICB0aGlzLmhpZGRlblNlbGVjdHMgPSBbXTsKICAgIHRoaXMu ZmFkZU1vZGUgPSBudWxsOwoKICAgIGVsZS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNv bHV0ZSI7CiAgICBlbGUuc3R5bGUuekluZGV4ICAgPSAiMTAwMCI7CgogICAgLy8g cGx6IGRvbid0IHJlbW92ZSB0aHgKICAgIERPTS5hZGRDbGFzc05hbWUoZWxlLCAi aXBwdSIpOwoKICAgIC8vIGNyZWF0ZSBESVYgdG8gaG9sZCB1c2VyJ3MgY29udGVu dAogICAgdGhpcy5jb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2 Iik7CgogICAgdGhpcy5jb250ZW50LmlubmVySFRNTCA9IGh0bWw7CgogICAgdGhp cy5lbGUuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTsKICB9Cn0pOwoKLy8gY2xh c3MgbWV0aG9kcwpJUFBVLmNlbnRlciA9IGZ1bmN0aW9uIChvYmopIHsKICBvYmou Y2VudGVyWCgpOwogIG9iai5jZW50ZXJZKCk7Cn07CgpJUFBVLmNlbnRlclggPSBm dW5jdGlvbiAob2JqKSB7CiAgb2JqLmNlbnRlclgoKTsKfTsKCklQUFUuY2VudGVy WSA9IGZ1bmN0aW9uIChvYmopIHsKICBvYmouY2VudGVyWSgpOwp9OwoKSVBQVS5p c0lFID0gZnVuY3Rpb24gKCkgewogICAgdmFyIFVBID0gbmF2aWdhdG9yLnVzZXJB Z2VudC50b0xvd2VyQ2FzZSgpOwogICAgaWYgKFVBLmluZGV4T2YoJ21zaWUnKSAh PSAtMSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7Cn07CgpJUFBVLmlz U2FmYXJpID0gZnVuY3Rpb24gKCkgewogICAgdmFyIFVBID0gbmF2aWdhdG9yLnVz ZXJBZ2VudC50b0xvd2VyQ2FzZSgpOwogICAgaWYgKFVBLmluZGV4T2YoJ3NhZmFy aScpICE9IC0xKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKfTsKTEpf SVBQVSA9IG5ldyBDbGFzcyAoIElQUFUsIHsKICBpbml0OiBmdW5jdGlvbih0aXRs ZSkgewogICAgaWYgKCF0aXRsZSkKICAgICAgdGl0bGUgPSAiIjsKCiAgICBMSl9J UFBVLnN1cGVyQ2xhc3MuaW5pdC5hcHBseSh0aGlzLCBbXSk7CgogICAgdGhpcy51 bmlxSWQgPSB0aGlzLmdlbmVyYXRlVW5pcUlkKCk7CiAgICB0aGlzLmNhbmNlbFRo aXNGdW5jID0gdGhpcy5jYW5jZWwuYmluZCh0aGlzKTsKCiAgICB0aGlzLnNldFRp dGxlKHRpdGxlKTsKICAgIHRoaXMuc2V0VGl0bGViYXIodHJ1ZSk7CiAgICB0aGlz LnNldFRpdGxlYmFyQ2xhc3MoImxqX2lwcHVfdGl0bGViYXIiKTsKCiAgICB0aGlz LmFkZENsYXNzKCJsal9pcHB1Iik7CiAgICB0aGlzLnNldEF1dG9DZW50ZXJDYWxs YmFjayhJUFBVLmNlbnRlcik7CiAgICB0aGlzLnNldERpbWVuc2lvbnMoNDAwLCAi YXV0byIpOwogICAgLy90aGlzLnNldE92ZXJmbG93KCJoaWRkZW4iKTsKCiAgICB0 aGlzLnNldEZpeGVkUG9zaXRpb24odHJ1ZSk7CiAgICB0aGlzLnNldENsaWNrVG9D bG9zZSh0cnVlKTsKICAgIHRoaXMuc2V0QXV0b0hpZGVTZWxlY3RzKHRydWUpOwog fSwKCiAgc2V0VGl0bGU6IGZ1bmN0aW9uICh0aXRsZSkgewogICAgdmFyIHRpdGxl YmFyQ29udGVudCA9ICJcCiAgICAgIDxkaXYgc3R5bGU9J2Zsb2F0OnJpZ2h0OyBw YWRkaW5nLXJpZ2h0OiA4cHgnPiIgKwogICAgICAiPGltZyBzcmM9JyIgKyBTaXRl LmltZ3ByZWZpeCArICIvQ2xvc2VCdXR0b24uZ2lmJyB3aWR0aD0nMTUnIGhlaWdo dD0nMTUnIGlkPSciICsgdGhpcy51bmlxSWQgKyAiX2NhbmNlbCcgLz48L2Rpdj4i ICsgdGl0bGU7CgogICAgTEpfSVBQVS5zdXBlckNsYXNzLnNldFRpdGxlLmFwcGx5 KHRoaXMsIFt0aXRsZWJhckNvbnRlbnRdKTsKICAgIAogICAgICAKICB9LAoKICBn ZW5lcmF0ZVVuaXFJZDogZnVuY3Rpb24oKSB7CiAgICB2YXIgdGhlRGF0ZSA9IG5l dyBEYXRlKCk7CiAgICByZXR1cm4gImxqX2lwcHVfIiArIHRoZURhdGUuZ2V0SG91 cnMoKSArIHRoZURhdGUuZ2V0TWludXRlcygpICsgdGhlRGF0ZS5nZXRNaWxsaXNl Y29uZHMoKTsKICB9LAoKICBzaG93OiBmdW5jdGlvbigpIHsKICAgIExKX0lQUFUu c3VwZXJDbGFzcy5zaG93LmFwcGx5KHRoaXMpOwogICAgdmFyIHNldHVwQ2FsbGJh Y2sgPSB0aGlzLnNldHVwX2xqX2lwcHUuYmluZCh0aGlzKTsKICAgIHRoaXMudGlt ZXJTZXR1cCA9IHdpbmRvdy5zZXRUaW1lb3V0KHNldHVwQ2FsbGJhY2ssIDMwMCk7 CiAgfSwKCiAgc2V0dXBfbGpfaXBwdTogZnVuY3Rpb24gKGV2dCkgewogICAgdmFy IGNhbmNlbENhbGxiYWNrID0gdGhpcy5jYW5jZWxUaGlzRnVuYzsKICAgLy9ET00u YWRkRXZlbnRMaXN0ZW5lcigkKHRoaXMudW5pcUlkICsgIl9jYW5jZWwiKSwgImNs aWNrIiwgY2FuY2VsQ2FsbGJhY2ssIHRydWUpOwogICAkKHRoaXMudW5pcUlkICsg Il9jYW5jZWwiKS5vbmNsaWNrID0gZnVuY3Rpb24oKXsKCSAgICBjYW5jZWxDYWxs YmFjaygpOwogICAgfTsKICB9LAoKICBoaWRlOiBmdW5jdGlvbigpIHsKICAgIGNs ZWFySW50ZXJ2YWwodGhpcy50aW1lclNldHVwKTsKICAgIExKX0lQUFUuc3VwZXJD bGFzcy5oaWRlLmFwcGx5KHRoaXMpOwogIH0KfSApOwoKLy8gQ2xhc3MgbWV0aG9k IHRvIHNob3cgYSBwb3B1cCB0byBzaG93IGEgbm90ZSB0byB0aGUgdXNlcgovLyBu b3RlID0gbWVzc2FnZSB0byBzaG93Ci8vIHVuZGVyZWxlID0gZWxlbWVudCB0byBk aXNwbGF5IHRoZSBub3RlIHVuZGVybmVhdGgKTEpfSVBQVS5zaG93Tm90ZSA9IGZ1 bmN0aW9uIChub3RlLCB1bmRlcmVsZSwgdGltZW91dCwgc3R5bGUpIHsKICAgIHZh ciBub3RlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwog ICAgbm90ZUVsZW1lbnQuaW5uZXJIVE1MID0gbm90ZTsKCiAgICByZXR1cm4gTEpf SVBQVS5zaG93Tm90ZUVsZW1lbnQobm90ZUVsZW1lbnQsIHVuZGVyZWxlLCB0aW1l b3V0LCBzdHlsZSk7Cn07CgpMSl9JUFBVLnNob3dFcnJvck5vdGUgPSBmdW5jdGlv biAobm90ZSwgdW5kZXJlbGUsIHRpbWVvdXQpIHsKICAgIHJldHVybiBMSl9JUFBV LnNob3dOb3RlKG5vdGUsIHVuZGVyZWxlLCB0aW1lb3V0LCAiRXJyb3JOb3RlIik7 Cn07CgpMSl9JUFBVLnNob3dOb3RlRWxlbWVudCA9IGZ1bmN0aW9uIChub3RlRWxl LCB1bmRlcmVsZSwgdGltZW91dCwgc3R5bGUpIHsKICAgIHZhciBub3RlUG9wdXAg PSBuZXcgSVBQVSgpOwogICAgbm90ZVBvcHVwLmluaXQoKTsKCiAgICB2YXIgaW5u ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIERPTS5hZGRD bGFzc05hbWUoaW5uZXIsICJJbm5lciIpOwogICAgaW5uZXIuYXBwZW5kQ2hpbGQo bm90ZUVsZSk7CiAgICBub3RlUG9wdXAuc2V0Q29udGVudEVsZW1lbnQoaW5uZXIp OwoKICAgIG5vdGVQb3B1cC5zZXRUaXRsZWJhcihmYWxzZSk7CiAgICBub3RlUG9w dXAuc2V0RmFkZUluKHRydWUpOwogICAgbm90ZVBvcHVwLnNldEZhZGVPdXQodHJ1 ZSk7CiAgICBub3RlUG9wdXAuc2V0RmFkZVNwZWVkKDQpOwogICAgbm90ZVBvcHVw LnNldERpbWVuc2lvbnMoImF1dG8iLCAiYXV0byIpOwogICAgaWYgKCFzdHlsZSkg c3R5bGUgPSAiTm90ZSI7CiAgICBub3RlUG9wdXAuYWRkQ2xhc3Moc3R5bGUpOwoK ICAgIHZhciBkaW07CiAgICBpZiAodW5kZXJlbGUpIHsKICAgICAgICAvLyBwb3Ag dXAgdGhlIGJveCByaWdodCB1bmRlciB0aGUgZWxlbWVudAogICAgICAgIGRpbSA9 IERPTS5nZXRBYnNvbHV0ZURpbWVuc2lvbnModW5kZXJlbGUpOwogICAgICAgIGlm ICghZGltKSByZXR1cm47CiAgICB9CgogICAgdmFyIGJvdW5kcyA9IERPTS5nZXRD bGllbnREaW1lbnNpb25zKCk7CiAgICBpZiAoIWJvdW5kcykgcmV0dXJuOwoKICAg IGlmICghZGltKSB7CiAgICAgICAgLy8gbm8gZWxlbWVudCBzcGVjaWZpZWQgdG8g cG9wIHVwIG9uLCBzaG93IGluIHRoZSBtaWRkbGUKICAgICAgICAvLyBub3RlUG9w dXAuc2V0TW9kYWwodHJ1ZSk7CiAgICAgICAgLy8gbm90ZVBvcHVwLnNldE92ZXJs YXlWaXNpYmxlKHRydWUpOwogICAgICAgIG5vdGVQb3B1cC5zZXRBdXRvQ2VudGVy KHRydWUsIHRydWUpOwogICAgICAgIG5vdGVQb3B1cC5zaG93KCk7CiAgICB9IGVs c2UgewogICAgICAgIC8vIGRlZmF1bHQgaXMgdG8gYXV0by1jZW50ZXIsIGRvbid0 IHdhbnQgdGhhdAogICAgICAgIG5vdGVQb3B1cC5zZXRBdXRvQ2VudGVyKGZhbHNl LCBmYWxzZSk7CiAgICAgICAgbm90ZVBvcHVwLnNldExvY2F0aW9uKGRpbS5hYnNv bHV0ZUxlZnQsIGRpbS5hYnNvbHV0ZUJvdHRvbSArIDQpOwogICAgICAgIG5vdGVQ b3B1cC5zaG93KCk7CgogICAgICAgIHZhciBwb3B1cEJvdW5kcyA9IERPTS5nZXRB YnNvbHV0ZURpbWVuc2lvbnMobm90ZVBvcHVwLmdldEVsZW1lbnQoKSk7CiAgICAg ICAgaWYgKHBvcHVwQm91bmRzLmFic29sdXRlUmlnaHQgPiBib3VuZHMueCkgewog ICAgICAgICAgICBub3RlUG9wdXAuc2V0TG9jYXRpb24oYm91bmRzLnggLSBwb3B1 cEJvdW5kcy5vZmZzZXRXaWR0aCAtIDMwLCBkaW0uYWJzb2x1dGVCb3R0b20gKyA0 KTsKICAgICAgICB9CiAgICB9CgogICAgbm90ZVBvcHVwLnNldENsaWNrVG9DbG9z ZSh0cnVlKTsKICAgIG5vdGVQb3B1cC5tb3ZlRm9yd2FyZCgpOwoKICAgIGlmICgh IGRlZmluZWQodGltZW91dCkpIHsKICAgICAgICB0aW1lb3V0ID0gNTAwMDsKICAg IH0KCiAgICBpZiAodGltZW91dCkgewogICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0 KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKG5vdGVQb3B1cCkKICAgICAg ICAgICAgICAgIG5vdGVQb3B1cC5oaWRlKCk7CiAgICAgICAgfSwgdGltZW91dCk7 CiAgICB9CgogICAgcmV0dXJuIG5vdGVQb3B1cDsKfTsKCkxKX0lQUFUudGV4dFBy b21wdCA9IGZ1bmN0aW9uICh0aXRsZSwgcHJvbXB0LCBjYWxsYmFjaykgewogICAg dGl0bGUgKz0gJyc7CiAgICB2YXIgbm90ZVBvcHVwID0gbmV3IExKX0lQUFUodGl0 bGUpOwoKICAgIHZhciBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp diIpOwogICAgRE9NLmFkZENsYXNzTmFtZShpbm5lciwgImxqaXBwdV90ZXh0cHJv bXB0Iik7CgogICAgLy8gbGFiZWwKICAgIGlmIChwcm9tcHQpCiAgICAgICAgaW5u ZXIuYXBwZW5kQ2hpbGQoX3RleHREaXYocHJvbXB0KSk7CgogICAgLy8gdGV4dCBm aWVsZAogICAgdmFyIGZpZWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4 dGFyZWEiKTsKICAgIERPTS5hZGRDbGFzc05hbWUoZmllbGQsICJodG1sZmllbGQi KTsKICAgIGZpZWxkLmNvbHMgPSA0MDsKICAgIGZpZWxkLnJvd3MgPSA1OwogICAg aW5uZXIuYXBwZW5kQ2hpbGQoZmllbGQpOwoKICAgIC8vIHN1Ym1pdCBidG4KICAg IHZhciBidG5jb250ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAg ICBET00uYWRkQ2xhc3NOYW1lKGJ0bmNvbnQsICJzdWJtaXRidG5jb250YWluZXIi KTsKICAgIHZhciBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIp OwogICAgRE9NLmFkZENsYXNzTmFtZShidG4sICJzdWJtaXRidG4iKTsKICAgIGJ0 bi50eXBlID0gImJ1dHRvbiI7CiAgICBidG4udmFsdWUgPSAiSW5zZXJ0IjsKICAg IGJ0bmNvbnQuYXBwZW5kQ2hpbGQoYnRuKTsKICAgIGlubmVyLmFwcGVuZENoaWxk KGJ0bmNvbnQpOwoKICAgIG5vdGVQb3B1cC5zZXRDb250ZW50RWxlbWVudChpbm5l cik7CgogICAgbm90ZVBvcHVwLnNldEF1dG9DZW50ZXIodHJ1ZSwgdHJ1ZSk7CiAg ICBub3RlUG9wdXAuc2V0RGltZW5zaW9ucygiNjAlIiwgImF1dG8iKTsKICAgIG5v dGVQb3B1cC5zaG93KCk7CiAgICBmaWVsZC5mb2N1cygpOwoKICAgIERPTS5hZGRF dmVudExpc3RlbmVyKGJ0biwgImNsaWNrIiwgZnVuY3Rpb24gKGUpIHsKICAgICAg ICBub3RlUG9wdXAuaGlkZSgpOwogICAgICAgIGlmIChjYWxsYmFjaykKICAgICAg ICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2ZpZWxkLnZhbHVlXSk7CiAgICB9 KTsKfQovLyBMaXZlSm91cm5hbCBqYXZhc2NyaXB0IHN0YW5kYXJkIGludGVyZmFj ZSByb3V0aW5lcwoKLy8gY3JlYXRlIGEgbGl0dGxlIGFuaW1hdGVkIGhvdXJnbGFz cyBhdCAoeCx5KSB3aXRoIGEgdW5pcXVlLWlzaCBJRAovLyByZXR1cm5zIHRoZSBl bGVtZW50IGNyZWF0ZWQKSG91cmdsYXNzID0gbmV3IENsYXNzKCBPYmplY3QsIHsK ICBpbml0OiBmdW5jdGlvbih3aWRnZXQsIGNsYXNzbmFtZSkgewogICAgdGhpcy5l bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKICAgIGlmICghdGhp cy5lbGUpIHJldHVybjsKCiAgICB2YXIgaW1ncHJlZml4ID0gU2l0ZSA/IFNpdGUu aW1ncHJlZml4IDogJyc7CgogICAgdGhpcy5lbGUuc3JjID0gaW1ncHJlZml4ID8g aW1ncHJlZml4ICsgIi9ob3VyZ2xhc3MuZ2lmIiA6ICIvaW1nL2hvdXJnbGFzcy5n aWYiOwogICAgdGhpcy5lbGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwoK ICAgIERPTS5hZGRDbGFzc05hbWUodGhpcy5lbGUsIGNsYXNzbmFtZSk7CgogICAg aWYgKHdpZGdldCkKICAgICAgdGhpcy5ob3VyZ2xhc3NfYXRfd2lkZ2V0KHdpZGdl dCk7CiAgfSwKCiAgaG91cmdsYXNzX2F0OiBmdW5jdGlvbiAoeCwgeSkgewogICAg dGhpcy5lbGUud2lkdGggPSAxNzsKICAgIHRoaXMuZWxlLmhlaWdodCA9IDE3Owog ICAgdGhpcy5lbGUuc3R5bGUudG9wID0gKHkgLSA4KSArICJweCI7CiAgICB0aGlz LmVsZS5zdHlsZS5sZWZ0ID0gKHggLSA4KSArICJweCI7CgogICAgLy8gdW5pcXVl IElECiAgICB0aGlzLmVsZS5pZCA9ICJsal9ob3VyZ2xhc3MiICsgeCArICIuIiAr IHk7CgogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmVsZSk7CiAg fSwKCiAgYWRkX2NsYXNzX25hbWU6IGZ1bmN0aW9uIChjbGFzc25hbWUpIHsKICAg ICAgaWYgKHRoaXMuZWxlKQogICAgICBET00uYWRkQ2xhc3NOYW1lKHRoaXMuZWxl LCBjbGFzc25hbWUpOwogIH0sCgogIGhvdXJnbGFzc19hdF93aWRnZXQ6IGZ1bmN0 aW9uICh3aWRnZXQpIHsKICAgIHZhciBkaW0gPSBET00uZ2V0QWJzb2x1dGVEaW1l bnNpb25zKHdpZGdldCk7CiAgICB2YXIgeCA9IGRpbS5hYnNvbHV0ZUxlZnQ7CiAg ICB2YXIgeSA9IGRpbS5hYnNvbHV0ZVRvcDsKICAgIHZhciB3ID0gZGltLmFic29s dXRlUmlnaHQgLSB4OwogICAgdmFyIGggPSBkaW0uYWJzb2x1dGVCb3R0b20gLSB5 OwogICAgaWYgKHcgJiYgaCkgewogICAgICB4ICs9IHcvMjsKICAgICAgeSArPSBo LzI7CiAgICB9CiAgICB0aGlzLmhvdXJnbGFzc19hdCh4LCB5KTsKICB9LAoKICBo aWRlOiBmdW5jdGlvbiAoKSB7CiAgICBpZiAodGhpcy5lbGUpIHsKICAgICAgdHJ5 IHsKICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuZWxlKTsK ICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0KICB9Cgp9ICk7CnZhciBDb250ZXh0 dWFsUG9wdXAgPSBuZXcgT2JqZWN0OwoKQ29udGV4dHVhbFBvcHVwLnBvcHVwRGVs YXkgID0gNTAwOwpDb250ZXh0dWFsUG9wdXAuaGlkZURlbGF5ICAgPSAyNTA7CkNv bnRleHR1YWxQb3B1cC5kaXNhYmxlQUpBWCA9IGZhbHNlOwoKQ29udGV4dHVhbFBv cHVwLmNhY2hlZFJlc3VsdHMgICA9IHt9OwpDb250ZXh0dWFsUG9wdXAuY3VycmVu dFJlcXVlc3RzID0ge307CkNvbnRleHR1YWxQb3B1cC5tb3VzZUluVGltZXIgICAg PSBudWxsOwpDb250ZXh0dWFsUG9wdXAubW91c2VPdXRUaW1lciAgID0gbnVsbDsK Q29udGV4dHVhbFBvcHVwLmN1cnJlbnRJZCAgICAgICA9IG51bGw7CkNvbnRleHR1 YWxQb3B1cC5ob3VyZ2xhc3MgICAgICAgPSBudWxsOwoKQ29udGV4dHVhbFBvcHVw LnNldHVwID0gZnVuY3Rpb24gKCkgewogICAgLy8gZG9uJ3QgZG8gYW55dGhpbmcg aWYgbm8gcmVtb3RlCiAgICBpZiAoIVNpdGUgfHwgIVNpdGUuY3R4X3BvcHVwKSBy ZXR1cm47CgogICAgQ29udGV4dHVhbFBvcHVwLnNlYXJjaEFuZEFkZChkb2N1bWVu dCkKCiAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudC5ib2R5LCAibW91 c2Vtb3ZlIiwgQ29udGV4dHVhbFBvcHVwLm1vdXNlT3Zlci5iaW5kRXZlbnRMaXN0 ZW5lcigpKTsKfQoKQ29udGV4dHVhbFBvcHVwLnNlYXJjaEFuZEFkZCA9IGZ1bmN0 aW9uIChub2RlKSB7CiAgICBpZiAoIVNpdGUgfHwgIVNpdGUuY3R4X3BvcHVwKSBy ZXR1cm47CgogICAgLy8gYXR0YWNoIHRvIGFsbCBsanVzZXIgaGVhZCBpY29ucwog ICAgdmFyIGxqdXNlcnMgPSBET00uZ2V0RWxlbWVudHNCeVRhZ0FuZENsYXNzTmFt ZShub2RlLCAnc3BhbicsICdsanVzZXInKSwKICAgICAgICByZXhfdXNlcmlkID0g L1w/dXNlcmlkPShcZCspL2ksCiAgICAgICAgcmV4X3VzZXJwaWMgPSAvKHVzZXJw aWNcLi4rXC9cZCtcL1xkKyl8KFwvdXNlcnBpY1wvXGQrXC9cZCspLzsKCiAgICBs anVzZXJzLmZvckVhY2goZnVuY3Rpb24gKGxqdXNlcikgewogICAgICAgIHZhciBu b2RlcyA9IGxqdXNlci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyksIGkgPSAt MSwgbm9kZTsKICAgICAgICB3aGlsZSAobm9kZSA9IG5vZGVzWysraV0pIHsKICAg ICAgICAgICAgLy8gaWYgdGhlIHBhcmVudCAoYSB0YWcgd2l0aCBsaW5rIHRvIHVz ZXJpbmZvKSBoYXMgdXNlcmlkIGluIGl0cyBVUkwsIHRoZW4KICAgICAgICAgICAg Ly8gdGhpcyBpcyBhbiBvcGVuaWQgdXNlciBpY29uIGFuZCB3ZSBzaG91bGQgdXNl IHRoZSB1c2VyaWQKICAgICAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50 Tm9kZSwgdXNlcmlkOwogICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5o cmVmICYmICh1c2VyaWQgPSBwYXJlbnQuaHJlZi5tYXRjaChyZXhfdXNlcmlkKSkp CiAgICAgICAgICAgICAgICBub2RlLnVzZXJpZCA9IHVzZXJpZFsxXTsKICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgbm9kZS51c2VybmFtZSA9IGxqdXNl ci5nZXRBdHRyaWJ1dGUoJ2xqOnVzZXInKTsKCiAgICAgICAgICAgIGlmICghbm9k ZS51c2VybmFtZSAmJiAhbm9kZS51c2VyaWQpIGNvbnRpbnVlOwoKICAgICAgICAg ICAgRE9NLmFkZENsYXNzTmFtZShub2RlLCAnQ29udGV4dHVhbFBvcHVwJyk7CiAg ICAgICAgfQogICAgfSk7CgogICAgLy8gYXR0YWNoIHRvIGFsbCB1c2VycGljcwog ICAgdmFyIGltYWdlcyA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycp IHx8IFtdOwogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChpbWFnZXMs IGZ1bmN0aW9uIChpbWFnZSkgewogICAgICAgIC8vIGlmIHRoZSBpbWFnZSB1cmwg bWF0Y2hlcyBhIHJlZ2V4IGZvciB1c2VycGljIHVybHMgdGhlbiBhdHRhY2ggdG8g aXQKICAgICAgICBpZiAoaW1hZ2Uuc3JjLm1hdGNoKHJleF91c2VycGljKSkgewog ICAgICAgICAgICBpbWFnZS51cF91cmwgPSBpbWFnZS5zcmM7CiAgICAgICAgICAg IERPTS5hZGRDbGFzc05hbWUoaW1hZ2UsICdDb250ZXh0dWFsUG9wdXAnKTsKICAg ICAgICB9CiAgICB9KTsKfQoKQ29udGV4dHVhbFBvcHVwLmlzQ3R4UG9wRWxlbWVu dCA9IGZ1bmN0aW9uIChlbGUpIHsKICAgIHJldHVybiAoZWxlICYmIERPTS5nZXRB bmNlc3RvcnNCeUNsYXNzTmFtZShlbGUsICJDb250ZXh0dWFsUG9wdXAiLCB0cnVl KS5sZW5ndGgpOwp9CgpDb250ZXh0dWFsUG9wdXAubW91c2VPdmVyID0gZnVuY3Rp b24gKGUpIHsKICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDsKICAgIHZhciBjdHhQ b3B1cElkID0gdGFyZ2V0LnVzZXJuYW1lIHx8IHRhcmdldC51c2VyaWQgfHwgdGFy Z2V0LnVwX3VybDsKCiAgICAvLyBkaWQgdGhlIG1vdXNlIG1vdmUgb3V0PwogICAg aWYgKCFDb250ZXh0dWFsUG9wdXAuaXNDdHhQb3BFbGVtZW50KHRhcmdldCkpIHsK ICAgICAgICBpZiAoQ29udGV4dHVhbFBvcHVwLm1vdXNlSW5UaW1lcikgewogICAg ICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KENvbnRleHR1YWxQb3B1cC5tb3Vz ZUluVGltZXIpOwogICAgICAgICAgICBDb250ZXh0dWFsUG9wdXAubW91c2VJblRp bWVyID0gbnVsbDsKICAgICAgICB9OwoKICAgICAgICBpZiAoQ29udGV4dHVhbFBv cHVwLmlwcHUpIHsKICAgICAgICAgICAgaWYgKENvbnRleHR1YWxQb3B1cC5tb3Vz ZUluVGltZXIgfHwgQ29udGV4dHVhbFBvcHVwLm1vdXNlT3V0VGltZXIpIHJldHVy bjsKCiAgICAgICAgICAgIENvbnRleHR1YWxQb3B1cC5tb3VzZU91dFRpbWVyID0g d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAg Q29udGV4dHVhbFBvcHVwLm1vdXNlT3V0KGUpOwogICAgICAgICAgICB9LCBDb250 ZXh0dWFsUG9wdXAuaGlkZURlbGF5KTsKICAgICAgICAgICAgcmV0dXJuOwogICAg ICAgIH0KICAgIH0KCiAgICAvLyB3ZSdyZSBpbnNpZGUgYSBjdHhQb3BFbGVtZW50 LCBjYW5jZWwgdGhlIG1vdXNlb3V0IHRpbWVyCiAgICBpZiAoQ29udGV4dHVhbFBv cHVwLm1vdXNlT3V0VGltZXIpIHsKICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0 KENvbnRleHR1YWxQb3B1cC5tb3VzZU91dFRpbWVyKTsKICAgICAgICBDb250ZXh0 dWFsUG9wdXAubW91c2VPdXRUaW1lciA9IG51bGw7CiAgICB9CgogICAgaWYgKCFj dHhQb3B1cElkKQogICAgcmV0dXJuOwoKICAgIHZhciBjYWNoZWQgPSBDb250ZXh0 dWFsUG9wdXAuY2FjaGVkUmVzdWx0c1tjdHhQb3B1cElkXTsKCiAgICAvLyBpZiB3 ZSBkb24ndCBoYXZlIGNhY2hlZCBkYXRhIGJhY2tncm91bmQgcmVxdWVzdCBpdAog ICAgaWYgKCFjYWNoZWQpIHsKICAgICAgICBDb250ZXh0dWFsUG9wdXAuZ2V0SW5m byh0YXJnZXQsIGN0eFBvcHVwSWQpOwogICAgfQoKICAgIC8vIHN0YXJ0IHRpbWVy IGlmIGl0J3Mgbm90IHJ1bm5pbmcKICAgIGlmICghIENvbnRleHR1YWxQb3B1cC5t b3VzZUluVGltZXIgJiYgKCEgQ29udGV4dHVhbFBvcHVwLmlwcHUgfHwgKAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ29udGV4dHVhbFBvcHVwLmN1cnJlbnRJZCAmJgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ29udGV4dHVhbFBvcHVwLmN1cnJlbnRJZCAh PSBjdHhQb3B1cElkKSkpIHsKICAgICAgICBDb250ZXh0dWFsUG9wdXAubW91c2VJ blRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAg ICAgICBDb250ZXh0dWFsUG9wdXAuc2hvd1BvcHVwKGN0eFBvcHVwSWQsIHRhcmdl dCk7CiAgICAgICAgfSwgQ29udGV4dHVhbFBvcHVwLnBvcHVwRGVsYXkpOwogICAg fQp9CgovLyBpZiB0aGUgcG9wdXAgd2FzIG5vdCBjbG9zZWQgYnkgdXMgY2F0Y2gg aXQgYW5kIGhhbmRsZSBpdApDb250ZXh0dWFsUG9wdXAucG9wdXBDbG9zZWQgPSBm dW5jdGlvbiAoKSB7CiAgICBDb250ZXh0dWFsUG9wdXAubW91c2VPdXQoKTsKfQoK Q29udGV4dHVhbFBvcHVwLm1vdXNlT3V0ID0gZnVuY3Rpb24gKGUpIHsKICAgIGlm IChDb250ZXh0dWFsUG9wdXAubW91c2VJblRpbWVyKQogICAgICAgIHdpbmRvdy5j bGVhclRpbWVvdXQoQ29udGV4dHVhbFBvcHVwLm1vdXNlSW5UaW1lcik7CiAgICBp ZiAoQ29udGV4dHVhbFBvcHVwLm1vdXNlT3V0VGltZXIpCiAgICAgICAgd2luZG93 LmNsZWFyVGltZW91dChDb250ZXh0dWFsUG9wdXAubW91c2VPdXRUaW1lcik7Cgog ICAgQ29udGV4dHVhbFBvcHVwLm1vdXNlSW5UaW1lciA9IG51bGw7CiAgICBDb250 ZXh0dWFsUG9wdXAubW91c2VPdXRUaW1lciA9IG51bGw7CiAgICBDb250ZXh0dWFs UG9wdXAuY3VycmVudElkID0gbnVsbDsKCiAgICBDb250ZXh0dWFsUG9wdXAuaGlk ZVBvcHVwKCk7Cn0KCkNvbnRleHR1YWxQb3B1cC5zaG93UG9wdXAgPSBmdW5jdGlv biAoY3R4UG9wdXBJZCwgZWxlKSB7CiAgICBpZiAoQ29udGV4dHVhbFBvcHVwLm1v dXNlSW5UaW1lcikgewogICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoQ29udGV4 dHVhbFBvcHVwLm1vdXNlSW5UaW1lcik7CiAgICB9CiAgICBDb250ZXh0dWFsUG9w dXAubW91c2VJblRpbWVyID0gbnVsbDsKCiAgICBpZiAoQ29udGV4dHVhbFBvcHVw LmlwcHUgJiYgKENvbnRleHR1YWxQb3B1cC5jdXJyZW50SWQgJiYgQ29udGV4dHVh bFBvcHVwLmN1cnJlbnRJZCA9PSBjdHhQb3B1cElkKSkgewogICAgICAgIHJldHVy bjsKICAgIH0KCiAgICBDb250ZXh0dWFsUG9wdXAuY3VycmVudElkID0gY3R4UG9w dXBJZDsKCiAgICBDb250ZXh0dWFsUG9wdXAuY29uc3RydWN0SVBQVShjdHhQb3B1 cElkKTsKCiAgICB2YXIgZGF0YSA9IENvbnRleHR1YWxQb3B1cC5jYWNoZWRSZXN1 bHRzW2N0eFBvcHVwSWRdOwoKICAgIGlmICghIGVsZSB8fCAoZGF0YSAmJiBkYXRh Lm5vc2hvdykpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKENvbnRl eHR1YWxQb3B1cC5pcHB1KSB7CiAgICAgICAgdmFyIGlwcHUgPSBDb250ZXh0dWFs UG9wdXAuaXBwdTsKICAgICAgICAvLyBkZWZhdWx0IGlzIHRvIGF1dG8tY2VudGVy LCBkb24ndCB3YW50IHRoYXQKICAgICAgICBpcHB1LnNldEF1dG9DZW50ZXIoZmFs c2UsIGZhbHNlKTsKCiAgICAgICAgLy8gcG9wIHVwIHRoZSBib3ggcmlnaHQgdW5k ZXIgdGhlIGVsZW1lbnQKICAgICAgICB2YXIgZGltID0gRE9NLmdldEFic29sdXRl RGltZW5zaW9ucyhlbGUpOwogICAgICAgIGlmICghZGltKSByZXR1cm47CgogICAg ICAgIHZhciBib3VuZHMgPSBET00uZ2V0Q2xpZW50RGltZW5zaW9ucygpOwogICAg ICAgIGlmICghYm91bmRzKSByZXR1cm47CgogICAgICAgIC8vIGhpZGUgdGhlIGlw cHUgY29udGVudCBlbGVtZW50LCBwdXQgaXQgb24gdGhlIHBhZ2UsCiAgICAgICAg Ly8gZ2V0IGl0cyBib3VuZHMgYW5kIG1ha2Ugc3VyZSBpdCdzIG5vdCBnb2luZyBi ZXlvbmQgdGhlIGNsaWVudAogICAgICAgIC8vIHZpZXdwb3J0LiBpZiB0aGUgZWxl bWVudCBpcyBiZXlvbmQgdGhlIHJpZ2h0IGJvdW5kcyBzY29vdCBpdCB0byB0aGUg bGVmdC4KCiAgICAgICAgdmFyIHBvcEVsZSA9IGlwcHUuZ2V0RWxlbWVudCgpOwog ICAgICAgIHBvcEVsZS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAg ICAgQ29udGV4dHVhbFBvcHVwLmlwcHUuc2V0TG9jYXRpb24oZGltLmFic29sdXRl TGVmdCwgZGltLmFic29sdXRlQm90dG9tKTsKCiAgICAgICAgLy8gcHV0IHRoZSBj b250ZW50IGVsZW1lbnQgb24gdGhlIHBhZ2Ugc28gaXRzIGRpbWVuc2lvbnMgY2Fu IGJlIGZvdW5kCiAgICAgICAgQ29udGV4dHVhbFBvcHVwLmlwcHUuc2hvdygpOwoK ICAgICAgICB2YXIgaXBwdUJvdW5kcyA9IERPTS5nZXRBYnNvbHV0ZURpbWVuc2lv bnMocG9wRWxlKTsKICAgICAgICBpZiAoaXBwdUJvdW5kcy5hYnNvbHV0ZVJpZ2h0 ID4gYm91bmRzLngpIHsKICAgICAgICAgICAgQ29udGV4dHVhbFBvcHVwLmlwcHUu c2V0TG9jYXRpb24oYm91bmRzLnggLSBpcHB1Qm91bmRzLm9mZnNldFdpZHRoIC0g MzAsIGRpbS5hYnNvbHV0ZUJvdHRvbSk7CiAgICAgICAgfQoKICAgICAgICAvLyBm aW5hbGx5IG1ha2UgdGhlIGNvbnRlbnQgdmlzaWJsZQogICAgICAgIHBvcEVsZS5z dHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOwogICAgfQp9CgpDb250ZXh0dWFs UG9wdXAuY29uc3RydWN0SVBQVSA9IGZ1bmN0aW9uIChjdHhQb3B1cElkKSB7CiAg ICBpZiAoQ29udGV4dHVhbFBvcHVwLmlwcHUpIHsKICAgICAgICBDb250ZXh0dWFs UG9wdXAuaXBwdS5oaWRlKCk7CiAgICAgICAgQ29udGV4dHVhbFBvcHVwLmlwcHUg PSBudWxsOwogICAgfQoKICAgIHZhciBpcHB1ID0gbmV3IElQUFUoKTsKICAgIGlw cHUuaW5pdCgpOwogICAgaXBwdS5zZXRUaXRsZWJhcihmYWxzZSk7CiAgICBpcHB1 LnNldEZhZGVPdXQodHJ1ZSk7CiAgICBpcHB1LnNldEZhZGVJbih0cnVlKTsKICAg IGlwcHUuc2V0RmFkZVNwZWVkKDE1KTsKICAgIGlwcHUuc2V0RGltZW5zaW9ucygi YXV0byIsICJhdXRvIik7CiAgICBpcHB1LmFkZENsYXNzKCJDb250ZXh0dWFsUG9w dXAiKTsKICAgIGlwcHUuc2V0Q2FuY2VsbGVkQ2FsbGJhY2soQ29udGV4dHVhbFBv cHVwLnBvcHVwQ2xvc2VkKTsKICAgIENvbnRleHR1YWxQb3B1cC5pcHB1ID0gaXBw dTsKCiAgICBDb250ZXh0dWFsUG9wdXAucmVuZGVyUG9wdXAoY3R4UG9wdXBJZCk7 Cn0KCkNvbnRleHR1YWxQb3B1cC5yZW5kZXJQb3B1cCA9IGZ1bmN0aW9uIChjdHhQ b3B1cElkKSB7CiAgICB2YXIgaXBwdSA9IENvbnRleHR1YWxQb3B1cC5pcHB1OwoK ICAgIGlmICghaXBwdSkKICAgIHJldHVybjsKCiAgICBpZiAoY3R4UG9wdXBJZCkg ewogICAgICAgIHZhciBkYXRhID0gQ29udGV4dHVhbFBvcHVwLmNhY2hlZFJlc3Vs dHNbY3R4UG9wdXBJZF07CgogICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAg ICBpcHB1LnNldENvbnRlbnQoIjxkaXYgY2xhc3M9J0lubmVyJz5Mb2FkaW5nLi4u PC9kaXY+Iik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYg KCFkYXRhLnVzZXJuYW1lIHx8ICFkYXRhLnN1Y2Nlc3MgfHwgZGF0YS5ub3Nob3cp IHsKICAgICAgICAgICAgaXBwdS5oaWRlKCk7CiAgICAgICAgICAgIHJldHVybjsK ICAgICAgICB9CgogICAgICAgIHZhciB1c2VybmFtZSA9IGRhdGEuZGlzcGxheV91 c2VybmFtZTsKCiAgICAgICAgdmFyIGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgiZGl2Iik7CiAgICAgICAgRE9NLmFkZENsYXNzTmFtZShpbm5lciwgIklu bmVyIik7CgogICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgiZGl2Iik7CiAgICAgICAgRE9NLmFkZENsYXNzTmFtZShjb250ZW50LCAi Q29udGVudCIpOwoKICAgICAgICB2YXIgYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgic3BhbiIpOwogICAgICAgIGJhci5pbm5lckhUTUwgPSAiJm5ic3A7fCAi OwoKICAgICAgICAvLyB1c2VycGljCiAgICAgICAgaWYgKGRhdGEudXJsX3VzZXJw aWMgJiYgZGF0YS51cmxfdXNlcnBpYyAhPSBjdHhQb3B1cElkKSB7CiAgICAgICAg ICAgIHZhciB1c2VycGljQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu dCgiZGl2Iik7CiAgICAgICAgICAgIHZhciB1c2VycGljTGluayA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgICAgICAgdXNlcnBpY0xpbmsuaHJl ZiA9IGRhdGEudXJsX2FsbHBpY3M7CiAgICAgICAgICAgIHZhciB1c2VycGljID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICAgICAgICAgIHVzZXJw aWMuc3JjID0gZGF0YS51cmxfdXNlcnBpYzsKICAgICAgICAgICAgdXNlcnBpYy53 aWR0aCA9IGRhdGEudXNlcnBpY193OwogICAgICAgICAgICB1c2VycGljLmhlaWdo dCA9IGRhdGEudXNlcnBpY19oOwoKICAgICAgICAgICAgdXNlcnBpY0NvbnRhaW5l ci5hcHBlbmRDaGlsZCh1c2VycGljTGluayk7CiAgICAgICAgICAgIHVzZXJwaWNM aW5rLmFwcGVuZENoaWxkKHVzZXJwaWMpOwogICAgICAgICAgICBET00uYWRkQ2xh c3NOYW1lKHVzZXJwaWNDb250YWluZXIsICJVc2VycGljIik7CgogICAgICAgICAg ICBpbm5lci5hcHBlbmRDaGlsZCh1c2VycGljQ29udGFpbmVyKTsKICAgICAgICB9 CgogICAgICAgIGlubmVyLmFwcGVuZENoaWxkKGNvbnRlbnQpOwoKICAgICAgICAv LyByZWxhdGlvbgogICAgICAgIHZhciByZWxhdGlvbiA9IGRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGlmIChkYXRhLmlzX2NvbW0pIHsKICAg ICAgICAgICAgaWYgKGRhdGEuaXNfbWVtYmVyKQogICAgICAgICAgICAgICAgcmVs YXRpb24uaW5uZXJIVE1MID0gIllvdSBhcmUgYSBtZW1iZXIgb2YgIiArIHVzZXJu YW1lOwogICAgICAgICAgICBlbHNlIGlmIChkYXRhLmlzX2ZyaWVuZCkKICAgICAg ICAgICAgICAgIHJlbGF0aW9uLmlubmVySFRNTCA9ICJZb3UgYXJlIHdhdGNoaW5n ICIgKyB1c2VybmFtZTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg cmVsYXRpb24uaW5uZXJIVE1MID0gdXNlcm5hbWU7CiAgICAgICAgfSBlbHNlIGlm IChkYXRhLmlzX3N5bmRpY2F0ZWQpIHsKICAgICAgICAgICAgaWYgKGRhdGEuaXNf ZnJpZW5kKQogICAgICAgICAgICAgICAgcmVsYXRpb24uaW5uZXJIVE1MID0gIllv dSBhcmUgc3Vic2NyaWJlZCB0byAiICsgdXNlcm5hbWU7CiAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgIHJlbGF0aW9uLmlubmVySFRNTCA9IHVzZXJuYW1l OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChkYXRhLmlzX3JlcXVl c3RlcikgewogICAgICAgICAgICAgICAgcmVsYXRpb24uaW5uZXJIVE1MID0gIlRo aXMgaXMgeW91IjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg IHZhciBsYWJlbCA9IHVzZXJuYW1lICsgIiAiOwoKICAgICAgICAgICAgICAgIGlm IChkYXRhLmlzX2ZyaWVuZF9vZikgewogICAgICAgICAgICAgICAgICAgIGlmIChk YXRhLmlzX2ZyaWVuZCkKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgKz0g ImlzIHlvdXIgbXV0dWFsIGZyaWVuZCI7CiAgICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCArPSAibGlzdHMgeW91IGFz IGEgZnJpZW5kIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg ICAgICAgICAgaWYgKGRhdGEuaXNfZnJpZW5kKQogICAgICAgICAgICAgICAgICAg ICAgICBsYWJlbCArPSAiaXMgeW91ciBmcmllbmQiOwogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgIHJlbGF0aW9uLmlubmVySFRNTCA9IGxhYmVsOwog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIERPTS5hZGRDbGFzc05hbWUo cmVsYXRpb24sICJSZWxhdGlvbiIpOwogICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hp bGQocmVsYXRpb24pOwoKICAgICAgICAvLyBhZGQgc2l0ZS1zcGVjaWZpYyBjb250 ZW50IGhlcmUKICAgICAgICB2YXIgZXh0cmFDb250ZW50ID0gTGl2ZUpvdXJuYWwu cnVuX2hvb2soImN0eHBvcHVwX2V4dHJhaW5mbyIsIGRhdGEpOwogICAgICAgIGlm IChleHRyYUNvbnRlbnQpIHsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGls ZChleHRyYUNvbnRlbnQpOwogICAgICAgIH0KCiAgICAgICAgLy8gbWVtYmVyIG9m IGNvbW11bml0eQogICAgICAgIGlmIChkYXRhLmlzX2xvZ2dlZF9pbiAmJiBkYXRh LmlzX2NvbW0pIHsKICAgICAgICAgICAgdmFyIG1lbWJlcnNoaXAgICAgID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgICB2YXIgbWVt YmVyc2hpcExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CgogICAg ICAgICAgICB2YXIgbWVtYmVyc2hpcF9hY3Rpb24gPSBkYXRhLmlzX21lbWJlciA/ ICJsZWF2ZSIgOiAiam9pbiI7CgogICAgICAgICAgICBpZiAoZGF0YS5pc19tZW1i ZXIpIHsKICAgICAgICAgICAgICAgIG1lbWJlcnNoaXBMaW5rLmhyZWYgPSBkYXRh LnVybF9sZWF2ZWNvbW07CiAgICAgICAgICAgICAgICBtZW1iZXJzaGlwTGluay5p bm5lckhUTUwgPSAiTGVhdmUiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICAgICAgbWVtYmVyc2hpcExpbmsuaHJlZiA9IGRhdGEudXJsX2pvaW5jb21t OwogICAgICAgICAgICAgICAgbWVtYmVyc2hpcExpbmsuaW5uZXJIVE1MID0gIkpv aW4gY29tbXVuaXR5IjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFD b250ZXh0dWFsUG9wdXAuZGlzYWJsZUFKQVgpIHsKICAgICAgICAgICAgICAgIERP TS5hZGRFdmVudExpc3RlbmVyKG1lbWJlcnNoaXBMaW5rLCAiY2xpY2siLCBmdW5j dGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIEV2ZW50LnByZXAoZSk7CiAg ICAgICAgICAgICAgICAgICAgRXZlbnQuc3RvcChlKTsKICAgICAgICAgICAgICAg ICAgICByZXR1cm4gQ29udGV4dHVhbFBvcHVwLmNoYW5nZVJlbGF0aW9uKGRhdGEs IGN0eFBvcHVwSWQsIG1lbWJlcnNoaXBfYWN0aW9uLCBlKTsgfSk7CiAgICAgICAg ICAgIH0KCiAgICAgICAgICAgIG1lbWJlcnNoaXAuYXBwZW5kQ2hpbGQobWVtYmVy c2hpcExpbmspOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKG1lbWJl cnNoaXApOwogICAgICAgIH0KCiAgICAgICAgLy8gc2VuZCBtZXNzYWdlCiAgICAg ICAgdmFyIG1lc3NhZ2U7CiAgICAgICAgaWYgKGRhdGEuaXNfbG9nZ2VkX2luICYm IGRhdGEuaXNfcGVyc29uICYmICEgZGF0YS5pc19yZXF1ZXN0ZXIgJiYgZGF0YS51 cmxfbWVzc2FnZSkgewogICAgICAgICAgICBtZXNzYWdlID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgic3BhbiIpOwoKICAgICAgICAgICAgdmFyIHNlbmRtZXNzYWdl ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgICBzZW5k bWVzc2FnZS5ocmVmID0gZGF0YS51cmxfbWVzc2FnZTsKICAgICAgICAgICAgc2Vu ZG1lc3NhZ2UuaW5uZXJIVE1MID0gIlNlbmQgbWVzc2FnZSI7CgogICAgICAgICAg ICBtZXNzYWdlLmFwcGVuZENoaWxkKHNlbmRtZXNzYWdlKTsKICAgICAgICAgICAg Y29udGVudC5hcHBlbmRDaGlsZChtZXNzYWdlKTsKICAgICAgICB9CgogICAgICAg IC8vIGZyaWVuZAogICAgICAgIHZhciBmcmllbmQ7CiAgICAgICAgaWYgKGRhdGEu aXNfbG9nZ2VkX2luICYmICEgZGF0YS5pc19yZXF1ZXN0ZXIpIHsKICAgICAgICAg ICAgZnJpZW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwoKICAg ICAgICAgICAgaWYgKCEgZGF0YS5pc19mcmllbmQpIHsKICAgICAgICAgICAgICAg IC8vIGFkZCBmcmllbmQgbGluawogICAgICAgICAgICAgICAgdmFyIGFkZEZyaWVu ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAg ICAgIHZhciBhZGRGcmllbmRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi YSIpOwogICAgICAgICAgICAgICAgYWRkRnJpZW5kTGluay5ocmVmID0gZGF0YS51 cmxfYWRkZnJpZW5kOwoKICAgICAgICAgICAgICAgIGlmIChkYXRhLmlzX2NvbW0p CiAgICAgICAgICAgICAgICAgICAgYWRkRnJpZW5kTGluay5pbm5lckhUTUwgPSAi V2F0Y2ggY29tbXVuaXR5IjsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEu aXNfc3luZGljYXRlZCkKICAgICAgICAgICAgICAgICAgICBhZGRGcmllbmRMaW5r LmlubmVySFRNTCA9ICJTdWJzY3JpYmUgdG8gZmVlZCI7CiAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgYWRkRnJpZW5kTGluay5pbm5lckhU TUwgPSAiQWRkIGZyaWVuZCI7CgogICAgICAgICAgICAgICAgYWRkRnJpZW5kLmFw cGVuZENoaWxkKGFkZEZyaWVuZExpbmspOwogICAgICAgICAgICAgICAgRE9NLmFk ZENsYXNzTmFtZShhZGRGcmllbmQsICJBZGRGcmllbmQiKTsKCiAgICAgICAgICAg ICAgICBpZiAoIUNvbnRleHR1YWxQb3B1cC5kaXNhYmxlQUpBWCkgewogICAgICAg ICAgICAgICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGFkZEZyaWVuZExpbmss ICJjbGljayIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IEV2ZW50LnByZXAoZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LnN0 b3AoZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250ZXh0dWFs UG9wdXAuY2hhbmdlUmVsYXRpb24oZGF0YSwgY3R4UG9wdXBJZCwgImFkZEZyaWVu ZCIsIGUpOyB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBm cmllbmQuYXBwZW5kQ2hpbGQoYWRkRnJpZW5kKTsKICAgICAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBmcmllbmQgbGluayAob21nISkK ICAgICAgICAgICAgICAgIHZhciByZW1vdmVGcmllbmQgPSBkb2N1bWVudC5jcmVh dGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlRnJp ZW5kTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgICAg ICAgICAgIHJlbW92ZUZyaWVuZExpbmsuaHJlZiA9IGRhdGEudXJsX2FkZGZyaWVu ZDsKCiAgICAgICAgICAgICAgICBpZiAoZGF0YS5pc19jb21tKQogICAgICAgICAg ICAgICAgICAgIHJlbW92ZUZyaWVuZExpbmsuaW5uZXJIVE1MID0gIlN0b3Agd2F0 Y2hpbmciOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS5pc19zeW5kaWNh dGVkKQogICAgICAgICAgICAgICAgICAgIHJlbW92ZUZyaWVuZExpbmsuaW5uZXJI VE1MID0gIlVuc3Vic2NyaWJlIjsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgICAgICByZW1vdmVGcmllbmRMaW5rLmlubmVySFRNTCA9ICJSZW1v dmUgZnJpZW5kIjsKCiAgICAgICAgICAgICAgICByZW1vdmVGcmllbmQuYXBwZW5k Q2hpbGQocmVtb3ZlRnJpZW5kTGluayk7CiAgICAgICAgICAgICAgICBET00uYWRk Q2xhc3NOYW1lKHJlbW92ZUZyaWVuZCwgIlJlbW92ZUZyaWVuZCIpOwoKICAgICAg ICAgICAgICAgIGlmICghQ29udGV4dHVhbFBvcHVwLmRpc2FibGVBSkFYKSB7CiAg ICAgICAgICAgICAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIocmVtb3ZlRnJp ZW5kTGluaywgImNsaWNrIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgRXZlbnQuc3RvcChlKTsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIENvbnRleHR1YWxQb3B1cC5jaGFuZ2VSZWxhdGlvbihkYXRhLCBjdHhQ b3B1cElkLCAicmVtb3ZlRnJpZW5kIiwgZSk7IH0pOwogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgIGZyaWVuZC5hcHBlbmRDaGlsZChyZW1vdmVGcmll bmQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBET00uYWRkQ2xhc3NOYW1l KHJlbGF0aW9uLCAiRnJpZW5kU3RhdHVzIik7CiAgICAgICAgfQoKICAgICAgICAv LyBhZGQgYSBiYXIgYmV0d2VlbiBzdHVmZiBpZiB3ZSBoYXZlIGNvbW11bml0eSBh Y3Rpb25zCiAgICAgICAgaWYgKChkYXRhLmlzX2xvZ2dlZF9pbiAmJiBkYXRhLmlz X2NvbW0pIHx8IChtZXNzYWdlICYmIGZyaWVuZCkpCiAgICAgICAgICAgIGNvbnRl bnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Cgog ICAgICAgIGlmIChmcmllbmQpCiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hp bGQoZnJpZW5kKTsKCiAgICAgICAgaWYgKChkYXRhLmlzX3BlcnNvbiB8fCBkYXRh LmlzX2NvbW0pICYmICFkYXRhLmlzX3JlcXVlc3RlciAmJiBkYXRhLmNhbl9yZWNl aXZlX3ZnaWZ0cykgewogICAgICAgICAgICB2YXIgdmdpZnQgPSBkb2N1bWVudC5j cmVhdGVFbGVtZW50KCJzcGFuIik7CgogICAgICAgICAgICB2YXIgc2VuZHZnaWZ0 ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgICBzZW5k dmdpZnQuaHJlZiA9IHdpbmRvdy5TaXRlLnNpdGVyb290ICsgIi9zaG9wL3ZnaWZ0 LmJtbD90bz0iICsgZGF0YS51c2VybmFtZTsKICAgICAgICAgICAgc2VuZHZnaWZ0 LmlubmVySFRNTCA9ICJTZW5kIGEgdmlydHVhbCBnaWZ0IjsKCiAgICAgICAgICAg IHZnaWZ0LmFwcGVuZENoaWxkKHNlbmR2Z2lmdCk7CgogICAgICAgICAgICBpZiAo ZnJpZW5kKQogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKCiAgICAgICAgICAgIGNvbnRlbnQu YXBwZW5kQ2hpbGQodmdpZnQpOwogICAgICAgIH0KCiAgICAgICAgLy8gYmFuIC8g dW5iYW4KICAgICAgICB2YXIgYmFuOwogICAgICAgIGlmIChkYXRhLmlzX2xvZ2dl ZF9pbiAmJiAhIGRhdGEuaXNfcmVxdWVzdGVyKSB7CiAgICAgICAgICAgIGJhbiA9 IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKCiAgICAgICAgICAgIGlm KCFkYXRhLmlzX2Jhbm5lZCkgewogICAgICAgICAgICAgICAgLy8gaWYgdXNlciBu byBiYW5uZWQgLSBzaG93IGJhbiBsaW5rCiAgICAgICAgICAgICAgICB2YXIgc2V0 QmFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAg ICAgICAgdmFyIHNldEJhbkxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJh Iik7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHNldEJhbkxpbmsu aHJlZiA9IHdpbmRvdy5TaXRlLnNpdGVyb290ICsgJy9tYW5hZ2UvYmFudXNlcnMu Ym1sJzsKICAgICAgICAgICAgICAgIHNldEJhbkxpbmsuaW5uZXJIVE1MID0gJ0Jh biB1c2VyJzsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc2V0QmFu LmFwcGVuZENoaWxkKHNldEJhbkxpbmspOwoKICAgICAgICAgICAgICAgIERPTS5h ZGRDbGFzc05hbWUoc2V0QmFuLCAiU2V0QmFuIik7CgogICAgICAgICAgICAgICAg aWYgKCFDb250ZXh0dWFsUG9wdXAuZGlzYWJsZUFKQVgpIHsKICAgICAgICAgICAg ICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihzZXRCYW5MaW5rLCAiY2xpY2si LCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5w cmVwKGUpOwogICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5zdG9wKGUpOwog ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGV4dHVhbFBvcHVwLmNo YW5nZVJlbGF0aW9uKGRhdGEsIGN0eFBvcHVwSWQsICJzZXRCYW4iLCBlKTsgfSk7 CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYmFuLmFwcGVuZENo aWxkKHNldEJhbik7CgoKCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg ICAgICAvLyBpZiB1c2UgYmFubmVkIC0gc2hvdyB1bmJhbiBsaW5rCiAgICAgICAg ICAgICAgICB2YXIgc2V0VW5iYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz cGFuIik7CiAgICAgICAgICAgICAgICB2YXIgc2V0VW5iYW5MaW5rID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgICAgICAgc2V0VW5iYW5M aW5rLmhyZWYgPSB3aW5kb3cuU2l0ZS5zaXRlcm9vdCArICcvbWFuYWdlL2JhbnVz ZXJzLmJtbCc7CiAgICAgICAgICAgICAgICBzZXRVbmJhbkxpbmsuaW5uZXJIVE1M ID0gJ1VuYmFuIHVzZXInOwogICAgICAgICAgICAgICAgc2V0VW5iYW4uYXBwZW5k Q2hpbGQoc2V0VW5iYW5MaW5rKTsKCiAgICAgICAgICAgICAgICBET00uYWRkQ2xh c3NOYW1lKHNldFVuYmFuLCAiU2V0VW5iYW4iKTsKCiAgICAgICAgICAgICAgICBp ZiAoIUNvbnRleHR1YWxQb3B1cC5kaXNhYmxlQUpBWCkgewogICAgICAgICAgICAg ICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHNldFVuYmFuTGluaywgImNsaWNr IiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQu cHJlcChlKTsKICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQuc3RvcChlKTsK ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRleHR1YWxQb3B1cC5j aGFuZ2VSZWxhdGlvbihkYXRhLCBjdHhQb3B1cElkLCAic2V0VW5iYW4iLCBlKTsg fSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYmFuLmFwcGVu ZENoaWxkKHNldFVuYmFuKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg ICAgaWYoYmFuKSB7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CiAgICAgICAgICAgIGNvbnRlbnQu YXBwZW5kQ2hpbGQoYmFuKTsKICAgICAgICB9CgoKICAgICAgICAvLyBicmVhawog ICAgICAgIGlmICgoZGF0YS5pc19sb2dnZWRfaW4gJiYgIWRhdGEuaXNfcmVxdWVz dGVyKSB8fCB2Z2lmdCkgY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh dGVFbGVtZW50KCJiciIpKTsKCiAgICAgICAgLy8gdmlldyBsYWJlbAogICAgICAg IHZhciB2aWV3TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7 CiAgICAgICAgdmlld0xhYmVsLmlubmVySFRNTCA9ICJWaWV3OiAiOwogICAgICAg IGNvbnRlbnQuYXBwZW5kQ2hpbGQodmlld0xhYmVsKTsKCiAgICAgICAgLy8gam91 cm5hbAogICAgICAgIGlmIChkYXRhLmlzX3BlcnNvbiB8fCBkYXRhLmlzX2NvbW0g fHwgZGF0YS5pc19zeW5kaWNhdGVkKSB7CiAgICAgICAgICAgIHZhciBqb3VybmFs TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgICAgICAg am91cm5hbExpbmsuaHJlZiA9IGRhdGEudXJsX2pvdXJuYWw7CgogICAgICAgICAg ICBpZiAoZGF0YS5pc19wZXJzb24pCiAgICAgICAgICAgICAgICBqb3VybmFsTGlu ay5pbm5lckhUTUwgPSAiSm91cm5hbCI7CiAgICAgICAgICAgIGVsc2UgaWYgKGRh dGEuaXNfY29tbSkKICAgICAgICAgICAgICAgIGpvdXJuYWxMaW5rLmlubmVySFRN TCA9ICJDb21tdW5pdHkiOwogICAgICAgICAgICBlbHNlIGlmIChkYXRhLmlzX3N5 bmRpY2F0ZWQpCiAgICAgICAgICAgICAgICBqb3VybmFsTGluay5pbm5lckhUTUwg PSAiRmVlZCI7CgogICAgICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGpvdXJu YWxMaW5rKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChiYXIuY2xv bmVOb2RlKHRydWUpKTsKICAgICAgICB9CgogICAgICAgIC8vIHByb2ZpbGUKICAg ICAgICB2YXIgcHJvZmlsZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJh Iik7CiAgICAgICAgcHJvZmlsZUxpbmsuaHJlZiA9IGRhdGEudXJsX3Byb2ZpbGU7 CiAgICAgICAgcHJvZmlsZUxpbmsuaW5uZXJIVE1MID0gIlByb2ZpbGUiOwogICAg ICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQocHJvZmlsZUxpbmspOwoKCgogICAgICAg IC8vIGNsZWFyaW5nIGRpdgogICAgICAgIHZhciBjbGVhcmluZ0RpdiA9IGRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIERPTS5hZGRDbGFzc05h bWUoY2xlYXJpbmdEaXYsICJsamNsZWFyIik7CiAgICAgICAgY2xlYXJpbmdEaXYu aW5uZXJIVE1MID0gIiZuYnNwOyI7CiAgICAgICAgY29udGVudC5hcHBlbmRDaGls ZChjbGVhcmluZ0Rpdik7CgogICAgICAgIGlwcHUuc2V0Q29udGVudEVsZW1lbnQo aW5uZXIpOwogICAgfQp9CgovLyBhamF4IHJlcXVlc3QgdG8gY2hhbmdlIHJlbGF0 aW9uCkNvbnRleHR1YWxQb3B1cC5jaGFuZ2VSZWxhdGlvbiA9IGZ1bmN0aW9uIChp bmZvLCBjdHhQb3B1cElkLCBhY3Rpb24sIGV2dCkgewogICAgaWYgKCFpbmZvKSBy ZXR1cm4gdHJ1ZTsKCiAgICB2YXIgcG9zdERhdGEgPSB7CiAgICAgICAgInRhcmdl dCI6IGluZm8udXNlcm5hbWUsCiAgICAgICAgImFjdGlvbiI6IGFjdGlvbgogICAg fTsKCiAgICAvLyBnZXQgdGhlIGF1dGh0b2tlbgogICAgdmFyIGF1dGh0b2tlbiA9 IGluZm9bYWN0aW9uICsgIl9hdXRodG9rZW4iXTsKICAgIGlmICghYXV0aHRva2Vu KSBsb2coIm5vIGF1dGggdG9rZW4gZm9yIGFjdGlvbiIgKyBhY3Rpb24pOwogICAg cG9zdERhdGEuYXV0aF90b2tlbiA9IGF1dGh0b2tlbjsKCiAgICAvLyBuZWVkZWQg b24gam91cm5hbCBzdWJkb21haW5zCiAgICB2YXIgdXJsID0gTGl2ZUpvdXJuYWwu Z2V0QWpheFVybCgiY2hhbmdlcmVsYXRpb24iKTsKCiAgICAvLyBjYWxsYmFjayBm cm9tIGNoYW5naW5nIHJlbGF0aW9uIHJlcXVlc3QKICAgIHZhciBjaGFuZ2VkUmVs YXRpb24gPSBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgIGlmIChDb250ZXh0dWFs UG9wdXAuaG91cmdsYXNzKSBDb250ZXh0dWFsUG9wdXAuaGlkZUhvdXJnbGFzcygp OwoKICAgICAgICBpZiAoZGF0YS5lcnJvcikgewogICAgICAgICAgICBDb250ZXh0 dWFsUG9wdXAuc2hvd05vdGUoZGF0YS5lcnJvciwgY3R4UG9wdXBJZCk7CiAgICAg ICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChkYXRhLm5vdGUp CiAgICAgICAgQ29udGV4dHVhbFBvcHVwLnNob3dOb3RlKGRhdGEubm90ZSwgY3R4 UG9wdXBJZCk7CgogICAgICAgIGlmICghZGF0YS5zdWNjZXNzKSByZXR1cm47Cgog ICAgICAgIGlmIChDb250ZXh0dWFsUG9wdXAuY2FjaGVkUmVzdWx0c1tjdHhQb3B1 cElkXSkgewogICAgICAgICAgICB2YXIgdXBkYXRlZFByb3BzID0gWyJpc19mcmll bmQiLCAiaXNfbWVtYmVyIiwgJ2lzX2Jhbm5lZCddOwogICAgICAgICAgICB1cGRh dGVkUHJvcHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkgewogICAgICAgICAgICAg ICAgQ29udGV4dHVhbFBvcHVwLmNhY2hlZFJlc3VsdHNbY3R4UG9wdXBJZF1bcHJv cF0gPSBkYXRhW3Byb3BdOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAg ICAgIC8vIGlmIHRoZSBwb3B1cCBpcyB1cCwgcmVsb2FkIGl0CiAgICAgICAgQ29u dGV4dHVhbFBvcHVwLnJlbmRlclBvcHVwKGN0eFBvcHVwSWQpOwogICAgfTsKCiAg ICB2YXIgb3B0cyA9IHsKICAgICAgICAiZGF0YSI6IEhUVFBSZXEuZm9ybUVuY29k ZWQocG9zdERhdGEpLAogICAgICAgICJtZXRob2QiOiAiUE9TVCIsCiAgICAgICAg InVybCI6IHVybCwKICAgICAgICAib25FcnJvciI6IENvbnRleHR1YWxQb3B1cC5n b3RFcnJvciwKICAgICAgICAib25EYXRhIjogY2hhbmdlZFJlbGF0aW9uCiAgICB9 OwoKICAgIC8vIGRvIGhvdXJnbGFzcyBhdCBtb3VzZSBjb29yZHMKICAgIHZhciBt b3VzZUNvb3JkcyA9IERPTS5nZXRBYnNvbHV0ZUN1cnNvclBvc2l0aW9uKGV2dCk7 CiAgICBpZiAoIUNvbnRleHR1YWxQb3B1cC5ob3VyZ2xhc3MgJiYgbW91c2VDb29y ZHMpIHsKICAgICAgICBDb250ZXh0dWFsUG9wdXAuaG91cmdsYXNzID0gbmV3IEhv dXJnbGFzcygpOwogICAgICAgIENvbnRleHR1YWxQb3B1cC5ob3VyZ2xhc3MuaW5p dChudWxsLCAibGpfaG91cmdsYXNzIik7CiAgICAgICAgQ29udGV4dHVhbFBvcHVw LmhvdXJnbGFzcy5hZGRfY2xhc3NfbmFtZSgiQ29udGV4dHVhbFBvcHVwIik7IC8v IHNvIG1vdXNpbmcgb3ZlciBob3VyZ2xhc3MgZG9lc24ndCBtYWtlIGN0eHBvcHVw IHRoaW5rIG1vdXNlIGlzIG91dHNpZGUKICAgICAgICBDb250ZXh0dWFsUG9wdXAu aG91cmdsYXNzLmhvdXJnbGFzc19hdChtb3VzZUNvb3Jkcy54LCBtb3VzZUNvb3Jk cy55KTsKICAgIH0KCiAgICBIVFRQUmVxLmdldEpTT04ob3B0cyk7CgogICAgcmV0 dXJuIGZhbHNlOwp9CgovLyBjcmVhdGUgYSBsaXR0bGUgcG9wdXAgdG8gbm90aWZ5 IHRoZSB1c2VyIG9mIHNvbWV0aGluZwpDb250ZXh0dWFsUG9wdXAuc2hvd05vdGUg PSBmdW5jdGlvbiAobm90ZSwgY3R4UG9wdXBJZCwgZWxlKSB7CiAgICBpZiAoQ29u dGV4dHVhbFBvcHVwLmlwcHUpIHsKICAgICAgICAvLyBwb3AgdXAgdGhlIGJveCBy aWdodCB1bmRlciB0aGUgZWxlbWVudAogICAgICAgIGVsZSA9IENvbnRleHR1YWxQ b3B1cC5pcHB1LmdldEVsZW1lbnQoKTsKICAgIH0KCiAgICBMSl9JUFBVLnNob3dO b3RlKG5vdGUsIGVsZSk7Cn0KCkNvbnRleHR1YWxQb3B1cC5oaWRlUG9wdXAgPSBm dW5jdGlvbiAoY3R4UG9wdXBJZCkgewogICAgaWYgKENvbnRleHR1YWxQb3B1cC5o b3VyZ2xhc3MpIENvbnRleHR1YWxQb3B1cC5oaWRlSG91cmdsYXNzKCk7CgogICAg Ly8gZGVzdHJveSBwb3B1cCBmb3Igbm93CiAgICBpZiAoQ29udGV4dHVhbFBvcHVw LmlwcHUpIHsKICAgICAgICBDb250ZXh0dWFsUG9wdXAuaXBwdS5oaWRlKCk7CiAg ICAgICAgQ29udGV4dHVhbFBvcHVwLmlwcHUgPSBudWxsOwogICAgfQp9CgovLyBk byBhamF4IHJlcXVlc3Qgb2YgdXNlciBpbmZvCkNvbnRleHR1YWxQb3B1cC5nZXRJ bmZvID0gZnVuY3Rpb24gKHRhcmdldCwgY3R4UG9wdXBJZCkgewogICAgdmFyIHVz ZXJuYW1lID0gdGFyZ2V0LnVzZXJuYW1lIHx8ICcnLAogICAgICAgIHVzZXJpZCA9 IHRhcmdldC51c2VyaWQgfHwgMCwKICAgICAgICB1cF91cmwgPSB0YXJnZXQudXBf dXJsIHx8ICcnOwoKICAgIGlmIChDb250ZXh0dWFsUG9wdXAuY3VycmVudFJlcXVl c3RzW2N0eFBvcHVwSWRdKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIENv bnRleHR1YWxQb3B1cC5jdXJyZW50UmVxdWVzdHNbY3R4UG9wdXBJZF0gPSAxOwoK ICAgIHZhciBwYXJhbXMgPSBIVFRQUmVxLmZvcm1FbmNvZGVkICh7CiAgICAgICAg InVzZXIiOiB1c2VybmFtZSwKICAgICAgICAidXNlcmlkIjogdXNlcmlkLAogICAg ICAgICJ1c2VycGljX3VybCI6IHVwX3VybCwKICAgICAgICAibW9kZSI6ICJnZXRp bmZvIgogICAgfSk7CgogICAgdmFyIHVybCA9IExpdmVKb3VybmFsLmdldEFqYXhV cmwoImN0eHBvcHVwIik7CgogICAgLy8gZ290IGRhdGEgY2FsbGJhY2sKICAgIHZh ciBnb3RJbmZvID0gZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICBpZiAoQ29udGV4 dHVhbFBvcHVwICYmIENvbnRleHR1YWxQb3B1cC5ob3VyZ2xhc3MpIENvbnRleHR1 YWxQb3B1cC5oaWRlSG91cmdsYXNzKCk7CgogICAgICAgIENvbnRleHR1YWxQb3B1 cC5jYWNoZWRSZXN1bHRzW1N0cmluZyhkYXRhLnVzZXJpZCldID0KICAgICAgICBD b250ZXh0dWFsUG9wdXAuY2FjaGVkUmVzdWx0c1tkYXRhLnVzZXJuYW1lXSA9CiAg ICAgICAgQ29udGV4dHVhbFBvcHVwLmNhY2hlZFJlc3VsdHNbZGF0YS51cmxfdXNl cnBpY10gPSBkYXRhOwoKICAgICAgICBpZiAodXBfdXJsKSAvLyBub24gZGVmYXVs dCB1c2VycGljCiAgICAgICAgICAgIENvbnRleHR1YWxQb3B1cC5jYWNoZWRSZXN1 bHRzW3VwX3VybF0gPSBkYXRhOwoKICAgICAgICBpZiAoZGF0YS5lcnJvcikgewog ICAgICAgICAgICBpZiAoZGF0YS5ub3Nob3cpIHJldHVybjsKCiAgICAgICAgICAg IENvbnRleHR1YWxQb3B1cC5zaG93Tm90ZShkYXRhLmVycm9yLCBjdHhQb3B1cElk LCB0YXJnZXQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAg ICBpZiAoZGF0YS5ub3RlKQogICAgICAgIENvbnRleHR1YWxQb3B1cC5zaG93Tm90 ZShkYXRhLm5vdGUsIGRhdGEuY3R4UG9wdXBJZCwgdGFyZ2V0KTsKCiAgICAgICAg Q29udGV4dHVhbFBvcHVwLmN1cnJlbnRSZXF1ZXN0c1tjdHhQb3B1cElkXSA9IG51 bGw7CgogICAgICAgIENvbnRleHR1YWxQb3B1cC5yZW5kZXJQb3B1cChjdHhQb3B1 cElkKTsKCiAgICAgICAgLy8gZXhwaXJlIGNhY2hlIGFmdGVyIDUgbWludXRlcwog ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBDb250 ZXh0dWFsUG9wdXAuY2FjaGVkUmVzdWx0c1tjdHhQb3B1cElkXSA9IG51bGw7CiAg ICAgICAgfSwgNjAgKiAxMDAwKTsKICAgIH07CgogICAgSFRUUFJlcS5nZXRKU09O KHsKICAgICAgICAidXJsIjogdXJsLAogICAgICAgICJtZXRob2QiOiAiR0VUIiwK ICAgICAgICAiZGF0YSI6IHBhcmFtcywKICAgICAgICAib25EYXRhIjogZ290SW5m bywKICAgICAgICAib25FcnJvciI6IENvbnRleHR1YWxQb3B1cC5nb3RFcnJvcgog ICAgfSk7Cn0KCkNvbnRleHR1YWxQb3B1cC5oaWRlSG91cmdsYXNzID0gZnVuY3Rp b24gKCkgewogICAgaWYgKENvbnRleHR1YWxQb3B1cC5ob3VyZ2xhc3MpIHsKICAg ICAgICBDb250ZXh0dWFsUG9wdXAuaG91cmdsYXNzLmhpZGUoKTsKICAgICAgICBD b250ZXh0dWFsUG9wdXAuaG91cmdsYXNzID0gbnVsbDsKICAgIH0KfQoKQ29udGV4 dHVhbFBvcHVwLmdvdEVycm9yID0gZnVuY3Rpb24gKGVycikgewogICAgaWYgKENv bnRleHR1YWxQb3B1cC5ob3VyZ2xhc3MpIENvbnRleHR1YWxQb3B1cC5oaWRlSG91 cmdsYXNzKCk7Cn0KCi8vIHdoZW4gcGFnZSBsb2Fkcywgc2V0IHVwIGNvbnRleHR1 YWwgcG9wdXBzCkxpdmVKb3VybmFsLnJlZ2lzdGVyX2hvb2soInBhZ2VfbG9hZCIs IENvbnRleHR1YWxQb3B1cC5zZXR1cCk7CkV4cGFuZGVyID0gZnVuY3Rpb24oKXsK ICAgIHRoaXMuX19jYWxsZXJfXzsgICAgLy8gPGE+IEhUTUwgZWxlbWVudCBmcm9t IHdoZXJlIEV4cGFuZGVyIHdhcyBjYWxsZWQKICAgIHRoaXMudXJsOyAgICAgICAg ICAgLy8gZnVsbCB1cmwgb2YgdGhyZWFkIHRvIGJlIGV4cGFuZGVkCiAgICB0aGlz LmlkOyAgICAgICAgICAgIC8vIGlkIG9mIHRoZSB0aHJlYWQKICAgIHRoaXMub25j bGljazsKICAgIHRoaXMuc3RvcmVkX2NhbGxlcjsKICAgIHRoaXMuaWZyYW1lOyAg ICAgICAgLy8gaWZyYW1lLCB3aGVyZSB0aGUgdGhyZWFkIHdpbGwgYmUgbG9hZGVk CiAgICB0aGlzLmlzX1MxOyAgICAgICAgIC8vIGJvb2wgZmxhZywgdHJ1ZSA9PSBq b3VybmFsIGlzIGluIFMxLCBmYWxzZSA9PSBpbiBTMgp9CkV4cGFuZGVyLkNvbGxl Y3Rpb249e307CkV4cGFuZGVyLm1ha2UgPSBmdW5jdGlvbihlbCx1cmwsaWQsaXNf UzEpewogICAgdmFyIGxvY2FsID0gKG5ldyBFeHBhbmRlcikuc2V0KHtfX2NhbGxl cl9fOmVsLHVybDp1cmwucmVwbGFjZSgvIy4qJC8sJycpLGlkOmlkLGlzX1MxOiEh aXNfUzF9KTsKICAgIGxvY2FsLmdldCgpOwp9CgpFeHBhbmRlci5wcm90b3R5cGUu c2V0ID0gZnVuY3Rpb24ob3B0aW9ucyl7CiAgICBmb3IodmFyIG9wdCBpbiBvcHRp b25zKXsKICAgICAgICB0aGlzW29wdF0gPSBvcHRpb25zW29wdF07CiAgICB9CiAg ICByZXR1cm4gdGhpczsKfQoKRXhwYW5kZXIucHJvdG90eXBlLmdldENhbnZhcyA9 IGZ1bmN0aW9uKGlkLGNvbnRleHQpewogICAgcmV0dXJuIGNvbnRleHQuZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ2xqY210JytpZCk7Cn0KCkV4cGFuZGVyLnByb3Rv dHlwZS5wYXJzZUxKX2NtdGluZm8gPSBmdW5jdGlvbihjb250ZXh0LGNhbGxiYWNr KXsKICAgIHZhciBtYXA9e30sIG5vZGUsIGo7CiAgICB2YXIgTEogPSBjb250ZXh0 LkxKX2NtdGluZm87CiAgICBpZighTEopcmV0dXJuIGZhbHNlOwogICAgZm9yKGog aW4gTEopewogICAgICAgIGlmKC9eXGQqJC8udGVzdChqKSAmJiAobm9kZSA9IHRo aXMuZ2V0Q2FudmFzKGosY29udGV4dCkpKXsKICAgICAgICAgICAgbWFwW2pdID0g e2luZm86TEpbal0sY2FudmFzOm5vZGV9OwogICAgICAgICAgICBpZih0eXBlb2Yg Y2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBjYWxsYmFj ayhqLG1hcFtqXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBy ZXR1cm4gbWFwOwp9CgpFeHBhbmRlci5wcm90b3R5cGUubG9hZGluZ1N0YXRlT24g PSBmdW5jdGlvbigpewogICAgdGhpcy5zdG9yZWRfY2FsbGVyID0gdGhpcy5fX2Nh bGxlcl9fLmNsb25lTm9kZSh0cnVlKTsKICAgIHRoaXMuX19jYWxsZXJfXy5zZXRB dHRyaWJ1dGUoJ2FscmVhZHlfY2xpY2tlZCcsJ2FscmVhZHlfY2xpY2tlZCcpOwog ICAgdGhpcy5vbmNsaWNrID0gdGhpcy5fX2NhbGxlcl9fLm9uY2xpY2s7CiAgICB0 aGlzLl9fY2FsbGVyX18ub25jbGljayA9IGZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNl O30KICAgIHRoaXMuX19jYWxsZXJfXy5zdHlsZS5jb2xvciA9ICcjY2NjJzsKfQoK RXhwYW5kZXIucHJvdG90eXBlLmxvYWRpbmdTdGF0ZU9mZiA9IGZ1bmN0aW9uKCl7 CiAgICBpZih0aGlzLl9fY2FsbGVyX18pewogICAgICAgIC8vIGFjdHVhbGx5LCB0 aGUgPGE+IGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIG1haW4gd2luZG93IGJ5CiAg ICAgICAgLy8gY29weWluZyBjb21tZW50IGZyb20gaWZhbWUsIHNvIHRoaXMgY29k ZSBpcyBub3QgZXhlY3V0ZWQgKD8pCiAgICAgICAgdGhpcy5fX2NhbGxlcl9fLnJl bW92ZUF0dHJpYnV0ZSgnYWxyZWFkeV9jbGlja2VkJywnYWxyZWFkeV9jbGlja2Vk Jyk7CiAgICAgICAgaWYodGhpcy5fX2NhbGxlcl9fLnBhcmVudE5vZGUpIHRoaXMu X19jYWxsZXJfXy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLnN0b3JlZF9j YWxsZXIsdGhpcy5fX2NhbGxlcl9fKTsKICAgIH0KICAgIHZhciBvYmogPSB0aGlz OwogICAgLy8gV2hlbiBmcmFtZSBpcyByZW1vdmVkIGltbWVkaWF0ZWx5LCBJRSBy YWlzZXMgYW4gZXJyb3Igc29tZXRpbWVzCiAgICB3aW5kb3cuc2V0VGltZW91dChm dW5jdGlvbigpe29iai5raWxsRnJhbWUoKX0sMTAwKTsKfQoKRXhwYW5kZXIucHJv dG90eXBlLmtpbGxGcmFtZSA9IGZ1bmN0aW9uKCl7CiAgICBkb2N1bWVudC5ib2R5 LnJlbW92ZUNoaWxkKHRoaXMuaWZyYW1lKTsKfQoKRXhwYW5kZXIucHJvdG90eXBl LmlzRnVsbENvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KXsKICAgIHJldHVybiAh IU51bWJlcihjb21tZW50LmluZm8uZnVsbCk7Cn0KCkV4cGFuZGVyLnByb3RvdHlw ZS5raWxsRHVwbGljYXRlID0gZnVuY3Rpb24oY29tbWVudHMpewogICAgdmFyIGNv bW1lbnQ7CiAgICB2YXIgaWQsaWRfLGVsLGVsXzsKICAgIGZvcih2YXIgaiBpbiBj b21tZW50cyl7CiAgICAgICAgaWYoIS9eXGQqJC8udGVzdChqKSljb250aW51ZTsK ICAgICAgICBlbF8gPSBjb21tZW50c1tqXS5jYW52YXM7CiAgICAgICAgaWRfID0g ZWxfLmlkOwogICAgICAgIGlkID0gaWRfLnJlcGxhY2UoL18kLywnJyk7CiAgICAg ICAgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICAgICAgaWYo ZWwhPW51bGwpewogICAgICAgICAgICAvL2luIGNhc2Ugd2UgaGF2ZSBhIGR1cGxp Y2F0ZTsKICAgICAgICAgICAgZWxfLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxf KTsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgZWxfLmlkID0gaWQ7CiAgICAg ICAgICAgIHdpbmRvdy5Db250ZXh0dWFsUG9wdXAgJiYgQ29udGV4dHVhbFBvcHVw LnNlYXJjaEFuZEFkZChlbF8pOwogICAgICAgICAgICB3aW5kb3cuc2V0dXBBamF4 ICYmIHNldHVwQWpheChlbF8pOwogICAgICAgICAgICB3aW5kb3cuRVNOICYmIEVT Ti5pbml0VHJhY2tCdG5zKGVsXyk7CiAgICAgICAgfQogICAgfQp9CgpFeHBhbmRl ci5wcm90b3R5cGUuZ2V0UzF3aWR0aCA9IGZ1bmN0aW9uKGNhbnZhcyl7CiAgLy9U T0RPOiAgbWF5IGJlIHdlIHNob3VsZCBzaG91bGQgYWRkIHNvbWllIElEIHRvIHRo ZSBzcGFjZXIgaW1nIGluc3RlYWQgb2Ygc2VhcmNoaW5nIGl0CiAgLy95ZXQsIHRo aXMgd29ya3MgdW50aWwgd2UgaGF2ZSBub3QgY2hhbmdlZCB0aGUgc3BhY2VycyB1 cmwgPSAnZG90LmdpZicpOwogIHZhciBpbWcsIGltZ3MsIGZvdW5kOwogIGltZ3Mg PSBjYW52YXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpOwogIGlmKCFpbWdz KXJldHVybiBmYWxzZTsKICBmb3IodmFyIGo9MDtqPGltZ3MubGVuZ3RoO2orKyl7 CiAgICBpbWc9aW1nc1tqXTsKICAgIGlmKC9kb3RcLmdpZiQvLnRlc3QoaW1nLnNy YykpewogICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgIH0K ICB9CiAgaWYoZm91bmQmJmltZy53aWR0aClyZXR1cm4gTnVtYmVyKGltZy53aWR0 aCk7CiAgZWxzZSByZXR1cm4gZmFsc2U7Cn0KCkV4cGFuZGVyLnByb3RvdHlwZS5z ZXRTMXdpZHRoID0gZnVuY3Rpb24oY2FudmFzLHcpewogIHZhciBpbWcsIGltZ3Ms IGZvdW5kOwogIGltZ3MgPSBjYW52YXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lt ZycpOwogIGlmKCFpbWdzKXJldHVybiBmYWxzZTsKICBmb3IodmFyIGo9MDtqPGlt Z3MubGVuZ3RoO2orKyl7CiAgICBpbWc9aW1nc1tqXTsKICAgIGlmKC9kb3RcLmdp ZiQvLnRlc3QoaW1nLnNyYykpewogICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg ICBicmVhazsKICAgIH0KICB9CiAgaWYoZm91bmQpaW1nLnNldEF0dHJpYnV0ZSgn d2lkdGgnLHcpOwp9CgpFeHBhbmRlci5wcm90b3R5cGUub25Mb2FkSGFuZGxlciA9 IGZ1bmN0aW9uKGlmcmFtZSl7CiAgICAgICAgdmFyIGRvYyA9IGlmcmFtZS5jb250 ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3c7CiAgICAgICAgZG9j ID0gZG9jLmRvY3VtZW50fHxkb2M7CiAgICAgICAgdmFyIG9iaiA9IHRoaXM7CiAg ICAgICAgdmFyIHdpbiA9IGRvYy5kZWZhdWx0Vmlld3x8ZG9jLnBhcmVudFdpbmRv dzsKICAgICAgICB2YXIgY29tbWVudHNfaW50ZXJzZWN0aW9uPXt9OwogICAgICAg IHZhciBjb21tZW50c19wYWdlID0gdGhpcy5wYXJzZUxKX2NtdGluZm8od2luZG93 KTsKICAgICAgICB2YXIgY29tbWVudHNfaWZyYW1lID0gdGhpcy5wYXJzZUxKX2Nt dGluZm8od2luLGZ1bmN0aW9uKGlkLG5ld19jb21tZW50KXsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYoaWQgaW4gY29tbWVudHNfcGFnZSl7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50 c19wYWdlW2lkXS5jYW52YXMuaWQgPSBjb21tZW50c19wYWdlW2lkXS5jYW52YXMu aWQrJ18nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29tbWVudHNfaW50ZXJzZWN0aW9uW2lkXSA9IGNvbW1lbnRzX3BhZ2VbaWRdOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSBj b21tZW50IGZyb20gaWZyYW1lIHRvIG1haW4gd2luZG93IGlmCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxKSB0aGUgY29tbWVudCBp cyBjb2xsYXBzZWQgaW4gbWFpbiB3aW5kb3cgYW5kIGlzIGZ1bGwgaW4gaWZyYW1l CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyKSBv ciB0aGlzIGlzIHRoZSByb290IGNvbW1lbnQgb2YgdGhpcyB0aHJlYWQgKGl0IG1h eSBiZSBmdWxsIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyAgICAgbWFpbiB3aW5kb3cgdG9vLCBpdCdzIGNvcGllZCBzbyB0aGF0 IHRvIHJlbW92ZSAiZXhwYW5kIiBsaW5rIGZyb20gaXQpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoIW9iai5pc0Z1bGxDb21tZW50 KGNvbW1lbnRzX3BhZ2VbaWRdKSAmJiBvYmouaXNGdWxsQ29tbWVudChuZXdfY29t bWVudCkpIHx8IChpZD09PW9iai5pZCkpewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZhciB3OwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG9iai5pc19TMSl7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPW9iai5n ZXRTMXdpZHRoKGNvbW1lbnRzX3BhZ2VbaWRdLmNhbnZhcyk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzX3BhZ2VbaWRd LmNhbnZhcy5pbm5lckhUTUwgPSBuZXdfY29tbWVudC5jYW52YXMuaW5uZXJIVE1M OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm KG9iai5pc19TMSAmJiB3IT09bnVsbCl7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouc2V0UzF3aWR0aChjb21t ZW50c19wYWdlW2lkXS5jYW52YXMsdyk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vVE9ETzogbWF5IGJlIHRoaXMgc2hvdWxkIGJl IHVuY29tbWVudGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy9jb21tZW50c19wYWdlW2lkXS5jYW52YXMuY2xhc3NOYW1lID0g bmV3X2NvbW1lbnQuY2FudmFzLmNsYXNzTmFtZTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMSl9jbXRpbmZvW2lkXS5mdWxsPTE7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0vL2lmKGlkIGluIGNvbW1l bnRzX3BhZ2UpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwog ICAgICAgdGhpcy5raWxsRHVwbGljYXRlKGNvbW1lbnRzX2ludGVyc2VjdGlvbik7 CiAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZU9mZigpOwogICAgICAgcmV0dXJuIHRy dWU7Cn0KCgovL2p1c3QgZm9yIGRlYnVnZ2luZwpFeHBhbmRlci5wcm90b3R5cGUu dG9TdHJpbmcgPSBmdW5jdGlvbigpewogICAgcmV0dXJuICdfXycrdGhpcy5pZCsn X18nOwp9CgoKRXhwYW5kZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKCl7CiAg ICBpZih0aGlzLl9fY2FsbGVyX18uZ2V0QXR0cmlidXRlKCdhbHJlYWR5X2NsaWNr ZWQnKSl7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdGhpcy5sb2Fk aW5nU3RhdGVPbigpOwoKICAgIHZhciBpZnJhbWU7CiAgICBpZigvKkBjY19vbiAh QCovMCl7CiAgICAgICAgLy8gYnJhbmNoIGZvciBJRQogICAgICAgIEV4cGFuZGVy LkNvbGxlY3Rpb25bdGhpcy5pZF0gPSB0aGlzOwogICAgICAgIGlmcmFtZSA9IGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxpZnJhbWUgb25sb2FkPSJFeHBhbmRlci5D b2xsZWN0aW9uWycrdGhpcy5pZCsnXS5vbkxvYWRIYW5kbGVyKHRoaXMpIj4nKTsK ICAgIH1lbHNlewogICAgICAgIC8vIGJyYW5jaCBmb3IgYWxsIG90aGVyIGJyb3dz ZXJzCiAgICAgICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZy YW1lJyk7CiAgICAgICAgaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uKG9iail7cmV0 dXJuIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmou b25Mb2FkSGFuZGxlcihpZnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9 fSh0aGlzKTsKICAgIH0KICAgIGlmcmFtZS5zdHlsZS5oZWlnaHQ9JzFweCc7CiAg ICBpZnJhbWUuc3R5bGUud2lkdGg9JzFweCc7CiAgICBpZnJhbWUuc3R5bGUuZGlz cGxheSA9ICdub25lJzsKICAgIGlmcmFtZS5zcmMgPSB0aGlzLnVybDsKICAgIGRv Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKICAgIHRoaXMuaWZyYW1l PWlmcmFtZTsKICAgIHJldHVybiB0cnVlOwp9Ci8qCkphdmFTcmlwdCBPYmplY3Qg Tm90YXRpb24gKEpTT04pCiRJZCQKCkNvcHlyaWdodCAoYykgMjAwNS0yMDA2LCBT aXggQXBhcnQsIEx0ZC4KQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgICAqIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Cm5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKY29weXJpZ2h0 IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lcgppbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCmRpc3RyaWJ1dGlvbi4KCiAgICAq IE5laXRoZXIgdGhlIG5hbWUgb2YgIlNpeCBBcGFydCIgbm9yIHRoZSBuYW1lcyBv ZiBpdHMKY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KdGhpcyBzb2Z0d2FyZSB3aXRob3V0 IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U UklCVVRPUlMKIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKTElNSVRFRCBUTywgVEhFIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S CkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQ09QWVJJR0hUCk9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLApTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLApEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkKVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAooSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UKT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCiovCgoKSlNPTiA9IHsKICAgIHBhcnNl OiBmdW5jdGlvbiggc3RyaW5nICkgewogICAgICAgIHN0cmluZyA9IHN0cmluZy5y ZXBsYWNlKCAvPS9nLCAiXFx1M0QiICk7CiAgICAgICAgc3RyaW5nID0gc3RyaW5n LnJlcGxhY2UoIC9cKC9nLCAiXFx1MjgiICk7CiAgICAgICAgdHJ5IHsKICAgICAg ICAgICAgcmV0dXJuIGV2YWwoICIoIiArIHN0cmluZyArICIpIiApOwogICAgICAg IH0gY2F0Y2goIGUgKSB7fQogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICB9 Cn0KCgpCb29sZWFuLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHsKICAg IHJldHVybiB0aGlzLnRvU3RyaW5nKCk7Cn0KCgpOdW1iZXIucHJvdG90eXBlLnRv SlNPTiA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGlzRmluaXRlKCB0aGlzICkg PyB0aGlzLnRvU3RyaW5nKCkgOiAiMCI7Cn0KCgpEYXRlLnByb3RvdHlwZS50b0pT T04gPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnRvVVRDSVNPU3RyaW5n CiAgICAgICAgPyB0aGlzLnRvVVRDSVNPU3RyaW5nKCkudG9KU09OKCkKICAgICAg ICA6IHRoaXMudG9TdHJpbmcoKS50b0pTT04oKTsKfQoKClN0cmluZy5wcm90b3R5 cGUudG9KU09OID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gJyInICsgdGhpcy5l c2NhcGVKUygpICsgJyInOwp9CgoKUmVnRXhwLnByb3RvdHlwZS50b0pTT04gPSBm dW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCkudG9KU09OKCk7 Cn0KCgpGdW5jdGlvbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7CiAg ICByZXR1cm4gdGhpcy50b1N0cmluZygpLnRvSlNPTigpOwp9CgoKQXJyYXkucHJv dG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCByb290ICkgewogICAgLy8gY3J1ZGUg cmVjdXJzaW9uIGRldGVjdGlvbgogICAgaWYoICFyb290ICkKICAgICAgICByb290 ID0gdGhpczsKICAgIGVsc2UgaWYoIHJvb3QgPT0gdGhpcyApCiAgICAgICAgcmV0 dXJuICJbXSI7CiAgICAKICAgIHZhciBvdXQgPSBbICJbIiBdOwogICAgZm9yKCB2 YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrICkgewogICAgICAgIGlmKCBv dXQubGVuZ3RoID4gMSApCiAgICAgICAgICAgIG91dC5wdXNoKCAiLCIgKTsKICAg ICAgICBpZiggdHlwZW9mIHRoaXNbIGkgXSA9PSAidW5kZWZpbmVkIiB8fCB0aGlz WyBpIF0gPT0gbnVsbCApCiAgICAgICAgICAgIG91dC5wdXNoKCAibnVsbCIgKTsK ICAgICAgICBlbHNlIGlmKCAhdGhpc1sgaSBdLnRvSlNPTiApCiAgICAgICAgICAg IG91dC5wdXNoKCAie30iICk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBvdXQu cHVzaCggdGhpc1sgaSBdLnRvSlNPTiggcm9vdCApICk7CiAgICB9CiAgICBvdXQu cHVzaCggIl0iICk7CiAgICByZXR1cm4gb3V0LmpvaW4oICIiICk7Cn0KCgpPYmpl Y3QucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCByb290ICkgewogICAgLy8g Y3J1ZGUgcmVjdXJzaW9uIGRldGVjdGlvbgogICAgaWYoICFyb290ICkKICAgICAg ICByb290ID0gdGhpczsKICAgIGVsc2UgaWYoIHJvb3QgPT0gdGhpcyApCiAgICAg ICAgcmV0dXJuICJ7fSI7CiAgICAKICAgIHZhciBvdXQgPSBbICJ7IiBdOwogICAg Zm9yKCB2YXIgaSBpbiB0aGlzICkgewogICAgICAgIGlmKCB0eXBlb2YgdGhpc1sg aSBdID09ICJ1bmRlZmluZWQiICkKICAgICAgICAgICAgY29udGludWU7CiAgICAg ICAgaWYoIG91dC5sZW5ndGggPiAxICkKICAgICAgICAgICAgb3V0LnB1c2goICIs IiApOwogICAgICAgIG91dC5wdXNoKCBpLnRvSlNPTigpICk7CiAgICAgICAgaWYo IHRoaXNbIGkgXSA9PSBudWxsICkKICAgICAgICAgICAgb3V0LnB1c2goICI6bnVs bCIgKTsKICAgICAgICBlbHNlIGlmKCB0eXBlb2YgdGhpc1sgaSBdID09ICJmdW5j dGlvbiIgKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBlbHNlIGlmKCAh dGhpc1sgaSBdLnRvSlNPTiApCiAgICAgICAgICAgIG91dC5wdXNoKCAiOnt9IiAp OwogICAgICAgIGVsc2UKICAgICAgICAgICAgb3V0LnB1c2goICI6IiwgdGhpc1sg aSBdLnRvSlNPTiggcm9vdCApICk7CiAgICB9CiAgICBvdXQucHVzaCggIn0iICk7 CiAgICByZXR1cm4gb3V0LmpvaW4oICIiICk7Cn0KLyoKVGVtcGxhdGUgLSBDb3B5 cmlnaHQgMjAwNSBTaXggQXBhcnQKJElkOiB0ZW1wbGF0ZS5qcyAzNSAyMDA2LTAy LTE4IDAwOjQ2OjU1WiBtaXNjaGEgJAoKQ29weXJpZ2h0IChjKSAyMDA1LCBTaXgg QXBhcnQsIEx0ZC4KQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgICAqIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0Cm5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKY29weXJpZ2h0IG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lcgppbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCmRpc3RyaWJ1dGlvbi4KCiAgICAqIE5l aXRoZXIgdGhlIG5hbWUgb2YgIlNpeCBBcGFydCIgbm9yIHRoZSBuYW1lcyBvZiBp dHMKY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC VVRPUlMKIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKTElNSVRFRCBUTywgVEhFIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkEg UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQ09QWVJJR0hUCk9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLApTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UCkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLApEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkKVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAooSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KCiovCgoKLyogY29yZSB0ZW1wbGF0ZSBvYmpl Y3QgKi8KClRlbXBsYXRlID0gbmV3IENsYXNzKCBPYmplY3QsIHsKICAgIGJlZ2lu VG9rZW46ICJbIyIsCiAgICBlbmRUb2tlbjogIiNdIiwKICAgIAogICAgCiAgICBp bml0OiBmdW5jdGlvbiggc291cmNlICkgewogICAgICAgIGlmKCBzb3VyY2UgKQog ICAgICAgICAgICB0aGlzLmNvbXBpbGUoIHNvdXJjZSApOwogICAgfSwKICAgIAog ICAgCiAgICBjb21waWxlOiBmdW5jdGlvbiggc291cmNlICkgewogICAgICAgIHZh ciBzdGF0ZW1lbnRzID0gWwogICAgICAgICAgICAiY29udGV4dC5vcGVuKCk7IiwK ICAgICAgICAgICAgIndpdGgoIGNvbnRleHQudmFycyApIHsiCiAgICAgICAgXTsK ICAgICAgICAKICAgICAgICB2YXIgc3RhcnQgPSAwLCBlbmQgPSAtdGhpcy5lbmRU b2tlbi5sZW5ndGg7CiAgICAgICAgd2hpbGUoIHN0YXJ0IDwgc291cmNlLmxlbmd0 aCApIHsKICAgICAgICAgICAgZW5kICs9IHRoaXMuZW5kVG9rZW4ubGVuZ3RoOwog ICAgICAgICAgICAKICAgICAgICAgICAgLy8gcGxhaW50ZXh0CiAgICAgICAgICAg IHN0YXJ0ID0gc291cmNlLmluZGV4T2YoIHRoaXMuYmVnaW5Ub2tlbiwgZW5kICk7 CiAgICAgICAgICAgIGlmKCBzdGFydCA8IDAgKQogICAgICAgICAgICAgICAgc3Rh cnQgPSBzb3VyY2UubGVuZ3RoOwogICAgICAgICAgICBpZiggc3RhcnQgPiBlbmQg KQogICAgICAgICAgICAgICAgc3RhdGVtZW50cy5wdXNoKCAiY29udGV4dC53cml0 ZSggIiwgc291cmNlLnN1YnN0cmluZyggZW5kLCBzdGFydCApLnRvSlNPTigpLCAi ICk7IiApOwogICAgICAgICAgICBzdGFydCArPSB0aGlzLmJlZ2luVG9rZW4ubGVu Z3RoOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gY29kZQogICAgICAgICAg ICBpZiggc3RhcnQgPj0gc291cmNlLmxlbmd0aCApCiAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgZW5kID0gc291cmNlLmluZGV4T2YoIHRoaXMuZW5k VG9rZW4sIHN0YXJ0ICk7CiAgICAgICAgICAgIGlmKCBlbmQgPCAwICkKICAgICAg ICAgICAgICAgIHRocm93ICJUZW1wbGF0ZSBwYXJzaW5nIGVycm9yOiBVbmFibGUg dG8gZmluZCBtYXRjaGluZyBlbmQgdG9rZW4gKCIgKyB0aGlzLmVuZFRva2VuICsg IikuIjsKICAgICAgICAgICAgdmFyIGxlbmd0aCA9IChlbmQgLSBzdGFydCk7CiAg ICAgICAgICAgIAogICAgICAgICAgICAvLyBlbXB0eSB0YWcKICAgICAgICAgICAg aWYoIGxlbmd0aCA8PSAwICkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg ICAgICAgICAKICAgICAgICAgICAgLy8gY29tbWVudAogICAgICAgICAgICBlbHNl IGlmKCBsZW5ndGggPj0gNCAmJgogICAgICAgICAgICAgICAgc291cmNlLmNoYXJB dCggc3RhcnQgKSA9PSAiLSIgJiYgc291cmNlLmNoYXJBdCggc3RhcnQgKyAxICkg PT0gIi0iICYmCiAgICAgICAgICAgICAgICBzb3VyY2UuY2hhckF0KCBlbmQgLSAx ICkgPT0gIi0iICYmIHNvdXJjZS5jaGFyQXQoIGVuZCAtIDIgKSA9PSAiLSIgKQog ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIAogICAgICAgICAg ICAvLyB3cml0ZQogICAgICAgICAgICBlbHNlIGlmKCBzb3VyY2UuY2hhckF0KCBz dGFydCApID09ICI9IiApCiAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzLnB1c2go ICJjb250ZXh0LndyaXRlKCAiLCBzb3VyY2Uuc3Vic3RyaW5nKCBzdGFydCArIDEs IGVuZCApLCAiICk7IiApOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZmls dGVycwogICAgICAgICAgICBlbHNlIGlmKCBzb3VyY2UuY2hhckF0KCBzdGFydCAp ID09ICJ8IiApIHsKICAgICAgICAgICAgICAgIHN0YXJ0ICs9IDE7CgogICAgICAg ICAgICAgICAgLy8gZmluZCB0aGUgZmlyc3Qgd2hpdGVzcGFjZQogICAgICAgICAg ICAgICAgdmFyIGFmdGVyZmlsdGVycyA9IHNvdXJjZS5zdWJzdHJpbmcoc3RhcnQs ZW5kKS5zZWFyY2goL1xzLyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgIHZhciBmaWx0ZXJzOwogICAgICAgICAgICAgICAgaWYgKGFmdGVyZmlsdGVy cyA+IDApIHsKICAgICAgICAgICAgICAgICAgICAvLyBhbGxvdyBwaXBlcyBvciBj b21tYXMgdG8gc2VwZXJhdGUgZmlsdGVycwogICAgICAgICAgICAgICAgICAgIC8v IHNwbGl0IHRoZSBzdHJpbmcsIHJldmVyc2UgYW5kIHJlam9pbiB0byByZXZlcnNl IGl0CiAgICAgICAgICAgICAgICAgICAgZmlsdGVycyA9IHNvdXJjZS5zdWJzdHJp bmcoc3RhcnQsc3RhcnQgKyBhZnRlcmZpbHRlcnMpLnJlcGxhY2UoLyx8XHwvZywi Iikuc3BsaXQoJycpOwogICAgICAgICAgICAgICAgICAgIGFmdGVyZmlsdGVycyAr PSAxOyAvLyBkYXRhIHN0YXJ0cyBhZnRlciB3aGl0ZXNwYWNlIGFuZCBmaWx0ZXIg bGlzdAogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg ICAvLyBkZWZhdWx0IHRvIGVzY2FwZUhUTUwKICAgICAgICAgICAgICAgICAgICBm aWx0ZXJzID0gWyJoIl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAvLyB3ZSBoYXZlIHRvIGRvIHRoZW0gaW4gcmV2ZXJzZSBvcmRlcgogICAgICAg ICAgICAgICAgZmlsdGVycyA9IGZpbHRlcnMucmV2ZXJzZSgpOwogICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHdpdGggb3VyIG9yaWdpbmFs IGZpbHRlciBudW1iZXIKICAgICAgICAgICAgICAgIHZhciBudW1maWx0ZXJzID0g ZmlsdGVycy5sZW5ndGg7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg IC8vIGFkZCB0aGUgdGV4dCBiZXR3ZWVuIFsjfCAgI10KICAgICAgICAgICAgICAg IGZpbHRlcnMucHVzaChzb3VyY2Uuc3Vic3RyaW5nKCBzdGFydCArIGFmdGVyZmls dGVycywgZW5kICkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAv LyBhZGp1c3QgZWFjaCBmaWx0ZXIgaW50byBhIGZ1bmN0aW9uIGNhbGwKICAgICAg ICAgICAgICAgIC8vIGVnLiB1ICggaCAoIEggKCBibGFoICkgKSApCiAgICAgICAg ICAgICAgICBmb3IgKGk9MDsgaTxudW1maWx0ZXJzOyBpKyspIHsKICAgICAgICAg ICAgICAgICAgICBmaWx0ZXJzW2ldID0gImNvbnRleHQuZi4iK2ZpbHRlcnNbaV0r IiggIjsKICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goIiApIik7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg IHN0YXRlbWVudHMucHVzaCggImNvbnRleHQud3JpdGUoICIgKyBmaWx0ZXJzLmpv aW4oJycpICsgIiApOyIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAg ICAgICAgICAvLyBldmFsdWF0ZQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICBzdGF0ZW1lbnRzLnB1c2goIHNvdXJjZS5zdWJzdHJpbmcoIHN0YXJ0LCBl bmQgKSApOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBzdGF0ZW1lbnRzLnB1 c2goICJ9IHJldHVybiBjb250ZXh0LmNsb3NlKCk7IiApOwoKICAgICAgICB0aGlz LmV4ZWMgPSBuZXcgRnVuY3Rpb24oICJjb250ZXh0Iiwgc3RhdGVtZW50cy5qb2lu KCAiXG4iICkgKTsKICAgIH0sCiAgICAKICAgIAogICAgZXhlYzogZnVuY3Rpb24o IGNvbnRleHQgKSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgfQp9ICk7CgoKLyog c3RhdGljIG1lbWJlcnMgKi8KClRlbXBsYXRlLnRlbXBsYXRlcyA9IHt9OwoKCi8q IGNvbnRleHQgb2JqZWN0ICovCgpUZW1wbGF0ZS5Db250ZXh0ID0gbmV3IENsYXNz KCBPYmplY3QsIHsKICAgIGluaXQ6IGZ1bmN0aW9uKCB2YXJzLCB0ZW1wbGF0ZXMg KSB7CiAgICAgICAgdGhpcy52YXJzID0gdmFycyB8fCB7fTsKICAgICAgICB0aGlz LnRlbXBsYXRlcyA9IHRlbXBsYXRlcyB8fCBUZW1wbGF0ZS50ZW1wbGF0ZXM7CiAg ICAgICAgdGhpcy5zdGFjayA9IFtdOwogICAgICAgIHRoaXMub3V0ID0gW107CiAg ICAgICAgdGhpcy5mID0gVGVtcGxhdGUuRmlsdGVyOwogICAgfSwKICAgIAogICAg CiAgICBpbmNsdWRlOiBmdW5jdGlvbiggbmFtZSApIHsKICAgICAgICByZXR1cm4g dGhpcy50ZW1wbGF0ZXNbIG5hbWUgXS5leGVjKCB0aGlzICk7CiAgICB9LAoKCiAg ICB3cml0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5vdXQucHVzaC5hcHBs eSggdGhpcy5vdXQsIGFyZ3VtZW50cyApOwogICAgfSwKCgogICAgd3JpdGVsbjog ZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy53cml0ZS5hcHBseSggdGhpcywgYXJn dW1lbnRzICk7CiAgICAgICAgdGhpcy53cml0ZSggIlxuIiApOwogICAgfSwKCiAg ICAKICAgIGNsZWFyOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLm91dC5sZW5n dGggPSAwOwogICAgfSwKCgogICAgZ2V0T3V0cHV0OiBmdW5jdGlvbigpIHsKICAg ICAgICByZXR1cm4gdGhpcy5vdXQuam9pbiggIiIgKTsKICAgIH0sCiAgICAKICAg IAogICAgb3BlbjogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5zdGFjay5wdXNo KCB0aGlzLm91dCApOwogICAgICAgIHRoaXMub3V0ID0gW107CiAgICB9LAogICAg CiAgICAKICAgIGNsb3NlOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcmVzdWx0 ID0gdGhpcy5nZXRPdXRwdXQoKTsKICAgICAgICB0aGlzLm91dCA9IHRoaXMuc3Rh Y2sucG9wKCkgfHwgW107CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAg Cn0gKTsKCi8qIGZpbHRlcnMgKi8KClRlbXBsYXRlLkZpbHRlciA9IHsKCiAgICAv LyBlc2NhcGVIVE1MCiAgICBoOiBmdW5jdGlvbihvYmopIHsKICAgICAgICB2YXIg ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgdmFy IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUob2JqKTsKICAgICAg ICBkaXYuYXBwZW5kQ2hpbGQodGV4dE5vZGUpOwogICAgICAgIHJldHVybiAoZGl2 LmlubmVySFRNTCk7CiAgICB9LAoKICAgIC8vIHVuZXNjYXBlSFRNTAogICAgSDog ZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgcmV0dXJuICh1bmVzY2FwZShvYmopKTsK ICAgIH0sCgogICAgLy8gZW5jb2RlVVJMCiAgICB1OiBmdW5jdGlvbihvYmopIHsK ICAgICAgICByZXR1cm4gKGVzY2FwZShvYmopLnJlcGxhY2UoL1wvL2csIiUyRiIp KTsKICAgIH0KCn07CgpVc2VycGljU2VsZWN0ID0gbmV3IENsYXNzIChMSl9JUFBV LCB7CiAgaW5pdDogZnVuY3Rpb24gKCkgewogICAgVXNlcnBpY1NlbGVjdC5zdXBl ckNsYXNzLmluaXQuYXBwbHkodGhpcywgWyJDaG9vc2UgVXNlcnBpYyJdKTsKCiAg ICB0aGlzLnNldERpbWVuc2lvbnMoIjU1MHB4IiwgIjQ0MXB4Iik7CgogICAgdGhp cy5zZWxlY3RlZFBpY2lkID0gbnVsbDsKICAgIHRoaXMuZGlzcGxheVBpY3MgPSBu dWxsOwogICAgdGhpcy5kYXRhTG9hZGVkID0gZmFsc2U7CiAgICB0aGlzLmltZ1Nj YWxlID0gMTsKCiAgICB0aGlzLnBpY1NlbGVjdGVkQ2FsbGJhY2sgPSBudWxsOwoK ICAgIHZhciB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZSggVXNlcnBpY1NlbGVjdC50 b3AgKTsKICAgIHZhciB0ZW1wbGF0ZXMgPSB7IGJvZHk6IHRlbXBsYXRlIH07CiAg ICB0aGlzLnNldENvbnRlbnQodGVtcGxhdGUuZXhlYyggbmV3IFRlbXBsYXRlLkNv bnRleHQoIHt9LCB0ZW1wbGF0ZXMgKSApKTsKICAgIHRoaXMuc2V0SGlkZGVuQ2Fs bGJhY2sodGhpcy5oaWRkZW4uYmluZCh0aGlzKSk7CiAgfSwKCiAgc2hvdzogZnVu Y3Rpb24oKSB7CiAgICBVc2VycGljU2VsZWN0LnN1cGVyQ2xhc3Muc2hvdy5hcHBs eSh0aGlzLCBbXSk7CgogICAgaWYgKCF0aGlzLmRhdGFMb2FkZWQpIHsKICAgICAg dGhpcy5zZXRTdGF0dXMoIkxvYWRpbmcuLi4iKTsKICAgICAgdGhpcy5sb2FkUGlj cygpOwogICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlOwogICAgfSBlbHNlIHsK ICAgICAgdGhpcy5yZWRyYXcoKTsKICAgIH0KICB9LAoKICAvLyBoaWRlIHRoZSBo b3VyZ2xhc3Mgd2hlbiB3aW5kb3cgaXMgY2xvc2VkCiAgaGlkZGVuOiBmdW5jdGlv biAoKSB7CiAgICBpZiAodGhpcy5ob3VyZ2xhc3MpCiAgICAgIHRoaXMuaG91cmds YXNzLmhpZGUoKTsKICB9LAoKICAvLyBzZXQgYSBjYWxsYmFjayB0byBiZSBjYWxs ZWQgd2hlbiB0aGUgInNlbGVjdCIgYnV0dG9uIGlzIGNsaWNrZWQKICBzZXRQaWNT ZWxlY3RlZENhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIHRoaXMu cGljU2VsZWN0ZWRDYWxsYmFjayA9IGNhbGxiYWNrOwogIH0sCgogIC8vIGNhbGxl ZCB3aGVuIHRoZSAic2VsZWN0IiBidXR0b24gaXMgY2xpY2tlZAogIGNsb3NlQnV0 dG9uQ2xpY2tlZDogZnVuY3Rpb24gKGV2dCkgewogICAgICBpZiAodGhpcy5waWNT ZWxlY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLd3MgPSBb XTsKICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUGljaWQpIHsKICAgICAgICAg ICAgICB2YXIga3dzID0gdGhpcy5waWNzLnBpY3NbdGhpcy5zZWxlY3RlZFBpY2lk KyIiXS5rZXl3b3JkczsKICAgICAgICAgICAgICBpZiAoa3dzICYmIGt3cy5sZW5n dGgpIHNlbGVjdGVkS3dzID0ga3dzOwogICAgICAgICAgfQoKICAgICAgICAgIHRo aXMucGljU2VsZWN0ZWRDYWxsYmFjayh0aGlzLnNlbGVjdGVkUGljaWQsIHNlbGVj dGVkS3dzKTsKICAgICAgfQoKICAgIHRoaXMuaGlkZSgpOwogIH0sCgogIHNldFN0 YXR1czogZnVuY3Rpb24oc3RhdHVzKSB7CiAgICAgIHRoaXMuc2V0RmllbGQoeydz dGF0dXMnOiBzdGF0dXN9KTsKICB9LAoKICBzZXRGaWVsZDogZnVuY3Rpb24odmFy cykgewogICAgdmFyIHRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKCBVc2VycGljU2Vs ZWN0LmR5bmFtaWMgKTsKICAgIHZhciB1c2VycGljc190ZW1wbGF0ZSA9IG5ldyBU ZW1wbGF0ZSggVXNlcnBpY1NlbGVjdC51c2VycGljcyApOwoKICAgIHZhciB0ZW1w bGF0ZXMgPSB7CiAgICAgIGJvZHk6IHRlbXBsYXRlLAogICAgICB1c2VycGljczog dXNlcnBpY3NfdGVtcGxhdGUKICAgIH07CgogICAgaWYgKCF2YXJzLnBpY3MpCiAg ICAgIHZhcnMucGljcyA9IHRoaXMucGljcyB8fCB7fTsKCiAgICBpZiAoIXZhcnMu c3RhdHVzKQogICAgICB2YXJzLnN0YXR1cyA9ICIiOwoKICAgIHZhcnMuaW1nU2Nh bGUgPSB0aGlzLmltZ1NjYWxlOwoKICAgICQoInVwc19keW5hbWljIikuaW5uZXJI VE1MID0gKHRlbXBsYXRlLmV4ZWMoIG5ldyBUZW1wbGF0ZS5Db250ZXh0KCB2YXJz LCB0ZW1wbGF0ZXMgKSApKTsKCiAgICBpZiAoIXZhcnMucGljcy5pZHMpCiAgICAg IHJldHVybjsKCiAgICAvLyB3ZSByZWRyZXcgdGhlIHdpbmRvdyBzbyByZXNlbGVj dCB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGlmIGFueQogICAgaWYgKHRoaXMuc2Vs ZWN0ZWRQaWNpZCkKICAgICAgdGhpcy5zZWxlY3RQaWModGhpcy5zZWxlY3RlZFBp Y2lkKTsKCiAgICB2YXIgU1QgPSBuZXcgU2VsZWN0YWJsZVRhYmxlKCk7CiAgICBT VC5pbml0KHsKICAgICAgICAidGFibGUiOiAkKCJ1cHNfdXNlcnBpY3NfdCIpLAog ICAgICAgICAgICAic2VsZWN0ZWRDbGFzcyI6ICJ1cHNfc2VsZWN0ZWRfY2VsbCIs CiAgICAgICAgICAgICJzZWxlY3RhYmxlQ2xhc3MiOiAidXBzX2NlbGwiLAogICAg ICAgICAgICAibXVsdGlwbGUiOiBmYWxzZSwKICAgICAgICAgICAgInNlbGVjdGFi bGVJdGVtIjogImNlbGwiCiAgICAgICAgICAgIH0pOwoKICAgIHZhciBzZWxmID0g dGhpczsKCiAgICBTVC5hZGRXYXRjaGVyKGZ1bmN0aW9uIChkYXRhKSB7CiAgICAg ICAgdmFyIHNlbGVjdGVkQ2VsbCA9IGRhdGFbMF07CgogICAgICAgIGlmICghc2Vs ZWN0ZWRDZWxsKSB7CiAgICAgICAgICAgIC8vIGNsZWFyIHNlbGVjdGlvbgogICAg ICAgICAgICBzZWxmLnNlbGVjdFBpYyhudWxsKTsKICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICAvLyBmaW5kIHBpY2lkIGFuZCBzZWxlY3QgaXQKICAgICAgICAg ICAgdmFyIHBhcmVudENlbGwgPSBET00uZ2V0Rmlyc3RBbmNlc3RvckJ5Q2xhc3NO YW1lKHNlbGVjdGVkQ2VsbCwgInVwc19jZWxsIiwgdHJ1ZSk7CiAgICAgICAgICAg IGlmICghcGFyZW50Q2VsbCkgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIHBpY2lk ID0gcGFyZW50Q2VsbC5nZXRBdHRyaWJ1dGUoImxqX3VwczpwaWNpZCIpOwogICAg ICAgICAgICBpZiAoIXBpY2lkKSByZXR1cm47CgogICAgICAgICAgICBzZWxmLnNl bGVjdFBpYyhwaWNpZCk7CiAgICAgICAgfQogICAgfSk7CgogICAgRE9NLmFkZEV2 ZW50TGlzdGVuZXIoJCgidXBzX2Nsb3NlYnV0dG9uIiksICJjbGljayIsIHRoaXMu Y2xvc2VCdXR0b25DbGlja2VkLmJpbmRFdmVudExpc3RlbmVyKHRoaXMpKTsKCiAg ICAvLyBzZXQgdXAgaW1hZ2Ugc2NhbGluZyBidXR0b25zCiAgICB2YXIgc2NhbGlu Z1NpemVzID0gWzMsMiwxXTsKICAgIHZhciBiYXNlU2l6ZSA9IDI1OwogICAgdmFy IHNjYWxpbmdCdG5zID0gJCgidXBzX3NjYWxpbmdfYnV0dG9ucyIpOwogICAgdGhp cy5zY2FsaW5nQnRucyA9IFtdOwoKICAgIGlmIChzY2FsaW5nQnRucykgewogICAg ICAgIHNjYWxpbmdTaXplcy5mb3JFYWNoKGZ1bmN0aW9uIChzY2FsZVNpemUpIHsK ICAgICAgICAgICAgdmFyIHNjYWxlQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu dCgiaW1nIik7CgogICAgICAgICAgICBzY2FsZUJ0bi5zdHlsZS53aWR0aCA9IHNj YWxlQnRuLndpZHRoID0gc2NhbGVCdG4uc3R5bGUuaGVpZ2h0ID0gc2NhbGVCdG4u aGVpZ2h0ID0gYmFzZVNpemUgLSBzY2FsZVNpemUgKiA1OwoKICAgICAgICAgICAg c2NhbGVCdG4uc3JjID0gU2l0ZS5pbWdwcmVmaXggKyAiL2ltZ3NjYWxlLnBuZyI7 CiAgICAgICAgICAgIERPTS5hZGRDbGFzc05hbWUoc2NhbGVCdG4sICJ1cHNfc2Nh bGVidG4iKTsKCiAgICAgICAgICAgIHNlbGYuc2NhbGluZ0J0bnMucHVzaChzY2Fs ZUJ0bik7CgogICAgICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihzY2FsZUJ0 biwgImNsaWNrIiwgZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgRXZl bnQuc3RvcChldnQpOwoKICAgICAgICAgICAgICAgIHNlbGYuaW1nU2NhbGUgPSBz Y2FsZVNpemU7CiAgICAgICAgICAgICAgICBzZWxmLnNjYWxpbmdCdG5zLmZvckVh Y2goZnVuY3Rpb24gKG90aGVyQnRuKSB7CiAgICAgICAgICAgICAgICAgICAgRE9N LnJlbW92ZUNsYXNzTmFtZShvdGhlckJ0biwgInVwc19zY2FsZWJ0bl9zZWxlY3Rl ZCIpOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgRE9NLmFk ZENsYXNzTmFtZShzY2FsZUJ0biwgInVwc19zY2FsZWJ0bl9zZWxlY3RlZCIpOwoK ICAgICAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7CiAgICAgICAgICAgIH0pOwoK ICAgICAgICAgICAgc2NhbGluZ0J0bnMuYXBwZW5kQ2hpbGQoc2NhbGVCdG4pOwoK ICAgICAgICAgICAgaWYgKHNlbGYuaW1nU2NhbGUgPT0gc2NhbGVTaXplKQogICAg ICAgICAgICAgICAgRE9NLmFkZENsYXNzTmFtZShzY2FsZUJ0biwgInVwc19zY2Fs ZWJ0bl9zZWxlY3RlZCIpOwogICAgICAgIH0pOwogICAgfQogIH0sCgogIGt3bWVu dUNoYW5nZTogZnVuY3Rpb24oZXZ0KSB7CiAgICB0aGlzLnNlbGVjdFBpYygkKCJ1 cHNfa3dtZW51IikudmFsdWUpOwogIH0sCgogIHNlbGVjdFBpYzogZnVuY3Rpb24o cGljaWQpIHsKICAgIGlmICh0aGlzLnNlbGVjdGVkUGljaWQpIHsKICAgICAgICBE T00ucmVtb3ZlQ2xhc3NOYW1lKCQoInVwc191cGljaW1nIiArIHRoaXMuc2VsZWN0 ZWRQaWNpZCksICJ1cHNfc2VsZWN0ZWQiKTsKICAgICAgICBET00ucmVtb3ZlQ2xh c3NOYW1lKCQoInVwc19jZWxsIiArIHRoaXMuc2VsZWN0ZWRQaWNpZCksICJ1cHNf c2VsZWN0ZWRfY2VsbCIpOwogICAgfQoKICAgIHRoaXMuc2VsZWN0ZWRQaWNpZCA9 IHBpY2lkOwoKICAgIGlmIChwaWNpZCkgewogICAgICAgIC8vIGZpbmQgdGhlIGN1 cnJlbnQgcGljIGFuZCBjZWxsCiAgICAgICAgdmFyIHBpY2ltZyA9ICAkKCJ1cHNf dXBpY2ltZyIgKyBwaWNpZCk7CiAgICAgICAgdmFyIGNlbGwgICA9ICAkKCJ1cHNf Y2VsbCIgKyBwaWNpZCk7CgogICAgICAgIGlmICghcGljaW1nIHx8ICFjZWxsKQog ICAgICAgICAgICByZXR1cm47CgogICAgICAgIC8vIGhpbGlnaHQgdGhlIHVzZXJw aWMKICAgICAgICBET00uYWRkQ2xhc3NOYW1lKHBpY2ltZywgInVwc19zZWxlY3Rl ZCIpOwoKICAgICAgICAvLyBoaWxpZ2h0IHRoZSBjZWxsCiAgICAgICAgRE9NLmFk ZENsYXNzTmFtZShjZWxsLCAidXBzX3NlbGVjdGVkX2NlbGwiKTsKCiAgICAgICAg Ly8gZW5hYmxlIHRoZSBzZWxlY3QgYnV0dG9uCiAgICAgICAgJCgidXBzX2Nsb3Nl YnV0dG9uIikuZGlzYWJsZWQgPSBmYWxzZTsKCiAgICAgICAgLy8gc2VsZWN0IHRo ZSBjdXJyZW50IHNlbGVjdGVkUGljaWQgaW4gdGhlIGRyb3Bkb3duCiAgICAgICAg dGhpcy5zZXREcm9wZG93bigpOwogICAgfSBlbHNlIHsKICAgICAgICAkKCJ1cHNf Y2xvc2VidXR0b24iKS5kaXNhYmxlZCA9IHRydWU7CiAgICB9CiAgfSwKCiAgLy8g ZmlsdGVyIGJ5IGtleXdvcmQvY29tbWVudAogIGZpbHRlclBpY3M6IGZ1bmN0aW9u KGV2dCkgewogICAgdmFyIHNlYXJjaGJveCA9ICQoInVwc19zZWFyY2giKTsKCiAg ICBpZiAoIXNlYXJjaGJveCkKICAgICAgcmV0dXJuOwoKICAgIHZhciBmaWx0ZXIg PSBzZWFyY2hib3gudmFsdWUudG9Mb2NhbGVVcHBlckNhc2UoKTsKICAgIHZhciBw aWNzID0gdGhpcy5waWNzOwoKICAgIGlmICghZmlsdGVyKSB7CiAgICAgIHRoaXMu c2V0UGljcyhwaWNzKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIGlmIHRo ZXJlIGlzIGEgZmlsdGVyIGFuZCB0aGVyZSBpcyBzZWxlY3RlZCB0ZXh0IGluIHRo ZSBmaWVsZCBhc3N1bWUgdGhhdCBpdCdzCiAgICAvLyBpbnB1dGNvbXBsZXRlIHRl eHQgYW5kIGlnbm9yZSB0aGUgcmVzdCBvZiB0aGUgc2VsZWN0aW9uLgogICAgaWYg KHNlYXJjaGJveC5zZWxlY3Rpb25TdGFydCAmJiBzZWFyY2hib3guc2VsZWN0aW9u U3RhcnQgPiAwKQogICAgICBmaWx0ZXIgPSBzZWFyY2hib3gudmFsdWUuc3Vic3Ry KDAsIHNlYXJjaGJveC5zZWxlY3Rpb25TdGFydCkudG9Mb2NhbGVVcHBlckNhc2Uo KTsKCiAgICB2YXIgbmV3cGljcyA9IHsKICAgICAgInBpY3MiOiBbXSwKICAgICAg ImlkcyI6IFtdCiAgICB9OwoKICAgIGZvciAodmFyIGk9MDsgaTxwaWNzLmlkcy5s ZW5ndGg7IGkrKykgewogICAgICB2YXIgcGljaWQgPSBwaWNzLmlkc1tpXTsKICAg ICAgdmFyIHBpYyA9IHBpY3MucGljc1twaWNpZF07CgogICAgICBpZiAoIXBpYykK ICAgICAgICBjb250aW51ZTsKCiAgICAgIGZvciAodmFyIGo9MDsgaiA8IHBpYy5r ZXl3b3Jkcy5sZW5ndGg7IGorKykgewogICAgICAgIHZhciBrdyA9IHBpYy5rZXl3 b3Jkc1tqXTsKCiAgICAgICAgdmFyIHBpY2NvbW1lbnQgPSAiIjsKICAgICAgICBp ZiAocGljLmNvbW1lbnQpCiAgICAgICAgICBwaWNjb21tZW50ID0gcGljLmNvbW1l bnQudG9Mb2NhbGVVcHBlckNhc2UoKTsKCiAgICAgICAgaWYoa3cudG9Mb2NhbGVV cHBlckNhc2UoKS5pbmRleE9mKGZpbHRlcikgIT0gLTEgfHwgLy8gbWF0Y2hlcyBh IGtleXdvcmQKICAgICAgICAgICAocGljY29tbWVudCAmJiBwaWNjb21tZW50Lmlu ZGV4T2YoZmlsdGVyKSAhPSAtMSkgfHwgLy8gbWF0Y2hlcyBjb21tZW50CiAgICAg ICAgICAgKHBpYy5rZXl3b3Jkcy5qb2luKCIsICIpLnRvTG9jYWxlVXBwZXJDYXNl KCkuaW5kZXhPZihmaWx0ZXIpICE9IC0xKSkgeyAvLyBtYXRjaGVzIGNvbW1hLXNl cGVyYXRlZCBsaXN0IG9mIGtleXdvcmRzCgogICAgICAgICAgbmV3cGljcy5waWNz W3BpY2lkXSA9IHBpYzsKICAgICAgICAgIG5ld3BpY3MuaWRzLnB1c2gocGljaWQp OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAg aWYgKHRoaXMucGljcyAhPSBuZXdwaWNzKQogICAgICB0aGlzLnNldFBpY3MobmV3 cGljcyk7CgogICAgLy8gaWYgd2UndmUgZmlsdGVyZWQgZG93biB0byBvbmUgcGlj IGFuZCB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNlbGVjdGVkIHBpYywgc2Vs ZWN0IGl0CiAgICBpZiAobmV3cGljcy5pZHMubGVuZ3RoID09IDEgJiYgIXRoaXMu c2VsZWN0ZWRQaWNpZCkKICAgICAgdGhpcy5zZWxlY3RQaWMobmV3cGljcy5pZHNb MF0pOwogIH0sCgogIHNldERyb3Bkb3duOiBmdW5jdGlvbihwaWNzKSB7CiAgICB2 YXIgbWVudSA9ICQoInVwc19rd21lbnUiKTsKCiAgICBmb3IgKHZhciBpPTA7IGkg PCBtZW51Lmxlbmd0aDsgaSsrKQogICAgICBtZW51LnJlbW92ZShpKTsKCiAgICBt ZW51Lmxlbmd0aCA9IDA7CgogICAgaWYgKCFwaWNzKQogICAgICBwaWNzID0gdGhp cy5waWNzOwoKICAgIGlmICghcGljcyB8fCAhcGljcy5pZHMpCiAgICAgIHJldHVy bjsKCiAgICBmb3IgKHZhciBpPTA7IGkgPCBwaWNzLmlkcy5sZW5ndGg7IGkrKykg ewogICAgICB2YXIgcGljaWQgPSBwaWNzLmlkc1tpXTsKICAgICAgdmFyIHBpYyA9 IHBpY3MucGljc1twaWNpZF07CgogICAgICBpZiAoIXBpYykKICAgICAgICBjb250 aW51ZTsKCiAgICAgIHZhciBzZWwgPSBmYWxzZTsKICAgICAgdmFyIHNlbGYgPSB0 aGlzOwoKICAgICAgcGljLmtleXdvcmRzLmZvckVhY2goZnVuY3Rpb24gKGt3KSB7 CiAgICAgICAgICAvLyBhZGQgdG8gZHJvcGRvd24KICAgICAgICAgIHZhciBwaWNv cHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKICAgICAgICAg IHBpY29wdC50ZXh0ID0ga3c7CiAgICAgICAgICBwaWNvcHQudmFsdWUgPSBwaWNp ZDsKCiAgICAgICAgICBpZiAoISBzZWwpIHsKICAgICAgICAgICAgICBwaWNvcHQu c2VsZWN0ZWQgPSBzZWxmLnNlbGVjdGVkUGljaWQgPyBzZWxmLnNlbGVjdGVkUGlj aWQgPT0gcGljaWQgOiBmYWxzZTsKICAgICAgICAgICAgICBzZWwgPSBwaWNvcHQu c2VsZWN0ZWQ7CiAgICAgICAgICB9CgogICAgICAgICAgVHJ5LnRoZXNlKAogICAg ICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgbWVudS5hZGQocGljb3B0LCAw KTsgfSwgICAgLy8gZXZlcnl0aGluZyBlbHNlCiAgICAgICAgICAgICAgICAgICAg ZnVuY3Rpb24gKCkgeyBtZW51LmFkZChwaWNvcHQsIG51bGwpOyB9ICAvLyBJRQog ICAgICAgICAgICAgICAgICAgICk7CiAgICAgIH0pOwogICAgfQogIH0sCgogIHBp Y3NSZWNlaXZlZDogZnVuY3Rpb24ocGljaW5mbykgewogICAgaWYgKHBpY2luZm8g JiYgcGljaW5mby5hbGVydCkgeyAvLyBnb3QgYW4gZXJyb3IKICAgICAgdGhpcy5o YW5kbGVFcnJvcihwaWNpbmZvLmFsZXJ0KTsKICAgICAgcmV0dXJuOwogICAgfQoK ICAgIGlmICghcGljaW5mbyB8fCAhcGljaW5mby5pZHMgfHwgIXBpY2luZm8ucGlj cyB8fCAhcGljaW5mby5pZHMubGVuZ3RoKQogICAgICByZXR1cm47CgogICAgdmFy IHBpY2NvdW50ID0gcGljaW5mby5pZHMubGVuZ3RoOwoKICAgIC8vIGZvcmNlIGNv bnZlcnQgaW50ZWdlcnMgdG8gc3RyaW5ncwogICAgZm9yICh2YXIgaT0wOyBpIDwg cGljY291bnQ7IGkrKykgewogICAgICB2YXIgcGljaWQgPSBwaWNpbmZvLmlkc1tp XTsKCiAgICAgIHZhciBwaWMgPSBwaWNpbmZvLnBpY3NbcGljaWRdOwoKICAgICAg aWYgKCFwaWMpCiAgICAgICAgY29udGludWU7CgogICAgICBpZiAocGljLmNvbW1l bnQpCiAgICAgICAgcGljLmNvbW1lbnQgKz0gIiI7CgogICAgICBmb3IgKHZhciBq PTA7IGogPCBwaWMua2V5d29yZHMubGVuZ3RoOyBqKyspCiAgICAgICAgcGljLmtl eXdvcmRzW2pdICs9ICIiOwogICAgfQoKICAgIC8vIHNldCBkZWZhdWx0IHNjYWxp bmcgc2l6ZSBiYXNlZCBvbiBob3cgbWFueSBwaWNzIHRoZXJlIGFyZQogICAgaWYg KHBpY2NvdW50IDwgMzApIHsKICAgICAgICB0aGlzLmltZ1NjYWxlID0gMTsKICAg IH0gZWxzZSBpZiAocGljY291bnQgPCA2MCkgewogICAgICAgIHRoaXMuaW1nU2Nh bGUgPSAyOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmltZ1NjYWxlID0gMzsK ICAgIH0KCiAgICB0aGlzLnBpY3MgPSBwaWNpbmZvOwoKICAgIHRoaXMuc2V0UGlj cyhwaWNpbmZvKTsKICAgIHRoaXMucmVkcmF3KCk7CgogICAgaWYgKHRoaXMuaG91 cmdsYXNzKQogICAgICB0aGlzLmhvdXJnbGFzcy5oaWRlKCk7CiAgfSwKCiAgcmVk cmF3OiBmdW5jdGlvbiAoKSB7CiAgICB0aGlzLnNldFN0YXR1cygpOwoKICAgIGlm ICghdGhpcy5waWNzKQogICAgICByZXR1cm47CgogICAgdGhpcy5zZXRQaWNzKHRo aXMucGljcyk7CgogICAgaWYgKHRoaXMuaG91cmdsYXNzKQogICAgICB0aGlzLmhv dXJnbGFzcy5oaWRlKCk7CgogICAgdmFyIGtleXdvcmRzID0gW10sIGNvbW1lbnRz ID0gW107CiAgICBmb3IgKHZhciBpPTA7IGkgPCB0aGlzLnBpY3MuaWRzLmxlbmd0 aDsgaSsrKSB7CiAgICAgIHZhciBwaWNpZCA9IHRoaXMucGljcy5pZHNbaV07CiAg ICAgIHZhciBwaWMgPSB0aGlzLnBpY3MucGljc1twaWNpZF07CgogICAgICBmb3Ig KHZhciBqPTA7IGogPCBwaWMua2V5d29yZHMubGVuZ3RoOyBqKyspCiAgICAgICAg a2V5d29yZHMucHVzaChwaWMua2V5d29yZHNbal0pOwoKICAgICAgY29tbWVudHMu cHVzaChwaWMuY29tbWVudCk7CiAgICB9CgogICAgdmFyIHNlYXJjaGJveCA9ICQo InVwc19zZWFyY2giKTsKICAgIHZhciBjb21wZGF0YSA9IG5ldyBJbnB1dENvbXBs ZXRlRGF0YShrZXl3b3Jkcy5jb25jYXQoY29tbWVudHMpKTsKICAgIHZhciB3aHV0 ID0gbmV3IElucHV0Q29tcGxldGUoc2VhcmNoYm94LCBjb21wZGF0YSk7CgogICAg RE9NLmFkZEV2ZW50TGlzdGVuZXIoc2VhcmNoYm94LCAia2V5ZG93biIsICB0aGlz LmZpbHRlclBpY3MuYmluZCh0aGlzKSk7CiAgICBET00uYWRkRXZlbnRMaXN0ZW5l cihzZWFyY2hib3gsICJrZXl1cCIsICAgIHRoaXMuZmlsdGVyUGljcy5iaW5kKHRo aXMpKTsKICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHNlYXJjaGJveCwgImZvY3Vz IiwgICAgdGhpcy5maWx0ZXJQaWNzLmJpbmQodGhpcykpOwoKICAgIHRyeSB7CiAg ICAgIHNlYXJjaGJveC5mb2N1cygpOwogICAgfSBjYXRjaChlKSB7fQoKICAgIERP TS5hZGRFdmVudExpc3RlbmVyKCQoInVwc19rd21lbnUiKSwgImNoYW5nZSIsIHRo aXMua3dtZW51Q2hhbmdlLmJpbmRFdmVudExpc3RlbmVyKHRoaXMpKTsKICB9LAoK ICBzZXRQaWNzOiBmdW5jdGlvbihwaWNzKSB7CiAgICBpZiAodGhpcy5kaXNwbGF5 UGljcyA9PSBwaWNzKQogICAgICByZXR1cm47CgogICAgdGhpcy5kaXNwbGF5UGlj cyA9IHBpY3M7CgogICAgdGhpcy5zZXRGaWVsZCh7J3BpY3MnOiBwaWNzfSk7CiAg ICB0aGlzLnNldERyb3Bkb3duKHBpY3MpOwogIH0sCgogIGhhbmRsZUVycm9yOiBm dW5jdGlvbihlcnIpIHsKICAgIGxvZygiRXJyb3I6ICIgKyBlcnIpOwogICAgdGhp cy5ob3VyZ2xhc3MuaGlkZSgpOwogIH0sCgogIGxvYWRQaWNzOiBmdW5jdGlvbigp IHsKICAgIHRoaXMuaG91cmdsYXNzID0gbmV3IEhvdXJnbGFzcygkKCJ1cHNfdXNl cnBpY3MiKSk7CiAgICB2YXIgcmVxT3B0cyA9IHt9OwogICAgcmVxT3B0cy51cmwg PSBTaXRlLmN1cnJlbnRKb3VybmFsID8gIi8iICsgU2l0ZS5jdXJyZW50Sm91cm5h bCArICIvX19ycGNfdXNlcnBpY3NlbGVjdCIgOiAiL19fcnBjX3VzZXJwaWNzZWxl Y3QiOwogICAgcmVxT3B0cy5vbkRhdGEgPSB0aGlzLnBpY3NSZWNlaXZlZC5iaW5k KHRoaXMpOwogICAgcmVxT3B0cy5vbkVycm9yID0gdGhpcy5oYW5kbGVFcnJvci5i aW5kKHRoaXMpOwogICAgSFRUUFJlcS5nZXRKU09OKHJlcU9wdHMpOwogIH0KfSk7 CgovLyBUZW1wbGF0ZXMKVXNlcnBpY1NlbGVjdC50b3AgPSAiXAogICAgICA8ZGl2 IGNsYXNzPSd1cHNfc2VhcmNoJz5cCiAgICAgICA8c3BhbiBjbGFzcz0ndXBzX3Nl YXJjaGJveCc+XAogICAgICAgICBTZWFyY2g6IDxpbnB1dCB0eXBlPSd0ZXh0JyBp ZD0ndXBzX3NlYXJjaCc+XAogICAgICAgICBTZWxlY3Q6IDxzZWxlY3QgaWQ9J3Vw c19rd21lbnUnPjxvcHRpb24gdmFsdWU9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XAog ICAgICAgICA8L3NwYW4+XAogICAgICA8L2Rpdj5cCiAgICAgIDxkaXYgaWQ9J3Vw c19keW5hbWljJz48L2Rpdj4iOwoKVXNlcnBpY1NlbGVjdC5keW5hbWljID0gIlwK ICAgICAgIFsjIGlmIChzdGF0dXMpIHsgI10gPGRpdiBjbGFzcz0ndXBzX3N0YXR1 cyc+WyN8IHN0YXR1cyAjXTwvZGl2PiBbIyB9ICNdXAogICAgICAgICA8ZGl2IGNs YXNzPSd1cHNfdXNlcnBpY3MnIGlkPSd1cHNfdXNlcnBpY3MnPlwKICAgICAgICAg ICBbIz0gY29udGV4dC5pbmNsdWRlKCAndXNlcnBpY3MnICkgI11cCiAgICAgICAg ICAgJm5ic3A7XAogICAgICAgICA8L2Rpdj5cCiAgICAgIDxkaXYgY2xhc3M9J3Vw c19jbG9zZWJ1dHRvbmFyZWEnPlwKICAgICAgIDxpbnB1dCB0eXBlPSdidXR0b24n IGlkPSd1cHNfY2xvc2VidXR0b24nIHZhbHVlPSdTZWxlY3QnIGRpc2FibGVkPSd0 cnVlJyAgLz5cCiAgICAgICA8c3BhbiBpZD0ndXBzX3NjYWxpbmdfYnV0dG9ucyc+ XAogICAgICAgPC9zcGFuPlwKICAgICAgPC9kaXY+IjsKClVzZXJwaWNTZWxlY3Qu dXNlcnBpY3MgPSAiXApbIyBpZihwaWNzICYmIHBpY3MuaWRzKSB7ICNdIFwKICAg ICA8dGFibGUgY2xhc3M9J3Vwc190YWJsZScgY2VsbHBhZGRpbmc9JzAnIGNlbGxz cGFjaW5nPScwJyBpZD0ndXBzX3VzZXJwaWNzX3QnPiBbIyBcCiAgICAgICB2YXIg cm93bnVtID0gMDsgXAogICAgICAgZm9yICh2YXIgaT0wOyBpPHBpY3MuaWRzLmxl bmd0aDsgaSsrKSB7IFwKICAgICAgICAgIHZhciBwaWNpZCA9IHBpY3MuaWRzW2ld OyBcCiAgICAgICAgICB2YXIgcGljID0gcGljcy5waWNzW3BpY2lkXTsgXApcCiAg ICAgICAgICBpZiAoIXBpYykgXAogICAgICAgICAgICBjb250aW51ZTsgXApcCiAg ICAgICAgICB2YXIgcGlja3dzID0gcGljLmtleXdvcmRzOyBcCiAgICAgICAgICBp ZiAoaSUyID09IDApIHsgI10gXAogICAgICAgICAgICA8dHIgY2xhc3M9J3Vwc19y b3cgdXBzX3Jvd1sjPSByb3dudW0rKyAlIDIgKyAxICNdJz4gWyMgfSAjXSBcClwK ICAgICAgICAgICAgPHRkIGNsYXNzPSd1cHNfY2VsbCcgIFwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGpfdXBzOnBpY2lkPSdbIz0gcGljaWQgI10nIGlkPSd1 cHNfY2VsbFsjPSBwaWNpZCAjXSc+IFwKICAgICAgICAgICAgICA8ZGl2IGNsYXNz PSd1cHNfY29udGFpbmVyJz4gXAogICAgICAgICAgICAgIDxpbWcgc3JjPSdbIz0g cGljLnVybCAjXScgd2lkdGg9J1sjPSBmaW5pdGVJbnQocGljLndpZHRoL2ltZ1Nj YWxlKSAjXScgXAogICAgICAgICAgICAgICAgIGhlaWdodD0nWyM9IGZpbml0ZUlu dChwaWMuaGVpZ2h0L2ltZ1NjYWxlKSAjXScgaWQ9J3Vwc191cGljaW1nWyM9IHBp Y2lkICNdJyBjbGFzcz0ndXBzX3VwaWMnIC8+IFwKICAgICAgICAgICAgICAgPC9k aXY+IFwKXAogICAgICAgICAgICAgIDxiPlsjfCBwaWNrd3Muam9pbignLCAnKSAj XTwvYj4gXAogICAgICAgICAgICAgWyMgaWYocGljLmNvbW1lbnQpIHsgI108YnIv PlsjPSBwaWMuY29tbWVudCAjXVsjIH0gI10gXAogICAgICAgICAgICAgIDxkaXYg Y2xhc3M9J2xqY2xlYXInPiZuYnNwOzwvZGl2PlwKICAgICAgICAgICAgPC90ZD4g XApcCiAgICAgICAgICAgIFsjIGlmIChpJTIgPT0gMSB8fCBpID09IHBpY3MuaWRz Lmxlbmd0aCAtIDEpIHsgI10gPC90cj4gWyMgfSBcCiAgICAgICAgfSAjXSBcCiAg ICAgPC90YWJsZT4gXAogIFsjIH0gI10gXAoiOwoKLy8gQ29waWVkIGhlcmUgZnJv bSBlbnRyeS5qcwpmdW5jdGlvbiBpbnNlcnRWaWV3VGh1bWJzKCkgewogICAgdmFy IGxqX3VzZXJwaWNzZWxlY3QgPSAkKCdsal91c2VycGljc2VsZWN0Jyk7CiAgICBs al91c2VycGljc2VsZWN0LmlubmVySFRNTCA9ICdWaWV3IFRodW1ibmFpbHMnOwp9 CgovKiBpbnB1dCBjb21wbGV0aW9uIGxpYnJhcnkgKi8KCi8qIFRPRE86CiAgICAt LSB0ZXN0IG9uIG5vbi1VUyBrZXlib2FyZCBsYXlvdXRzICh0b28gbXVjaCB1c2Ug b2YgS2V5Q29kZSkKICAgIC0tIGxhenkgZGF0YSBtb2RlbCAoeG1saHR0cHJlcXVl c3QsIG9yIGdlbmVyaWMgY2FsbGJhY2tzKQogICAgLS0gZHJvcC1kb3duIG1lbnU/ CiAgICAtLSBvcHRpb24gdG8gZGlzYWJsZSBjb21tYS1zZXBhcmF0ZWQgbW9kZSAo b3IgZXhwbGljaXRseSBhc2sgZm9yIGl0KQoqLwoKLyoKICBDb3B5cmlnaHQgKGMp IDIwMDUsIFNpeCBBcGFydCwgTHRkLgogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgog IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICBt ZXQ6CgogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCgogICogUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZQogIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKICBpbiB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAg ZGlzdHJpYnV0aW9uLgoKICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgIlNpeCBBcGFy dCIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKICBjb250cmlidXRvcnMgbWF5IGJlIHVz ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQog IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uCgogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAiQVMgSVMiIEFORCBB TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVAogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ R0hUCiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiAgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAog IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLAogIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQog IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQKICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgoKKi8KCgovKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKCiAgQ2xhc3M6IElucHV0Q29tcGxldGVEYXRhCgogIEFib3V0OiBB biBJbnB1dENvbXBsZXRlIG9iamVjdCBuZWVkcyBhIGRhdGEgc291cmNlIHRvIGF1 dG8tY29tcGxldGUKICAgICAgICAgIGZyb20uICBUaGlzIGlzIHRoYXQgbW9kZWwu ICBZb3UgY2FuIGNyZWF0ZSBvbmUgZnJvbSBhbgogICAgICAgICAgYXJyYXksIG9y IGNyZWF0ZSBhIGxhenkgdmVyc2lvbiB0aGF0IGdldHMgaXRzIGRhdGEgb3ZlciB0 aGUKICAgICAgICAgIG5ldHdvcmssIG9uIGRlbWFuZC4gIFlvdSB3aWxsIHByb2Jh Ymx5IG5vdCB1c2UgdGhpcyBjbGFzcycKICAgICAgICAgIG1ldGhvZHMgZGlyZWN0 bHksIGFzIHRoZXkncmUgY2FsbGVkIGJ5IHRoZSBJbnB1dENvbXBsZXRlCiAgICAg ICAgICBvYmplY3QuCgogICAgICAgICAgVGhlIGNsb3NlciBhIHdvcmQgaXMgdG8g dGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXksIHRoZSBtb3JlCiAgICAgICAgICBs aWtlbHkgaXQgd2lsbCBiZSByZWNvbW1lbmRlZCBhcyB0aGUgd29yZCB0aGUgdXNl ciBpcyB0eXBpbmcuCgogICAgICAgICAgSWYgeW91IHBhc3MgdGhlIHN0cmluZyAi aWdub3JlY2FzZSIgYXMgdGhlIHNlY29uZCBhcmd1bWVudCBpbgogICAgICAgICAg dGhlIGNvbnN0cnVjdG9yLCB0aGVuIHRoZSBjYXNlIG9mIGJvdGggdGhlIHVzZXIn cyBpbnB1dCBhbmQKICAgICAgICAgIHRoZSBkYXRhIGluIHRoZSBhcnJheSB3aWxs IGJlIGlnbm9yZWQgd2hlbiBsb29raW5nIGZvciBhIG1hdGNoLgoKICBDb25zdHJ1 Y3RvcjoKCiAgICB2YXIgbW9kZWwgPSBuZXcgSW5wdXRDb21wbGV0ZURhdGEgKFsg ImZvbyIsICJiYXIiLCAiYWxwaGEiIF0pOwoKKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCgp2YXIgSW5wdXRDb21wbGV0ZURhdGEgPSBuZXcgQ2xhc3MgKCBP YmplY3QsIHsKICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAoYXJn dW1lbnRzWzBdIGluc3RhbmNlb2YgQXJyYXkpIHsKICAgICAgICAgICAgdGhpcy5z b3VyY2UgPSBbXTsKCiAgICAgICAgICAgIC8vIGNvcHkgdGhlIHVzZXItcHJvdmlk ZWQgYXJyYXkgKHdoaWNoIGlzIHNvcnRlZCBtb3N0CiAgICAgICAgICAgIC8vIGxp a2VseSB0byBsZWFzdCBsaWtlbHkpIGludG8gb3VyIGludGVybmFsIGZvcm0sIHdo aWNoCiAgICAgICAgICAgIC8vIGlzIG9wcG9zaXRlLCB3aXRoIG1vc3QgbGlrZWx5 IGF0IHRoZSBlbmQuCiAgICAgICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbMF07 CiAgICAgICAgICAgIGZvciAodmFyIGk9YXJnLmxlbmd0aC0xOyBpPj0wOyBpLS0p IHsKICAgICAgICAgICAgICAgIHRoaXMuc291cmNlLmxlbmd0aCsrOwogICAgICAg ICAgICAgICAgdGhpcy5zb3VyY2VbdGhpcy5zb3VyY2UubGVuZ3RoLTFdID0gYXJn W2ldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmlnbm9y ZUNhc2UgPSAwOwogICAgICAgIGlmIChhcmd1bWVudHNbMV0gPT0gImlnbm9yZWNh c2UiKSB7CiAgICAgICAgICAgIHRoaXMuaWdub3JlQ2FzZSA9IDE7CiAgICAgICAg fQogICAgfSwKCiAgICAvLyBtZXRob2Q6IGdpdmVuIHByZWZpeCwgcmV0dXJucyBi ZXN0IHN1ZmZpeCwgb3IgbnVsbCBpZiBubyBhbnN3ZXIKICAgIGJlc3RGaW5pc2g6 IGZ1bmN0aW9uIChwcmUpIHsKICAgICAgICBpZiAoISBwcmUgfHwgcHJlLmxlbmd0 aCA9PSAwKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgICAgaWYgKCEg dGhpcy5zb3VyY2UpCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICB2 YXIgaTsKICAgICAgICBmb3IgKGk9dGhpcy5zb3VyY2UubGVuZ3RoLTE7IGk+PTA7 IGktLSkgewogICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuc291cmNlW2ldOwoK ICAgICAgICAgICAgdmFyIGl0ZW1Ub0NvbXBhcmUgPSBpdGVtOwogICAgICAgICAg ICB2YXIgcHJlVG9Db21wYXJlID0gcHJlOwogICAgICAgICAgICBpZiAodGhpcy5p Z25vcmVDYXNlKSB7CiAgICAgICAgICAgICAgICBpdGVtICs9ICcnOwogICAgICAg ICAgICAgICAgcHJlICs9ICcnOwogICAgICAgICAgICAgICAgaXRlbVRvQ29tcGFy ZSA9IGl0ZW0udG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIHByZVRvQ29t cGFyZSA9IHByZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB9CgogICAgICAg ICAgICBpZiAoaXRlbVRvQ29tcGFyZS5zdWJzdHJpbmcoMCwgcHJlLmxlbmd0aCkg PT0gcHJlVG9Db21wYXJlKSB7CiAgICAgICAgICAgICAgICB2YXIgc3VmZiA9IGl0 ZW0uc3Vic3RyaW5nKHByZS5sZW5ndGgsIGl0ZW0ubGVuZ3RoKTsKICAgICAgICAg ICAgICAgIHJldHVybiBzdWZmOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg ICAgICByZXR1cm4gbnVsbDsKICAgIH0sCgogICAgLy8gbWV0aG9kOiBnaXZlbiBh IHBpZWNlIG9mIGRhdGEsIGxlYXJuIGl0LCBhbmQgcHJpb3JpdGl6ZSBpdCBmb3Ig ZnV0dXJlIGNvbXBsZXRpb25zCiAgICBsZWFybjogZnVuY3Rpb24gKHdvcmQpIHsK ICAgICAgICBpZiAoIXdvcmQpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoIXRo aXMuc291cmNlKSByZXR1cm4gZmFsc2U7CiAgICAgICAgdGhpcy5zb3VyY2VbdGhp cy5zb3VyY2UubGVuZ3RoKytdID0gd29yZDsKCiAgICAgICAgaWYgKHRoaXMub25N b2RlbENoYW5nZSkKICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKCk7CiAg ICB9LAoKICAgIGdldEl0ZW1zOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKCF0 aGlzLnNvdXJjZSkgcmV0dXJuIFtdOwoKICAgICAgICAvLyByZXR1cm4gb25seSB1 bmlxdWUgaXRlbXMgdG8gY2FsbGVyCiAgICAgICAgdmFyIHVuaXEgPSBbXTsKICAg ICAgICB2YXIgc2VlbiA9IHt9OwogICAgICAgIGZvciAoaT10aGlzLnNvdXJjZS5s ZW5ndGgtMTsgaT49MDsgaS0tKSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gdGhp cy5zb3VyY2VbaV07CiAgICAgICAgICAgIGlmICghIHNlZW5baXRlbV0pIHsKICAg ICAgICAgICAgICAgIHNlZW5baXRlbV0gPSAxOwogICAgICAgICAgICAgICAgdW5p cS5sZW5ndGgrKzsKICAgICAgICAgICAgICAgIHVuaXFbdW5pcS5sZW5ndGggLSAx XSA9IGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVy biB1bmlxOwogICAgfSwKCiAgICBkdW1teTogMQp9KTsKCi8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgoKICBDbGFzczogSW5wdXRDb21wbGV0ZQoKICBBYm91 dDoKCiAgQ29uc3RydWN0b3I6CgoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KCnZhciBJbnB1dENvbXBsZXRlID0gbmV3IENsYXNzKCBPYmplY3QsIHsKICAg IGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgb3B0cyA9IGFyZ3VtZW50 c1swXTsKICAgICAgICB2YXIgZWxlOwogICAgICAgIHZhciBtb2RlbDsKICAgICAg ICB2YXIgZGVidWc7CgogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEp IHsKICAgICAgICAgICAgZWxlID0gb3B0c1sidGFyZ2V0Il07CiAgICAgICAgICAg IG1vZGVsID0gb3B0c1sibW9kZWwiXTsKICAgICAgICAgICAgZGVidWcgPSBvcHRz WyJkZWJ1ZyJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsZSA9IGFy Z3VtZW50c1swXTsKICAgICAgICAgICAgbW9kZWwgPSBhcmd1bWVudHNbMV07CiAg ICAgICAgICAgIGRlYnVnID0gYXJndW1lbnRzWzJdOwogICAgICAgIH0KCiAgICAg ICAgdGhpcy5lbGUgICA9IGVsZTsKICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7 CiAgICAgICAgdGhpcy5kZWJ1ZyA9IGRlYnVnOwoKICAgICAgICAvLyBubyBtb2Rl bD8gIGRvbid0IHNldHVwIG9iamVjdC4KICAgICAgICBpZiAoISBlbGUpIHsKICAg ICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVy bjsKICAgICAgICB9CgogICAgICAgIC8vIHJldHVybiBmYWxzZSBpZiBhdXRvLWNv bXBsZXRlIHdvbid0IHdvcmsgYW55d2F5CiAgICAgICAgaWYgKCEgKCgic2VsZWN0 aW9uU3RhcnQiIGluIGVsZSkgfHwgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1 bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpKSApIHsKICAgICAgICAgICAgdGhp cy5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg ICAgICB9CgogICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsZSwgImZvY3Vz IiwgICBJbnB1dENvbXBsZXRlLm9uRm9jdXMuYmluZEV2ZW50TGlzdGVuZXIodGhp cykpOwogICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsZSwgImtleWRvd24i LCBJbnB1dENvbXBsZXRlLm9uS2V5RG93bi5iaW5kRXZlbnRMaXN0ZW5lcih0aGlz KSk7CiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWxlLCAia2V5dXAiLCAg IElucHV0Q29tcGxldGUub25LZXlVcC5iaW5kRXZlbnRMaXN0ZW5lcih0aGlzKSk7 CiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWxlLCAiYmx1ciIsICAgIElu cHV0Q29tcGxldGUub25CbHVyLmJpbmRFdmVudExpc3RlbmVyKHRoaXMpKTsKICAg IH0sCgogICAgZGJnOiBmdW5jdGlvbiAobXNnKSB7CiAgICAgICAgaWYgKHRoaXMu ZGVidWcpIHsKICAgICAgICAgICAgdGhpcy5kZWJ1Zyhtc2cpOwogICAgICAgIH0K ICAgIH0sCgogICAgLy8gcmV0dXJucyB0aGUgd29yZCBjdXJyZW50bHkgYmVpbmcg dHlwZWQsIG9yIG51bGwKICAgIHdvcmRJblByb2dyZXNzOiBmdW5jdGlvbiAoKSB7 CiAgICAgICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpOwogICAg ICAgIGlmICghc2VsKSByZXR1cm4gbnVsbDsKCiAgICAgICAgdmFyIGNpZHggPSBz ZWwuc2VsZWN0aW9uU3RhcnQ7IC8vIGN1cnJlbnQgaW5keAogICAgICAgIHZhciBz aWR4ID0gY2lkeDsgIC8vIHN0YXJ0IG9mIHdvcmQgaW5kZXgKICAgICAgICB3aGls ZSAoc2lkeCA+IDAgJiYgdGhpcy5lbGUudmFsdWUuY2hhckF0KHNpZHgpICE9ICcs JykgewogICAgICAgICAgICBzaWR4LS07CiAgICAgICAgfQogICAgICAgIHZhciBz a2lwU3RhcnRGb3J3YXJkID0gZnVuY3Rpb24gKGNocikgeyByZXR1cm4gKGNociA9 PSAiLCIgfHwgY2hyID09ICIgIik7IH0KCiAgICAgICAgd2hpbGUgKHNraXBTdGFy dEZvcndhcmQodGhpcy5lbGUudmFsdWUuY2hhckF0KHNpZHgpKSkgewogICAgICAg ICAgICBzaWR4Kys7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5lbGUu dmFsdWUuc3Vic3RyaW5nKHNpZHgsIHRoaXMuZWxlLnZhbHVlLmxlbmd0aCk7CiAg ICB9LAoKICAgIC8vIGFwcGVuZHMgc29tZSBzZWxlY3RlZCB0ZXh0IGFmdGVyIHRo ZSBjYXJlCiAgICBhZGRTZWxlY3RlZFRleHQ6IGZ1bmN0aW9uIChjaGFycykgewog ICAgICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTsKICAgICAg ICB0aGlzLmVsZS52YWx1ZSA9IHRoaXMuZWxlLnZhbHVlICsgY2hhcnM7CiAgICAg ICAgdGhpcy5zZXRTZWxlY3RlZFJhbmdlKHNlbC5zZWxlY3Rpb25TdGFydCwgdGhp cy5lbGUudmFsdWUubGVuZ3RoKTsKICAgIH0sCgogICAgbW92ZUNhcmV0VG9FbmQ6 IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgbGVuID0gdGhpcy5lbGUudmFsdWUu bGVuZ3RoOwogICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRSYW5nZShsZW4sIGxlbik7 CiAgICB9LAoKICAgIGdldFNlbGVjdGVkUmFuZ2U6IGZ1bmN0aW9uICgpIHsKICAg ICAgICB2YXIgcmV0ID0ge307CiAgICAgICAgdmFyIGVsZSA9IHRoaXMuZWxlOwoK ICAgICAgICBpZiAoInNlbGVjdGlvblN0YXJ0IiBpbiBlbGUpIHsKICAgICAgICAg ICAgcmV0LnNlbGVjdGlvblN0YXJ0ID0gZWxlLnNlbGVjdGlvblN0YXJ0OwogICAg ICAgICAgICByZXQuc2VsZWN0aW9uRW5kICAgPSBlbGUuc2VsZWN0aW9uRW5kOwog ICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0KCiAgICAgICAgaWYgKGRv Y3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFu Z2UpIHsKICAgICAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9u LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICAgIHJldC5zZWxlY3Rpb25TdGFydCA9 IElucHV0Q29tcGxldGUuSUVPZmZzZXQocmFuZ2UsICJTdGFydFRvU3RhcnQiKTsK ICAgICAgICAgICAgcmV0LnNlbGVjdGlvbkVuZCAgID0gSW5wdXRDb21wbGV0ZS5J RU9mZnNldChyYW5nZSwgIkVuZFRvRW5kIik7CiAgICAgICAgICAgIHJldHVybiBy ZXQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0sCgogICAg c2V0U2VsZWN0ZWRSYW5nZTogZnVuY3Rpb24gKHNpZHgsIGVpZHgpIHsKICAgICAg ICB2YXIgZWxlID0gdGhpcy5lbGU7CgogICAgICAgIC8vIHByZWZlcnJlZCB0byBz ZXR0aW5nIHNlbGVjdGlvblN0YXJ0IGFuZCBlbmQKICAgICAgICBpZiAoZWxlLnNl dFNlbGVjdGlvblJhbmdlKSB7CiAgICAgICAgICAgIGVsZS5mb2N1cygpOwogICAg ICAgICAgICBlbGUuc2V0U2VsZWN0aW9uUmFuZ2Uoc2lkeCwgZWlkeCk7CiAgICAg ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gSUUKICAg ICAgICBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlv bi5jcmVhdGVSYW5nZSkgewogICAgICAgICAgICBlbGUuZm9jdXMoKTsKICAgICAg ICAgICAgdmFyIHNlbCA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSAo KTsKICAgICAgICAgICAgc2VsLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgLWVsZS52 YWx1ZS5sZW5ndGgpOwogICAgICAgICAgICBzZWwubW92ZVN0YXJ0KCdjaGFyYWN0 ZXInLCBzaWR4KTsKICAgICAgICAgICAgc2VsLm1vdmVFbmQoJ2NoYXJhY3Rlcics IGVpZHggLSBzaWR4KTsKICAgICAgICAgICAgc2VsLnNlbGVjdCgpOwogICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIG1vemlsbGEK ICAgICAgICBpZiAoInNlbGVjdGlvblN0YXJ0IiBpbiBlbGUpIHsKICAgICAgICAg ICAgZWxlLnNlbGVjdGlvblN0YXJ0ID0gc2lkeDsKICAgICAgICAgICAgZWxlLnNl bGVjdGlvbkVuZCAgID0gZWlkeDsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg ICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAoKICAgIC8vIHJl dHVybnMgdHJ1ZSBpZiBjYXJldCBpcyBhdCBlbmQgb2YgbGluZSwgb3IgZXZlcnl0 aGluZyB0byB0aGUgcmlnaHQKICAgIC8vIG9mIHVzIGlzIHNlbGVjdGVkCiAgICBj YXJldEF0RW5kT2ZOb3RTZWxlY3RlZDogZnVuY3Rpb24gKHNlbCkgewogICAgICAg IHNlbCA9IHNlbCB8fCB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTsKICAgICAgICB2 YXIgbGVuID0gdGhpcy5lbGUudmFsdWUubGVuZ3RoOwogICAgICAgIHJldHVybiBz ZWwuc2VsZWN0aW9uRW5kID09IGxlbjsKICAgIH0sCgogICAgZGlzYWJsZTogZnVu Y3Rpb24gKCkgewogICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlOwogICAgfSwK CiAgICBkdW1teTogMQp9KTsKCklucHV0Q29tcGxldGUub25LZXlEb3duID0gZnVu Y3Rpb24gKGUpIHsKICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47CgogICAg dmFyIGNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDsKCiAgICB0aGlzLmRiZygi b25LZXlEb3duLCBjb2RlPSIrY29kZSsiLCBzaGlmdD0iK2Uuc2hpZnRLZXkpOwog ICAgCiAgICAvLyBpZiBjb21tYSwgYnV0IG5vdCB3aXRoIGEgc2hpZnQgd2hpY2gg d291bGQgYmUgIjwiLiAgKEZJWE1FOiB3aGF0IGFib3V0IG90aGVyIGtleWJvYXJk cyBsYXlvdXRzPykKICAgIC8vRklYTUU6IG1heSBiZSB0aGVyZSBpcyBhIHN0YWJs ZSBjcm9zcy1icm93c2VyIHdheSB0byBkZXRlY3Qgc28tY2FsbGVkIG90aGVyIGtl eWJvYXJkIGxheW91dHMgLSBidXQgaSBkb24ndCBrbm93IGFueXRoaW5nIGVhc2ll ciB0aGFuIC4uLiAoc2VlIG9uS2V5VXAgY2hhbmdlcyBpbiB0aXMgcmV2aXNpb24p CiAgICAvKmlmICgoY29kZSA9PSAxODggfHwgY29kZSA9PSA0NCkgJiYgISBlLnNo aWZ0S2V5ICYmIHRoaXMuY2FyZXRBdEVuZE9mTm90U2VsZWN0ZWQoKSkgewogICAg ICAgIHRoaXMubW92ZUNhcmV0VG9FbmQoKTsKICAgICAgICByZXR1cm4gRXZlbnQu c3RvcChlKTsKICAgIH0qLwoKICAgIHJldHVybiB0cnVlOwp9OwoKSW5wdXRDb21w bGV0ZS5vbktleVVwID0gZnVuY3Rpb24gKGUpIHsKICAgIGlmICh0aGlzLmRpc2Fi bGVkKSByZXR1cm47CgogICAgdmFyIHZhbCA9IHRoaXMuZWxlLnZhbHVlOwoKICAg IHZhciBjb2RlID0gZS5rZXlDb2RlIHx8IGUud2hpY2g7CiAgICB0aGlzLmRiZygi a2V5VXAgPSAiICsgY29kZSk7CiAgICAKICAgIAogICAgLy8gaWdub3JlIHRhYiwg YmFja3NwYWNlLCBsZWZ0LCByaWdodCwgZGVsZXRlLCBhbmQgZW50ZXIKICAgIGlm IChjb2RlID09IDkgfHwgY29kZSA9PSA4IHx8IGNvZGUgPT0gMzcgfHwgY29kZSA9 PSAzOSB8fCBjb2RlID09IDQ2IHx8IGNvZGUgPT0gMTMpCiAgICAgICByZXR1cm4g ZmFsc2U7CgogICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpOwoK ICAgIHZhciBzcyA9IHNlbC5zZWxlY3Rpb25TdGFydDsKICAgIHZhciBzZSA9IHNl bC5zZWxlY3Rpb25FbmQ7CgogICAgdGhpcy5kYmcoImtleVVwLCBnb3Qgc3M9Iitz cyArICAiLCBzZT0iK3NlKyIsIHZhbC5sZW5ndGg9Iit2YWwubGVuZ3RoKTsKCiAg ICAvLyBvbmx5IGF1dG8tY29tcGxldGUgaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0 aGUgbGluZQogICAgaWYgKHNlICE9IHZhbC5sZW5ndGgpIHJldHVybiBmYWxzZTsK CiAgICB2YXIgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsKCiAgICB0 aGlzLmRiZygia2V5VXAsIGdvdCBjaHI9IitjaHIpOwogICAgLy9pZiAoY29kZSA9 PSAxODggfHwgY2hyID09ICIsIikgewogICAgaWYoLywkLy50ZXN0KHZhbCkpewkK ICAgICAgICBpZiAoISB0aGlzLmNhcmV0QXRFbmRPZk5vdFNlbGVjdGVkKHNlbCkp IHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAg dGhpcy5kYmcoImhpdCBjb21tYSEgLi4gdmFsdWUgPSAiICsgdGhpcy5lbGUudmFs dWUpOwoKICAgICAgICB0aGlzLmVsZS52YWx1ZSA9IHRoaXMuZWxlLnZhbHVlLnJl cGxhY2UoL1tccyxdKyQvLCAiIikgKyAiLCAiOwogICAgICAgIHRoaXMubW92ZUNh cmV0VG9FbmQoKTsKCiAgICAgICAgcmV0dXJuIEV2ZW50LnN0b3AoZSk7CiAgICB9 CgoKICAgIHZhciBpblByb2cgPSB0aGlzLndvcmRJblByb2dyZXNzKCk7CiAgICBp ZiAoIWluUHJvZykgcmV0dXJuIHRydWU7CgogICAgdmFyIHJlc3QgPSB0aGlzLm1v ZGVsLmJlc3RGaW5pc2goaW5Qcm9nKTsKCiAgICBpZiAocmVzdCAmJiByZXN0Lmxl bmd0aCA+IDApIHsKICAgICAgICB0aGlzLmFkZFNlbGVjdGVkVGV4dChyZXN0KTsK ICAgIH0KfTsKCklucHV0Q29tcGxldGUub25CbHVyID0gZnVuY3Rpb24gKGUpIHsK ICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47CgogICAgdmFyIHRnID0gZS50 YXJnZXQ7CiAgICB2YXIgbGlzdCA9IHRnLnZhbHVlOwoKICAgIHZhciBub2VuZGp1 bmsgPSBsaXN0LnJlcGxhY2UoL1tccyxdKyQvLCAiIik7CiAgICBpZiAobm9lbmRq dW5rICE9IGxpc3QpIHsKICAgICAgICB0Zy52YWx1ZSA9IGxpc3QgPSBub2VuZGp1 bms7CiAgICB9CgogICAgdmFyIHRhZ3MgPSBsaXN0LnNwbGl0KCIsIik7CiAgICBm b3IgKHZhciBpID0wOyBpPHRhZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIg dGFnID0gdGFnc1tpXS5yZXBsYWNlKC9eXHMrLywiIikucmVwbGFjZSgvXHMrJC8s IiIpOwogICAgICAgIGlmICh0YWcubGVuZ3RoKSB7CiAgICAgICAgICAgIHRoaXMu bW9kZWwubGVhcm4odGFnKTsKICAgICAgICB9CiAgICB9Cn07CgpJbnB1dENvbXBs ZXRlLm9uRm9jdXMgPSBmdW5jdGlvbiAoZSkgewogICAgaWYgKHRoaXMuZGlzYWJs ZWQpIHJldHVybjsKfTsKCgpJbnB1dENvbXBsZXRlLklFT2Zmc2V0ID0gZnVuY3Rp b24gKCByYW5nZSwgY29tcGFyZVR5cGUgKSB7CiAgICBpZiAodGhpcy5kaXNhYmxl ZCkgcmV0dXJuOwoKICAgIHZhciByYW5nZTIgPSByYW5nZS5kdXBsaWNhdGUoKTsK ICAgIHJhbmdlMi5jb2xsYXBzZSggdHJ1ZSApOwogICAgdmFyIHBhcmVudCA9IHJh bmdlMi5wYXJlbnRFbGVtZW50KCk7CiAgICB2YXIgbGVuZ3RoID0gcmFuZ2UyLnRl eHQubGVuZ3RoOwogICAgcmFuZ2UyLm1vdmUoImNoYXJhY3RlciIsIC1wYXJlbnQu dmFsdWUubGVuZ3RoKTsKCiAgICB2YXIgZGVsdGEgPSBtYXgoIDEsIGZpbml0ZUlu dCggbGVuZ3RoICogMC41ICkgKTsKICAgIHJhbmdlMi5jb2xsYXBzZSggdHJ1ZSAp OwogICAgdmFyIG9mZnNldCA9IDA7CiAgICB2YXIgc3RlcHMgPSAwOwoKICAgIC8v IGJhaWwgYWZ0ZXIgMTBrIGl0ZXJhdGlvbnMgaW4gY2FzZSBvZiBib3JrYWdlCiAg ICB3aGlsZSggKHRlc3QgPSByYW5nZTIuY29tcGFyZUVuZFBvaW50cyggY29tcGFy ZVR5cGUsIHJhbmdlICkpICE9IDAgKSB7CiAgICAgICAgaWYoIHRlc3QgPCAwICkg ewogICAgICAgICAgICByYW5nZTIubW92ZSggImNoYXJhY3RlciIsIGRlbHRhICk7 CiAgICAgICAgICAgIG9mZnNldCArPSBkZWx0YTsKICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICByYW5nZTIubW92ZSggImNoYXJhY3RlciIsIC1kZWx0YSApOwog ICAgICAgICAgICBvZmZzZXQgLT0gZGVsdGE7CiAgICAgICAgfQogICAgICAgIGRl bHRhID0gbWF4KCAxLCBmaW5pdGVJbnQoIGRlbHRhICogMC41ICkgKTsKICAgICAg ICBzdGVwcysrOwogICAgICAgIGlmKCBzdGVwcyA+IDEwMDAgKQogICAgICAgICAg ICB0aHJvdyAidW5hYmxlIHRvIGZpbmQgdGV4dHJhbmdlIGVuZHBvaW50IGluICIg KyBzdGVwcyArICIgc3RlcHMiOwogICAgfQoKICAgIHJldHVybiBvZmZzZXQ7Cn07 Ci8vIGRhdGFzb3VyY2UgYmFzZSBjbGFzcywgdGhlICJNIiBpbiBNVkMKLy8gc3Vi Y2xhc3MgdGhpcyBhbmQgb3ZlcnJpZGUgdGhlRGF0YSB0byBwcm92aWRlIHlvdXIg ZGF0YQoKRGF0YVNvdXJjZSA9IG5ldyBDbGFzcyhPYmplY3QsIHsKCiAgaW5pdDog ZnVuY3Rpb24gKGluaXRpYWxEYXRhKSB7CiAgICBEYXRhU291cmNlLnN1cGVyQ2xh c3MuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgdGhpcy53YXRjaGVy cyA9IFtdOwogICAgdGhpcy50aGVEYXRhID0gZGVmaW5lZChpbml0aWFsRGF0YSkg PyBpbml0aWFsRGF0YSA6IFtdOwogICAgdGhpcy5zb3J0RmllbGQgPSAiIjsKICAg IHRoaXMuc29ydFR5cGUgPSAiIjsKICAgIHRoaXMuc29ydERlc2MgPSBmYWxzZTsK ICB9LAoKICBhZGRXYXRjaGVyOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIHRo aXMud2F0Y2hlcnMuYWRkKGNhbGxiYWNrKTsKICB9LAoKICByZW1vdmVXYXRjaGVy OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIHRoaXMud2F0Y2hlcnMucmVtb3Zl KGNhbGxiYWNrKTsKICB9LAoKICAvLyBjYWxsIHRoaXMgaWYgdXBkYXRpbmcgZGF0 YSBhbmQgbm90IHVzaW5nIF9zZXREYXRhCiAgX3VwZGF0ZWQ6IGZ1bmN0aW9uICgp IHsKICAgIHRoaXMuY2FsbFdhdGNoZXJzKCk7CiAgfSwKCiAgY2FsbFdhdGNoZXJz OiBmdW5jdGlvbiAoKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMud2F0 Y2hlcnMubGVuZ3RoOyBpKyspCiAgICAgIHRoaXMud2F0Y2hlcnNbaV0uYXBwbHko dGhpcywgW3RoaXMuZGF0YSgpXSk7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24g KHRoZURhdGEpIHsKICAgIHRoaXMudGhlRGF0YSA9IHRoZURhdGE7CgogICAgaWYg KHRoaXMuc29ydEZpZWxkKQogICAgICB0aGlzLnNvcnREYXRhQnkodGhpcy5zb3J0 RmllbGQsIHRoaXMuc29ydFR5cGUsIHRoaXMuc29ydERlc2MpOwoKICAgIHRoaXMu X3NldERhdGEodGhlRGF0YSk7CiAgfSwKCiAgX3NldERhdGE6IGZ1bmN0aW9uICh0 aGVEYXRhKSB7CiAgICB0aGlzLnRoZURhdGEgPSB0aGVEYXRhOwogICAgdGhpcy5j YWxsV2F0Y2hlcnMoKTsKICAgIHJldHVybiB0aGVEYXRhOwogIH0sCgogIGRhdGE6 IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzLnRoZURhdGE7CiAgfSwKCiAg c29ydEJ5OiBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy5zb3J0RmllbGQ7 CiAgfSwKCiAgc29ydEludmVydGVkOiBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4g dGhpcy5zb3J0RGVzYzsKICB9LAoKICAvLyBtaW1pYyBzb21lIGFycmF5IGZ1bmN0 aW9uYWxpdHkKICBwdXNoOiBmdW5jdGlvbiAoZGF0YSkgewogICAgdGhpcy50aGVE YXRhLnB1c2goZGF0YSk7CiAgICB0aGlzLmNhbGxXYXRjaGVycygpOwogIH0sCgog IHBvcDogZnVuY3Rpb24gKCkgewogICAgdmFyIHZhbCA9IHRoaXMudGhlRGF0YS5w b3AoKTsKICAgIHRoaXMuY2FsbFdhdGNoZXJzKCk7CiAgICByZXR1cm4gdmFsOwog IH0sCgogIGluZGV4T2Y6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgcmV0dXJuIHRo aXMudGhlRGF0YS5pbmRleE9mKHZhbHVlKTsKICB9LAoKICByZW1vdmU6IGZ1bmN0 aW9uICh2YWx1ZSkgewogICAgdGhpcy50aGVEYXRhLnJlbW92ZSh2YWx1ZSk7CiAg ICB0aGlzLmNhbGxXYXRjaGVycygpOwogIH0sCgogIGVtcHR5OiBmdW5jdGlvbiAo KSB7CiAgICB0aGlzLnRoZURhdGEgPSBbXTsKICAgIHRoaXMuY2FsbFdhdGNoZXJz KCk7CiAgfSwKCiAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhp cy50aGVEYXRhLmxlbmd0aDsKICB9LAoKICB0b3RhbExlbmd0aDogZnVuY3Rpb24g KCkgewogICAgcmV0dXJuIHRoaXMuYWxsRGF0YSgpLmxlbmd0aDsKICB9LAoKICBh bGxEYXRhOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgdGhlRGF0YSA9IHRoaXMudGhl RGF0YTsKCiAgICBpZiAodGhpcy5kYXRhRmllbGQgJiYgdGhlRGF0YSkKICAgICAg dGhlRGF0YSA9IHRoZURhdGFbdGhpcy5kYXRhRmllbGRdOwoKICAgIHJldHVybiB0 aGVEYXRhOwogIH0sCgogIHNvcnREYXRhQnk6IGZ1bmN0aW9uIChmaWVsZCwgdHlw ZSwgaW52ZXJ0KSB7CiAgICB0aGlzLnNvcnRGaWVsZCA9IGZpZWxkOwogICAgdGhp cy5zb3J0RGVzYyA9IGludmVydDsKICAgIHRoaXMuc29ydFR5cGUgPSB0eXBlOwoK ICAgIGlmICghZmllbGQgfHwgIXRoaXMudGhlRGF0YSB8fCAhdGhpcy50aGVEYXRh LnNvcnQpCiAgICAgIHJldHVybjsKCiAgICB2YXIgc29ydGVkID0gdGhpcy50aGVE YXRhLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgdmFyIGFkID0gYVsiIitm aWVsZF0sIGJkID0gYlsiIitmaWVsZF07CiAgICAgIGFkID0gYWQgPyBhZCA6ICIi OwogICAgICBiZCA9IGJkID8gYmQgOiAiIjsKCiAgICAgIHN3aXRjaCh0eXBlKSB7 CgogICAgICBjYXNlICJzdHJpbmciOgogICAgICAgIHZhciBhbmFtZSA9IGFkLnRv VXBwZXJDYXNlKCksIGJuYW1lID0gYmQudG9VcHBlckNhc2UoKTsKCiAgICAgICAg aWYgKGFuYW1lIDwgYm5hbWUpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAg ZWxzZSBpZiAoYW5hbWUgPiBibmFtZSkKICAgICAgICAgIHJldHVybiAxOwogICAg ICAgIGVsc2UKICAgICAgICAgIHJldHVybiAwOwoKICAgICAgY2FzZSAiaXNvZGF0 ZSI6CiAgICAgICAgdmFyIGRhdEEgPSBEYXRlLmZyb21JU09TdHJpbmcoYWQpIHx8 IG5ldyBEYXRlKDApOwogICAgICAgIHZhciBkYXRCID0gRGF0ZS5mcm9tSVNPU3Ry aW5nKGJkKSB8fCBuZXcgRGF0ZSgwKTsKCiAgICAgICAgcmV0dXJuICgoZGF0QSAt IGRhdEIpIHx8IDApOwoKICAgICAgZGVmYXVsdDoKICAgICAgY2FzZSAibnVtZXJp YyI6CiAgICAgICAgcmV0dXJuIGFkIC0gYmQ7CgogICAgICB9CiAgICB9KTsKCiAg ICBpZiAoaW52ZXJ0KQogICAgICBzb3J0ZWQucmV2ZXJzZSgpOwoKICAgIHRoaXMu X3NldERhdGEoc29ydGVkKTsKICB9Cgp9KTsKLyoKICBUaGlzIGlzIGEgZGF0YXNv dXJjZSB5b3UgY2FuIGF0dGFjaCB0byBhIHRhYmxlLiBJdCB3aWxsIGVuYWJsZQog IHRoZSBzZWxlY3Rpb24gb2Ygcm93cyBvciBjZWxscyBpbiB0aGUgdGFibGUuCgog IFRoZSBkYXRhIGluIHRoZSBkYXRhc291cmNlIGlzIGVsZW1lbnRzIHRoYXQgYXJl IHNlbGVjdGVkLgoKICAkaWQ6JAoqLwoKU2VsZWN0YWJsZVRhYmxlID0gbmV3IENs YXNzKERhdGFTb3VyY2UsIHsKCiAgICAvLyBvcHRpb25zOgogICAgLy8gICB0YWJs ZTogd2hhdCB0YWJsZSBlbGVtZW50IHRvIGF0dGFjaCB0bwogICAgLy8gICBzZWxl Y3RhYmxlQ2xhc3M6IGlmIHlvdSBvbmx5IHdhbnQgZWxlbWVudHMgd2l0aCBhIGNl cnRhaW4gY2xhc3MgdG8gYmUgc2VsZWN0YWJsZSwKICAgIC8vICAgICAgIHNwZWNp Zml5IHRoaXMgY2xhc3Mgd2l0aCBzZWxlY3RhYmxlQ2xhc3MKICAgIC8vICAgbXVs dGlwbGU6IGNhbiBtb3JlIHRoYW4gb25lIHRoaW5nIGJlIHNlbGVjdGVkIGF0IG9u Y2U/IGRlZmF1bHQgaXMgdHJ1ZQogICAgLy8gICBzZWxlY3RlZENsYXNzOiBjbGFz cyB0byBhcHBseSB0byBzZWxlY3RlZCBlbGVtZW50cwogICAgLy8gICBjaGVja2Jv eENsYXNzOiBzaW5jZSB0aGVyZSBhcmUgZnJlcXVlbnRseSBjaGVja2JveGVzIGFz c29jaWF0ZWQgd2l0aCBzZWxlY3RhYmxlIGVsZW1lbnRzLAogICAgLy8gICAgICAg eW91IGNhbiBzcGVjaWZ5IHRoZSBjbGFzcyBvZiB5b3VyIGNoZWNrYm94ZXMgdG8g bWFrZSB0aGVtIHN0YXkgaW4gc3luYwogICAgLy8gICBzZWxlY3RhYmxlSXRlbTog V2hhdCB0eXBlIG9mIGVsZW1lbnRzIGNhbiBiZSBzZWxlY3RlZC4gVmFsdWVzIGFy ZSAiY2VsbCIgb3IgInJvdyIKICAgIGluaXQ6IGZ1bmN0aW9uIChvcHRzKSB7CiAg ICAgICAgU2VsZWN0YWJsZVRhYmxlLnN1cGVyQ2xhc3MuaW5pdC5hcHBseSh0aGlz LCBbXSk7CgogICAgICAgIHZhciB0YWJsZSA9IG9wdHMudGFibGU7CiAgICAgICAg dmFyIHNlbGVjdGFibGVDbGFzcyA9IG9wdHMuc2VsZWN0YWJsZUNsYXNzOwogICAg ICAgIHZhciBtdWx0aXBsZSA9IG9wdHMubXVsdGlwbGU7CiAgICAgICAgdmFyIHNl bGVjdGVkQ2xhc3MgPSBvcHRzLnNlbGVjdGVkQ2xhc3MKICAgICAgICB2YXIgY2hl Y2tib3hDbGFzcyA9IG9wdHMuY2hlY2tib3hDbGFzcwogICAgICAgIHZhciBzZWxl Y3RhYmxlSXRlbSA9IG9wdHMuc2VsZWN0YWJsZUl0ZW07CgogICAgICAgIHNlbGVj dGFibGVJdGVtID0gc2VsZWN0YWJsZUl0ZW0gPT0gImNlbGwiID8gImNlbGwiIDog InJvdyI7CgogICAgICAgIGlmICghZGVmaW5lZChtdWx0aXBsZSkpIG11bHRpcGxl ID0gdHJ1ZTsKCiAgICAgICAgdGhpcy50YWJsZSA9IHRhYmxlOwogICAgICAgIHRo aXMuc2VsZWN0YWJsZUNsYXNzID0gc2VsZWN0YWJsZUNsYXNzOwogICAgICAgIHRo aXMubXVsdGlwbGUgPSBtdWx0aXBsZTsKICAgICAgICB0aGlzLnNlbGVjdGVkQ2xh c3MgPSBvcHRzLnNlbGVjdGVkQ2xhc3M7CiAgICAgICAgdGhpcy5jaGVja2JveENs YXNzID0gb3B0cy5jaGVja2JveENsYXNzOwoKICAgICAgICB0aGlzLnNlbGVjdGVk RWxlbWVudHMgPSBbXTsKCiAgICAgICAgLy8gaWYgaXQncyBub3QgYSB0YWJsZSwg ZGllCiAgICAgICAgaWYgKCF0YWJsZSB8fCAhdGFibGUudGFnTmFtZSB8fCB0YWJs ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gInRhYmxlIikgcmV0dXJuIG51bGw7 CgogICAgICAgIC8vIGdldCBzZWxlY3RhYmxlIGl0ZW1zCiAgICAgICAgdmFyIHRh YmxlRWxlbWVudHMgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwoK ICAgICAgICB2YXIgc2VsZWN0YWJsZUVsZW1lbnRzOwoKICAgICAgICBpZiAoc2Vs ZWN0YWJsZUl0ZW0gPT0gImNlbGwiKSB7CiAgICAgICAgICAgIHNlbGVjdGFibGVF bGVtZW50cyA9IERPTS5maWx0ZXJFbGVtZW50c0J5VGFnTmFtZSh0YWJsZUVsZW1l bnRzLCAidGQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZWxlY3Rh YmxlRWxlbWVudHMgPSBET00uZmlsdGVyRWxlbWVudHNCeVRhZ05hbWUodGFibGVF bGVtZW50cywgInRyIik7CiAgICAgICAgfQoKICAgICAgICB2YXIgc2VsZiA9IHRo aXM7CiAgICAgICAgc2VsZWN0YWJsZUVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24o ZWxlKSB7CiAgICAgICAgICAgIC8vIGlmIHNlbGVjdGFibGVDbGFzcyBpcyBkZWZp bmVkIGFuZCB0aGlzIGVsZW1lbnQgZG9lc24ndCBoYXZlIHRoZSBjbGFzcywgc2tp cCBpdAogICAgICAgICAgICBpZiAoc2VsZWN0YWJsZUNsYXNzICYmICFET00uaGFz Q2xhc3NOYW1lKGVsZSwgc2VsZWN0YWJsZUNsYXNzKSkgcmV0dXJuOwoKICAgICAg ICAgICAgLy8gYXR0YWNoIGNsaWNrIGhhbmRsZXIgdG8gZXZlcnkgZWxlbWVudCBp bnNpZGUgdGhlIGVsZW1lbnQKICAgICAgICAgICAgdmFyIGl0ZW1FbGVtZW50cyA9 IGVsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwogICAgICAgICAgICBmb3Ig KHZhciBpID0gMDsgaSA8IGl0ZW1FbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAg ICAgICAgICAgICAgc2VsZi5hdHRhY2hDbGlja0hhbmRsZXIoaXRlbUVsZW1lbnRz W2ldLCBlbGUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBhdHRhY2gg Y2xpY2sgaGFuZGxlciB0byB0aGUgZWxlbWVudCBpdHNlbGYKICAgICAgICAgICAg c2VsZi5hdHRhY2hDbGlja0hhbmRsZXIoZWxlLCBlbGUpOwogICAgICAgIH0pOwog ICAgfSwKCiAgICAvLyBzdG9wIG91ciBoYW5kbGluZyBvZiB0aGlzIGV2ZW50CiAg ICBzdG9wSGFuZGxpbmdFdmVudDogZnVuY3Rpb24gKGV2dCkgewogICAgICAgIGlm ICghZXZ0KSByZXR1cm47CgogICAgICAgIC8vIHczYwogICAgICAgIGlmIChldnQu c3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTsK CiAgICAgICAgLy8gaWUKICAgICAgICB0cnkgewogICAgICAgICAgICBldmVudC5j YW5jZWxCdWJibGUgPSB0cnVlOwogICAgICAgIH0gY2F0Y2goZSkge30KICAgIH0s CgogICAgLy8gYXR0YWNoIGEgY2xpY2sgaGFuZGxlciB0byB0aGlzIGVsZW1lbnQK ICAgIGF0dGFjaENsaWNrSGFuZGxlcjogZnVuY3Rpb24gKGVsZSwgcGFyZW50KSB7 CiAgICAgICAgaWYgKCFlbGUpIHJldHVybjsKCiAgICAgICAgdmFyIHNlbGYgPSB0 aGlzOwoKICAgICAgICB2YXIgcm93Q2xpY2tlZCA9IGZ1bmN0aW9uIChldnQpIHsK ICAgICAgICAgICAgLy8gaWYgaXQgd2FzIGEgY29udHJvbC1jbGljaywgdGhleSdy ZSBwcm9iYWJseSB0cnlpbmcgdG8gb3BlbiBhIG5ldyB0YWIgb3Igc29tZXRoaW5n LgogICAgICAgICAgICAvLyBsZXQncyBub3QgaGFuZGxlIGl0CiAgICAgICAgICAg IGlmIChldnQgJiYgZXZ0LmN0cmxLZXkpIHJldHVybiBmYWxzZTsKCiAgICAgICAg ICAgIHZhciB0YWdOYW1lID0gZWxlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKCiAg ICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBsaW5rIG9yIGhhcyBhbiBvbmNsaWNr IGhhbmRsZXIsCiAgICAgICAgICAgIC8vIHJldHVybiB0cnVlIGFuZCB0ZWxsIG90 aGVyIGV2ZW50cyB0byByZXR1cm4gdHJ1ZQogICAgICAgICAgICBpZiAoKGVsZS5o cmVmICYmIHRhZ05hbWUgIT0gImltZyIpIHx8IGVsZS5vbmNsaWNrKSB7CiAgICAg ICAgICAgICAgICBzZWxmLnN0b3BIYW5kbGluZ0V2ZW50KGV2dCk7CiAgICAgICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAg Ly8gaWYgdGhpcyBpcyB0aGUgY2hpbGQgb2YgYSBsaW5rLCBwcm9wYWdhdGUgdGhl IGV2ZW50IHVwCiAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBET00uZ2V0QW5j ZXN0b3JzKGVsZSwgdHJ1ZSk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp IDwgYW5jZXN0b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIg YW5jZXN0b3IgPSBhbmNlc3RvcnNbaV07CiAgICAgICAgICAgICAgICBpZiAoYW5j ZXN0b3IuaHJlZiAmJiBhbmNlc3Rvci50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0g ImltZyIpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gaWYgdGhp cyBpcyBhbiBpbnB1dCBvciBzZWxlY3QgZWxlbWVudCwgc2tpcCBpdAogICAgICAg ICAgICBpZiAoKHRhZ05hbWUgPT0gInNlbGVjdCIgfHwgdGFnTmFtZSA9PSAiaW5w dXQiKSAmJiBwYXJlbnQuY2hlY2tib3ggIT0gZWxlKSB7CiAgICAgICAgICAgICAg ICBzZWxmLnN0b3BIYW5kbGluZ0V2ZW50KGV2dCk7CiAgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gdG9nZ2xl IHNlbGVjdGlvbiBvZiB0aGlzIHBhcmVudCBlbGVtZW50CiAgICAgICAgICAgIGlm IChzZWxmLnNlbGVjdGVkRWxlbWVudHMuaW5kZXhPZihwYXJlbnQpICE9IC0xKSB7 CiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZENsYXNzKSBET00ucmVt b3ZlQ2xhc3NOYW1lKHBhcmVudCwgc2VsZi5zZWxlY3RlZENsYXNzKTsKCiAgICAg ICAgICAgICAgICBzZWxmLnNlbGVjdGVkRWxlbWVudHMucmVtb3ZlKHBhcmVudCk7 CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoc2VsZi5z ZWxlY3RlZENsYXNzKSBET00uYWRkQ2xhc3NOYW1lKHBhcmVudCwgc2VsZi5zZWxl Y3RlZENsYXNzKTsKCiAgICAgICAgICAgICAgICBpZiAoc2VsZi5tdWx0aXBsZSkg ewogICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRFbGVtZW50cy5wdXNo KHBhcmVudCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg ICAgICAgIGlmIChzZWxmLnNlbGVjdGVkQ2xhc3MgJiYgc2VsZi5zZWxlY3RlZEVs ZW1lbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFy IG9sZFBhcmVudCA9IHNlbGYuc2VsZWN0ZWRFbGVtZW50c1swXTsKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKG9sZFBhcmVudCkgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgRE9NLnJlbW92ZUNsYXNzTmFtZShvbGRQYXJlbnQsIHNlbGYu c2VsZWN0ZWRDbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo b2xkUGFyZW50LmNoZWNrYm94KSBvbGRQYXJlbnQuY2hlY2tib3guY2hlY2tlZCA9 ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRWxlbWVudHMg PSBbcGFyZW50XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAg ICAgICAgICAgLy8gdXBkYXRlIG91ciBkYXRhCiAgICAgICAgICAgIHNlbGYuc2V0 RGF0YShzZWxmLnNlbGVjdGVkRWxlbWVudHMpOwoKICAgICAgICAgICAgLy8gaWYg dGhlcmUncyBhIGNoZWNrYm94IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhcmVudCwg c2V0IGl0J3MgdmFsdWUKICAgICAgICAgICAgLy8gdG8gdGhlIHBhcmVudCBzZWxl Y3RlZCB2YWx1ZQogICAgICAgICAgICBpZiAocGFyZW50LmNoZWNrYm94KSBwYXJl bnQuY2hlY2tib3guY2hlY2tlZCA9IChzZWxmLnNlbGVjdGVkRWxlbWVudHMuaW5k ZXhPZihwYXJlbnQpICE9IC0xKSA/ICJvbiIgOiAnJzsKICAgICAgICAgICAgaWYg KHBhcmVudC5jaGVja2JveCA9PSBlbGUpIHsgc2VsZi5zdG9wSGFuZGxpbmdFdmVu dChldnQpOyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgICAgICAgLy8gYWx3YXlzPyBu b3Qgc3VyZQogICAgICAgICAgICBpZiAoZXZ0KQogICAgICAgICAgICAgICAgRXZl bnQuc3RvcChldnQpOwogICAgICAgIH0KCiAgICAgICAgLy8gaWYgdGhpcyBpcyBh IGNoZWNrYm94IHdlIG5lZWQgdG8ga2VlcCBpbiBzeW5jLCBzZXQgdXAgaXRzIGV2 ZW50IGhhbmRsZXIKICAgICAgICBpZiAodGhpcy5jaGVja2JveENsYXNzICYmIGVs ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gImlucHV0IgogICAgICAgICAgICAm JiBlbGUudHlwZSA9PSAiY2hlY2tib3giICYmIERPTS5oYXNDbGFzc05hbWUoZWxl LCB0aGlzLmNoZWNrYm94Q2xhc3MpKSB7CgogICAgICAgICAgICBwYXJlbnQuY2hl Y2tib3ggPSBlbGU7CgogICAgICAgICAgICAvLyBvdmVycmlkZSBkZWZhdWx0IGV2 ZW50IGhhbmRsZXIgZm9yIHRoZSBjaGVja2JveAogICAgICAgICAgICBET00uYWRk RXZlbnRMaXN0ZW5lcihlbGUsICJjbGljayIsIGZ1bmN0aW9uIChldnQpIHsKICAg ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9KTsKICAgICAg ICB9CgogICAgICAgIC8vIGF0dGFjaCBhIG1ldGhvZCB0byB0aGUgcm93IHNvIG90 aGVyIHBlb3BsZSBjYW4gcHJvZ3JhbWF0aWNhbGx5CiAgICAgICAgLy8gc2VsZWN0 IGl0LgogICAgICAgIGVsZS5yb3dDbGlja2VkID0gcm93Q2xpY2tlZDsKCiAgICAg ICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWxlLCAiY2xpY2siLCByb3dDbGlja2Vk KTsKICAgIH0KCn0pOwovLyB4X2NvcmUuanMsIFggdjMuMTUuMiwgQ3Jvc3MtQnJv d3Nlci5jb20gREhUTUwgTGlicmFyeQovLyBDb3B5cmlnaHQgKGMpIDIwMDQgTWlj aGFlbCBGb3N0ZXIsIExpY2Vuc2VkIExHUEwgKGdudS5vcmcpCgovLyBnbG9iYWwg dmFycyBzdGlsbCBkdXBsaWNhdGVkIGluIHhsaWIuanMgLSBJIHN0aWxsIGRvbid0 IGtub3cgd2hhdCBJJ20gZ29pbmcgdG8gZG8gYWJvdXQgdGhpcwp2YXIgeFZlcnNp b249JzMuMTUuMicseE5ONCx4T3A3LHhPcDVvcjYseElFNFVwLHhJRTQseElFNSx4 TWFjLHhVQT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CmlmICh3 aW5kb3cub3BlcmEpewogIHhPcDc9KHhVQS5pbmRleE9mKCdvcGVyYSA3JykhPS0x IHx8IHhVQS5pbmRleE9mKCdvcGVyYS83JykhPS0xKTsKICBpZiAoIXhPcDcpIHhP cDVvcjY9KHhVQS5pbmRleE9mKCdvcGVyYSA1JykhPS0xIHx8IHhVQS5pbmRleE9m KCdvcGVyYS81JykhPS0xIHx8IHhVQS5pbmRleE9mKCdvcGVyYSA2JykhPS0xIHx8 IHhVQS5pbmRleE9mKCdvcGVyYS82JykhPS0xKTsKfQplbHNlIGlmIChkb2N1bWVu dC5hbGwgJiYgeFVBLmluZGV4T2YoJ21zaWUnKSE9LTEpIHsKICB4SUU0VXA9cGFy c2VJbnQobmF2aWdhdG9yLmFwcFZlcnNpb24pPj00OwogIHhJRTQ9eFVBLmluZGV4 T2YoJ21zaWUgNCcpIT0tMTsKICB4SUU1PXhVQS5pbmRleE9mKCdtc2llIDUnKSE9 LTE7Cn0KZWxzZSBpZiAoZG9jdW1lbnQubGF5ZXJzKSB7eE5OND10cnVlO30KeE1h Yz14VUEuaW5kZXhPZignbWFjJykhPS0xOwoKZnVuY3Rpb24geEdldEVsZW1lbnRC eUlkKGUpIHsKICBpZih0eXBlb2YoZSkhPSdzdHJpbmcnKSByZXR1cm4gZTsKICBp Zihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgZT1kb2N1bWVudC5nZXRFbGVtZW50 QnlJZChlKTsKICBlbHNlIGlmKGRvY3VtZW50LmFsbCkgZT1kb2N1bWVudC5hbGxb ZV07CiAgZWxzZSBlPW51bGw7CiAgcmV0dXJuIGU7Cn0KZnVuY3Rpb24geFBhcmVu dChlLGJOb2RlKXsKICBpZiAoIShlPXhHZXRFbGVtZW50QnlJZChlKSkpIHJldHVy biBudWxsOwogIHZhciBwPW51bGw7CiAgaWYgKCFiTm9kZSAmJiB4RGVmKGUub2Zm c2V0UGFyZW50KSkgcD1lLm9mZnNldFBhcmVudDsKICBlbHNlIGlmICh4RGVmKGUu cGFyZW50Tm9kZSkpIHA9ZS5wYXJlbnROb2RlOwogIGVsc2UgaWYgKHhEZWYoZS5w YXJlbnRFbGVtZW50KSkgcD1lLnBhcmVudEVsZW1lbnQ7CiAgcmV0dXJuIHA7Cn0K ZnVuY3Rpb24geERlZigpIHsKICBmb3IodmFyIGk9MDsgaTxhcmd1bWVudHMubGVu Z3RoOyArK2kpe2lmKHR5cGVvZihhcmd1bWVudHNbaV0pPT0ndW5kZWZpbmVkJykg cmV0dXJuIGZhbHNlO30KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiB4U3RyKHMp IHsKICBmb3IodmFyIGk9MDsgaTxhcmd1bWVudHMubGVuZ3RoOyArK2kpe2lmKHR5 cGVvZihhcmd1bWVudHNbaV0pIT0nc3RyaW5nJykgcmV0dXJuIGZhbHNlO30KICBy ZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiB4TnVtKG4pIHsKICBmb3IodmFyIGk9MDsg aTxhcmd1bWVudHMubGVuZ3RoOyArK2kpe2lmKHR5cGVvZihhcmd1bWVudHNbaV0p IT0nbnVtYmVyJykgcmV0dXJuIGZhbHNlO30KICByZXR1cm4gdHJ1ZTsKfQpmdW5j dGlvbiB4U2hvdyhlKSB7CiAgaWYoIShlPXhHZXRFbGVtZW50QnlJZChlKSkpIHJl dHVybjsKICBpZihlLnN0eWxlICYmIHhEZWYoZS5zdHlsZS52aXNpYmlsaXR5KSkg ZS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJzsKfQpmdW5jdGlvbiB4SGlkZShl KSB7CiAgaWYoIShlPXhHZXRFbGVtZW50QnlJZChlKSkpIHJldHVybjsKICBpZihl LnN0eWxlICYmIHhEZWYoZS5zdHlsZS52aXNpYmlsaXR5KSkgZS5zdHlsZS52aXNp YmlsaXR5PSdoaWRkZW4nOwp9CmZ1bmN0aW9uIHhaSW5kZXgoZSx1WikgewogIGlm KCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gMDsKICBpZihlLnN0eWxl ICYmIHhEZWYoZS5zdHlsZS56SW5kZXgpKSB7CiAgICBpZih4TnVtKHVaKSkgZS5z dHlsZS56SW5kZXg9dVo7CiAgICB1Wj1wYXJzZUludChlLnN0eWxlLnpJbmRleCk7 CiAgfQogIHJldHVybiB1WjsKfQpmdW5jdGlvbiB4Q29sb3IoZSxzQ29sb3IpIHsK ICBpZighKGU9eEdldEVsZW1lbnRCeUlkKGUpKSkgcmV0dXJuICcnOwogIHZhciBj PScnOwogIGlmKGUuc3R5bGUgJiYgeERlZihlLnN0eWxlLmNvbG9yKSkgewogICAg aWYoeFN0cihzQ29sb3IpKSBlLnN0eWxlLmNvbG9yPXNDb2xvcjsKICAgIGM9ZS5z dHlsZS5jb2xvcjsKICB9CiAgcmV0dXJuIGM7Cn0KZnVuY3Rpb24geEJhY2tncm91 bmQoZSxzQ29sb3Isc0ltYWdlKSB7CiAgaWYoIShlPXhHZXRFbGVtZW50QnlJZChl KSkpIHJldHVybiAnJzsKICB2YXIgYmc9Jyc7CiAgaWYoZS5zdHlsZSkgewogICAg aWYoeFN0cihzQ29sb3IpKSB7CiAgICAgIGlmKCF4T3A1b3I2KSBlLnN0eWxlLmJh Y2tncm91bmRDb2xvcj1zQ29sb3I7CiAgICAgIGVsc2UgZS5zdHlsZS5iYWNrZ3Jv dW5kPXNDb2xvcjsKICAgIH0KICAgIGlmKHhTdHIoc0ltYWdlKSkgZS5zdHlsZS5i YWNrZ3JvdW5kSW1hZ2U9KHNJbWFnZSE9JycpPyAndXJsKCcrc0ltYWdlKycpJyA6 IG51bGw7CiAgICBpZigheE9wNW9yNikgYmc9ZS5zdHlsZS5iYWNrZ3JvdW5kQ29s b3I7CiAgICBlbHNlIGJnPWUuc3R5bGUuYmFja2dyb3VuZDsKICB9CiAgcmV0dXJu IGJnOwp9CmZ1bmN0aW9uIHhNb3ZlVG8oZSxpWCxpWSkgewogIHhMZWZ0KGUsaVgp OwogIHhUb3AoZSxpWSk7Cn0KZnVuY3Rpb24geExlZnQoZSxpWCkgewogIGlmKCEo ZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1cm4gMDsKICB2YXIgY3NzPXhEZWYo ZS5zdHlsZSk7CiAgaWYgKGNzcyAmJiB4U3RyKGUuc3R5bGUubGVmdCkpIHsKICAg IGlmKHhOdW0oaVgpKSBlLnN0eWxlLmxlZnQ9aVgrJ3B4JzsKICAgIGVsc2Ugewog ICAgICBpWD1wYXJzZUludChlLnN0eWxlLmxlZnQpOwogICAgICBpZihpc05hTihp WCkpIGlYPTA7CiAgICB9CiAgfQogIGVsc2UgaWYoY3NzICYmIHhEZWYoZS5zdHls ZS5waXhlbExlZnQpKSB7CiAgICBpZih4TnVtKGlYKSkgZS5zdHlsZS5waXhlbExl ZnQ9aVg7CiAgICBlbHNlIGlYPWUuc3R5bGUucGl4ZWxMZWZ0OwogIH0KICByZXR1 cm4gaVg7Cn0KZnVuY3Rpb24geFRvcChlLGlZKSB7CiAgaWYoIShlPXhHZXRFbGVt ZW50QnlJZChlKSkpIHJldHVybiAwOwogIHZhciBjc3M9eERlZihlLnN0eWxlKTsK ICBpZihjc3MgJiYgeFN0cihlLnN0eWxlLnRvcCkpIHsKICAgIGlmKHhOdW0oaVkp KSBlLnN0eWxlLnRvcD1pWSsncHgnOwogICAgZWxzZSB7CiAgICAgIGlZPXBhcnNl SW50KGUuc3R5bGUudG9wKTsKICAgICAgaWYoaXNOYU4oaVkpKSBpWT0wOwogICAg fQogIH0KICBlbHNlIGlmKGNzcyAmJiB4RGVmKGUuc3R5bGUucGl4ZWxUb3ApKSB7 CiAgICBpZih4TnVtKGlZKSkgZS5zdHlsZS5waXhlbFRvcD1pWTsKICAgIGVsc2Ug aVk9ZS5zdHlsZS5waXhlbFRvcDsKICB9CiAgcmV0dXJuIGlZOwp9CmZ1bmN0aW9u IHhQYWdlWChlKSB7CiAgaWYgKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1 cm4gMDsKICB2YXIgeCA9IDA7CiAgd2hpbGUgKGUpIHsKICAgIGlmICh4RGVmKGUu b2Zmc2V0TGVmdCkpIHggKz0gZS5vZmZzZXRMZWZ0OwogICAgZSA9IHhEZWYoZS5v ZmZzZXRQYXJlbnQpID8gZS5vZmZzZXRQYXJlbnQgOiBudWxsOwogIH0KICByZXR1 cm4geDsKfQpmdW5jdGlvbiB4UGFnZVkoZSkgewogIGlmICghKGU9eEdldEVsZW1l bnRCeUlkKGUpKSkgcmV0dXJuIDA7CiAgdmFyIHkgPSAwOwogIHdoaWxlIChlKSB7 CiAgICBpZiAoeERlZihlLm9mZnNldFRvcCkpIHkgKz0gZS5vZmZzZXRUb3A7CiAg ICBlID0geERlZihlLm9mZnNldFBhcmVudCkgPyBlLm9mZnNldFBhcmVudCA6IG51 bGw7CiAgfQovLyAgaWYgKHhPcDcpIHJldHVybiB5IC0gZG9jdW1lbnQuYm9keS5v ZmZzZXRUb3A7IC8vIHYzLjE0LCB0ZW1wb3JhcnkgaGFjayBmb3Igb3BlcmEgYnVn IDEzMDMyNAogIHJldHVybiB5Owp9CmZ1bmN0aW9uIHhPZmZzZXRMZWZ0KGUpIHsK ICBpZiAoIShlPXhHZXRFbGVtZW50QnlJZChlKSkpIHJldHVybiAwOwogIGlmICh4 RGVmKGUub2Zmc2V0TGVmdCkpIHJldHVybiBlLm9mZnNldExlZnQ7CiAgZWxzZSBy ZXR1cm4gMDsKfQpmdW5jdGlvbiB4T2Zmc2V0VG9wKGUpIHsKICBpZiAoIShlPXhH ZXRFbGVtZW50QnlJZChlKSkpIHJldHVybiAwOwogIGlmICh4RGVmKGUub2Zmc2V0 VG9wKSkgcmV0dXJuIGUub2Zmc2V0VG9wOwogIGVsc2UgcmV0dXJuIDA7Cn0KZnVu Y3Rpb24geFNjcm9sbExlZnQoZSkgewogIHZhciBvZmZzZXQ9MDsKICBpZiAoIShl PXhHZXRFbGVtZW50QnlJZChlKSkpIHsKICAgIGlmKGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCkg b2Zmc2V0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OwogICAg ZWxzZSBpZihkb2N1bWVudC5ib2R5ICYmIHhEZWYoZG9jdW1lbnQuYm9keS5zY3Jv bGxMZWZ0KSkgb2Zmc2V0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDsKICB9CiAg ZWxzZSB7IGlmICh4TnVtKGUuc2Nyb2xsTGVmdCkpIG9mZnNldCA9IGUuc2Nyb2xs TGVmdDsgfQogIHJldHVybiBvZmZzZXQ7Cn0KZnVuY3Rpb24geFNjcm9sbFRvcChl KSB7CiAgdmFyIG9mZnNldD0wOwogIGlmICghKGU9eEdldEVsZW1lbnRCeUlkKGUp KSkgewogICAgaWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApIG9mZnNldD1kb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsVG9wOwogICAgZWxzZSBpZihkb2N1bWVudC5ib2R5 ICYmIHhEZWYoZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApKSBvZmZzZXQ9ZG9jdW1l bnQuYm9keS5zY3JvbGxUb3A7CiAgfQogIGVsc2UgeyBpZiAoeE51bShlLnNjcm9s bFRvcCkpIG9mZnNldCA9IGUuc2Nyb2xsVG9wOyB9CiAgcmV0dXJuIG9mZnNldDsK fQpmdW5jdGlvbiB4SGFzUG9pbnQoZWxlLCBpTGVmdCwgaVRvcCwgaUNscFQsIGlD bHBSLCBpQ2xwQiwgaUNscEwpIHsKICBpZiAoIXhOdW0oaUNscFQpKXtpQ2xwVD1p Q2xwUj1pQ2xwQj1pQ2xwTD0wO30KICBlbHNlIGlmICgheE51bShpQ2xwUikpe2lD bHBSPWlDbHBCPWlDbHBMPWlDbHBUO30KICBlbHNlIGlmICgheE51bShpQ2xwQikp e2lDbHBMPWlDbHBSOyBpQ2xwQj1pQ2xwVDt9CiAgdmFyIHRoaXNYID0geFBhZ2VY KGVsZSksIHRoaXNZID0geFBhZ2VZKGVsZSk7CiAgcmV0dXJuIChpTGVmdCA+PSB0 aGlzWCArIGlDbHBMICYmIGlMZWZ0IDw9IHRoaXNYICsgeFdpZHRoKGVsZSkgLSBp Q2xwUiAmJgogICAgICAgICAgaVRvcCA+PXRoaXNZICsgaUNscFQgJiYgaVRvcCA8 PSB0aGlzWSArIHhIZWlnaHQoZWxlKSAtIGlDbHBCICk7Cn0KZnVuY3Rpb24geFJl c2l6ZVRvKGUsdVcsdUgpIHsKICB4V2lkdGgoZSx1Vyk7CiAgeEhlaWdodChlLHVI KTsKfQpmdW5jdGlvbiB4V2lkdGgoZSx1VykgewogIGlmKCEoZT14R2V0RWxlbWVu dEJ5SWQoZSkpKSByZXR1cm4gMDsKICBpZiAoeE51bSh1VykpIHsKICAgIGlmICh1 VzwwKSB1VyA9IDA7CiAgICBlbHNlIHVXPU1hdGgucm91bmQodVcpOwogIH0KICBl bHNlIHVXPS0xOwogIHZhciBjc3M9eERlZihlLnN0eWxlKTsKICBpZihjc3MgJiYg eERlZihlLm9mZnNldFdpZHRoKSAmJiB4U3RyKGUuc3R5bGUud2lkdGgpKSB7CiAg ICBpZih1Vz49MCkgeFNldENXKGUsIHVXKTsKICAgIHVXPWUub2Zmc2V0V2lkdGg7 CiAgfQogIGVsc2UgaWYoY3NzICYmIHhEZWYoZS5zdHlsZS5waXhlbFdpZHRoKSkg ewogICAgaWYodVc+PTApIGUuc3R5bGUucGl4ZWxXaWR0aD11VzsKICAgIHVXPWUu c3R5bGUucGl4ZWxXaWR0aDsKICB9CiAgcmV0dXJuIHVXOwp9CmZ1bmN0aW9uIHhI ZWlnaHQoZSx1SCkgewogIGlmKCEoZT14R2V0RWxlbWVudEJ5SWQoZSkpKSByZXR1 cm4gMDsKICBpZiAoeE51bSh1SCkpIHsKICAgIGlmICh1SDwwKSB1SCA9IDA7CiAg ICBlbHNlIHVIPU1hdGgucm91bmQodUgpOwogIH0KICBlbHNlIHVIPS0xOwogIHZh ciBjc3M9eERlZihlLnN0eWxlKTsKICBpZihjc3MgJiYgeERlZihlLm9mZnNldEhl aWdodCkgJiYgeFN0cihlLnN0eWxlLmhlaWdodCkpIHsKICAgIGlmKHVIPj0wKSB4 U2V0Q0goZSwgdUgpOwogICAgdUg9ZS5vZmZzZXRIZWlnaHQ7CiAgfQogIGVsc2Ug aWYoY3NzICYmIHhEZWYoZS5zdHlsZS5waXhlbEhlaWdodCkpIHsKICAgIGlmKHVI Pj0wKSBlLnN0eWxlLnBpeGVsSGVpZ2h0PXVIOwogICAgdUg9ZS5zdHlsZS5waXhl bEhlaWdodDsKICB9CiAgcmV0dXJuIHVIOwp9CmZ1bmN0aW9uIHhHZXRDUyhlbGUs c1Ape3JldHVybiBwYXJzZUludChkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21w dXRlZFN0eWxlKGVsZSwnJykuZ2V0UHJvcGVydHlWYWx1ZShzUCkpO30KZnVuY3Rp b24geFNldENXKGVsZSx1Vyl7CiAgdmFyIHBsPTAscHI9MCxibD0wLGJyPTA7CiAg aWYoeERlZihkb2N1bWVudC5kZWZhdWx0VmlldykgJiYgeERlZihkb2N1bWVudC5k ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKSl7CiAgICBwbD14R2V0Q1MoZWxl LCdwYWRkaW5nLWxlZnQnKTsKICAgIHByPXhHZXRDUyhlbGUsJ3BhZGRpbmctcmln aHQnKTsKICAgIGJsPXhHZXRDUyhlbGUsJ2JvcmRlci1sZWZ0LXdpZHRoJyk7CiAg ICBicj14R2V0Q1MoZWxlLCdib3JkZXItcmlnaHQtd2lkdGgnKTsKICB9CiAgZWxz ZSBpZih4RGVmKGVsZS5jdXJyZW50U3R5bGUsZG9jdW1lbnQuY29tcGF0TW9kZSkp ewogICAgaWYoZG9jdW1lbnQuY29tcGF0TW9kZT09J0NTUzFDb21wYXQnKXsKICAg ICAgcGw9cGFyc2VJbnQoZWxlLmN1cnJlbnRTdHlsZS5wYWRkaW5nTGVmdCk7CiAg ICAgIHByPXBhcnNlSW50KGVsZS5jdXJyZW50U3R5bGUucGFkZGluZ1JpZ2h0KTsK ICAgICAgYmw9cGFyc2VJbnQoZWxlLmN1cnJlbnRTdHlsZS5ib3JkZXJMZWZ0V2lk dGgpOwogICAgICBicj1wYXJzZUludChlbGUuY3VycmVudFN0eWxlLmJvcmRlclJp Z2h0V2lkdGgpOwogICAgfQogIH0KICBlbHNlIGlmKHhEZWYoZWxlLm9mZnNldFdp ZHRoLGVsZS5zdHlsZS53aWR0aCkpeyAvLyA/CiAgICBlbGUuc3R5bGUud2lkdGg9 dVcrJ3B4JzsKICAgIHBsPWVsZS5vZmZzZXRXaWR0aC11VzsKICB9CiAgaWYoaXNO YU4ocGwpKSBwbD0wOyBpZihpc05hTihwcikpIHByPTA7IGlmKGlzTmFOKGJsKSkg Ymw9MDsgaWYoaXNOYU4oYnIpKSBicj0wOwogIHZhciBjc3NXPXVXLShwbCtwciti bCticik7CiAgaWYoaXNOYU4oY3NzVyl8fGNzc1c8MCkgcmV0dXJuOwogIGVsc2Ug ZWxlLnN0eWxlLndpZHRoPWNzc1crJ3B4JzsKfQpmdW5jdGlvbiB4U2V0Q0goZWxl LHVIKXsKICB2YXIgcHQ9MCxwYj0wLGJ0PTAsYmI9MDsKICBpZih4RGVmKGRvY3Vt ZW50LmRlZmF1bHRWaWV3KSAmJiB4RGVmKGRvY3VtZW50LmRlZmF1bHRWaWV3Lmdl dENvbXB1dGVkU3R5bGUpKXsKICAgIHB0PXhHZXRDUyhlbGUsJ3BhZGRpbmctdG9w Jyk7CiAgICBwYj14R2V0Q1MoZWxlLCdwYWRkaW5nLWJvdHRvbScpOwogICAgYnQ9 eEdldENTKGVsZSwnYm9yZGVyLXRvcC13aWR0aCcpOwogICAgYmI9eEdldENTKGVs ZSwnYm9yZGVyLWJvdHRvbS13aWR0aCcpOwogIH0KICBlbHNlIGlmKHhEZWYoZWxl LmN1cnJlbnRTdHlsZSxkb2N1bWVudC5jb21wYXRNb2RlKSl7CiAgICBpZihkb2N1 bWVudC5jb21wYXRNb2RlPT0nQ1NTMUNvbXBhdCcpewogICAgICBwdD1wYXJzZUlu dChlbGUuY3VycmVudFN0eWxlLnBhZGRpbmdUb3ApOwogICAgICBwYj1wYXJzZUlu dChlbGUuY3VycmVudFN0eWxlLnBhZGRpbmdCb3R0b20pOwogICAgICBidD1wYXJz ZUludChlbGUuY3VycmVudFN0eWxlLmJvcmRlclRvcFdpZHRoKTsKICAgICAgYmI9 cGFyc2VJbnQoZWxlLmN1cnJlbnRTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCk7CiAg ICB9CiAgfQogIGVsc2UgaWYoeERlZihlbGUub2Zmc2V0SGVpZ2h0LGVsZS5zdHls ZS5oZWlnaHQpKXsgLy8gPwogICAgZWxlLnN0eWxlLmhlaWdodD11SCsncHgnOwog ICAgcHQ9ZWxlLm9mZnNldEhlaWdodC11SDsKICB9CiAgaWYoaXNOYU4ocHQpKSBw dD0wOyBpZihpc05hTihwYikpIHBiPTA7IGlmKGlzTmFOKGJ0KSkgYnQ9MDsgaWYo aXNOYU4oYmIpKSBiYj0wOwogIHZhciBjc3NIPXVILShwdCtwYitidCtiYik7CiAg aWYoaXNOYU4oY3NzSCl8fGNzc0g8MCkgcmV0dXJuOwogIGVsc2UgZWxlLnN0eWxl LmhlaWdodD1jc3NIKydweCc7Cn0KZnVuY3Rpb24geENsaXAoZSxpVG9wLGlSaWdo dCxpQm90dG9tLGlMZWZ0KSB7CiAgaWYoIShlPXhHZXRFbGVtZW50QnlJZChlKSkp IHJldHVybjsKICBpZihlLnN0eWxlKSB7CiAgICBpZiAoeE51bShpTGVmdCkpIGUu c3R5bGUuY2xpcD0ncmVjdCgnK2lUb3ArJ3B4ICcraVJpZ2h0KydweCAnK2lCb3R0 b20rJ3B4ICcraUxlZnQrJ3B4KSc7CiAgICBlbHNlIGUuc3R5bGUuY2xpcD0ncmVj dCgwICcrcGFyc2VJbnQoZS5zdHlsZS53aWR0aCkrJ3B4ICcrcGFyc2VJbnQoZS5z dHlsZS5oZWlnaHQpKydweCAwKSc7CiAgfQp9CmZ1bmN0aW9uIHhDbGllbnRXaWR0 aCgpIHsKICB2YXIgdz0wOwogIGlmKHhPcDVvcjYpIHc9d2luZG93LmlubmVyV2lk dGg7CiAgZWxzZSBpZighd2luZG93Lm9wZXJhICYmIGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgp CiAgICB3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsKICBl bHNlIGlmKGRvY3VtZW50LmJvZHkgJiYgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0 aCkKICAgIHc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDsKICBlbHNlIGlmKHhE ZWYod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0LGRvY3VtZW50 LmhlaWdodCkpIHsKICAgIHc9d2luZG93LmlubmVyV2lkdGg7CiAgICBpZihkb2N1 bWVudC5oZWlnaHQ+d2luZG93LmlubmVySGVpZ2h0KSB3LT0xNjsKICB9CiAgcmV0 dXJuIHc7Cn0KZnVuY3Rpb24geENsaWVudEhlaWdodCgpIHsKICB2YXIgaD0wOwog IGlmKHhPcDVvcjYpIGg9d2luZG93LmlubmVySGVpZ2h0OwogIGVsc2UgaWYoIXdp bmRvdy5vcGVyYSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1l bnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkKICAgIGg9ZG9jdW1lbnQu ZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsKICBlbHNlIGlmKGRvY3VtZW50 LmJvZHkgJiYgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpCiAgICBoPWRvY3Vt ZW50LmJvZHkuY2xpZW50SGVpZ2h0OwogIGVsc2UgaWYoeERlZih3aW5kb3cuaW5u ZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQud2lkdGgpKSB7CiAg ICBoPXdpbmRvdy5pbm5lckhlaWdodDsKICAgIGlmKGRvY3VtZW50LndpZHRoPndp bmRvdy5pbm5lcldpZHRoKSBoLT0xNjsKICB9CiAgcmV0dXJuIGg7Cn0KZnVuY3Rp b24geElubmVySHRtbChlLCBzSHRtbCkgewogIGlmKCEoZT14R2V0RWxlbWVudEJ5 SWQoZSkpKSByZXR1cm4gJyc7CiAgaWYgKHhTdHIoZS5pbm5lckhUTUwpKSB7CiAg ICBpZiAoeFN0cihzSHRtbCkpIGUuaW5uZXJIVE1MID0gc0h0bWw7CiAgICBlbHNl IHJldHVybiBlLmlubmVySFRNTDsKICB9Cn0KICAgIHZhciBsYXN0RGl2OwogICAg bGFzdERpdiA9ICdxcmRpdic7CgogICAgdmFyIFNpdGU7CiAgICBpZiAoISBTaXRl KSBTaXRlID0gbmV3IE9iamVjdCgpCgogICAgZnVuY3Rpb24gcXVpY2tyZXBseShk dGlkLCBwaWQsIG5ld3N1YmplY3QpIHsKICAgICAgICAvLyBNYWMgSUUgNS54IGRv ZXMgbm90IGxpa2UgZGVhbGluZyB3aXRoCiAgICAgICAgLy8gbmV4dFNpYmxpbmcg c2luY2UgaXQgZG9lcyBub3Qgc3VwcG9ydCBpdAogICAgICAgIGlmICh4SUU0VXAg JiYgeE1hYykgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgICAvLyBvbiBJRSwgY2Fu Y2VsIHRoZSBidWJibGUgb2YgdGhlIGV2ZW50IHVwIHRvIHRoZSBwYWdlLiBvdGhl cgogICAgICAgIC8vIGJyb3dzZXJzIGRvbid0IHNlZW0gdG8gYnViYmxlIGV2ZW50 cyB1cCByZWdpc3RlcmVkIHRoaXMgd2F5LgogICAgICAgIHZhciBldiA9IHdpbmRv dy5ldmVudDsKICAgICAgICBpZiAoZXYpIHsKICAgICAgICAgICAgaWYgKGV2LnN0 b3BQcm9wYWdhdGlvbikKICAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9u KCk7CiAgICAgICAgICAgIGlmIChldi5jYW5jZWxCdWJibGUgIT0gInVuZGVmaW5l ZCIpCiAgICAgICAgICAgICAgICBldi5jYW5jZWxCdWJibGUgPSB0cnVlOwogICAg ICAgIH0KCiAgICAgICAgdmFyIHRhcmdldG5hbWUgPSAibGpxcnQiICsgZHRpZDsK CiAgICAgICAgdmFyIHB0YWxraWQgPSB4R2V0RWxlbWVudEJ5SWQoJ3BhcmVudHRh bGtpZCcpOwogICAgICAgIHZhciBydG8gPSB4R2V0RWxlbWVudEJ5SWQoJ3JlcGx5 dG8nKTsKICAgICAgICB2YXIgZHRpZF9maWVsZCA9IHhHZXRFbGVtZW50QnlJZCgn ZHRpZCcpOwogICAgICAgIHZhciBxcl9kaXYgPSB4R2V0RWxlbWVudEJ5SWQoJ3Fy ZGl2Jyk7CiAgICAgICAgdmFyIGN1cl9kaXYgPSB4R2V0RWxlbWVudEJ5SWQodGFy Z2V0bmFtZSk7CiAgICAgICAgdmFyIHFyX2Zvcm1fZGl2ICA9IHhHZXRFbGVtZW50 QnlJZCgncXJmb3JtZGl2Jyk7CiAgICAgICAgdmFyIHFyX2Zvcm0gPSB4R2V0RWxl bWVudEJ5SWQoJ3FyZm9ybScpOwogICAgICAgIHZhciBzdWJqZWN0ID0geEdldEVs ZW1lbnRCeUlkKCdzdWJqZWN0Jyk7CgogICAgICAgIC8vIElzIHRoaXMgYSBkdW1i IGJyb3dzZXI/CiAgICAgICAgaWYoICFwdGFsa2lkIHx8ICFydG8gfHwgIWR0aWRf ZmllbGQgfHwgIXFyX2RpdiB8fCAhY3VyX2RpdiB8fCAhcXJfZm9ybSB8fCAKICAg ICAgICAgICAgIXFyX2Zvcm1fZGl2IHx8ICFzdWJqZWN0KSB7CiAgICAgICAgICAg IHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcHRhbGtpZC52YWx1ZSA9 IHBpZDsKICAgICAgICBkdGlkX2ZpZWxkLnZhbHVlID0gZHRpZDsKICAgICAgICBy dG8udmFsdWUgPSBwaWQ7CgogICAgICAgIGlmIChsYXN0RGl2ID09ICdxcmRpdicp IHsKICAgICAgICAgICAgaWYgKCEgc2hvd1FSZGl2KHFyX2RpdikpIHsKICAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAg IC8vIE9ubHkgb25lIHN3YXAKICAgICAgICAgICAgaWYgKCEgc3dhcG5vZGVzKHFy X2RpdiwgY3VyX2RpdikpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog ICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChsYXN0RGl2ICE9IGR0aWQp IHsKICAgICAgICAgICAgdmFyIGxhc3RfZGl2ID0geEdldEVsZW1lbnRCeUlkKGxh c3REaXYpOwogICAgICAgICAgICAvLyBUd28gc3dhcHMKICAgICAgICAgICAgaWYg KChsYXN0X2RpdiAhPSBjdXJfZGl2KSAmJiAhIChzd2Fwbm9kZXMobGFzdF9kaXYs IGN1cl9kaXYpICYmIHN3YXBub2Rlcyhxcl9kaXYsIGxhc3RfZGl2KSkpIHsKICAg ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAg fQoKICAgICAgICBsYXN0RGl2ID0gdGFyZ2V0bmFtZTsKCiAgICAgICAgaWYoIXN1 YmplY3QudmFsdWUgfHwgc3ViamVjdC52YWx1ZSA9PSBzdWJqZWN0LmRlZmF1bHRW YWx1ZSB8fCBzdWJqZWN0LnZhbHVlLnN1YnN0cigwLCA0KSA9PSAnUmU6ICcpIHsK ICAgICAgICAgIHN1YmplY3QudmFsdWUgPSBuZXdzdWJqZWN0OwogICAgICAgICAg c3ViamVjdC5kZWZhdWx0VmFsdWUgPSBuZXdzdWJqZWN0OwogICAgICAgIH0KCiAg ICAgICAgaWYoY3VyX2Rpdi5jbGFzc05hbWUpIHsKICAgICAgICAgIHFyX2Zvcm1f ZGl2LmNsYXNzTmFtZSA9IGN1cl9kaXYuY2xhc3NOYW1lOwogICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICBxcl9mb3JtX2Rpdi5jbGFzc05hbWUgPSAiIjsKICAgICAg ICB9CgogICAgICAgIHZhciBxcl9ib2R5ID0gcXJfZm9ybS5ib2R5OyAgLy8gdGhl IHRleHRhcmVhIG9mIHRoZSBxcl9mb3JtCiAgICAgICAgaWYgKHFyX2JvZHkpIHsK ICAgICAgICAgICAgLy8gaGF2ZSB0byBzZXQgYSB0aW1lb3V0IGJlY2F1c2UgbW9z dCBicm93c2VycyB3b24ndCBsZXQgeW91IGZvY3VzCiAgICAgICAgICAgIC8vIG9u IGFuIGVsZW1lbnQgdGhhdCdzIHN0aWxsIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5n IGNyZWF0ZWQuCiAgICAgICAgICAgIC8vIHNvIGxhbWUuCiAgICAgICAgICAgIHdp bmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcXJfYm9keS5mb2N1cygpIH0s IDI1MCk7CiAgICAgICAgfQoKICAgICAgICAvLyBTbyBpdCBkb2VzIG5vdCBmb2xs b3cgdGhlIGxpbmsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgZnVu Y3Rpb24gcmVnRXZlbnQgKHRhcmdldCwgZXZ0LCBmdW5jKSB7CiAgICAgIGlmICgh IHRhcmdldCkgeyByZXR1cm47IH0KICAgICAgaWYgKHRhcmdldC5hdHRhY2hFdmVu dCkKICAgICAgICB0YXJnZXQuYXR0YWNoRXZlbnQoIm9uIitldnQsIGZ1bmMpOwog ICAgICBpZiAodGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpCiAgICAgICAgdGFyZ2V0 LmFkZEV2ZW50TGlzdGVuZXIoZXZ0LCBmdW5jLCBmYWxzZSk7CiAgICB9CgogICAg ZnVuY3Rpb24gbW9yZW9wdHMoKQogICAgewogICAgICAgIHZhciBxcl9mb3JtID0g eEdldEVsZW1lbnRCeUlkKCdxcmZvcm0nKTsKICAgICAgICB2YXIgYmFzZXBhdGgg PSB4R2V0RWxlbWVudEJ5SWQoJ2Jhc2VwYXRoJyk7CiAgICAgICAgdmFyIGR0aWQg PSB4R2V0RWxlbWVudEJ5SWQoJ2R0aWQnKTsKICAgICAgICB2YXIgcGlkZm9ybSA9 IHhHZXRFbGVtZW50QnlJZCgncGFyZW50dGFsa2lkJyk7CgogICAgICAgIC8vIGRv IG5vdCBkbyB0aGUgZGVmYXVsdCBmb3JtIGFjdGlvbiAocG9zdCBjb21tZW50KSBp ZiBzb21ldGhpbmcgaXMgYnJva2UKICAgICAgICBpZiAoIXFyX2Zvcm0gfHwgIWJh c2VwYXRoIHx8ICFkdGlkIHx8ICFwaWRmb3JtKSByZXR1cm4gZmFsc2U7CgogICAg ICAgIHZhciByZXBseXRvID0gTnVtYmVyKGR0aWQudmFsdWUpOwogICAgICAgIHZh ciBwaWQgPSBOdW1iZXIocGlkZm9ybS52YWx1ZSk7CgogICAgICAgIGlmKHJlcGx5 dG8gPiAwICYmIHBpZCA+IDApIHsKICAgICAgICAgIC8vYSByZXBseSB0byBhIGNv bW1lbnQKICAgICAgICAgIHFyX2Zvcm0uYWN0aW9uID0gYmFzZXBhdGgudmFsdWUg KyAicmVwbHl0bz0iICsgcmVwbHl0bzsKICAgICAgICB9IGVsc2UgewogICAgICAg ICAgcXJfZm9ybS5hY3Rpb24gPSBiYXNlcGF0aC52YWx1ZSArICJtb2RlPXJlcGx5 IjsKICAgICAgICB9CgogICAgICAgIC8vIHdlIGNoYW5nZWQgdGhlIGZvcm0gYWN0 aW9uIHNvIHN1Ym1pdCBvdXJzZWx2ZXMKICAgICAgICAvLyBhbmQgZG9uJ3QgdXNl IHRoZSBkZWZhdWx0IGZvcm0gYWN0aW9uCiAgICAgICAgcXJfZm9ybS5zdWJtaXQo KTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICBmdW5jdGlvbiBzdWJt aXRmb3JtKCkKICAgewogICAgICAgIHZhciBzdWJtaXRtb3JlID0geEdldEVsZW1l bnRCeUlkKCdzdWJtaXRtb3Jlb3B0cycpOwogICAgICAgIHZhciBzdWJtaXQgPSB4 R2V0RWxlbWVudEJ5SWQoJ3N1Ym1pdHBvc3QnKTsKICAgICAgICBpZiAoIXN1Ym1p dG1vcmUgfHwgIXN1Ym1pdCkgcmV0dXJuIGZhbHNlOwoKICAgICAgICBzdWJtaXQu ZGlzYWJsZWQgPSB0cnVlOwogICAgICAgIHN1Ym1pdG1vcmUuZGlzYWJsZWQgPSB0 cnVlOwoKICAgICAgICAvLyBOZXcgdG9wLWxldmVsIGNvbW1lbnRzCiAgICAgICAg dmFyIGR0aWQgPSB4R2V0RWxlbWVudEJ5SWQoJ2R0aWQnKTsKICAgICAgICBpZiAo IU51bWJlcihkdGlkLnZhbHVlKSkgewogICAgICAgICAgICBkdGlkLnZhbHVlID0r IDA7CiAgICAgICAgfQoKICAgICAgICB2YXIgcXJfZm9ybSA9IHhHZXRFbGVtZW50 QnlJZCgncXJmb3JtJyk7CiAgICAgICAgcXJfZm9ybS5hY3Rpb24gPSBTaXRlLnNp dGVyb290ICsgJy90YWxrcG9zdF9kby5ibWwnOwogICAgICAgIHFyX2Zvcm0uc3Vi bWl0KCk7CgogICAgICAgIC8vIGRvbid0IGRvIGRlZmF1bHQgZm9ybSBhY3Rpb24K ICAgICAgICByZXR1cm4gZmFsc2U7CiAgIH0KCiAgIGZ1bmN0aW9uIHN3YXBub2Rl cyAob3JpZywgdG9fc3dhcCkgewogICAgICAgIHZhciBvcmlnX3BuID0geFBhcmVu dChvcmlnLCB0cnVlKTsKICAgICAgICB2YXIgbmV4dF9zaWJsaW5nID0gb3JpZy5u ZXh0U2libGluZzsKICAgICAgICB2YXIgdG9fc3dhcF9wbiA9IHhQYXJlbnQodG9f c3dhcCwgdHJ1ZSk7CiAgICAgICAgaWYgKCEgdG9fc3dhcF9wbikgewogICAgICAg ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICB0b19zd2FwX3Bu LnJlcGxhY2VDaGlsZChvcmlnLCB0b19zd2FwKTsKICAgICAgICBvcmlnX3BuLmlu c2VydEJlZm9yZSh0b19zd2FwLCBuZXh0X3NpYmxpbmcpOwogICAgICAgIHJldHVy biB0cnVlOwogICB9CgogICBmdW5jdGlvbiBjaGVja0xlbmd0aCgpIHsKICAgICAg ICB2YXIgcXJfZm9ybSA9IHhHZXRFbGVtZW50QnlJZCgncXJmb3JtJyk7CiAgICAg ICAgaWYgKCFxcl9mb3JtKSByZXR1cm4gdHJ1ZTsKICAgICAgICB2YXIgdGV4dGJv eCA9IHFyX2Zvcm0uYm9keTsKICAgICAgICBpZiAodGV4dGJveC52YWx1ZS5sZW5n dGggPiA0MzAwKSB7CiAgICAgICAgICAgICBhbGVydCgnU29ycnksIGJ1dCB5b3Vy IGNvbW1lbnQgb2YgJyArIHRleHRib3gudmFsdWUubGVuZ3RoICsgJyBjaGFyYWN0 ZXJzIGV4Y2VlZHMgdGhlIG1heGltdW0gY2hhcmFjdGVyIGxlbmd0aCBvZiA0MzAw LiAgUGxlYXNlIHRyeSBzaG9ydGVuaW5nIGl0IGFuZCB0aGVuIHBvc3QgYWdhaW4u Jyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAg IHJldHVybiB0cnVlOwogICB9CgogICAgLy8gTWFpbnRhaW4gZW50cnkgdGhyb3Vn aCBicm93c2VyIG5hdmlnYXRpb25zLgogICAgZnVuY3Rpb24gc2F2ZV9lbnRyeSgp IHsKICAgICAgICB2YXIgcXJfZm9ybSA9IHhHZXRFbGVtZW50QnlJZCgncXJmb3Jt Jyk7CiAgICAgICAgaWYgKCFxcl9mb3JtKSByZXR1cm4gZmFsc2U7CiAgICAgICAg dmFyIHFyX2JvZHkgPSBxcl9mb3JtLmJvZHk7CiAgICAgICAgdmFyIHFyX3N1Ympl Y3QgPSB4R2V0RWxlbWVudEJ5SWQoJ3N1YmplY3QnKTsKICAgICAgICB2YXIgZG9f c3BlbGxjaGVjayA9IHhHZXRFbGVtZW50QnlJZCgnZG9fc3BlbGxjaGVjaycpOwog ICAgICAgIHZhciBxcl9kdGlkID0geEdldEVsZW1lbnRCeUlkKCdkdGlkJyk7CiAg ICAgICAgdmFyIHFyX3B0aWQgPSB4R2V0RWxlbWVudEJ5SWQoJ3BhcmVudHRhbGtp ZCcpOwogICAgICAgIHZhciBxcl91cGljID0geEdldEVsZW1lbnRCeUlkKCdwcm9w X3BpY3R1cmVfa2V5d29yZCcpOwoKICAgICAgICB2YXIgcXJfc2F2ZWRfYm9keSA9 IHhHZXRFbGVtZW50QnlJZCgnc2F2ZWRfYm9keScpOwogICAgICAgIHZhciBxcl9z YXZlZF9zdWJqZWN0ID0geEdldEVsZW1lbnRCeUlkKCdzYXZlZF9zdWJqZWN0Jyk7 CiAgICAgICAgdmFyIHNhdmVkX2RvX3NwZWxsY2hlY2sgPSB4R2V0RWxlbWVudEJ5 SWQoJ3NhdmVkX3NwZWxsJyk7CiAgICAgICAgdmFyIHFyX3NhdmVkX2R0aWQgPSB4 R2V0RWxlbWVudEJ5SWQoJ3NhdmVkX2R0aWQnKTsKICAgICAgICB2YXIgcXJfc2F2 ZWRfcHRpZCA9IHhHZXRFbGVtZW50QnlJZCgnc2F2ZWRfcHRpZCcpOwogICAgICAg IHZhciBxcl9zYXZlZF91cGljID0geEdldEVsZW1lbnRCeUlkKCdzYXZlZF91cGlj Jyk7CgogICAgICAgIHFyX3NhdmVkX2JvZHkudmFsdWUgPSBxcl9ib2R5LnZhbHVl OwogICAgICAgIHFyX3NhdmVkX3N1YmplY3QudmFsdWUgPSBxcl9zdWJqZWN0LnZh bHVlOwogICAgICAgIGlmKGRvX3NwZWxsY2hlY2spIHsKICAgICAgICAgIHNhdmVk X2RvX3NwZWxsY2hlY2sudmFsdWUgPSBkb19zcGVsbGNoZWNrLmNoZWNrZWQ7CiAg ICAgICAgfQoKICAgICAgICBxcl9zYXZlZF9kdGlkLnZhbHVlID0gcXJfZHRpZC52 YWx1ZTsKICAgICAgICBxcl9zYXZlZF9wdGlkLnZhbHVlID0gcXJfcHRpZC52YWx1 ZTsKCiAgICAgICAgaWYgKHFyX3VwaWMpIHsgLy8gaWYgaXQgd2FzIGluIHRoZSBm b3JtCiAgICAgICAgICAgIHFyX3NhdmVkX3VwaWMudmFsdWUgPSBxcl91cGljLnNl bGVjdGVkSW5kZXg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAg ICB9CgogICAgLy8gUmVzdG9yZSBzYXZlZF9lbnRyeSB0ZXh0IGFjcm9zcyBwbGF0 Zm9ybXMuCiAgICBmdW5jdGlvbiByZXN0b3JlX2VudHJ5KCkgewogICAgICAgIHNl dFRpbWVvdXQoCiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAg ICAgICB2YXIgc2F2ZWRfYm9keSA9IHhHZXRFbGVtZW50QnlJZCgnc2F2ZWRfYm9k eScpOwogICAgICAgICAgICAgICAgaWYgKCFzYXZlZF9ib2R5IHx8IHNhdmVkX2Jv ZHkudmFsdWUgPT0gIiIpIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgICAgICB2 YXIgZHRpZCA9IHhHZXRFbGVtZW50QnlJZCgnc2F2ZWRfZHRpZCcpOwogICAgICAg ICAgICAgICAgaWYgKCEgZHRpZCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg ICAgdmFyIHB0aWQgPSB4R2V0RWxlbWVudEJ5SWQoJ3NhdmVkX3B0aWQnKTsKICAg ICAgICAgICAgICAgIHB0aWQudmFsdWUgPSBwYXJzZUludCggcHRpZC52YWx1ZSAp OwoKICAgICAgICAgICAgICAgIHF1aWNrcmVwbHkoZHRpZC52YWx1ZSwgcHRpZC52 YWx1ZSwgc2F2ZWRfYm9keS52YWx1ZSk7CgogICAgICAgICAgICAgICAgdmFyIHFy X2Zvcm0gPSB4R2V0RWxlbWVudEJ5SWQoJ3FyZm9ybScpOwogICAgICAgICAgICAg ICAgaWYgKCFxcl9mb3JtKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB2 YXIgYm9keSA9IHFyX2Zvcm0uYm9keQogICAgICAgICAgICAgICAgYm9keS52YWx1 ZSA9IHNhdmVkX2JvZHkudmFsdWU7CgogICAgICAgICAgICAgICAgLy8gU29tZSBi cm93c2VycyByZXF1aXJlIHdlIGV4cGxpY2l0bHkgc2V0IHRoaXMgYWZ0ZXIgdGhl IGRpdiBoYXMgbW92ZWQKICAgICAgICAgICAgICAgIC8vIGFuZCBpcyBub3cgbm8g bG9uZ2VyIGhpZGRlbgogICAgICAgICAgICAgICAgdmFyIHFyX3NhdmVkX3N1Ympl Y3QgPSB4R2V0RWxlbWVudEJ5SWQoJ3NhdmVkX3N1YmplY3QnKTsKICAgICAgICAg ICAgICAgIHZhciBxcl9zYXZlZF9zcGVsbCA9IHhHZXRFbGVtZW50QnlJZCgnc2F2 ZWRfc3BlbGwnKTsKICAgICAgICAgICAgICAgIHZhciBxcl9zYXZlZF9kdGlkID0g eEdldEVsZW1lbnRCeUlkKCdzYXZlZF9kdGlkJyk7CiAgICAgICAgICAgICAgICB2 YXIgcXJfc2F2ZWRfcHRpZCA9IHhHZXRFbGVtZW50QnlJZCgnc2F2ZWRfcHRpZCcp OwogICAgICAgICAgICAgICAgdmFyIHFyX3NhdmVkX3VwaWMgPSB4R2V0RWxlbWVu dEJ5SWQoJ3NhdmVkX3VwaWMnKTsKCiAgICAgICAgICAgICAgICB2YXIgc3ViamVj dCA9IHhHZXRFbGVtZW50QnlJZCgnc3ViamVjdCcpOwogICAgICAgICAgICAgICAg aWYgKCEgc3ViamVjdCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgc3Vi amVjdC52YWx1ZSA9IHFyX3NhdmVkX3N1YmplY3QudmFsdWUKCiAgICAgICAgICAg ICAgICB2YXIgcHJvcF9waWN0dXJlX2tleXdvcmQgPSB4R2V0RWxlbWVudEJ5SWQo J3Byb3BfcGljdHVyZV9rZXl3b3JkJyk7CiAgICAgICAgICAgICAgICBpZiAocHJv cF9waWN0dXJlX2tleXdvcmQpIHsgLy8gaWYgaXQgd2FzIGluIHRoZSBmb3JtCiAg ICAgICAgICAgICAgICAgICAgcHJvcF9waWN0dXJlX2tleXdvcmQuc2VsZWN0ZWRJ bmRleCA9IHFyX3NhdmVkX3VwaWMudmFsdWU7CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgdmFyIHNwZWxsX2NoZWNrID0geEdldEVsZW1lbnRCeUlk KCdkb19zcGVsbGNoZWNrJyk7CiAgICAgICAgICAgICAgICBpZiAoISBzcGVsbF9j aGVjaykgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgaWYgKHFyX3NhdmVk X3NwZWxsLnZhbHVlID09ICd0cnVlJykgewogICAgICAgICAgICAgICAgICAgIHNw ZWxsX2NoZWNrLmNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgICAgICAgICBzcGVsbF9jaGVjay5jaGVja2VkID0gZmFs c2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LCAxMDApOwogICAg ICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBmdW5jdGlvbiBzaG93UVJkaXYo cXJfZGl2KSB7CiAgICAgICAgaWYgKCEgcXJfZGl2KSB7CiAgICAgICAgICAgIHFy X2RpdiA9IHhHZXRFbGVtZW50QnlJZCgncXJkaXYnKTsKICAgICAgICAgICAgaWYg KCEgcXJfZGl2KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg ICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHFyX2Rpdi5zdHlsZSAmJiB4RGVm KHFyX2Rpdi5zdHlsZS5kaXNwbGF5KSkgewogICAgICAgICAgICBxcl9kaXYuc3R5 bGUuZGlzcGxheT0naW5saW5lJzsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg IH0KICAgIH0KCiAgICAvL2FmdGVyIHRoZSBmdW5jdGlvbnMgaGF2ZSBiZWVuIGRl ZmluZWQsIHJlZ2lzdGVyIHRoZW0KICAgIExpdmVKb3VybmFsLnJlZ2lzdGVyX2hv b2soJ3BhZ2VfbG9hZCcsIHJlc3RvcmVfZW50cnkpOwogICAgcmVnRXZlbnQod2lu ZG93LCAndW5sb2FkJywgc2F2ZV9lbnRyeSk7Ci8vIGNhbGxlZCBieSBTMjoKZnVu Y3Rpb24gc2V0U3R5bGUgKGRpZCwgYXR0ciwgdmFsKSB7CiAgICBpZiAoISBkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCkgcmV0dXJuOwogICAgdmFyIGRlID0gZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoZGlkKTsKICAgIGlmICghIGRlKSByZXR1cm47CiAg ICBpZiAoZGUuc3R5bGUpCiAgICAgICAgZGUuc3R5bGVbYXR0cl0gPSB2YWwKfQoK Ly8gY2FsbGVkIGJ5IFMyOgpmdW5jdGlvbiBzZXRJbm5lciAoZGlkLCB2YWwpIHsK ICAgIGlmICghIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKSByZXR1cm47CiAgICB2 YXIgZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaWQpOwogICAgaWYgKCEg ZGUpIHJldHVybjsKICAgIGRlLmlubmVySFRNTCA9IHZhbDsKfQoKLy8gY2FsbGVk IGJ5IFMyOgpmdW5jdGlvbiBoaWRlRWxlbWVudCAoZGlkKSB7CiAgICBpZiAoISBk b2N1bWVudC5nZXRFbGVtZW50QnlJZCkgcmV0dXJuOwogICAgdmFyIGRlID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGlkKTsKICAgIGlmICghIGRlKSByZXR1cm47 CiAgICBkZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwp9CgovLyBjYWxsZWQgYnkg UzI6CmZ1bmN0aW9uIHNldEF0dHIgKGRpZCwgYXR0ciwgY2xhc3NuYW1lKSB7CiAg ICBpZiAoISBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgcmV0dXJuOwogICAgdmFy IGRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGlkKTsKICAgIGlmICghIGRl KSByZXR1cm47CiAgICBkZS5zZXRBdHRyaWJ1dGUoYXR0ciwgY2xhc3NuYW1lKTsK fQoKLy8gY2FsbGVkIGZyb20gUGFnZToKZnVuY3Rpb24gbXVsdGlmb3JtU3VibWl0 IChmb3JtLCB0eHQpIHsKICAgIHZhciBzZWxfdmFsID0gZm9ybS5tb2RlLnZhbHVl OwogICAgaWYgKCFzZWxfdmFsKSB7CiAgICAgICAgYWxlcnQodHh0Lm5vX2FjdGlv bik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChzZWxfdmFs LnN1YnN0cmluZygwLCA0KSA9PSAnYWxsOicpIHsgLy8gbWFzcyBhY3Rpb24KICAg ICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIGkgPSAtMSwgaGFzX3NlbGVjdGVk ID0gZmFsc2U7IC8vIGF0IGxlYXN0IG9uZSBjaGVja2JveAogICAgd2hpbGUgKGZv cm1bKytpXSkgewogICAgICAgIGlmIChmb3JtW2ldLm5hbWUuc3Vic3RyaW5nKDAs IDkpID09ICdzZWxlY3RlZF8nICYmIGZvcm1baV0uY2hlY2tlZCkgewogICAgICAg ICAgICBoYXNfc2VsZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAg ICAgICB9CiAgICB9CiAgICBpZiAoIWhhc19zZWxlY3RlZCkgewogICAgICAgIGFs ZXJ0KHR4dC5ub19jb21tZW50cyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg fQoKICAgIGlmIChzZWxfdmFsID09ICdkZWxldGUnIHx8IHNlbF92YWwgPT0gJ2Rl bGV0ZXNwYW0nKSB7CiAgICAgICAgcmV0dXJuIGNvbmZpcm0odHh0LmNvbmZfZGVs ZXRlKTsKICAgIH0KfQoKCmZ1bmN0aW9uIGdldFhUUiAoKSB7CiAgICB2YXIgeHRy OwogICAgdmFyIGV4OwoKICAgIGlmICh0eXBlb2YoWE1MSHR0cFJlcXVlc3QpICE9 ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgeHRyID0gbmV3IFhNTEh0dHBSZXF1ZXN0 KCk7CiAgICB9IGVsc2UgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHh0ciA9 IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUC40LjAiKTsKICAgICAg ICB9IGNhdGNoIChleCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg ICAgeHRyID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CiAg ICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICB9CgogICAgLy8gbGV0IG1lIGV4cGxhaW4gdGhpcy4gIE9wZXJhIDggZG9l cyBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBzZXRSZXF1ZXN0SGVhZGVyLgogICAg Ly8gbm8gcHJvYmxlbSwgd2UgdGhvdWdodDogIHdlJ2xsIHRlc3QgZm9yIHNldFJl cXVlc3RIZWFkZXIgYW5kIGlmIGl0J3Mgbm90IHByZXNlbnQKICAgIC8vIHRoZW4g ZmFsbCBiYWNrIHRvIHRoZSBvbGQgYmVoYXZpb3IgKHRyZWF0IGl0IGFzIG5vdCB3 b3JraW5nKS4gIEJVVCAtLS0gSUU2IHdvbid0CiAgICAvLyBsZXQgeW91IGV2ZW4g dGVzdCBmb3Igc2V0UmVxdWVzdEhlYWRlciB3aXRob3V0IHRocm93aW5nIGFuIGV4 Y2VwdGlvbiAoeW91IG5lZWQKICAgIC8vIHRvIGNhbGwgLm9wZW4gb24gdGhlIC54 dHIgZmlyc3Qgb3Igc29tZXRoaW5nKQogICAgdHJ5IHsKICAgICAgICBpZiAoeHRy ICYmICEgeHRyLnNldFJlcXVlc3RIZWFkZXIpCiAgICAgICAgICAgIHh0ciA9IG51 bGw7CiAgICB9IGNhdGNoIChleCkgeyB9CgogICAgcmV0dXJuIHh0cjsKfQoKZnVu Y3Rpb24gcG9zaXRpb25lZE9mZnNldChlbGVtZW50KSB7CiAgdmFyIHZhbHVlVCA9 IDAsIHZhbHVlTCA9IDA7CiAgZG8gewogICAgdmFsdWVUICs9IGVsZW1lbnQub2Zm c2V0VG9wICB8fCAwOwogICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8 fCAwOwogICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OwogICAgaWYg KGVsZW1lbnQpIHsKICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2Fz ZSgpID09ICdCT0RZJykgYnJlYWs7CiAgICAgIHZhciBwID0gRE9NLmdldFN0eWxl KGVsZW1lbnQsICdwb3NpdGlvbicpOwogICAgICBpZiAocCAhPT0gJ3N0YXRpYycp IGJyZWFrOwogICAgfQogIH0gd2hpbGUgKGVsZW1lbnQpOwogIHJldHVybiB7eDog dmFsdWVMLCB5OnZhbHVlVH07Cn0KCi8vIHB1c2ggbmV3IGVsZW1lbnQgJ25lJyBh ZnRlciBzaWJsaW5nICdvZScgb2xkIGVsZW1lbnQKZnVuY3Rpb24gYWRkQWZ0ZXIg KG9lLCBuZSkgewogICAgaWYgKG9lLm5leHRTaWJsaW5nKSB7CiAgICAgICAgb2Uu cGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmUsIG9lLm5leHRTaWJsaW5nKTsKICAg IH0gZWxzZSB7CiAgICAgICAgb2UucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChuZSk7 CiAgICB9Cn0KCi8vIGhzdiB0byByZ2IKLy8gaCwgcywgdiA9IFswLCAxKSwgWzAs IDFdLCBbMCwgMV0KLy8gciwgZywgYiA9IFswLCAyNTVdLCBbMCwgMjU1XSwgWzAs IDI1NV0KZnVuY3Rpb24gaHN2X3RvX3JnYiAoaCwgcywgdikKewogICAgaWYgKHMg PT0gMCkgewoJdiAqPSAyNTU7CglyZXR1cm4gW3Ysdix2XTsKICAgIH0KCiAgICBo ICo9IDY7CiAgICB2YXIgaSA9IE1hdGguZmxvb3IoaCk7CiAgICB2YXIgZiA9IGgg LSBpOwogICAgdmFyIHAgPSB2ICogKDEgLSBzKTsKICAgIHZhciBxID0gdiAqICgx IC0gcyAqIGYpOwogICAgdmFyIHQgPSB2ICogKDEgLSBzICogKDEgLSBmKSk7Cgog ICAgdiA9IE1hdGguZmxvb3IodiAqIDI1NSArIDAuNSk7CiAgICB0ID0gTWF0aC5m bG9vcih0ICogMjU1ICsgMC41KTsKICAgIHAgPSBNYXRoLmZsb29yKHAgKiAyNTUg KyAwLjUpOwogICAgcSA9IE1hdGguZmxvb3IocSAqIDI1NSArIDAuNSk7CgogICAg aWYgKGkgPT0gMCkgcmV0dXJuIFt2LHQscF07CiAgICBpZiAoaSA9PSAxKSByZXR1 cm4gW3EsdixwXTsKICAgIGlmIChpID09IDIpIHJldHVybiBbcCx2LHRdOwogICAg aWYgKGkgPT0gMykgcmV0dXJuIFtwLHEsdl07CiAgICBpZiAoaSA9PSA0KSByZXR1 cm4gW3QscCx2XTsKICAgIHJldHVybiBbdixwLHFdOwp9CgoKZnVuY3Rpb24gc2Ny b2xsVG9wICgpIHsKICAgIGlmICh3aW5kb3cuaW5uZXJIZWlnaHQpCiAgICAgICAg cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldDsKICAgIGlmIChkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRv cCkKICAgICAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9s bFRvcDsKICAgIGlmIChkb2N1bWVudC5ib2R5KQogICAgICAgIHJldHVybiBkb2N1 bWVudC5ib2R5LnNjcm9sbFRvcDsKfQoKZnVuY3Rpb24gc2Nyb2xsTGVmdCAoKSB7 CiAgICBpZiAod2luZG93LmlubmVyV2lkdGgpCiAgICAgICAgcmV0dXJuIHdpbmRv dy5wYWdlWE9mZnNldDsKICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQg JiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpCiAgICAgICAg cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OwogICAg aWYgKGRvY3VtZW50LmJvZHkpCiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHku c2Nyb2xsTGVmdDsKfQoKZnVuY3Rpb24gZ2V0RWxlbWVudFBvcyAob2JqKQp7CiAg ICB2YXIgcG9zID0gbmV3IE9iamVjdCgpOwogICAgaWYgKCFvYmopCiAgICAgICAg cmV0dXJuIG51bGw7CgogICAgdmFyIGl0OwoKICAgIGl0ID0gb2JqOwogICAgcG9z LnggPSAwOwogICAgaWYgKGl0Lm9mZnNldFBhcmVudCkgewoJd2hpbGUgKGl0Lm9m ZnNldFBhcmVudCkgewoJICAgIHBvcy54ICs9IGl0Lm9mZnNldExlZnQ7CgkgICAg aXQgPSBpdC5vZmZzZXRQYXJlbnQ7Cgl9CiAgICB9CiAgICBlbHNlIGlmIChpdC54 KQoJcG9zLnggKz0gaXQueDsKCiAgICBpdCA9IG9iajsKICAgIHBvcy55ID0gMDsK ICAgIGlmIChpdC5vZmZzZXRQYXJlbnQpIHsKCXdoaWxlIChpdC5vZmZzZXRQYXJl bnQpIHsKCSAgICBwb3MueSArPSBpdC5vZmZzZXRUb3A7CgkgICAgaXQgPSBpdC5v ZmZzZXRQYXJlbnQ7Cgl9CiAgICB9CiAgICBlbHNlIGlmIChpdC55KQoJcG9zLnkg Kz0gaXQueTsKCiAgICByZXR1cm4gcG9zOwp9CgovLyByZXR1cm5zIHRoZSBtb3Vz ZSBwb3NpdGlvbiBvZiB0aGUgZXZlbnQsIG9yIGZhaWxpbmcgdGhhdCwgdGhlIHRv cC1sZWZ0Ci8vIG9mIHRoZSBldmVudCdzIHRhcmdldCBlbGVtZW50LiAgKG9yIHRo ZSBmYWxsQmFjayBlbGVtZW50LCB3aGljaCB0YWtlcwovLyBwcmVjZW5kZW5jZSBv dmVyIHRoZSBldmVudCdzIHRhcmdldCBlbGVtZW50IGlmIHNwZWNpZmllZCkKZnVu Y3Rpb24gZ2V0RXZlbnRQb3MgKGUsIGZhbGxCYWNrKQp7CiAgICB2YXIgcG9zID0g eyB4OjAsIHk6MCB9OwoKICAgIGlmICghZSkgdmFyIGUgPSB3aW5kb3cuZXZlbnQ7 CiAgICBpZiAoZS5wYWdlWCAmJiBlLnBhZ2VZKSB7CiAgICAgICAgLy8gdXNlZnVs IGNhc2UgKHJlbGF0aXZlIHRvIGRvY3VtZW50KQogICAgICAgIHBvcy54ID0gZS5w YWdlWDsKICAgICAgICBwb3MueSA9IGUucGFnZVk7CiAgICB9CiAgICBlbHNlIGlm IChlLmNsaWVudFggJiYgZS5jbGllbnRZKSB7CiAgICAgICAgLy8gSUUgY2FzZSAo cmVsYXRpdmUgdG8gdmlld3BvcnQsIHNvIG5lZWQgc2Nyb2xsIGluZm8pCiAgICAg ICAgcG9zLnggPSBlLmNsaWVudFggKyBzY3JvbGxMZWZ0KCk7CiAgICAgICAgcG9z LnkgPSBlLmNsaWVudFkgKyBzY3JvbGxUb3AoKTsKICAgIH0gZWxzZSB7CiAgICAg ICAgdmFyIHRhcmcgPSBmYWxsQmFjayB8fCBnZXRUYXJnZXQoZSk7CiAgICAgICAg dmFyIHBvcyA9IGdldEVsZW1lbnRQb3ModGFyZyk7CiAgICB9CiAgICByZXR1cm4g cG9zOwp9Cgp2YXIgY3VyUG9wdXAgPSBudWxsOwp2YXIgY3VyUG9wdXBfaWQgPSAw OwoKZnVuY3Rpb24ga2lsbFBvcHVwICgpIHsKICAgIGlmICghY3VyUG9wdXApCiAg ICAgICAgcmV0dXJuIHRydWU7CgogICAgdmFyIHBvcHVwID0gY3VyUG9wdXA7CiAg ICBjdXJQb3B1cCA9IG51bGw7CgogICAgdmFyIG9wcCA9IDEuMDsKCiAgICB2YXIg ZmFkZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBvcHAgLT0gMC4xNTsKCiAgICAg ICAgaWYgKG9wcCA8PSAwLjEpIHsKICAgICAgICAgICAgcG9wdXAucGFyZW50Tm9k ZS5yZW1vdmVDaGlsZChwb3B1cCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgcG9wdXAuc3R5bGUuZmlsdGVyID0gImFscGhhKG9wYWNpdHk9IiArIE1hdGgu Zmxvb3Iob3BwICogMTAwKSArICIpIjsKICAgICAgICAgICAgcG9wdXAuc3R5bGUu b3BhY2l0eSA9IG9wcDsKICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZmFk ZSwgMjApOwogICAgICAgIH0KICAgIH07CiAgICBmYWRlKCk7CgogICAgcmV0dXJu IHRydWU7Cn0KCnZhciBwZW5kaW5nUmVxcyA9IG5ldyBPYmplY3QgKCk7CgpmdW5j dGlvbiBkZWxldGVDb21tZW50IChkaXRlbWlkKSB7CgogICAgdmFyIGhhc29wdCA9 IGZ1bmN0aW9uIChvcHQpIHsKICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgibGpwb3BkZWwiICsgZGl0ZW1pZCArIG9wdCk7CiAgICAgICAg aWYgKCFlbCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChlbC5jaGVja2VkKSBy ZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdmFy IG9wdF9kZWx0aHJlYWQgPSBoYXNvcHQoInRocmVhZCIpOwogICAgdmFyIG9wdF9i YW4gPSBoYXNvcHQoImJhbiIpOwogICAgdmFyIG9wdF9zcGFtID0gaGFzb3B0KCJz cGFtIik7CgogICAga2lsbFBvcHVwKCk7CgogICAgdmFyIHRvZGVsID0gZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoImxqY210IiArIGRpdGVtaWQpOwoKICAgIHZhciBj b2wgPSAwOwogICAgdmFyIHB1bHNlID0gMDsKICAgIHZhciBpc19kZWxldGVkID0g MDsKICAgIHZhciBpc19lcnJvciA9IDA7CgogICAgdmFyIHh0ciA9IGdldFhUUigp OwogICAgaWYgKCEgeHRyKSB7CiAgICAgICAgYWxlcnQoIkpTX0FTU0VSVDogbm8g eHRyIG5vdywgYnV0IGVhcmxpZXI/Iik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgfQogICAgcGVuZGluZ1JlcXNbZGl0ZW1pZF0gPSB4dHI7CgogICAgdmFyIHN0 YXRlX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh4dHIucmVh ZHlTdGF0ZSAhPSA0KQogICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAo eHRyLnN0YXR1cyA9PSAyMDApIHsKICAgICAgICAgICAgdmFyIHZhbCA9IGV2YWwo eHRyLnJlc3BvbnNlVGV4dCk7CiAgICAgICAgICAgIGlzX2RlbGV0ZWQgPSB2YWw7 CiAgICAgICAgICAgIGlmICghIGlzX2RlbGV0ZWQpIGlzX2Vycm9yID0gMTsKICAg ICAgICB9IGVsc2UgewogICAgICAgICAgICBhbGVydCgiRXJyb3IgY29udGFjdGlu ZyBzZXJ2ZXIgdG8gZGVsZXRlIGNvbW1lbnQuIik7CiAgICAgICAgICAgIGlzX2Vy cm9yID0gMTsKICAgICAgICB9CiAgICB9OwoKICAgIHZhciBlcnJvcl9jYWxsYmFj ayA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBhbGVydCgiRXJyb3IgZGVsZXRpbmcg IiArIGRpdGVtaWQpOwogICAgICAgIGlzX2Vycm9yID0gMTsKICAgIH07CgogICAg eHRyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHN0YXRlX2NhbGxiYWNrOwogICAgeHRy Lm9wZW4oIlBPU1QiLCAiLyIgKyBMSl9jbXRpbmZvLmpvdXJuYWwgKyAiL19fcnBj X2RlbGNvbW1lbnQ/bW9kZT1qcyZqb3VybmFsPSIgKyBMSl9jbXRpbmZvLmpvdXJu YWwgKyAiJmlkPSIgKyBkaXRlbWlkLCB0cnVlKTsKICAgIHZhciBwb3N0ZGF0YSA9 ICJjb25maXJtPTEiOwogICAgaWYgKG9wdF9iYW4pIHBvc3RkYXRhICs9ICImYmFu PTEiOwogICAgaWYgKG9wdF9zcGFtKSBwb3N0ZGF0YSArPSAiJnNwYW09MSI7CiAg ICBpZiAob3B0X2RlbHRocmVhZCkgcG9zdGRhdGEgKz0gIiZkZWx0aHJlYWQ9MSI7 CiAgICBpZiAoTEpfY210aW5mby5mb3JtX2F1dGgpIHBvc3RkYXRhICs9ICImbGpf Zm9ybV9hdXRoPSIgKyBMSl9jbXRpbmZvLmZvcm1fYXV0aDsKCiAgICB4dHIuc2V0 UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3 LWZvcm0tdXJsZW5jb2RlZCIpOwogICAgeHRyLnNlbmQocG9zdGRhdGEpOwoKICAg IHZhciBmbGFzaCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgcmdiID0gaHN2 X3RvX3JnYigwLCBNYXRoLmNvcygocHVsc2UgKyAxKSAvIDIpLCAxKTsKICAgICAg ICBwdWxzZSArPSAzLjE0MTU5IC8gNTsKICAgICAgICB2YXIgY29sb3IgPSAicmdi KCIgKyByZ2JbMF0gKyAiLCIgKyByZ2JbMV0gKyAiLCIgKyByZ2JbMl0gKyAiKSI7 CgogICAgICAgIHRvZGVsLnN0eWxlLmJvcmRlciA9ICIycHggc29saWQgIiArIGNv bG9yOwogICAgICAgIGlmIChpc19lcnJvcikgewogICAgICAgICAgICB0b2RlbC5z dHlsZS5ib3JkZXIgPSAiIjsKICAgICAgICAgICAgLy8gYW5kIGxldCB0aW1lciBl eHBpcmUKICAgICAgICB9IGVsc2UgaWYgKGlzX2RlbGV0ZWQpIHsKICAgICAgICAg ICAgcmVtb3ZlQ29tbWVudChkaXRlbWlkLCBvcHRfZGVsdGhyZWFkKTsKICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmbGFzaCwg NTApOwogICAgICAgIH0KICAgIH07CgogICAgd2luZG93LnNldFRpbWVvdXQoZmxh c2gsIDUpOwp9CgpmdW5jdGlvbiByZW1vdmVDb21tZW50IChkaXRlbWlkLCBraWxs Q2hpbGRyZW4pIHsKICAgIHZhciB0b2RlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCJsamNtdCIgKyBkaXRlbWlkKTsKICAgIGlmICh0b2RlbCkgewogICAgICAg IHRvZGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgogICAgICAgIHZhciB1c2Vy aG9vayA9IHdpbmRvd1sidXNlcmhvb2tfZGVsZXRlX2NvbW1lbnRfQVJHIl07CiAg ICAgICAgaWYgKHVzZXJob29rKQogICAgICAgICAgICB1c2VyaG9vayhkaXRlbWlk KTsKICAgIH0KICAgIGlmIChraWxsQ2hpbGRyZW4pIHsKICAgICAgICB2YXIgY29t ID0gTEpfY210aW5mbyA/IExKX2NtdGluZm9bZGl0ZW1pZF0gOiBudWxsOwogICAg ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tLnJjLmxlbmd0aDsgaSsrKSB7CiAg ICAgICAgICAgIHJlbW92ZUNvbW1lbnQoY29tLnJjW2ldLCB0cnVlKTsKICAgICAg ICB9CiAgICB9Cn0KCmZ1bmN0aW9uIGRvY0NsaWNrZWQgKCkgewogICAga2lsbFBv cHVwKCk7CgogIC8vIHdlIGRpZG4ndCBoYW5kbGUgYW55dGhpbmcsIHdobyBhcmUg d2Uga2lkZGluZwp9CgpmdW5jdGlvbiBjcmVhdGVEZWxldGVGdW5jdGlvbiAoYWUs IGRJdGVtaWQpIHsKICAgIHJldHVybiBmdW5jdGlvbiAoZSkgewogICAgICAgIGlm ICghZSkgZSA9IHdpbmRvdy5ldmVudDsKICAgICAgICB2YXIgRlMgPSBhcmd1bWVu dHMuY2FsbGVlOwoKICAgICAgICB2YXIgZmluYWxIZWlnaHQgPSAxMDA7CgogICAg ICAgIGlmIChlLnNoaWZ0S2V5IHx8IChjdXJQb3B1cCAmJiBjdXJQb3B1cF9pZCAh PSBkSXRlbWlkKSkgewogICAgICAgICAgICBraWxsUG9wdXAoKTsKICAgICAgICB9 CgogICAgICAgIHZhciBkb0lUID0gMDsKICAgICAgICAvLyBpbW1lZGlhdGVseSBk ZWxldGUgb24gc2hpZnQga2V5CiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHsKICAg ICAgICAgICAgZG9JVCA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg aWYgKCEgTEpfY210aW5mbykKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwoK ICAgICAgICAgICAgdmFyIGNvbSA9IExKX2NtdGluZm9bZEl0ZW1pZF07CiAgICAg ICAgICAgIHZhciByZW1vdGVVc2VyID0gTEpfY210aW5mb1sicmVtb3RlIl07CiAg ICAgICAgICAgIGlmICghY29tIHx8ICFyZW1vdGVVc2VyKQogICAgICAgICAgICAg ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIHZhciBjYW5BZG1pbiA9IExKX2Nt dGluZm9bImNhbkFkbWluIl07CgogICAgICAgICAgICB2YXIgY2xpY2tUYXJnZXQg PSBnZXRUYXJnZXQoZSk7CgogICAgICAgICAgICB2YXIgcG9zID0gZ2V0RXZlbnRQ b3MoZSk7CiAgICAgICAgICAgIHZhciBwb3Nfb2Zmc2V0ID0gcG9zaXRpb25lZE9m ZnNldChhZSkKICAgICAgICAgICAgdmFyIGRpZmZfeCA9IERPTS5maW5kUG9zWChh ZSkgLSBwb3Nfb2Zmc2V0LngKICAgICAgICAgICAgdmFyIGRpZmZfeSA9IERPTS5m aW5kUG9zWShhZSkgLSBwb3Nfb2Zmc2V0LnkKCiAgICAgICAgICAgIHZhciBseCA9 IHBvcy54IC0gZGlmZl94ICsgNSAtIDI1MDsKICAgICAgICAgICAgaWYgKGx4IDwg NSkgbHggPSA1OwogICAgICAgICAgICB2YXIgZGU7CgogICAgICAgICAgICBpZiAo Y3VyUG9wdXAgJiYgY3VyUG9wdXBfaWQgPT0gZEl0ZW1pZCkgewogICAgICAgICAg ICAgICAgZGUgPSBjdXJQb3B1cDsKICAgICAgICAgICAgICAgIGRlLnN0eWxlLmxl ZnQgPSBseCArICJweCI7CiAgICAgICAgICAgICAgICBkZS5zdHlsZS50b3AgPSAo cG9zLnkgLSBkaWZmX3kgKyA1KSArICJweCI7CiAgICAgICAgICAgICAgICByZXR1 cm4gRXZlbnQuc3RvcChlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZGUg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgZGUu c3R5bGUudGV4dEFsaWduID0gImxlZnQiOwogICAgICAgICAgICBkZS5jbGFzc05h bWUgPSAnbGpjbXRtYW5hZ2UnOwogICAgICAgICAgICBkZS5zdHlsZS5oZWlnaHQg PSAiMTBweCI7CiAgICAgICAgICAgIGRlLnN0eWxlLm92ZXJmbG93ID0gImhpZGRl biI7CiAgICAgICAgICAgIGRlLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsK ICAgICAgICAgICAgZGUuc3R5bGUubGVmdCA9IGx4ICsgInB4IjsKICAgICAgICAg ICAgZGUuc3R5bGUudG9wID0gKHBvcy55IC0gZGlmZl95ICsgNSkgKyAicHgiOwog ICAgICAgICAgICBkZS5zdHlsZS53aWR0aCA9ICIyNTBweCI7CiAgICAgICAgICAg IGRlLnN0eWxlLnpJbmRleCA9IDM7CiAgICAgICAgICAgIERPTS5hZGRFdmVudExp c3RlbmVyKGRlLCAnY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAg ICAgRXZlbnQuc3RvcFByb3BhZ2F0aW9uKGUpOwogICAgICAgICAgICAgICAgcmV0 dXJuIHRydWU7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIGluSFRN TCA9ICI8Zm9ybSBzdHlsZT0nZGlzcGxheTogaW5saW5lJyBpZD0nbGpkZWxvcHRz IiArIGRJdGVtaWQgKyAiJz48c3BhbiBzdHlsZT0nZm9udC1mYWNlOiBBcmlhbDsg Zm9udC1zaXplOiA4cHQnPjxiPkRlbGV0ZSBjb21tZW50PzwvYj48YnIgLz4iOwog ICAgICAgICAgICB2YXIgbGJsOwogICAgICAgICAgICBpZiAocmVtb3RlVXNlciAh PSAiIiAmJiBjb20udSAhPSAiIiAmJiBjb20udSAhPSByZW1vdGVVc2VyICYmIGNh bkFkbWluKSB7CiAgICAgICAgICAgICAgICBsYmwgPSAibGpwb3BkZWwiICsgZEl0 ZW1pZCArICJiYW4iOwogICAgICAgICAgICAgICAgaW5IVE1MICs9ICI8aW5wdXQg dHlwZT0nY2hlY2tib3gnIHZhbHVlPSdiYW4nIGlkPSciICsgbGJsICsgIic+IDxs YWJlbCBmb3I9JyIgKyBsYmwgKyAiJz5CYW4gPGI+IiArIGNvbS51ICsgIjwvYj4g ZnJvbSBjb21tZW50aW5nPC9sYWJlbD48YnIgLz4iOwogICAgICAgICAgICB9IGVs c2UgewogICAgICAgICAgICAgICAgZmluYWxIZWlnaHQgLT0gMTU7CiAgICAgICAg ICAgIH0KCiAgICAgICAgICAgIGlmIChyZW1vdGVVc2VyICE9IGNvbS51ICYmIGNh bkFkbWluKSB7CiAgICAgICAgICAgICAgICBsYmwgPSAibGpwb3BkZWwiICsgZEl0 ZW1pZCArICJzcGFtIjsKICAgICAgICAgICAgICAgIGluSFRNTCArPSAiPGlucHV0 IHR5cGU9J2NoZWNrYm94JyB2YWx1ZT0nc3BhbScgaWQ9JyIgKyBsYmwgKyAiJz4g PGxhYmVsIGZvcj0nIiArIGxibCArICInPk1hcmsgdGhpcyBjb21tZW50IGFzIHNw YW08L2xhYmVsPjxiciAvPiI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg ICAgICAgICBmaW5hbEhlaWdodCAtPSAxNTsKICAgICAgICAgICAgfQoKICAgICAg ICAgICAgaWYgKGNvbS5yYyAmJiBjb20ucmMubGVuZ3RoICYmIGNhbkFkbWluKSB7 CiAgICAgICAgICAgICAgICBsYmwgPSAibGpwb3BkZWwiICsgZEl0ZW1pZCArICJ0 aHJlYWQiOwogICAgICAgICAgICAgICAgaW5IVE1MICs9ICI8aW5wdXQgdHlwZT0n Y2hlY2tib3gnIHZhbHVlPSd0aHJlYWQnIGlkPSciICsgbGJsICsgIic+IDxsYWJl bCBmb3I9JyIgKyBsYmwgKyAiJz5EZWxldGUgdGhyZWFkIChhbGwgc3ViY29tbWVu dHMpPC9sYWJlbD48YnIgLz4iOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICAgICAgZmluYWxIZWlnaHQgLT0gMTU7CiAgICAgICAgICAgIH0KICAgICAg ICAgICAgaW5IVE1MICs9ICI8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nRGVs ZXRlJyBvbmNsaWNrPSdkZWxldGVDb21tZW50KCIgKyBkSXRlbWlkICsgIik7JyAv PiA8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nQ2FuY2VsJyBvbmNsaWNrPSdr aWxsUG9wdXAoKScgLz48L3NwYW4+PGJyIC8+PHNwYW4gc3R5bGU9J2ZvbnQtZmFj ZTogQXJpYWw7IGZvbnQtc2l6ZTogOHB0Jz48aT5zaGlmdC1jbGljayB0byBkZWxl dGUgd2l0aG91dCBvcHRpb25zPC9pPjwvc3Bhbj48L2Zvcm0+IjsKICAgICAgICAg ICAgZGUuaW5uZXJIVE1MID0gaW5IVE1MOwoKICAgICAgICAgICAgLy8gd2UgZG8g dGhpcyBzbyBrZXlib2FyZCB0YWIgb3JkZXIgaXMgY29ycmVjdDoKICAgICAgICAg ICAgYWRkQWZ0ZXIoYWUsIGRlKTsKCiAgICAgICAgICAgIGN1clBvcHVwID0gZGU7 CiAgICAgICAgICAgIGN1clBvcHVwX2lkID0gZEl0ZW1pZDsKCiAgICAgICAgICAg IHZhciBoZWlnaHQgPSAxMDsKICAgICAgICAgICAgdmFyIGdyb3cgPSBmdW5jdGlv biAoKSB7CiAgICAgICAgICAgICAgICBoZWlnaHQgKz0gNzsKICAgICAgICAgICAg ICAgIGlmIChoZWlnaHQgPiBmaW5hbEhlaWdodCkgewogICAgICAgICAgICAgICAg ICAgIGRlLnN0eWxlLmhlaWdodCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAg ZGUuc3R5bGUuZmlsdGVyID0gIiI7CiAgICAgICAgICAgICAgICAgICAgZGUuc3R5 bGUub3BhY2l0eSA9IDEuMDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgInB4IjsK ICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChncm93LCAyMCk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGdy b3coKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoZG9JVCkgewogICAgICAgICAg ICBkZWxldGVDb21tZW50KGRJdGVtaWQpOwogICAgICAgIH0KCiAgICAgICAgRXZl bnQuc3RvcChlKTsKICAgIH0KfQoKZnVuY3Rpb24gcG9vZkF0IChwb3MpIHsKICAg IHZhciBkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGUu c3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgZGUuc3R5bGUuYmFja2dy b3VuZCA9ICIjRkZGIjsKICAgIGRlLnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7 CiAgICB2YXIgb3BwID0gMS4wOwoKICAgIHZhciB0b3AgPSBwb3MueTsKICAgIHZh ciBsZWZ0ID0gcG9zLng7CiAgICB2YXIgd2lkdGggPSA1OwogICAgdmFyIGhlaWdo dCA9IDU7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRlKTsKCiAgICB2 YXIgZmFkZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBvcHAgLT0gMC4xNTsKICAg ICAgICB3aWR0aCArPSAxMDsKICAgICAgICBoZWlnaHQgKz0gMTA7CiAgICAgICAg dG9wIC09IDU7CiAgICAgICAgbGVmdCAtPSA1OwoKICAgICAgICBpZiAob3BwIDw9 IDAuMSkgewogICAgICAgICAgICBkZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRl KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkZS5zdHlsZS5sZWZ0ID0g bGVmdCArICJweCI7CiAgICAgICAgICAgIGRlLnN0eWxlLnRvcCA9IHRvcCArICJw eCI7CiAgICAgICAgICAgIGRlLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7 CiAgICAgICAgICAgIGRlLnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOwogICAg ICAgICAgICBkZS5zdHlsZS5maWx0ZXIgPSAiYWxwaGEob3BhY2l0eT0iICsgTWF0 aC5mbG9vcihvcHAgKiAxMDApICsgIikiOwogICAgICAgICAgICBkZS5zdHlsZS5v cGFjaXR5ID0gb3BwOwogICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmYWRl LCAyMCk7CiAgICAgICAgfQogICAgfTsKICAgIGZhZGUoKTsKfQoKZnVuY3Rpb24g Z2V0VGFyZ2V0IChldikgewogICAgdmFyIHRhcmdldDsKICAgIGlmIChldi50YXJn ZXQpCiAgICAgICAgdGFyZ2V0ID0gZXYudGFyZ2V0OwogICAgZWxzZSBpZiAoZXYu c3JjRWxlbWVudCkKICAgICAgICB0YXJnZXQgPSBldi5zcmNFbGVtZW50OwoKICAg IC8vIFNhZmFyaSBidWc6CiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5ub2RlVHlw ZSA9PSAzKQogICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOwoKICAg IHJldHVybiB0YXJnZXQ7Cn0KCmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGFlLCByZXNP YmosIGNsaWNrVGFyZ2V0KSB7CiAgICBhZS5ocmVmID0gcmVzT2JqLm5ld3VybDsK ICAgIHZhciB1c2VyaG9vayA9IHdpbmRvd1sidXNlcmhvb2tfIiArIHJlc09iai5t b2RlICsgIl9jb21tZW50X0FSRyJdOwogICAgdmFyIGRpZF9zb21ldGhpbmcgPSAw OwoKICAgIGlmIChjbGlja1RhcmdldCAmJiBjbGlja1RhcmdldC5zcmMgJiYgY2xp Y2tUYXJnZXQuc3JjID09IHJlc09iai5vbGRpbWFnZSkgewogICAgICAgIGNsaWNr VGFyZ2V0LnNyYyA9IHJlc09iai5uZXdpbWFnZTsKICAgICAgICBkaWRfc29tZXRo aW5nID0gMTsKICAgIH0KCiAgICBpZiAodXNlcmhvb2spIHsKICAgICAgICB1c2Vy aG9vayhyZXNPYmouaWQpOwogICAgICAgIGRpZF9zb21ldGhpbmcgPSAxOwogICAg fQoKICAgIC8vIGlmIGFsbCBlbHNlIGZhaWxzLCBhdCBsZWFzdCByZW1vdmUgdGhl IGxpbmsgc28gdGhleSdyZSBub3QgYXMgY29uZnVzZWQKICAgIGlmICghIGRpZF9z b21ldGhpbmcpIHsKICAgICAgICBpZiAoYWUgJiYgYWUuc3R5bGUpCiAgICAgICAg ICAgIGFlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgaWYgKGNsaWNr VGFyZ2V0ICYmIGNsaWNrVGFyZ2V0LnN0eWxlKQogICAgICAgICAgICBjbGlja1Rh cmdldC5zdHlsZS5kaXNwYXkgPSAnbm9uZSc7CiAgICB9Cgp9Cgp2YXIgdHNJblBy b2cgPSBuZXcgT2JqZWN0KCk7ICAvLyBkaWN0IG9mIHsgZGl0ZW1pZCA9PiAxIH0K ZnVuY3Rpb24gY3JlYXRlTW9kZXJhdGlvbkZ1bmN0aW9uIChhZSwgZEl0ZW1pZCkg ewogICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgaWYgKCFlKSBlID0g d2luZG93LmV2ZW50OwoKICAgICAgICBpZiAodHNJblByb2dbZEl0ZW1pZF0pCiAg ICAgICAgICAgIHJldHVybiBFdmVudC5wcmV2ZW50RGVmYXVsdChlKTsKICAgICAg ICB0c0luUHJvZ1tkSXRlbWlkXSA9IDE7CgogICAgICAgIHZhciBjbGlja1Rhcmdl dCA9IGdldFRhcmdldChlKTsKCiAgICAgICAgdmFyIGltZ1RhcmdldDsKICAgICAg ICB2YXIgaW1ncyA9IGFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbWciKTsKICAg ICAgICBpZiAoaW1ncy5sZW5ndGgpCiAgICAgICAgICAgIGltZ1RhcmdldCA9IGlt Z3NbMF0KCiAgICAgICAgaWYgKCEgY2xpY2tUYXJnZXQgfHwgdHlwZW9mKGNsaWNr VGFyZ2V0KSAhPSAib2JqZWN0IikKICAgICAgICAgICAgcmV0dXJuIHRydWU7Cgog ICAgICAgIHZhciBjbGlja1BvcyA9IGdldEV2ZW50UG9zKGUpOwoKICAgICAgICB2 YXIgZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKICAgICAgICBk ZS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICAgZGUud2lkdGgg PSAxNzsKICAgICAgICBkZS5oZWlnaHQgPSAxNzsKICAgICAgICBkZS5zcmMgPSBT aXRlLmltZ3ByZWZpeCArICIvaG91cmdsYXNzLmdpZiI7CiAgICAgICAgZGUuc3R5 bGUudG9wID0gKGNsaWNrUG9zLnkgLSA4KSArICJweCI7CiAgICAgICAgZGUuc3R5 bGUubGVmdCA9IChjbGlja1Bvcy54IC0gOCkgKyAicHgiOwogICAgICAgIGRvY3Vt ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGUpOwoKICAgICAgICB2YXIgeHRyID0gZ2V0 WFRSKCk7CiAgICAgICAgdmFyIHN0YXRlX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkg ewogICAgICAgICAgICBpZiAoeHRyLnJlYWR5U3RhdGUgIT0gNCkgcmV0dXJuOwoK ICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkZSk7CiAgICAg ICAgICAgIHZhciBycGNSZXM7CgogICAgICAgICAgICBpZiAoeHRyLnN0YXR1cyA9 PSAyMDApIHsKICAgICAgICAgICAgICAgIHZhciByZXNPYmogPSBldmFsKHh0ci5y ZXNwb25zZVRleHQpOwogICAgICAgICAgICAgICAgaWYgKHJlc09iaikgewogICAg ICAgICAgICAgICAgICAgIHBvb2ZBdChjbGlja1Bvcyk7CiAgICAgICAgICAgICAg ICAgICAgdXBkYXRlTGluayhhZSwgcmVzT2JqLCBpbWdUYXJnZXQpOwogICAgICAg ICAgICAgICAgICAgIHRzSW5Qcm9nW2RJdGVtaWRdID0gMDsKICAgICAgICAgICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdHNJblByb2dbZEl0ZW1p ZF0gPSAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSBlbHNlIHsK ICAgICAgICAgICAgICAgIGFsZXJ0KCJFcnJvciBjb250YWN0aW5nIHNlcnZlci4i KTsKICAgICAgICAgICAgICAgIHRzSW5Qcm9nW2RJdGVtaWRdID0gMDsKICAgICAg ICAgICAgfQogICAgICAgIH07CgogICAgICAgIHh0ci5vbnJlYWR5c3RhdGVjaGFu Z2UgPSBzdGF0ZV9jYWxsYmFjazsKCiAgICAgICAgdmFyIHBvc3RVcmwgPSBhZS5o cmVmLnJlcGxhY2UoLy4rdGFsa3NjcmVlblwuYm1sLywgIi8iICsgTEpfY210aW5m by5qb3VybmFsICsgIi9fX3JwY190YWxrc2NyZWVuIik7CgogICAgICAgIC8vdmFy IHBvc3RVcmwgPSBhZS5ocmVmOwogICAgICAgIHh0ci5vcGVuKCJQT1NUIiwgcG9z dFVybCArICImanNtb2RlPTEiLCB0cnVlKTsKCiAgICAgICAgdmFyIHBvc3RkYXRh ID0gImNvbmZpcm09WSZsal9mb3JtX2F1dGg9IiArIExKX2NtdGluZm8uZm9ybV9h dXRoOwoKICAgICAgICB4dHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBl IiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwogICAgICAg IHh0ci5zZW5kKHBvc3RkYXRhKTsKCiAgICAgICAgRXZlbnQucHJldmVudERlZmF1 bHQoZSk7CiAgICB9Owp9CgpmdW5jdGlvbiBzZXR1cEFqYXggKG5vZGUpIHsKICAg IHZhciBsaW5rcyA9IG5vZGUgPyBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdh JykgOiBkb2N1bWVudC5saW5rcywKICAgICAgICByZXhfaWQgPSAvaWQ9KFxkKykv LAogICAgICAgIGkgPSAtMSwgYWU7CgogICAgd2hpbGUgKGxpbmtzWysraV0pIHsK ICAgICAgICBhZSA9IGxpbmtzW2ldOwogICAgICAgIGlmIChhZS5ocmVmLmluZGV4 T2YoJ3RhbGtzY3JlZW4uYm1sJykgIT0gLTEpIHsKICAgICAgICAgICAgdmFyIHJl TWF0Y2ggPSByZXhfaWQuZXhlYyhhZS5ocmVmKTsKICAgICAgICAgICAgaWYgKCFy ZU1hdGNoKSBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciBpZCA9IHJlTWF0Y2hb MV07CiAgICAgICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xq Y210JyArIGlkKSkgY29udGludWU7CgogICAgICAgICAgICBhZS5vbmNsaWNrID0g Y3JlYXRlTW9kZXJhdGlvbkZ1bmN0aW9uKGFlLCBpZCk7CiAgICAgICAgfSBlbHNl IGlmIChhZS5ocmVmLmluZGV4T2YoJ2RlbGNvbW1lbnQuYm1sJykgIT0gLTEpIHsK ICAgICAgICAgICAgaWYgKExKX2NtdGluZm8gJiYgTEpfY210aW5mby5kaXNhYmxl SW5saW5lRGVsZXRlKSBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciByZU1hdGNo ID0gcmV4X2lkLmV4ZWMoYWUuaHJlZik7CiAgICAgICAgICAgIGlmICghcmVNYXRj aCkgY29udGludWU7CgogICAgICAgICAgICB2YXIgaWQgPSByZU1hdGNoWzFdOwog ICAgICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsamNtdCcg KyBpZCkpIGNvbnRpbnVlOwoKICAgICAgICAgICAgYWUub25jbGljayA9IGNyZWF0 ZURlbGV0ZUZ1bmN0aW9uKGFlLCBpZCk7CiAgICAgICAgfQogICAgfQp9CgoKCkxp dmVKb3VybmFsLnJlZ2lzdGVyX2hvb2soJ3BhZ2VfbG9hZCcsIGZ1bmN0aW9uICgp IHsKICAgIHNldHVwQWpheCgpCn0pOwpET00uYWRkRXZlbnRMaXN0ZW5lcihkb2N1 bWVudCwgJ2NsaWNrJywgZG9jQ2xpY2tlZCk7CmRvY3VtZW50LndyaXRlKCI8c3R5 bGU+IGRpdi5samNtdG1hbmFnZSB7IGNvbG9yOiAjMDAwOyBiYWNrZ3JvdW5kOiAj ZTBlMGUwOyBib3JkZXI6IDJweCBzb2xpZCAjMDAwOyBwYWRkaW5nOiAzcHg7IH08 L3N0eWxlPiIpOwpIb3Jpem9uID0gbmV3IE9iamVjdDsKCi8vIEhvbGRzIHN0eWxl IGluZm8gZm9yIHRoZSB0b3AgbGV2ZWwgbWVudQpIb3Jpem9uLnRvcGxldmVsX2hv dmVyX3N0eWxlID0gbnVsbDsKLy8gSG9sZHMgdGhlIGxhc3QgbWVudSBvcGVuZWQK SG9yaXpvbi5vcGVuZWRfbWVudSA9IG51bGw7Ci8vIEhvbGRzIFNlbGVjdCBlbGVt ZW50cyB0aHQgaGF2ZSBiZWVuIGhpZGRlbgpIb3Jpem9uLmhpZGRlblNlbGVjdHMg PSBbXTsKLy8gSXMgSUUgdmVyc2lvbiA2IG9yIGxvd2VyIGZsYWcKSG9yaXpvbi5p c0lFNmRvd24gPSBmYWxzZTsKCkhvcml6b24uc2NoZW1lX2luaXQgPSBmdW5jdGlv biAoKSB7CiAgICBIb3Jpem9uLnRvcGxldmVsX2hvdmVyX3N0eWxlID0gRE9NLmdl dENvbXB1dGVkU3R5bGUoJCgiQWxwaGEiKSk7CiAgICBIb3Jpem9uLnNldElzSUU2 ZG93bigpOwogICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoJCgnZm9vdGVyX2xhbmdf bGlzdCcpLCAiY2hhbmdlIiwgZnVuY3Rpb24gKGV2dCkgeyBIb3Jpem9uLmNoYW5n ZUxhbmcoZXZ0LCAkKCdmb290ZXJfbGFuZ19saXN0JykudmFsdWUpIH0pOwp9CgpI b3Jpem9uLm9wZW5fbWVudSA9IGZ1bmN0aW9uIChtKSB7CiAgICAvKiBOZWVkZWQg dG8gbmljZWx5IHR1cm4gb24gdG9wIGxldmVsIG1lbnUgaXRlbXMgZm9yIElFICov CiAgICBpZiAoSG9yaXpvbi50b3BsZXZlbF9ob3Zlcl9zdHlsZSkgewogICAgICAg IG0uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gSG9yaXpvbi50b3BsZXZlbF9ob3Zl cl9zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U7CiAgICAgICAgbS5zdHlsZS5ib3JkZXJD b2xvciA9IEhvcml6b24udG9wbGV2ZWxfaG92ZXJfc3R5bGUuYm9yZGVyQ29sb3I7 CiAgICAgICAgbS5zdHlsZS5ib3JkZXJXaWR0aCA9IEhvcml6b24udG9wbGV2ZWxf aG92ZXJfc3R5bGUuYm9yZGVyV2lkdGg7CiAgICAgICAgbS5zdHlsZS5ib3JkZXJT dHlsZSA9IEhvcml6b24udG9wbGV2ZWxfaG92ZXJfc3R5bGUuYm9yZGVyU3R5bGU7 CiAgICAgICAgdmFyIGxpbmtzID0gbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScp OwogICAgICAgIGxpbmtzWzBdLnN0eWxlLmNvbG9yID0gSG9yaXpvbi50b3BsZXZl bF9ob3Zlcl9zdHlsZS5jb2xvcjsKICAgIH0KCiAgICBIb3Jpem9uLmhpZGVTZWxl Y3RzKCk7CiAgICB2YXIgbWVudXMgPSBtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd1 bCcpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbWVudXMubGVuZ3RoOyBpKysp IHsKICAgICAgICBpZiAoIW1lbnVzW2ldKSByZXR1cm47CiAgICAgICAgbWVudXNb aV0uc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICB9CgogICAgRXZlbnQuc3Rv cChlKTsKICAgIHJldHVybiBmYWxzZTsKfQoKSG9yaXpvbi5jbG9zZV9tZW51ID0g ZnVuY3Rpb24gKG0pIHsKICAgIGlmIChIb3Jpem9uLnRvcGxldmVsX2hvdmVyX3N0 eWxlKSB7CiAgICAgICAgbS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAnJzsKICAg ICAgICBtLnN0eWxlLmJvcmRlckNvbG9yID0gJyc7CiAgICAgICAgbS5zdHlsZS5i b3JkZXJXaWR0aCA9ICcnOwogICAgICAgIG0uc3R5bGUuYm9yZGVyU3R5bGUgPSAn JzsKICAgICAgICB2YXIgbGlua3MgPSBtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdh Jyk7CiAgICAgICAgbGlua3NbMF0uc3R5bGUuY29sb3IgPSAnJzsKICAgIH0KCiAg ICBIb3Jpem9uLnNob3dTZWxlY3RzKCk7CiAgICB2YXIgbWVudXMgPSBtLmdldEVs ZW1lbnRzQnlUYWdOYW1lKCd1bCcpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPD0g bWVudXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoIW1lbnVzW2ldKSByZXR1 cm47CiAgICAgICAgbWVudXNbaV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAg IH0KCiAgICBFdmVudC5zdG9wKGUpOwogICAgcmV0dXJuIGZhbHNlOwp9CgpIb3Jp em9uLm1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldnQpIHsKICAgIEV2ZW50LnByZXAo ZXZ0KTsKICAgIGlmICghZXZ0LnRhcmdldCkgcmV0dXJuOwoKICAgIHZhciBhbmNl c3RvcnMgPSBET00uZ2V0QW5jZXN0b3JzQnlDbGFzc05hbWUoZXZ0LnRhcmdldCwg Ik5hdk1lbnVJdGVtIiwgdHJ1ZSk7CiAgICBpZiAoYW5jZXN0b3JzLmxlbmd0aCkg ewogICAgICAgIGlmICghSG9yaXpvbi5vcGVuZWRfbWVudSB8fCBIb3Jpem9uLm9w ZW5lZF9tZW51ICE9IGFuY2VzdG9yc1swXSkKICAgICAgICAgICAgSG9yaXpvbi5v cGVuX21lbnUoYW5jZXN0b3JzWzBdKTsKICAgICAgICBpZiAoSG9yaXpvbi5vcGVu ZWRfbWVudSAmJiBIb3Jpem9uLm9wZW5lZF9tZW51ICE9IGFuY2VzdG9yc1swXSkK ICAgICAgICAgICAgSG9yaXpvbi5jbG9zZV9tZW51KEhvcml6b24ub3BlbmVkX21l bnUpOwogICAgICAgIEhvcml6b24ub3BlbmVkX21lbnUgPSBhbmNlc3RvcnNbMF07 CiAgICB9IGVsc2UgewogICAgICAgIGlmIChIb3Jpem9uLm9wZW5lZF9tZW51KSBI b3Jpem9uLmNsb3NlX21lbnUoSG9yaXpvbi5vcGVuZWRfbWVudSk7CiAgICAgICAg SG9yaXpvbi5vcGVuZWRfbWVudSA9IG51bGw7CiAgICB9Cn0KCkhvcml6b24uaGlk ZVNlbGVjdHMgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAoIUhvcml6b24uaXNJRTZk b3duKSByZXR1cm47CiAgICB2YXIgc2VscyA9IGRvY3VtZW50LmdldEVsZW1lbnRz QnlUYWdOYW1lKCJzZWxlY3QiKTsKICAgIHZhciBlbGU7CiAgICBmb3IgKHZhciBp ID0gMDsgaSA8IHNlbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBlbGUgPSBzZWxz W2ldOwogICAgICAgIGlmICghZWxlKSBjb250aW51ZTsKCiAgICAgICAgaWYgKGVs ZS5zdHlsZS52aXNpYmlsaXR5ICE9ICdoaWRkZW4nICYmIGVsZS5jbGFzc05hbWUg PT0gJ2hpZGVhYmxlJykgewogICAgICAgICAgICBlbGUuc3R5bGUudmlzaWJpbGl0 eSA9ICdoaWRkZW4nOwogICAgICAgICAgICBIb3Jpem9uLmhpZGRlblNlbGVjdHMu cHVzaChlbGUpOwogICAgICAgIH0KICAgIH0KfQoKSG9yaXpvbi5zaG93U2VsZWN0 cyA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBlbGU7CiAgICB3aGlsZSAoZWxlID0g SG9yaXpvbi5oaWRkZW5TZWxlY3RzLnBvcCgpKQogICAgICAgIGVsZS5zdHlsZS52 aXNpYmlsaXR5ID0gJyc7Cn0KCkhvcml6b24uc2V0SXNJRTZkb3duID0gZnVuY3Rp b24gKCkgewogICAgdmFyIFVBID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2Vy Q2FzZSgpOwogICAgaWYgKChVQS5pbmRleE9mKCdtc2llIDUnKSAhPSAtMSkgfHwg KFVBLmluZGV4T2YoJ21zaWUgNicpICE9IC0xKSkKICAgICAgICBIb3Jpem9uLmlz SUU2ZG93biA9IHRydWU7Cn0KCkhvcml6b24uY2hhbmdlTGFuZyA9IGZ1bmN0aW9u KGV2dCwgbGFuZykgewogICAgaWYgKGxhbmcpIHsKICAgICAgICB3aW5kb3cubG9j YXRpb24gPSBTaXRlLnNpdGVyb290ICsgIi90b29scy9zZXRsYW5nLmJtbD9sYW5n PSIgKyBsYW5nICsgIiZyZXR1cm50bz0iICsgZXNjYXBlKHdpbmRvdy5sb2NhdGlv bik7CiAgICB9Cn0KCi8qIFRyeSB0byBzcGVlZCB1cCBwYWdlIGxvYWQgaW4gTW96 aWxsYSAqLwppZiAod2luZG93LmNvbnRyb2xsZXJzKSB7CiAgICBkb2N1bWVudC5h ZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgSG9yaXpvbi5zY2hl bWVfaW5pdCwgbnVsbCk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJt b3VzZW1vdmUiLCBIb3Jpem9uLm1vdXNlTW92ZSwgZG9jdW1lbnQpOwp9IGVsc2Ug ewogICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAibG9hZCIsIEhvcml6 b24uc2NoZW1lX2luaXQpOwogICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1l bnQsICJtb3VzZW1vdmUiLCBIb3Jpem9uLm1vdXNlTW92ZSk7Cn0KCi8vIGxqdGFs ayBmb3IgY3R4cG9wdXAKTGl2ZUpvdXJuYWwucmVnaXN0ZXJfaG9vaygiY3R4cG9w dXBfZXh0cmFpbmZvIiwgZnVuY3Rpb24gKHVzZXJkYXRhKSB7CiAgICB2YXIgY29u dGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwoKICAgIGlmICh1 c2VyZGF0YS5pc19wZXJzb24pIHsKICAgICAgICBpZiAodXNlcmRhdGEuaXNfb25s aW5lICE9PSAnJykgewogICAgICAgICAgICAvLyBvbmxpbmUgc3RhdHVzCiAgICAg ICAgICAgIHZhciBvbmxpbmVTdGF0dXNMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgdmFyIGphYmJlclRpdGxlID0gdXNl cmRhdGEuamFiYmVyX3RpdGxlOwogICAgICAgICAgICBvbmxpbmVTdGF0dXNMYWJl bC5pbm5lckhUTUwgPSBqYWJiZXJUaXRsZSArICI6ICI7CiAgICAgICAgICAgIERP TS5hZGRDbGFzc05hbWUob25saW5lU3RhdHVzTGFiZWwsICJPbmxpbmVTdGF0dXMi KTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChvbmxpbmVTdGF0dXNM YWJlbCk7CgogICAgICAgICAgICAvLyBidWlsZCBzdGF0dXMKICAgICAgICAgICAg dmFyIG9ubGluZVN0YXR1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i KTsKCgogICAgICAgICAgICB2YXIgb25saW5lU3RhdHVzVGV4dCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgb25saW5lU3RhdHVz LmFwcGVuZENoaWxkKG9ubGluZVN0YXR1c1RleHQpOwoKICAgICAgICAgICAgY29u dGVudC5hcHBlbmRDaGlsZChvbmxpbmVTdGF0dXMpOwoKICAgICAgICAgICAgaWYg KHVzZXJkYXRhLmlzX29ubGluZSkgewogICAgICAgICAgICAgICAgb25saW5lU3Rh dHVzVGV4dC5pbm5lckhUTUwgPSAiT25saW5lIjsKICAgICAgICAgICAgfSBlbHNl IGlmICh1c2VyZGF0YS5pc19vbmxpbmUgPT0gJzAnKSB7CiAgICAgICAgICAgICAg ICBvbmxpbmVTdGF0dXNUZXh0LmlubmVySFRNTCA9ICJPZmZsaW5lIjsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gY29udGVudDsKfSk7 CgovLyBmb3IgdXBkYXRpbmcgbGpjb20gd2lkZ2V0cyBmcm9tIGxpdmVqb3VybmFs IG9uZXMKTGl2ZUpvdXJuYWwucmVnaXN0ZXJfaG9vaygidXBkYXRlX290aGVyX3dp ZGdldHMiLCBmdW5jdGlvbiAoZnJvbV93aWRnZXQpIHsKICAgIGlmIChmcm9tX3dp ZGdldCA9PSAiTGF5b3V0Q2hvb3NlciIgJiYgQ3VzdG9taXplLkFkTGF5b3V0KSB7 CiAgICAgICAgQ3VzdG9taXplLkFkTGF5b3V0LnVwZGF0ZUNvbnRlbnQoKTsKICAg IH0KfSk7Cg== ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=topbar-bg.png Content-Type: image/png; name=topbar-bg.png Content-Location: http://l-stat.livejournal.com/stc/horizon/topbar-bg.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAIAAADITs03AAAACXBIWXMAAAsTAAAL EwEAmpwYAAAAB3RJTUUH1gYPEyIsVJqHjgAAAZtJREFUGBkBkAFv/gCBq9QCAQEA AgAAAAIBAAACAQEBAgAAAQIBAQECAAEAAgEAAAIBAQECAQEAAgEAAQIBAQACAQEA AgEAAQIAAQECAgEAAgEAAQIBAQECAQEAAgEBAAIBAgECAQABAgIBAAIBAQECAQEB AgEBAQICAQACAQEBAgEBAAIBAQECAQABAgICAAICAQICAAEAAgEBAAICAQECAgAB AgEBAQIBAQECAQIBAgEAAAIBAgACAgABAgECAQIBAAECAQIBAgEAAQIDAgACAAAA AgEBAQICAQACAQACAgEBAAIBAQACAQEBAgEBAQICAQACAAABAgECAAIBAAECAQEA AgEAAQIAAQACAQEBAgEBAAIBAAECAQEAAgAAAQICAQACAAAAAgEBAAIAAAECAAAA AgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAA AgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAA AgAAAAIAAABhggNzIXwvkAAAAABJRU5ErkJggg== ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=toplevel-bg.gif Content-Type: image/gif; name=toplevel-bg.gif Content-Location: http://l-stat.livejournal.com/stc/horizon/toplevel-bg.gif Content-Transfer-Encoding: Base64 R0lGODlhAQABAIAAAMvk/QAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw== ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=default.css Content-Type: text/css; name=default.css Content-Location: http://l-stat.livejournal.com/??lj_base.css,esn.css,contextualhover.css,ups.css,lj_base-app.css,ad_base.css,horizon/screen.css,horizon/layout.css,widget.css,horizon/horizontal.css?v=1236810940 Content-Transfer-Encoding: 8bit iframe.lj_embedcontent { border: 0; } form { margin: 0px; padding: 0px; } .ljclear { clear: both; margin: 0 -1px -1px 0; border: 0; padding: 0; width: 1px; height: 1px; font-size: 0; line-height: 0; } .nowrap { white-space: nowrap; } .lj_progresscontainer { height: 25px; width: 400px; margin: 1em; background: url(/img/progress/inactive.gif) repeat; } .lj_progressoverlay { background: url(/img/progress/active.gif) repeat; } .lj_progressindefinite { background-image: url(/img/progress/barber.gif); } .lj_hourglass { z-index: 20000; } .ErrorNote .Inner { background-color: #FFEEEE; background-repeat: repeat-x; border: 1px solid #FF9999; padding: 8px; } .Note .Inner { background: #FFFFDD; border: 1px solid #FFCC33; padding: 8px; } div.lj_ippu { background-color: #fff; border: 2px solid #444; padding: 2px; } div.lj_ippu_titlebar { background-color: #444; height: 20px; font-weight: bold; color: #fff; width: auto !important; padding: 5px 0 0 5px; } div.lj_ippu_titlebar div { } .lj_ippu_titlebar img { opacity: .25; } .lj_ippu_titlebar img:hover { opacity: 1; } .LJ_Placeholder_Container { /* see also lj_base-ie.css */ display: table-cell; vertical-align: middle; border: 1px dashed #ccc; _position: relative; overflow: hidden; } .LJ_Placeholder_Container img { /* see also lj_base-ie.css */ cursor: pointer; display: block; margin: 0 auto; _position: absolute; _top: 45%; _left: 45%; } .ljhidden { display: block; position: absolute; left: 0; top: 0; width: 0; height: 0; margin: 0; border: 0; padding: 0; font-size: 0.1px; line-height: 0; opacity: 0; filter: alpha(opacity=0); } .lj_pollanswer { } .lj_pollanswer_loading { color: #CCC; border: 1px solid #EEE; } .super { vertical-align: super; font-size: .7em; } .notice { color: #f00; } .ljedittime { font-size: smaller; } .warning-background { background-image: url('/img/message-warning.gif'); } .lj_invisible { display:-moz-inline-box; display:inline-block; line-height:0; width:0; height:0; padding:0; border:0 none transparent; margin:0; overflow:hidden; text-decoration:none; } /* Link to current LJ.com version ------------------------------------ */ DL.current-version { margin: 10px 0; padding: 0; border: 0; text-align: left; } DL.current-version DT, DL.current-version DD { display: inline; margin: 0; padding: 0 3px 0 0; text-align: left; white-space: nowrap; font-size: 11px !important; font-weight: normal; } /*---------- Manage Settings ----------*/ /*-------------------------------------*/ #manageSettings { } .Subscribe { width: 100%; padding: 0; margin: .5em 0 0 0; clear: both; } .Subscribe tr.Inactive { color: #aaa; } .Subscribe tr.Disabled { background-color: #eee; } .Subscribe tr.altrow { background-color: #f1f1f1; } .Subscribe tr.Inactive a { color: #aaa; } .Subscribe td { padding: .3em; } .Subscribe td img { border: 0; } .Subscribe td label { cursor: pointer !important; } .Subscribe td p { color: #666; background: #fff; cursor: default !important; } .CategoryRow .Caption { text-align: right; vertical-align: bottom; } .CategoryRow { width: 100%; } .CategoryRow td { vertical-align: middle; border-bottom: 1px solid #ddd; padding: 2em .4em .2em .4em; } .CategoryRowFirst td { padding-top: .2em; } .CategoryRow .caption { text-align: right; } .CategoryRow label { } .CategoryHeading { font-weight: bold; } .CategoryHeadingNote { } #Subscriptions { width: 100%; } #Subscriptions th { text-align: left; } #Subscriptions td, #Subscriptions th { padding-left: .5em; padding-right: .5em; } #Subscriptions tr.lighter { background-color: #cff; } #Subscriptions tr.darker { background-color: #9cc; } div.argOptsContainer { display: none; } #SubscribeSaveButtons { text-align: center; border: 1px solid #333; width: 150px; margin-left: auto; margin-right: auto; } #SubscribeSaveButtons input { margin: 5px; } #SubscriptionInfo { width: 95%; text-align: center; margin: 1em auto; } #SubscriptionInfo p, #SubscriptionInfo div { font-size: 1em; margin: 0; padding: .2em; } /*----------- Message Center ----------*/ /*-------------------------------------*/ .NotificationTable { width: 100%; } .NotificationTable tr.Selected { background-color: #cee0fb; } .NotificationTable tr.Selected td { border-top: 1px solid #ccc; } .NotificationTable td { border-top: 1px solid #ddd; } #NotificationSidebar { } #NotificationSidebar p { margin: 0; padding: 0; } #NotificationSidebar .Blurb { margin: 0 0 1em 0; padding: 0; } #NotificationSidebar .BlurbTitle { font-weight: bold; margin: 0 0 .4em 0; } #NotificationSidebar .ljad { float: left; margin-right: 1em; } .esnlinks { float: right; display: block; margin: 0 0 0 0; font-weight: normal; } .NotificationTable .inbox { padding: 0; margin: 0em 0 0em 0; border-top: 1px solid #ddd; } .inbox .header { width: 100%; margin: 0; background: #ddd; vertical-align: middle; border: 0; padding: 3px; } .actions { font-size: 0.9em; } span.Pages { float: right; } span.Pages input { } .inbox tr { cursor: pointer; } .inbox_newitems { font-weight: bold; overflow: hidden; } .InboxItem_Controls { float: left; width: 40px; } .InboxItem_Unread { font-weight: bold; } .InboxItem_Read { color: #888; } span.InboxItem_Read:hover { color: #000; } span.InboxItem_Read a { color: #999 !important; } span.InboxItem_Read:hover a { color: inherit !important; } .InboxItem_Meta { } .InboxItem_Meta td { padding: 0 0 0 0; } .inbox .alt { background: #f6f6f6; } .inbox .alt td { } .inbox .checkbox { width: 1%; padding: .1em; vertical-align: top; } .inbox td.NoItems { font-size: 3em; text-align: center; padding: 1em; color: #ddd; cursor: default !important; } .inbox td.item { padding: .3em 0 .2em .4em !important; vertical-align: middle; } .InboxItem_Content { padding: .5em 0 .2em 0; width: 95%; } .inbox td.time { width: 8.5em; font-size: .8em; color: #555; vertical-align: top; padding-top: .4em; } .inbox .JournalNewComment { } .inbox .Subject { font-weight: bold; } .inbox .ManageButtons { float: right; width: 104px; position: relative; top: 4px; margin: 0 0 .5em 0; } .inbox .Body { } .NotificationTable tr.Selected .Body { } /* folder links */ .folders a { white-space: nowrap; text-decoration: none; color: #000; display: block; margin: 0px; padding: 0px 0px 1px 2px; border: 1px solid #fff; } .folders a.subs { padding-left: 1em; } .folders .subs { padding-left: 1em; } .folders a.subsubs { padding-left: 2em; } .folders a:visited, .folders a:link { color: #000; } .folders a:hover { border: 1px solid #bbb; background-color: #eee; } /**** ESN AJAX ****/ .ippu { color: #000000 } .ippu .track_title { font-weight: bold; color: #CC6644; margin: 4px; } .ippu .track_btncontainer { margin-top: 5px; padding: 1px; width: 250px; } .ippu .track_moreopts { margin: auto auto auto 1em; width: 49%; } .ippu .track_savechanges { margin: auto auto auto auto; width: 49%; } #compose label { font-weight: bold; } div.ContextualPopup { position: relative; margin: 5px 0 0 20px; font: normal 11px "Arial", "Verdana", sans-serif !important; text-align: left; } * html div.ContextualPopup { background: none !important; } div.ContextualPopup img { border: 0; } div.ContextualPopup div.Inner { position: relative; top: -2px; left: -2px; background-color: #fff !important; color: #000 !important; border: 1px solid #036; padding: 0px; width: 20em; } * html div.ContextualPopup div.Inner { top: 0px; left: 0px; } div.ContextualPopup .Content { padding: 2px 4px 6px 4px; margin-right: 50px; line-height: 1.4; } div.ContextualPopup .Relation { font-weight: bold !important; } div.ContextualPopup .Content .OnlineStatus { font-weight: bold; } div.ContextualPopup .Content .GizmoBlurb { font-size: smaller; } div.ContextualPopup .Userpic { float: right; top: 0; right: 0px; padding: 4px 4px 0 0; } * html div.ContextualPopup .Userpic { top: 2px; } div.ContextualPopup .Userpic img { margin: 0 auto; max-width: 50px; width:expression(this.width > 50 ? "50px" : this.width); /*IE Max-width */ height: auto; vertical-align: middle; } div.ContextualPopup div.Inner a, div.ContextualPopup div.Inner a:visited { text-decoration: underline !important; font-weight: bold; color: #00C !important; } div.ups_status { color: #333; font-size: larger; font-weight: bold; text-align: center; } .ups_table { display: table; width: 100%; _width: 97%; padding: 0; margin: 0; } td.ups_cell { padding: 5px; border: 1px solid #fff; cursor: pointer !important; color: #000; } .ups_row1 { background-color: #fff; } .ups_row2 { background-color: #efefef; } .ups_selected_cell { background-color: #999 !important; color: #000; border: 1px solid #454545 !important; } div.ups_search { padding: 5px; background: #ccc; color: #000; border-top: 1px solid #fff; border-bottom: 1px solid #fff; height: 20px; vertical-align: top; } .ups_selected { border-top: 1px solid #777 !important; border-left: 1px solid #777 !important; border-right: 1px solid #444 !important; border-bottom: 1px solid #444 !important; } img.ups_upic { display: block; padding: 3px; border-top: 1px solid #eee; border-left: 1px solid #eee; border-right: 1px solid #aaa; border-bottom: 1px solid #aaa; background: #fff; color: #000; } div.ups_userpics { overflow: auto; height: 353px; margin: 0; padding: 0; } div.ups_container { float: left; margin: 0 5px 0 0; } div.ups_closebuttonarea { background: #ccc; color: #000; padding: 5px; border-top: 1px solid #fff; height: 20px; position: relative; } div.ups_closebuttonarea input { vertical-align: top; } span#ups_scaling_buttons { display: block; position: absolute; right: 5px; top: 2px; } #ups_scaling_buttons img { margin: 0 0 0 2px; padding: 2px; border: 1px solid #ccc; } img.ups_scalebtn_selected { border: 1px solid #666 !important; } /* This is utility css that can be used anywhere in the app It should be included on all app pages in all schemes */ /* .pkg class wraps enclosing block element around inner floated elements */ .pkg:after { content: " "; display: block; visibility: hidden; clear: both; height: 0.1px; font-size: 0.1em; line-height: 0; } .pkg { display: inline-block; } /* no ie mac \*/ * html .pkg { height: 1%; } .pkg[class] { height: auto; } .pkg { display: block; } /* */ /* form styles */ label.left { display: block; float: left; } input.text, textarea.text, select.select { margin: 0px 3px 0px 0px; padding: 2px 2px; background: #fff url(/img/input-bg.gif) repeat-x 0 -1px; border: 1px solid #bbb; border-top: 1px solid #999; border-left: 1px solid #999; } select.select { padding: 1px; } fieldset.nostyle { border: none; margin: 0; padding: 0; } input.create-account { font-size: 110%; color: #fff; margin: 0; background: #559A40; border: 2px solid #76AE65; border-bottom: 2px solid #447C33; border-right: 2px solid #447C33; } .detail { font-size: 90%; color: #444; } p.detail { margin: 0 0 10px 0; padding: 0; } h2.widget-header { margin: 0 0 6px 0; padding: 0 0 6px 0; border-bottom: 1px solid #ccc; } ul.detail li { font-size: 90%; } hr.hr { border: 0; width: 100%; color: #8FC3F7; background-color: #8FC3F7; height: 1px; } /* generic class for removing styling from ul */ ul.nostyle { list-style: none; margin: 0; padding: 0; } /* tables where rows alternate colors */ table.alternating-rows th { text-align: left; border-top: 1px solid #8FC3F7; border-bottom: 1px solid #8FC3F7; background-color: #C5DFF9; padding: 6px 4px; } table.alternating-rows tr.altrow1 { background-color: #fff; } table.alternating-rows tr.altrow2 { background-color: #eee; } table.alternating-rows td { padding: 6px 4px; border-bottom: 1px solid #ccc; text-align: left; } /* columns for content layouts */ div.columns-2 .columns-2-left { float: left; width: 49%; } div.columns-2 .columns-2-right { float: right; width: 49%; } div.columns-2-r300 { width: 720px; } div.columns-2-r300 .columns-2-left { float: left; width: 405px; margin-right: 15px; } div.columns-2-r300 .columns-2-right { float: left; width: 300px; } /* default margin for widgets */ .appwidget { margin-bottom: 15px; position: relative; } .appwidget .more-link { position: absolute; right: 7px; top: 6px; font-size: 11px; text-decoration: none; padding-left: 10px; text-transform: lowercase; color: #114577 !important; background: url('/img/arrow-double-blue.gif') no-repeat 0 60%; } *HTML .appwidget .more-link { right: 27px; } .appwidget .more-link:hover { text-decoration: underline; } /* add this class to anything to make upgrade icon appear next to it */ .upgrade-account { padding-right: 18px; background: url('/horizon/upgrade-paid-icon.gif') no-repeat right 50%; } .arrow-link, .more-link { padding-left: 12px; background: url('/img/arrow-double-black.gif') no-repeat 0 50%; } /* Used to encapsualte message forms like Invite and Tell a Friend */ .message { border: 5px solid #eee; margin-bottom: 15px; } .message blockquote { margin: 0; border: 1px solid #aaa; padding: 15px; } .standout-border { border: 1px solid #8fc3f7; padding: 6px; } .standout-background { background-color: #c5dff9; } /* Sidebars floated to the right */ div.right-sidebar { float: right; width: 300px; color: #000000; background-color: #c5dff9; border: 1px solid #8fc3f7; margin: 10px; padding: 10px; } div.ad-sidebar { width: 300px; float: right; } .textbutton { color: #0000CC; cursor: pointer; } /* Solid background headings */ h2.solid-neutral { font-size: 14px; font-family: Arial; font-weight: bold; background: #ededed url(/img/corner.gif) no-repeat 0 0; margin: 0 0 8px 0; padding: 5px 8px; color: #222; } h2.solid-blue { position: relative; font-size: 14px; font-family: Arial; font-weight: bold; background: #d7e7f7 url(/img/corner.gif) no-repeat 0 0; margin: 0 0 8px 0; padding: 5px 8px; color: #222; } .solid-neutral { background: #ededed; } input.bright { background: url(/img/yellow_gradient.gif) repeat; border: 1px solid #b48101; color: #1f3368; font-weight: bold; } .helper { font-size: 0.8em; color: #666; } .rounded-box { background: no-repeat; zoom: 1; } .rounded-box .rounded-box-tr { background: 100% 0 no-repeat; } .rounded-box .rounded-box-bl { background: 0 100% no-repeat; } .rounded-box .rounded-box-br { background: 100% 100% no-repeat; padding: 2px; /* border width */ } .rounded-box .rounded-box-content { padding: 10px; } .ljad h4 { text-align: left; font-size: 10px; font-weight: normal; text-transform: uppercase; color: #444; margin: 0; } .ljad a { font-size: 10px; border: 0; } .ljad img { border: 0; } .ljadskyscraper { width: 160px; } .ljadleaderboard, .ljadleaderboard-top, .ljadleaderboard-bottom { width: 728px; margin-left: auto; margin-right: auto; } .ljadsmrect { width: 185px; } .ljadmedrect { width: 300px; } .ljad5linkunit { width: 728px; margin-left: auto; margin-right: auto; } .ljadbadge { width: 160px; margin-bottom: 15px; } .ljadentrybox { width: 468px; } /* Styling for search ads */ .lj_inactive_ad { display: none; } .lj_content_ad { border: 1px solid #FFD63F; width: 580px; overflow: hidden; text-decoration: none; font-size: 12px; padding: 5px; padding-bottom: 0; } .lj_content_ad .ad_header { font-weight: bold; } .lj_content_ad .ad_text, .lj_content_ad .ad_url { font-size: 11px; } /* Avertising for sup's user ----------------------------- */ .adv { position: relative; overflow: hidden; zoom:1; min-width: 400px; clear: both; background: #fff; border: 1px solid #808080; padding: 12px; text-align: left !important; } .adv-box { overflow: hidden; height: 250px; width: 100%; min-width: 400px; } * HTML .adv-box { width:expression(parentNode.clientWidth < 530 ? "400px" : "100%");} /* HTML .adv-box { width:expression(document.documentElement.clientWidth < 793 ? "400px" : "100%");} * HTML #adv_digitalmult .adv-box { width:expression(document.documentElement.clientWidth < 944 ? "300px" : "100%");} */ /* Banner */ .adv-box-banner { float: left; width: 313px; height: 250px; text-align: left; } /*text banner*/ .adv-box-text { float: left; overflow: visible; width: 100%; min-width: 530px; margin-right: -313px; padding-top: 30px; } .adv-box-text-in { margin-right: 313px; } .body-adv-box { zoom:1; } /* min-width for ie6 */ * HTML .mw { overflow:hidden; width:530px; height:0; font-size: 0; line-height: 0; } /* Advertising header ------------------------------*/ H3.h-adv-box { padding: 3px 7px 5px 7px !important; margin: 0 !important; border: 0 !important; background: #a92242 !important; text-transform: uppercase; font: 10px/1 Verdana, Arial, sans-serif; color: #FFF; } H3.h-adv-box A { border: 0 !important; text-decoration: none !important; font: 10px/1 Verdana, Arial, sans-serif !important; color: #FFF !important; background: none !important; } H3.h-adv-box A:hover { border: 0 !important; text-decoration: underline !important; color: #FFF !important; } .adv H3.h-adv-box { position: absolute; right: -1px; top: 12px; float: right; z-index: 100; border: 0 !important; }/* Define text color and typography */ html, body { height: 100%; } body { color: #000000; background-color: #fff; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; margin: 0; padding: 0; min-width: 840px; width: 100%; } a:link { color: #00C; background-color: transparent; } a:visited { color: #306; background-color: transparent; } a:active { color: #F60; background-color: transparent; } h1 { font-family: Arial, Verdana, Helvetica, sans-serif; font-weight: bold; color: #036; background-color: transparent; margin: 0 0 0.4em 0; padding: 0; } h1 a { font-weight: normal; } h2 { font-weight: normal; color: #036; margin: 0.3em 0 0.1em 0; padding: 0; } h3 { color: #024; background-color: transparent; font-style: italic; margin: 0.2em 0 0.2em 0; padding: 0; } p { margin: 0.75em 0; } body, dd, dt, th, td, p, div, li, pre, code, kbd { font-size: small; } h3 { font-size: medium; } h2 { font-size: large; } h1 { font-size: x-large; } li { margin-left: 0px; } h1.title { font-family: Arial, Verdana, Helvetica, sans-serif; } #NavigationWelcomeLogo { position: relative; top: 0; left: 0; font-size: 0.8em; color: #444; height: 6.11em; margin: 0; padding: 0; } #NavigationWelcomeLogo a { color: #444; font-weight: 700; } #Content pre { line-height: 1em; } /* Utility CSS */ .clear { clear: both; margin: 0 -1px -1px 0; border: 0; padding: 0; width: 1px; height: 1px; font-size: 0; line-height: 0%; } .hide { display: none; } hr { border: 0; width: 100%; color: #369; background-color: #369; height: 2px; } table.edged { border: 2px solid #c5dff9; } table.edged td { border: 1px solid #8fc3f7;; } .standout { text-align: center; } .standout .container { color: #000; background-color: #c5dff9 !important; border: 1px solid #8fc3f7; padding: 3px; /* margin shorthand isn't recognized by IE5/Mac */ margin-top: auto; margin-bottom: auto; margin-left: auto; margin-right: auto; width: auto; text-align: left; } .standout span.container { padding: 8px 7px !important; display: inline-block; } .errorbar { color: #000; font: 12px Verdana, Arial, Sans-Serif; background-color: #FFEEEE; background-repeat: repeat-x; border: 1px solid #FF9999; padding: 8px; margin-top: auto; margin-bottom: 5px; margin-left: auto; margin-right: auto; width: auto; text-align: left; } .warningbar { color: #000; font: 12px Verdana, Arial, Sans-Serif; background-color: #FFFFDD; background-repeat: repeat-x; border: 1px solid #FFCC33; padding: 8px; margin-top: auto; margin-bottom: 5px; margin-left: auto; margin-right: auto; width: auto; text-align: left; } .de { color: #909090; background-color: #ffffff; } /* layout */ .talk-comment { margin-top: 1em; margin-bottom: 0px; } #commenttext { width: 100%; } /* Form Items */ .formitem { color: #343434; font-size: 1em; } .formnumber { font-weight: bold; margin-top: 1.8em; font-size: .9em; } .formitemName { font-weight: bold; font-size: .9em; margin-top: 1.8em; } .formitemDesc { margin-top: .4em; margin-bottom: .4em; color: #505050; } .formitemNote { color: #da6320; font-size: .9em; margin-top: .4em; margin-bottom: .4em; } .formitemFlag { color: #CE0000; font-size: .9em; margin-top: .4em; margin-bottom: .4em; } .borderedtable { border: solid 1px black; } /* the top of the borderedtable, use th tags for header columns */ .borderedtable th { background-color: #dddddd; border-bottom: solid 1px black; padding-left: 10px; padding-right: 10px; white-space: nowrap; } .userslist-table { border: 1px solid #ddd; } .userslist-table TH { background: #ddd; padding: 2px 10px; white-space: nowrap; text-align:left; } .userslist-table TD { padding: 3px 10px; } /* Extended.css */ .hide { display: none; } div.centered { text-align: center; width: 100%; } .lesstop { margin-top: 2px; } .de { color: #909090; background-color: #ffffff; } #ljbreadcrumbs { text-align: left; white-space: nowrap; font: 11px Arial, Geneva, Helvetica, sans-serif; margin-left: 0; margin-bottom: 1em; } /* layout */ #content pre { line-height: 1.1em; font-size: 1.1em; } #Comments q { font-style: italic; } div.transparentpng { display: none; margin: 0; padding: 0; } img.transparentpng { border: 0; } /* Ad wrapper styles (for ads printed in BML directly) */ .ljadwrapper-app-full-width { margin-bottom: 1em; text-align: center; width: 100%; } .ljadwrapper-app-info-1column, .ljadwrapper-app-func-1column, .ljadwrapper-app-confirm, .ljadwrapper-app-home-login, .ljadwrapper-app-schools, .ljadwrapper-search, .ljadwrapper-journal-indiv-entry, .ljadwrapper-journal-skyscraper, .ljadwrapper-app-search-skyscraper { float: right; margin-left: 2em; margin-bottom: 1em; display: table-cell; } .ljadwrapper-app-func-2column, .ljadwrapper-app-info-2column, .ljadwrapper-journal-userinfo { margin-top: 2em; text-align: center; width: 100%; } div.copyrighted { font-size: smaller; padding-bottom: 10px; } /* define general layout styles shared by Horizon and Vertigo */ #content { position: relative; top: 110px; margin: 0; margin-bottom: 120px; padding: 0 25px 20px 25px; text-align: left; } * html #content { width: 92%; } #big-content-wrapper { min-height: 100%; height: auto !important; height: 100%; margin: 0 auto -165px; /* the bottom margin is the negative value of the footer's height */ } #Userpic { position: absolute; top: 0; left: 0; z-index: 101; width: 100px; height: 100px; background: url("/stc/horizon/topbar-bg.png") repeat-x #cbe4fd; /* gradient */ } #defaultpic { width: 100px; height: 100px; background-color: transparent; background-position: center center; background-repeat: no-repeat; } #Userpic img { display: block; vertical-align: middle; border: 0; } #NoUserpic { background-image: url("/stc/horizon/nouserpic-bg.png"); background-repeat: repeat-y; height: 100%; margin: 0; padding: 0; vertical-align: baseline; } #NoUserpic a span { position: absolute; top: 80px; left: 0px; font-size: .8em; text-decoration: none; color: #036; cursor: pointer; display: block; width: 100px; text-align: center; margin: 0; padding: 0; } #welcome { color: #369; } #WelcomeLinks, #WelcomeLinks a { line-height: 1em; display: inline; font-size: 11px; } #WelcomeLinks a, #WelcomeViewLinks a { text-decoration: none; } #WelcomeLinks a:hover, #WelcomeViewLinks a:hover { text-decoration: underline; } #WelcomeLinks img { position: relative; top: 3px; } #WelcomeViewLinks { padding-top: 3px; width: 500px; } #WelcomeViewLinks li { font-size: 11px; } #WelcomeViewLinks li a { padding: 5px 0; line-height: 17px; } #Feedback { position: absolute; top: 0; right: 26em; margin: 0; padding: 0; } #Feedback img { margin: 0; padding: 0; border: 0; } .view { display: inline; list-style: none; margin: 5px 0 0 0; padding: 0; } .view li { display: inline; } #Logo { position: absolute; top: 0px; right: 5px; padding: 0; z-index: 200; font-size: 1.1em !important; } #Logo img { border: 0px; } #Logo .transparentpng { margin-bottom: .5em; border: 0; } #LogoActions { padding: 0; margin: 0; text-align: right; width: 99%; height: 1.4em; background-color: #dfedfa; color: #336699; border: 1px solid #69c; -moz-border-radius: .3em; /* Mozilla users get the cool rounded border */ border-radius: .3em; /* Any other compliant browser is free to show it to */ } .Actions { list-style-type: none; margin: 0; padding: 0; } .Actions li { float: left; display: inline; width: 22%; text-align: center; white-space: nowrap; } .Actions a { text-decoration: none; margin: 0; width: 100%; text-transform: uppercase; font-weight: bolder; color: #369 !important; } #navigation { position: absolute; top: 0; left: 0; width: 100%; min-width: 760px; min-height: 100px; height: 100px; background: #cbe4fd url("/stc/horizon/topbar-bg.png") repeat-x 0 0; font-family: Arial, Verdana, Helvetica, sans-serif; margin: 0; padding: 0; z-index: 10; } #NavBar { position: absolute; bottom: 0; left: 0; width: 100%; background: #3e5a8b; } #NavMenu { display: block; position: relative; margin: 0 0 0 100px; padding: 0; border: 0; /* font-size: 0.8em; */ list-style-type: none; color: #fff; width: auto; } * html #NavMenu { width: 100%; margin: 0; left: 100px; } /* Needed for Safari to keep hover color correct */ #NavMenu li:hover > a { color: #114577; background: #CBE4FD; } .NavMenuSubNav ul { list-style-type: none; margin: 0; padding: 0; } /* Hack to display elements above windowed controls like Flash objects */ .NavMenuSubNavBack { position: absolute; background: transparent; z-index: -1; width: 100%; height: 100%; height: expression(this.parentNode.clientHeight); } .NavMenuItem { color: #fff; cursor: pointer; margin: 0; padding: 0; white-space: nowrap; width: auto; float: left; display: inline; z-index: 95; padding: .5em .6em; } .NavMenuItem a, .NavMenuItem a:visited { color: #fff; font-weight: bold; text-decoration: none; display: block; } * html .NavMenuItem li a { display: inline-block; } /* Stupid IE6 hack to fix nav menu padding */ * html .NavMenuItem li a { display: block; } /* End stupid IE6 hack */ .NavMenuItem:hover { color: #114577; background-color: #CBE4FD; background-image: url("/stc/horizon/toplevel-bg.gif"); } .NavMenuItem a:hover, #Alpha { background-color: #CBE4FD !important; background-image: url("/stc/horizon/toplevel-bg.gif"); color: #114577; } #Alpha { color: #114577; } /* Opera hack to hide anything using this class */ @media all and (min-width: 0px){ .NavMenuSubNavBack{ display: none; }} #welcome { position: absolute; top: 0; left: 100px; width: 30em; margin: 0; padding: 12px 0 0 10px; } #welcome a { text-decoration: none; color: #114577 !important; } #welcome h2 { display: inline; font-size: 1.75em; margin: 0 5px 0 0; padding: 0; } #welcome .ljuser img { vertical-align: baseline !important; margin-bottom: -1px; } #welcome .ljuser b { font-weight: normal !important; } #NavMenuSearch { display: block; right: 0; top: 0; position: absolute; margin: 2px 15px 0 0; /* width: 40%; text-align: right; */ } * html #NavMenuSearch { right: 100px; } #NavMenuSearch form { padding: 3px 0px 0px 2px; line-height: 17px; } #NavMenuSearch input, #NavMenuSearch select { margin-right: 0px; font: normal 11px arial, helvetica, sans-serif; } /* #NavMenuSearch input#SearchText { width: 70%; } */ #footer, .push { height: 165px; } #footer { background-color: #fff; border-top: 1px solid #CBE4FD; padding-top: 2px; margin: 0 15px; } #footer-links { border-top: 1px solid #CBE4FD; border-bottom: 1px solid #CBE4FD; text-align: center; padding: 0px 10px 15px 10px; } /*#footer-links-inner { width: 760px; margin-right: auto; margin-left: auto; }*/ #footer-links ul { list-style: none; margin: 0; padding: 0; /*width: 100px;*/ } #footer-links table { margin:0 auto; border-collapse: collapse; border: 0; } #footer-links table TD { padding:10px 50px 0px 0; text-align: left; vertical-align: top; } #footer-links table TD.last { padding-right: 0px; } /*#footer-links-inner ul#footer-links-col5 { width: 150px; } */ #footer-links ul li { font-size: 11px; text-align: left; padding: 0; white-space:nowrap; } #footer-links table td H3 { font-size: 12px; color: #333; font-weight: bold; padding: 3px 0; font-style: normal; margin-top: 0; white-space:nowrap; } #footer-links table td H3#footer-links-getinvolved { padding-top: 8px; } #footer-links ul li#footer-links-getinvolved { padding-top: 8px; } #footer-links ul#footer-links-col6 li { font-size: 10px; white-space: nowrap; } #footer-links ul#footer-links-col6 select { font-size: 11px; } #footer-links a { color: #036; text-decoration: none; } #footer-links a:hover { text-decoration: underline; } #footer-links P.more_lj { font-size: 11px; font-weight: bold; text-align: left; padding:1px 0px 0px 0px; margin: 0; } #footer-copyright { font-size: 11px; text-align: center; margin-top: 5px; padding-bottom: 5px; } /* Search Form Style Goes Here -------------------------------------- */ /* Search Results -------------------------------------- */ .search-result-wrap { font-family: Arial, sans-serif; } .search-result { float:left; width:100%; margin-right:-100%; } .search-result-in { color: #333; } .search-result-in A { color: #3333D6; } .search-result-aside { float: right; width: 250px; margin-top: 90px; } .pages-list { margin-bottom: 15px; border-bottom: 3px solid #3E5A8B; } .pages-list:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .pages-list LI { float: left; line-height: 1.2em; width: 18% !important; margin-bottom: -3px; padding: 0; background: #69c; text-align: center; color: #fff; border-bottom: 3px solid #3E5A8B; white-space: nowrap; overflow: hidden; } .pages-list LI.profiles { width: 28% !important; } .pages-list LI A { display: block; padding: 5px; color: #fff; border-right: 2px solid #fff; } .pages-list LI A:visited { color: #fff; } .pages-list LI STRONG { display: block; padding: 5px; border-right: 2px solid #fff; } .pages-list .cur, .pages-list .cur-last { padding: 0; background: #3e5a8b; border-bottom: 3px solid #3E5A8B; } .pages-list .last, .pages-list .cur-pre { margin-right: 0; background: #69c; } .pages-list .last A, .pages-list .last STRONG, .pages-list .cur-last STRONG { border-right: none; white-space: nowrap; } .search-result H1 { margin: 0 0 0.4em 0; padding: 0; font: bold normal x-large Arial, sans-serif !important; color: #036; } /* Paging -------------------------------------- */ .paging DD UL UL A, .paging DD UL UL SPAN, .paging DD UL UL STRONG { float:left; padding:.1em .4em .1em; text-decoration: none; } .paging DD UL UL A, .paging DD UL UL STRONG { border:solid 1px #CCC; line-height:1; color:#404040; } .paging DD UL UL A:hover { background:#CCC; } .paging DD UL UL STRONG { background:#829DBF; border-color:#829DBF; color:#FFF; } .tagged-list { margin-left:40px; position:relative; padding-bottom:2em; } .tagged-list DT .ljuser .userpic { position:absolute; top:0; right:100%; margin-right:12px; width:25px; height:25px; overflow:hidden; } .tagged-list DT .search-meta { font-size: 0.846em; } .tagged-list DT .search-meta A { font-size: 1em; } .tagged-list .loading .to-open, .tagged-list .open .to-open, .tagged-list .close .to-close { display:none; } .tagged-list .load { display:none; } .tagged-list .loading .load { display:block; } .tagged-list .search-full { display:none; } .tagged-list .open .search-full { display:block; } .tagged-list .search-excerpt { display:none; } .tagged-list .close .search-excerpt { display:block; } .tagged-list BLOCKQUOTE { line-height:1.3; font-size: 1.077em; } .tagged-list BLOCKQUOTE P { margin-bottom:1em; } .tagged-list BLOCKQUOTE B { color:#000; } .tagged-list .details { position:absolute; top:0; left:-29px; width:16px; height:16px; cursor:pointer; overflow:hidden; text-indent:-9999px; } .tagged-list .to-close { background:#AAA url(/lanzelot/img/ico/minus.gif) 50% 50% no-repeat; } .tagged-list .to-open { background:#AAA url(/lanzelot/img/ico/plus.gif) 50% 50% no-repeat; } .tagged-list .open .search-full { border-left:3px double #88B9D8; padding-left:4px; margin-right:-7px; left:-7px; position:relative; } .search-result-extra .ico IMG, .tagged-list .ico IMG { border:none; vertical-align: text-bottom; } .search-result-extra .ljuser, .tagged-list .ljuser { white-space:nowrap; word-spacing:-.1em; margin-right:.1em; } .search-result-extra .header { background: none; padding: 0; margin: 0; font-size:0.769em; border-bottom: 1px solid #959595; color:#959595; text-transform: uppercase; font-style:normal; font-weight:normal; } .search-result-extra A { color: #3333D6; } .search-result-extra .content { background: none; padding: 0; } .search-result-extra .content:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .search-result-extra .content .user-list { margin: 0; } .search-result-extra .user-list .vcard { padding: 0; } .search-result-extra P A { font-size: 0.923em; } /* FAQ Search */ .faq-list { margin-left:0; } .faq-list P BIG { font-weight:normal; } .faq-list P BIG B { font-style:italic; } .faq-list P SMALL A:link, .faq-list P SMALL A:visited { font-size: 1.073em; } /* FOR IE7 */ .search-type, .pages-list, .search-precise, .paging { zoom: 1; } /* Fix jumping floats in tabs */ *+html .pages-list .last, *+html .pages-list .cur-last { margin-right: -2px; } *+html .pages-list LI A { overflow: hidden; } *+html .tagged-list LI { zoom:1; } .basic .search-submit BUTTON { top:0; } .indent_sm { margin-left: 8px; } .friendsfinder { font-family: Verdana, arial, sans-serif !important; } .friendsfinder .rounded-box-content{ padding: 30px 25px 40px 25px; } .scheme-feedback { position: absolute; top: 9px; right: 25px; } .scheme-feedback a { padding-left: 35px; background: url(/img/beta.gif) no-repeat 0 50%; } .Actions a { font-size: .9em; } .NavMenuSubNav { position: absolute; display: none; list-style: none; padding: 0; margin: 6.5px 0 0 -7px; background: #CBE4FD; color: #114577; width: 15em; z-index: 200; } html>body .NavMenuSubNav { border-top: none; } .NavMenuSubNav li { margin: 0; background: #CBE4FD; } .NavMenuSubNav li.disabled { background-color: #CBE4FD; } .NavMenuSubNav li.disabled, .NavMenuSubNav li.disabled a:hover { background-image: url(/stc/horizon/upgrade-paid-icon.gif); background-position: 95% 50%; background-repeat: no-repeat; } .NavMenuSubNav li a, .NavMenuSubNav li a:visited { color: #036; font-weight: bold; font-size: .95em; text-decoration: none; padding: 5px 0 5px 5px; } .NavMenuSubNav li.disabled a { color: #999; } .NavMenuSubNav li a:hover { color: #fff !important; background-image: none; font-weight: bold !important; background: #3e5a8b !important; } .NavMenuSubNav li.disabled a:hover { color: #000; } .NavMenuSubNav a, .NavMenuSubNav a:visited { color: #036; font-weight: normal !important; text-decoration: underline; } ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=6268258.gif Content-Type: image/gif; name=6268258.gif Content-Location: http://l-userpic.livejournal.com/78706801/6268258 Content-Transfer-Encoding: Base64 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 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=userinfo.gif Content-Type: image/gif; name=userinfo.gif Content-Location: http://l-stat.livejournal.com/img/userinfo.gif Content-Transfer-Encoding: Base64 R0lGODlhEQARAMQbAAAAAAAAawAIlAAI3ggIYwgI7wgI/wgQxhAQEBAY9xgYUiEh ISkpKTExMTExrTk5zkJCQlJSjFpapXt7e4SEhKWcnM7GvdbOxufezvfv3v+EGAAA AAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAbACwAAAAAEQAR AAAFbOAmjmRpikzKnCVjXVm2shtTWXE8nzae76ZeTkYT/oq3IbCVjF2WJQgsc4HQ UBMMZgItARAUCgIAOC0AAcOAPDAYBIDFaCFwFNzrgWY/OMg3dA9uCRIAERKIEhFl gAwKAQEEDQANlZaMVyYhAAA7 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=community.gif Content-Type: image/gif; name=community.gif Content-Location: http://l-stat.livejournal.com/img/community.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQALMAACcdGFM/N39gUoyGgu4pIf88J+t9M9KHaf/SFP/xBv/KU//N rv/m3//38///7////yH5BAEAAA8ALAAAAAAQABAAAARQ8Mn5jKV4ijEEyNjWfdlR SBwyBNIpEYUxIQkyGQXxwORD26jcQ1DocQSTQYG1oRwpANZjgKFCM5bsBTQteL1I bodABoS5G4KH6+ywq++4JAIAOw== ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=btn_prev.gif Content-Type: image/gif; name=btn_prev.gif Content-Location: http://l-stat.livejournal.com/img/btn_prev.gif Content-Transfer-Encoding: Base64 R0lGODlhFgAUAOYAAMzMzISEhP///7Ozs7Kysrm5uRgnAK+vrzMzM5mZmVaPAA0X ALGxsXZ6cPH36BwuAChDAVGGADNmACdCAGZmZk6BAFhZV+Tv1IiIiHh4eBUkAMbc pomKhg8ZALW1tXd/ajJUAEJEQA4XAFOKADMzAGaZM0Z0ALCwsOXv1tnqwIeHhxYl AJa8XtbgxjBQAAwUARkqAEh3ABstAHl5eVVWVImJib29vfP47Ly8vJK8VG58V2ac Fri4uB4yAE1OTLfUjKqqqkNMNtTmuEx+AM/lrH5/exkdEpnMZoCOax0iFmaZAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABQAAAe1gAKCg4SFhgECAIqLjI2N iI6RkZCSlYqUlgcJA4+JlQQqFDofBYyYjQMYFEUtO0EEpp6MCRk0HDcoRy4IsIuY OAkUFgAOFxssQzIInL6yJ0hEKUI/OSVKEjDLsYsFDRASJhEKCiMSBtrNjB41CAYk EjEVEivol7KLQBQvBhMSIBr1AJziliDEggc9OvDaJonBDCMLRCBgwFCSjQQ+klDg UbHSgAQHOlmyNHCkqQAoU6pcyTJAIAA7 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=memadd.gif Content-Type: image/gif; name=memadd.gif Content-Location: http://l-stat.livejournal.com/img/memadd.gif Content-Transfer-Encoding: Base64 R0lGODlhFgAUANUAAMzMzP///4SEhAAAAEZGRru7u0RERH19fbq6ure3t2ZmZhwA ABoAAKwAAJkAAEJCQmYAAHx8fLW1tRcAAP/m5v/MzE4AABgAABkAAElJSe+3tzMA AMchIdpQUOydnbcHB8hFRU8AAKmpqYcAAMxmZqkAAJmZmbgHB95tbcBJSbUtLYoA ALULC+Genu93d+91daEREdFDQ64SEq4AAN93d68tLR4AAFIAAEwAAMwzMwAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABQAAAbHwIBwSCwaBQEAYDBQOp9Q JVLJjFqdSKa2eYVmt9wuNrkMJyKKAwKAOCgiCSm5yjYEKK+MKHOnGdZTTwl2AR4x HQNCLSkOBgCBTgcVFSQfLCAalA4wIxAHkEoKLignDQ0yKjUOqxAbCqAACjkcMw2r t6sWE69kkbcluKwYE5+9SoMQEMEOEBcMBgmwAAUEN8q3zQwEBY/GTtQWECvMGAvb clfUOBAhDObc6OkEGzbvT9JPCA8LD2v33lEkmJAQRYDBgwgTKjQYBAA7 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=btn_tellfriend.gif Content-Type: image/gif; name=btn_tellfriend.gif Content-Location: http://l-stat.livejournal.com/img/btn_tellfriend.gif Content-Transfer-Encoding: Base64 R0lGODlhFgAUAMIAAP///4SEhMzMzAAAAP8AAMvLywAAAAAAACwAAAAAFgAUAAAD Vwi63B5AyElrhTZnrLvkngaGFjScwqmu7CCAweDMLqfOC0EAdfTJi4AQAtDxXqsY rtGbKIMAIfMVWS0ZzV9rm30Nv2Dhx0cSFCgjzblELqPb7k94Tg8kAAA7 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=btn_track.gif Content-Type: image/gif; name=btn_track.gif Content-Location: http://l-stat.livejournal.com/img/btn_track.gif Content-Transfer-Encoding: Base64 R0lGODlhFgAUAOYAAKChoWtra6+vr8vKyzY2NsnIyaytrFZWVv7+/rOzso6OjnZ2 dmRkZMrKynh4eDs7O2VmZkVFRpiYmFFRUY+PkM3NzX5+fVxdXV9gYGlpaUNCQlVU VJ6fnlNTU1xbW3p5elBRUGxsbYyNjHt7e0tLSkxNTIiHh6ampqOjpKysrG9vbzg4 Nzg3OMfHxzg4OMnJyVFSUkFBQV9eXkRFRGJiYlJTUmxtbLa1touLi4mJiXNyc1lZ WVVUVVdXV4SEhGZmZv///8zMzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABQAAAe0gECCg4IIhIeDPkBBjI1B DQ0VjpNBipRBPxAQDAyXlYuOPz8DBaUFMheUlo0/Ei8tA7EKOCYbk6uNNBgUIgoK OQc1qqCOHjsHyB0glz4IlD03CdIWJMzOkxMC2gYOEdaTPNkG490aw44wAikfC+06 ACEPt8RBJSMnKAD6HAEZK/OTZsRQYSOAQRYEzlF64IKAQ0+4Jv0AEMDTJ08TK0Kk F4qixYiTJFi8OPKjj5MoU6pc6SMQADs= ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=button-flag.gif Content-Type: image/gif; name=button-flag.gif Content-Location: http://l-stat.livejournal.com/img/button-flag.gif Content-Transfer-Encoding: Base64 R0lGODlhFgAUALMAAM7OzoWFhf///+dVBPaODf3IA5GRkdPT0/mvfnl5eQAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABQAAARaUMhJqw0C6M17x14Ygppx iGO2mQQxvAOScslRFK0Lyxu52rgWLNZTbWq3oO7F862SuWHTeLRFd8WQAZX11LgA J2fLFVfL1A5ZZD6iUesZmJ2e9wL4vH7PD0QAADs= ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=btn_next.gif Content-Type: image/gif; name=btn_next.gif Content-Location: http://l-stat.livejournal.com/img/btn_next.gif Content-Transfer-Encoding: Base64 R0lGODlhFgAUAOYAAMzMzISEhP///7Ozs7Kysrm5uRUjALGxsRQiAFJbRZmZma+v r2mjEJnMZoK5LmZmM4y4S5C8UBIdAGaZAJC/SpXET4eHh4iIiE1bOEJDQFFbQmZm ZrW1ta3Mfnl5eVVbTJG+Tqqqqg8YADNmAH6tOG6gJLy8vMzMmVFaQzJTAEtUPImJ ib/ekE2AAAwSAXh4eHWqJoi9OFWOAJLATVdsODMzALnbhIyRhLi4uJmZZlFZRLCw sAwTARYlABYkAL29vYK2NkFKNOn12DRWAImMhRofEk5PTE1RR0+EAB0wADMzM5XG SiQuFkpZM2FnVhMgAIe6OilFAFNcRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABQAAAe5gAKCg4SFhgECAIqLjI2N iI6RkZCSlYqUiwMKC5aXiYsFRDdOFgSWmAAEG0InNB8XA5KoBCg2LA0ND0cvCo6o AxoVSw4UDR05QRsKJou/UjMxExMwJCVIIxg7zZ+KAwkgUNItKQYILhsF24zeEUAy I0kGEkorHIy/OhATUT0IPBshfHFLpYJBDR8iMihIJ5DRgSZDnhTxcKASKhwbmBhR 8OPUQAALFMTqhKrTo48mmwVYybKly5cBAgEAOw== ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=dot.gif Content-Type: image/gif; name=dot.gif Content-Location: http://l-stat.livejournal.com/img/dot.gif Content-Transfer-Encoding: Base64 R0lGODlhAQABAPcAAP+EAP+MCP+MEP+UGP+cIf+cKf+lMf+tQv+tSv+1Uv+1Wv+9 Y//Ga//Ge//OhP/WjP/WlP/enP/npf/nrf/vvf/3xv/3zv//3v////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////yH5BAEAABcALAAAAAABAAEAAAgEAC8EBAA7 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=14948722.jpeg Content-Type: image/jpeg; name=14948722.jpeg Content-Location: http://l-userpic.livejournal.com/79740677/14948722 Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoH BwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQME BAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU FBQUFBQUFBQUFBQUFBT/wAARCABkAGQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9 QKKKK/OjtCs7xD4j0zwlo13q2s39vpml2kZluLy7lWOKJB1LMxAArhfib8Y4fCGs WfhfQbF/Evj3UIDc2egwlk2wbxGbm4kwRBArsAXbk4IRWORXJX3wEuvEOu+GtY+I PjC58T6zBq4vYLLyvI0q3ZBLIkdvagkBlVVHmzNK/wAjEMpbjRQsrsa13NoftKaV 4ktlb4f+HPEHxEecypbXWlWLW+mySJuB/wBOuPLgKbkZS8bScjABOAbdh4u+LWpT O6fDfw5p8QA41LxdIruec4EVjKMDjqQeeldZomraxd+MvEFjdaYIdFtBCLK83ZMz FA0gIJ5wWAHAxg9c8dKrKw+XBHtTbS0sSebXPiP4r2iPM3gPwpOqDJhs/F1w0jey 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 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=6268258.jpeg Content-Type: image/jpeg; name=6268258.jpeg Content-Location: http://l-userpic.livejournal.com/78706977/6268258 Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQH/wAARCABkAGMDASIAAhEBAxEB/8QAHgAAAQQCAwEAAAAA AAAAAAAACAAGBwkEBQIDCgH/xAA3EAACAQMEAgIBAwMCBQMFAAABAgMEBREGBxIh AAgTMSIJFEEVIzJRYRcYM0JxFjWBOENSkdH/xAAdAQABBQEAAwAAAAAAAAAAAAAG BAUHCAkDAQIK/8QAPBEAAgEDAwMCBAMFBAsAAAAAAQIDBAURBhIhABMxByIUQVFh IyQyFRZCcZFSgbHRCDQ1U1VygrLB8PH/2gAMAwEAAhEDEQA/AGX7fe5Xtlpz2z9o 7Bp/2d3+sNg0/wCxO9lksdks+7uvbdarRZ7XuVqahttqtVuo9QRUdDb7fSQQ0lFQ 08UFPS0sMcEMcaRhCNz+8vuYzcv+bH2RVBjAO9e468mweIAGpMnshmAOB+Ib8R3q /duqEXuP7bPI6Kg9md+VY5ChF/4qaqLMT95CgKx7IP8As2SGNy1E7Ew0AZlV2JlH HA45YunI8WJjHRyrcnxgk+Z+3CrvM14uaw3G4hVuNYpPx1UkcaiqkwBiQAEDACj5 Y+XX0faXsWhKbR2kparS2l5JZNM2JyHsFqlnqJWtlGSWLUjs7OSzM5JOfLZJPRpy ++vuLDmOX219jlkGCwXevclyASOzx1GzKACSQx6GAckZOFUe/XuXHhofbD2RkLdd 73bjKo7AJHPUoH1g4AUgn67yAYlq/wBuJauqmAHHmxk7C4HKQgvmVfy4r+PJR/uP NWNUWurhIhnpqkZcIC/BpXj6PE5aN/zYLgoBno/RAURi8N7luV2lVcBytZVlQSBw SJfPn+IHyckdKqmn0HHiKbS2iqOaRWanhmslkSpeNGC5VWomD+5gDtiJG5V5PR8D 9QP3MjDGT2s9klK4yDvbuM+CDhskak5D7H8Efx/53lF76e5NZGJaf2z9i5iMBlXe rcU8WP2SP/UWD/tkBSfoH78rduN/prbTRTVUWKCpdaeYZx8DyHgjZXMiqZD/ANSF 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 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=3581354.png Content-Type: image/png; name=3581354.png Content-Location: http://l-userpic.livejournal.com/39647446/3581354 Content-Transfer-Encoding: Base64 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 AEisAoBlEv2fL699H9ZvfOZZImPII0xZImG9tuVbjio1CVkIIJIJB6A9cO0wjiTw QshTyuVPPmm1av5hZ2Px4EhqPHIaB8AhMQChdBEojVZijIdGChlTT6VzXSeybK/f tRbvLJ8ZX0gj0e3t5vOaNpmJBjCbGZLZtKQc9e1wYAd5VM2OHdzYaNR2C4VSiLXd llXz/YhqCoZBIAnVu3Y3lVI++ZEzuVzl3IWnfvonfyaKRUrToyCMIY+kzGAylJJn F6ZkTLjifOiTn3jl9bUvf/mrKZ2ZFGVVyhDGSIooIDBWCNQVjRIFMYRVwhFXGFWo 4idSCJkxtZ//8p0/F7MuzGGCmcIAwW4Yh70uhogShglllEkeKgrRdFVVCBSR5IT7 /s7q3tjYSGZ0zAdBfXsjbaAaYLWAPXzxzMMffPjJ554oFc1U3lDTlOnELGYfe+rx maNHjh5fuLX8wB30SuW8MTM5cex4aagiAeyEbif2FTOlZzOZaraxUW9tdEZGJ1at znbb2gv9tKZNAWhGgymdFRHUVc0XotfuTha1nue9emsVCJlJwtO51KnxcQSTrKKo SSwisbZTH5kaub+y/fIr1wyCcxpTRMSQoFhgKCDgjFAAEeAAcBknSSwTCQGEKEkE pIypzNDZq/cOv586xHFCKJRcDlzX8UPBDUShhIDHEY9DpCpYVQxCdIxy5XzfQe1O 28yl9u+vpsvlhx95dFnVd2/f90T2Z3/+H09OGW9+5WvfefWdpa0Db+D3Bz2hkiCW heI7+ZRxbH78qRfOqVLABISIXfnaFdxu93rufixDylKYjefomcfm1Qi0E75Zq3tC 4SS+QLVTMhyd0+rKkVEZBgeH232wmijX6+7OwcFsJjWS0YkkJ8qa4/przUMfehMj I8xNSSmqI6ofuqXi0I/+0Ed2NtZqa+vZdIoQBEBMCJKS6Zrp+4E/cIVIeMxVxBAE AnKsqUJIACFA3y13igB4ACiEKAQhEfEgpEJywFzPVVSq6XoSh4IoQFESICWCimEY WAQy/UM/9gPXrly/88r1t3b6J59+PJ8Z/ZFP/9TN1e987he+unlndy+MHIB6IMlk c+mIMAmidlDbtzYWl888PD1/empp+X5rsenY0Ww176tJgmVpeLK2X7es3jzkicAe ofU4SMXyQjbzg2eO+4O78lTyhZf2fuzcyMXh3FPZs33z2D/7V7+5t9U9dVxktWT1 YBDu2jkdzwxVS/oYJEiWaTPon5gfKZdgKJSJ6RkYduorvogAxBoigBAJIOYyQlga mZTgHEaB4JwHkEMJaKKqCgAyCKP3YcUApAAgUA76bSRCFAVKAhBOIIk5l0EgCdMF grEAVFEgJTGQxERDrPrmt/6EakPVk6eXFhdr23sf/pEXr9/9+p984evL97fzLF1T kEzEmWwB291ZU2ZwWBwrDpz0bic8vL47XikgiDs28SFcGchVJzqXzS3wSE2j6xaL eDJcnbcWDzBFM5o/rUeWv0sphAIrPPPaujV/kXI/OHZ+YTotXx3EGhKKmua4O13M p1TeshrrB3VfRkOahkup+u6G6KI4VVlf+ea9W4u6yqCCMYWJ5AAAggREHKBQVbI8 JlQFQRAEEZSC0CigESaIRfF3ZxYGwAIAJCL0AhVJKGQcJpAyhVBIWSQAxMjQFIgQ YwxTKoAEiT/9yNlueLByq35lcWmhWthfW9q4VUQg3N1pBOn8muO6cXSsMJwP9Z/6 gY+m25+nRWaPH/k3Xx2ceiJ3fmPzcGWjMjb8Djp0VL3R9YaKOUpwxx8oMC4rotYI zn0gPXJ9InT2x5lGgoFtWRNDqmEyKK0EDmk5JVxdfuVf/c9xpJqMhUmS4kGVwH7C m51YJXohrSvCZ7pRrdCiKavT8+WhIy998U80FTGGmYKpgqDQqKJJwaMowoRGMSSY ISBVHbAsQwAzqmKMsQS6ZrwHCwUAxAB4ricFIJgAiQzd5BAKBAWSmCFmMqZSTVcI gZJHIImSxG9tbKRVNT9aCR13Y+twZbO1vnnYbLs9RyYOSBJoKGrY6z7+8LmLH/+Q m0mCCrvRs96oJ19Z2YAVLwx8SrFpanEU5Qpq4rsGhFTytM4qDO9t14gSfPT5p7KE qjSOZOhKD+KESgBwpubFB8KNUsTyoyRVAFCGcVTk4bxp5oHMQ/7Y7MSZsnYyBUp6 BImoVqtur/mlL750cHBg6LqmaRxISRBRDYhViFVFTyeAJgCEcYAI1U2DKkjVMcEE Ywwg5N9r/ukAcAAkpTIhghKsSiCxpqkcyJBHRKWIwb7nq4qiKSqCSCaCx3L//vrO pru03T81XNVMw/RcTdedTnvEoL6AD4DUmJaNg2l731r+WpigoBscttq2BbZhAB4y 4bqvUD45mm8tNxQ/OD1SfuGZ00F/b2C18WbS7rsPrt668JH5zc2j1saNHscG0rNd ONgCWcXo270797yUl2kLswWkygCUoKwpIK1YIFZg6jv37x2bzZ9+eH62Mp6rjnzp t393r93pubCaT1Gs6LoeiThKEkUnERdxHJq6LgCQINRVQhnGGCfcF1BSlSaCI4J8 8d22chsAAEDIY6oyxAjBJPYjzAilFEummpqAnGlMIYqIYs9xZJKghBbHh2x7ay6D bB9lM8qBVTdkEgvvZIm1G5FNWTeWqVxqb+vW4OuLKosJUg2iK0oXcF3YOK9mNZUF bvfSqdmzFWVquEoVLFN5rOpPj2YYobbXvXXrm4889dxnl25LjxiUiS6mVligLDU0 CfpeJzAOpRVEzux4VXBQt3oHNuZRUsqkzkwXH33ipC9BXwaD1VtDldLNfSulI5CE YQDDODbSKYiQ6wVCCoxAGPtUIxgkjCJKKMYKSIBEIpQcIAAxhBh/r2UENAA++fgc wQgjyBQGCZAYUqYyRQMgISRhQIVxpAChQi5DJ2Gp0y8+oU1WIKN7y7uHnYGqZ8dn JuuOTQM0kU0TEfXCeC+KYpYRAXNE0OvBTL6414wJNBSuoeIMTKGJsbEf+vQPnzhz DElUGDtuDs9MHjtKS+k+D6jBkDtob9x87PlPIUhb9b093z6I8QAlth/sdUM7sfNp fO7EwsREdnlxY3fLWshpOYYqGTY+XLh95/6B1U0ngEpq2fbYUJESEie+wng+q8Vh oBJdZwpBgGEIZYRgomoMYiokFgBKiOIkliIBUhKMMURvLdUBAHgIAArAi0+flhBg ShFGmBLCFMooRO9v20KBEARS8CgIfD9IrEa/sQtCf31xpVsfdILwoN3FKZYqm4ET ZZiaApgwbTsJGgkAerEdMivOtV3FTI0kYbxzGB47O9Xz21/81v0vfflbq2srp+fK laFsJMK1tZXf/eKf/dYfX33t+tqjp+aR29xqbDxy7ujc+Fxa0YHTdL1AV9XhodGT J06dPH4KKz3TtfKt/gcfPpWqohOXHpo7OV8dKZerVYVoHKGt/T1N1xjBxWw6DCIA oKpSQiEhUKKEMQSRABJQohCqEKJICTAGceJKmDCiYIIpoRDBN+/XAAA4DwAE4EMf OAsQoooCEIIEcwG44FzECAOKCeCCxzGUMgxDCaCpKIEfJIKWxuaVfNkf2JVUjmI5 NFravLeZzhQtEfk8Lmjptu1s+/aW7dS88KBjNay6Ar0TJydLhaSaLRGlkFeyfqfn Ha5SFAb+YGtpaXXpUE1Xh8ojl4/ODqvKb3751kHjIF9B+ZyWz1RSWjGfzczNjU+M 55LY6u5u9w4Oy7mqJ0F2qsxVetCq1zstweXE0PRWrd61HSCBSCIRBUksqULNlIox kIBDJBCSQApGGaOMEEoYQxBjIigDhECm6AghhDGh9PXFAwAAnAcgAuB/+4X/EggJ BI88L/A9CqgQPgYxkUByCHkcBmEYJUBCIUDIYyzx8PTc8ctPgnTm9d///IM3b0+f nPHNuLU/WFvaPQjsieGRMZxea9e7iZcjehJ0Z6eOliuZCxef6Ud7S3eWhQwL1UKh UCaRr8AoPXQkX5hMBt2BXweYCZFcf/NVRuSSpbm2H3jxQXuvMpoazefMvMGFDN3w xPy8HoJGp/3tNzfjJBoeTeWzmYh7UsbFdLZfc2+t1KqjhZSK0mlVVwlCyDC1/qAT xpGuZ7iUXCQQAUop54mAEhFKiIoJRkiEYUCojjHGGEMI/+lvvgEAwCYAGgCXnz0X J0kSJ0xRdMNghAkeRqEbBVHgRSIOXd9jTFFUnSoKM2nW0Gy7t93cDaHTa9RVqtzf WkcFAphCAl4104kXSCnShbQi/DyEFx+aunTpyZMXzncjb2v7jctPvjB39FgxNToy W1GRUZqYhqWqCzwv7ORzk2u3rh9urM+ffWLi+KPHxjOz1Vwlq8UcjI6eev21O7t7 3W6rnVawiUG9vVsoFi89cnmoOmbb3cOdJtWMjm0nScIInJ05FgV8f79eb3QwAwAE GPFCKS8EDENpGBmMMVMoQhwTgRmEGAAAKFEwwohQTChGCGNMCPn29S0AAJ4EIADg 2csLFEOGIBJCci5iQQlTmEYVBVKkplJESWupiprKQAXFHAIoFIZ9Xxw79cz06ROT sxOrt28Dlx0/cx6zZGZ0KKNlVCVlda2J8eGnP/DM2Oyp3Eh+Y2+xvn6FtQIVIAjd ntMoVqZJLm0PPFPVcCiForeau7l0eWxm3izpg9114ScAi7nTJx86PleKGk8//+LJ hbnQgzvb3Xev764e2Dfv7a7sbve6uyaNTSqk0O6sNsMYGhmQzspjCyUNSavhGKlM oZCBSCAFVUbH/AS7bsjjhFCFKKqEFElNI1ldNZIkopQIABKEFU2nRHXd8PXb2wAA ggBIAWCaac45jxMhOUaIE8GlhBjLGCOAJU+IgnVTl0BSklVNGdgW4mFeUVZvvskh r61uTuULlcowjaNkpNgfRMbkkF3fV0mmODvdCvv7Gzve7S4B8uTpC9nSMMQEKTCF 0Ob2WoawZqOZOXkCQ5HN6KwDuG8bWaPfsMoj4zKJQhFHPLK7reHpcSXHxiq5C2de aLasw8Om3Rk0O4Prd1etViTTmdGxsfHpsdJY6drVe839AQ+5prCZ+ZlaPer3+tms XioXEBT9vr2wMO/03a7VTpIoSUIuOIBAJCGGCDMqCYYJESHoe56mMk1T308dxgFI A/DIcw9jTBDEGBGMCaCMQ0gVjVAFImboWhjHZjrFdM0PYy64pqkQCAg4j1xVMzmP pserEEdmRhFU71h1Hg1KmaqmUsmDTrsehp3pyaGp8dlyqRxFgvvYtjbqO2sLUyd8 38llsl3LenDnrhBJ9+AwDNydg731wxaIsd3thKFs1VowTihh6xtbB/sHA3vQ6XRM XS2nZLGUGZs88tTTzwLEvvLt1zc2Vs6fmTqxMNWs9RUjBWDUbrQvXbx4d+nBzJEZ KUW+lPMCzw+icnU45hxiSAjOpFKUUaYpEgEhJcSEEhUmWFEYUxSE0beurtL3asMY ADOVefvtK2PDQ2OjYyLhXHgMoiSKJAeMqWHkZ4sF27Op0BHTIrcXBAEGSFEMEIW5 clE12PbqkgLRdu2w74S7W83EixdmK4N+tFNziY4eu3x8dvZYfxAfNi1n0BkZGdX1 bK/rXV+8mUAVJcLzg53N+l4/2K/V7GY7kVxk041C5Ps2wHrWMFy7nS0WWvWeoqmE Ba7ncslV6kGsIKLbweDM6Ym09tErV9++cnXxhec/eGRm8uUrd37wBy+G/fb2ztrM 1ND29lo2rw+i9sKJBS+AnW43nc9brYQi5HuOojGJgGLoQRBDjBnGekZChL0oeW8j OX6v66ADMHA823bJhOJ6PsWEoAQQCGIBEIIiyWTyfafDgUiigBAKgIjiGFHV9RKF KQRG7dqWgtDher1d86ePznppe/bE9N7mYTwIRqq5xz94uTpSbNRbnsdbjUO717t/ ZzeBgdUfDHwWxEEhl99vNtNmenVjx4uJkVCfEMV3nf62lURcaIrkuYzitHrBQTeT S4VxKKEAAIRcocjRcONDmczmyp3R7NRPf+Yzv/Qb//rWveWHT598687yu1dvDuXU iaHJoaHqlWtvHZmdXlpbv3v3/pmzFweBQISomt5rNTSm8igAGOhMpSolTE1i13Wa ip5Jp9JB8n4GT/IAWACgJHzm8qMAE4AwlwAKk1INUBDFoj+wndBiKlUETfw4dmwu /VROUUHGcoLhifFesFMyhhq9/W7Cn/74s4HbqtfgjcXGsx//YU2TzXZdqoWrt3a5 17JdNxbpQw+CRq3D45orO6GNcIzcQNhhq94kjKVitS2iWPIgDiCBBNEKQaZhtrY7 EyMjlRPzOQBrzX0Z8Z2edb3bQxjNaoT2wojX3OKQKa2pQlqDUYycJx9/+Ftfe/XY xJHd7YMj0ySbNxDJPHz+A4v3r+5t3R+ZPZVgNDw5sX+w40cexoADCYiBkGQkwJiY xnC9dWBmOAcYAIAAwOcBYAA8/vEnNMOQUsZJwnlSr+/u7uzretoPPExBv9UIPT9J OGUMEYwgh0GAGMOJMjxfNVOV2Af1g97Q8AiIgzs3723uNZ/76ItPv/ChxdXlTrez 06rf3duvWa3VjYPt7c7Gfn1v4B8MfGlHBaGOpYbGKiOy7/m2o0ts6ErFTFfV1FPn zmWFeKQyMlGqvPj0MyUBnjg6P3JmNmWQ0mjx+KmT6+3Wbq3OYHJqrDJTzIUDe+Hs ac9zYh9HcXj8xLyIEyw8KNzHnzrfF51SPhN5ojo0mi/k9/d2oFSyqbJCjThCS8s7 RiqlKoQnQEoIoCSEIEKIynb26u+8u7zVCSUAZBsABgCXyPMjjCFGYHd7++rVGwvz JwSPXbetm6RXb1eqQwphTKGQ4KQX2p7lh2Dh2BO9Xqs6NXvryuuz87Ne0NvfXFoY G9/Zqcdh88bLv2PtNRaX1prWIBqoI4r5gfOXjhw/s3zj2olzD+9vb21effeZjzx3 iFHHbZ0tmvXtbDmTG5ocs6k2cmR2/9r1mcr4Znfv+f/iUwDTL7z0B9mSpuLCzfU7 H/nEi916L1vOT+iEqSBPot219XQ2F3quTHjbsptWq5DKD4yOhuNycWTnsHvk/IXr X/tGRs/WGrUjs7OAJ64zaGzf59WxXD4dSbF/WD95bNpzQ8exFZWIjJHKZilG6VzV 8/be72elABgFIJ0rEEoxxoHnLt+/G/uIYtZsHsRRdPvGvd29WhglUkoRxyL0ESB6 pqgq2ZBSM11ZW7ntdFpbG3d9rzc5OS4T99y5U+Mj1YO73ymjIE9RWdWfPnH+J577 2NnpI4zEJowyo5n8kaqWN165+sbMUycWLi0s797fade2m80bS8tnnr3w3Gd+4Fqv 9ntXrrzTapfPzkdV461m+3oQfe31a00vubH04LXX37BqB9Vs/sL8kYmsAmTw5Mef oyqemp3pBxHRUhBjEQ4UxooJTs7nAAAgAElEQVTDM1eu77z56oPIk6vr26lClqZz ipHWTaobQoheu7V5/uyR+fkpKcHm5vbt2/cHAwdCMnACKNFIpfL0pYfej1ljChiE wPNDAFEYes7AjgL37JmHRkYLiYgbDbe+JyaPjClmCkipIIREwlUzdISaq5qpTIc7 V7717pnifC5Nm47FoNhp16YfeUHJjeXTlbX1vTzL9HE//+gpWyWLSzf/wc/93Hfu 3FSnxjp27493d3et9vl2tzIy1KTKy4f7APZVER1Zvr1w/hgeLt/goXHgrt3f8GTg I/iHX3sTSVE06ep2jbStsVJ+avqoAXspEWRHS+Zk+f7VezSdure588JHLlNVJVCM T418/TvvTsyO1vf2aG/frGTtyB1SVLNQbHcOVS0NBMoYpheEOtODIM5mC54XJ7Ek iKXSucCzdQ3PHxn7bqc0BB4Awo8Fj4lKMNWfePzF42fn9ZSpKKko8CkJhioZggXT 1FACD2DHG3AZFoc1Jzx8+08/m9HLR599IsyFE+ennbZ17qGPDPrNdmezx/J+bhim s2Lg5kpJX9YefeET97cevLnyoN7v1JvttUbHS9DXvvbmkck5IBhBmBPqIPXPXn6n 6zth5OoUDhHyR//rL37zn/9fZUV/eGpoPGeoEpqBnJ+fmTg1l/LrJ4pDrg+mji3c f+VPvW7w6//894oqOzFZ3lq73WtZWmEq6vXPjLL/8b/9+8dOnFRQ4DV3gs5u2igq agYAzY8x0fNqprpXtxzfKRT1s+fmy6UiRgRKkM7kACZqWpsCYBQAvAKAC8ATF2bT +VTf7mKE85mcEzhcSMEFEGB4eGhsfEhVFcYYpUxVNUoUKYUE4mB3h0bBD3zqJ7Zr 24hH+zcXC0NTQ5NjN959cySfa2xsnZ6fXNmz6i13ZXHjnb16Kqd+9l/8btxs9Nqt d65cpY4zrNL6wcHsXPHVN75jt+0SAiNUDZr1neu3w/tbR1l2pFzg/c4j58498vij 9fv3ctlUOZOaPzXDaHQil37qqROh6OaPlKpzY0RT3/j6vV43+MyPfyRw6lEcaYra CkS/vjVe0QvjC5qeXV6+o2nG2MgIhPqg35E8jqIoiuNu1+p2nYEbGaYugEiljFKp GHh9IDlCIPDcr7x5b+q9PGsfACOrdftdiVDMw4HfI1RRFcVz3JGRCpTvNTSQqqoI IcdxQo8bWjpxPROi0ZkTKJM2EA49hQQgPTZFcjo1Mqn0yLGjjOJwvJzxfFbbfACj tHV3yQ5DjJXGG7cfG5monp5EMXBBtParX/7hoWNLYQa5/ZnJqUsnz5lMSc7GV+7d RKfHwnbrnbduyf29uenhAeEZpvobK089crK8UN1euqdkTSWbWby3+a2v33zm8tN/ 98KJ2NturB6oWrUwMvwHf/inxytaWlehrk+eubT327/tha2JyVqxkkYQJDwxNaXd 7Vn15u52+7DVHxnNnj41A4i0ujUVIRHHDKuKxrIAWN/bZBWct61eq9ONA29ybKRc SrkDJw5DQSIgBFGYpuhSyiAIhBCmoUjJFUazZjqURoxENLBNQrXTpwGUQRQdP32+ Y0fHzz22sXRzYSHl+LWxkdOrNx44S3s//ZMf++KvvTSnlD70sY+y4ZLTdo4GLECD wXjl4uKeggKvZw38fuXYmc/+4e+vbq+5vb0UpUZ54uyTTz24+bbaXx0/Mjf2wpPl rHHz9VfHZ86Oz89du/ng2pt3P/PDn1YqaHF3jUStrK7nK9VB4LfatjadGxufDhMx MjbTitTWnj3X6jC9xSUPOfQGdrtt5Qv5XDcizETQCz1XLWWTKHCCUNdNIQEX0AOA vgfrAgCra1trWweu0LR0KewXEl2PbTvq1TvtZj6fGR6bYIqCEEIIAQAivycAzGRM J4xIac5vtVJDRWk115f3j8yivhOVsHx36W5hOD164qjnOVO9/naDjczPB33v3pde vlRW61t7B8kBGvjubv32tUW1ahB+fOOtN9mg10W4CfzB2y8Zufz4Qye1toNMCBNw 5/rXimjw3LOP7O3WaztbtV1ZHpueffryb//OSxqg/83P/GRmKP/Zf/nLXB1q1et/ 94WHFNPYWd6AiEYCR1yjREN6Wq+OLd64+c791XQmpaiprhfduXUPQXk8nXn80iO+ F/mhpalI+CHCSCiMGWbMca3ReU+SgosAHABw+tJHHVhQqydo5URh9rHDtkcSf21z dWW3MZWrVMpjqspcv+f1be4mTNWBpJpu1qzOyJGjceSmNCn9yFSLZqnMW/tue29+ fuJbX/xjxMXQ5JCOSX97szEItJyZHp1katoYHbq6evjg5nJrf6ep0KbrbD5YFSpu SR4MVQFISjobNNq+1WNhn3atkoQnj2UnjswUCkNYTTsReOKFF9l49XOf/bzt+f/9 P/3v/HjQ7Tes1Qd/5yc/WtKMveYe12DgRn2at3h4ZFSfGD4Zm8O3VveBVqFYP35k rGzQ5fXtG8ubVDdLWcMkIOFJnPDtre0oCLKZnG6YMAz2t3d2Djs31hsAAOwd/cfx oHT5Ey/SwlRm7FTxyPmQFI3ShNVq1LbWUxqbHioWh7NNy7p67Y7nhDojHIeu5/W7 7W6/DiXc2l7PaqK7txt5EVBxYbi0sbM9MjQyUirdu3Ld2lw988RjpZnTQ4ZY3lxr 9/qWM6hWmeV1ge+JklYYHYaJS/xeBrrc8YhvM6c/ks4cm557+Pwjx87OpwpoZGpm fGEaGwQO+mbGHJ0c3d1dX793y220qwVzb311dmKqtrlrKKQyMzFcme75wZe+8c0Y mBtdeNiJQRTPnZyux9rY0ceN6lGp5lxgJLTYiVIuZ4SyFI0yaeJEwcrW/tLmbrNv TU5PKAiDhG/vNe5vNrY7LgCAgJ1pgKdx+eR7UgQ/BgCAUCq4eip/xFL6S0aGdZyD lY3G6lpncgzns4o7YIu31tOqNjU1dPeN6+nhqey5mXbczZmV0AU93sxT1G9b1dOn nhmfk1Z39bW3c8dPHnvyqcrUJA+s7c2mZ1lPTFS1ExqknDLMx8fnZj/kBLHtB1Hk KUzRNJOqZqFcloQHzlyShM32jucmjmtDIF/95hsF03z+8gWdGnMLswkArtPb2tk9 NjPet/2ZmXPKbivG5ZfeWIu01Pj4kdfvNHb938kf+cDo0Q+J1NTMI9M6SQj3cqn6 qD7Vr20Aw1NzzK5t7u81HR+2+t7K6soHzpxAmq6mR1LVElhp/Pu0O0Z+xBs+NjaS KVadrfWby/fWdK1g6CaleL/RcBJK1IosHU/rvDA1s0PKy7RcNSsTRSykef7kQwer a0IkXr9RMHD+0mPvvvEWoWbQPZCp1PHHHy9Mn3YHjaSxFRGhKwUVoZ7VoqFXURhl +uHh4eLKg+FixvHq21utbC6bzRoGKPR7m7mp+Teu3sKpoU//o5969xtff2f5YPT4 QqFgvnP15r39zfnjU1wAmcm1PXj7QW3XCnNlGiW2ms1vHAadeK3tp0899jE3pG6I AUiBXGr+4ky/ud9ev13H2NUz+ngGJZIpUOTUtjYtEXOyg4yhgtdfAUD/C2HFUMmO H8eicphstd3W2HyeUDK+sBBEdqu1q07mteFJO1NNDCFpqe8Y0cjTbaZ4/a27r792 Zr4yN55H/b5uIIdHg8Pdc+cvhLE3cuaSY/ekG/UPV+z9O37Lmn7q+dphY+vOzd7B jm0dMsaK1bn5hx6rXn6x3qpHvjMymQq4OOw156tTmtYJPHesVNnZXLzy+msHVuPg 0Pm93/nKzKSBNSWTTS1trT05OaLlc9fuLLXsSOIERdwAGlJQzDGPIru9s/ng6tzJ S174vpteBGl2bOriuEFFEYSFc3YYhoLHGAGeTetGeuEo9SIE/mD8L1OFsVSA1J5N eBmoRaGozDKK0AQLsx8TxJREDRMAuXQESGIAlEoIAEhnHrqsJLt/+NXPv/Kp5z+W kOIfvfqln/jUj+40DvPFQqt5iOPQHvi1e++Oj1cKcycWr1wZtFvTZ5/Dp3kw6FCs ebbd3tvY3d+eu3hpeP7U9ZffKaeMZqu76t+YO3o0TvrpTFZC8LU/ealcyT75yHw2 a0SJV29bdjfyHAuaD95e+62Xr1+VCIFIxkkcxIFCmaaR0G9xEO4tR5qqjs895Abf 1zEEsQxiCIAKkAq091WuzQiA988ayb+ShC4QFJhj6WNjnHNCsBMCAEDAAeAAhP8O 0YRiZBDMzsw9lEF8td3XMp3Jasbzglt37lECnrp8uVIuW4rz+LEzid25/u7Xo6B5 +vyH8hPTB819lGhAstJYqa8ms6a6fev62s0bxy89j61m6cSpCMK9w4PDrd1mu1dv NHWi+n3HM3r9/ZYbBISZ1eqk1fN/9Ve/bJRSCUdhHAMJEsHDxCccQUgAFEnQ4zzZ Wr5qZspKZuz/teID0I8BAC6/OPHvGRRzkEgU8b+CyIaKgumT1tbOytWx8xe7/Z3l d3ZPnz4zMz9x+9oNE7HQFyGmUWAfbj3QMZ4am8SmEQqScJegBEtu283Q90aHRsqZ fOy6S8t3kzj0g/ig1t7Zr11b3LCdQCBYHh2mKTMKk0TwVDZPmO644dLSDqUsk8tv 7x14QiIEGMWZTIYxhjGGEAV+6Do9SmnPamdTOoZC141EwL/Ur9e/svPXr2TFGEvB 17dXQln5jX/z+aKWy2QmbJo1VLR4bwsm+NhCKA4lxfqRmbl8IQek12zspWRDSWsD z1aACmK0v7K0dedGN8S7Lbtc1O7fX3O9WE+nAcGoUsyYej5txAhwBHXfg1DEQjie v7lz2LR6E2NDAy9MaWYvcREClNIkSZIkgRAKLn0/VFU19uwB37x/dZApDJnF6cmF hyP+V+Lw1wxLJNHa+tbqdq8/ECg3fnens7y8iKfP5nHwyDPPdXv11+8twQg+cuGJ V966cfnph12nuX5/5fITY0kQ9Kx+ffMuj4Ldw04ooERMUbSNrYYXwdLIdKGSd9we BZIlid1sdJz47tbBQ/OjpVLWdtzeIBw4wcR0wWBA11NbLUsApCk0nU4TQhBCYRhi RFKpFOc88nqBVfesbRBOuP2m4Hxy4eEEKH+jsHQm79x4a2vxFY3oJM0kFIlidSVa saD34NoL56qBSkbGHxESXVu+lzOVBytr7WYdQbi4dB8TuHjv3sCy06rRD8kg4pkc QTgqTk9zQVwvQpQBiFcXb+oACCcUHBaC6Pqd1ceeOm0Nwvr+jpnPK0TrO24ml7Fs D2GpaophGKqqIUggBJwLShFjLI5jwzDiOAoG3XjghGHk9JvTxx5J56rf25v4TwtL wXx39Xa/sZoyKMNIUxTXHTAICaFqenjdcjMZvTeoLd64cv6xC6NHJteXVnvtxRNz M4PAv7e0EYUBVRjSs5ylGcNRu6Xmc6WhQiSRSCS1nXarJkV4ZHwcSkCE6B3UDBln jPzbbz9YWJjWjVGn23ERPnpy9quvvOMlUtWJpiiqqipMjeMEAkQZ5ZwLIaSUCCHO hW0PEEJxlDi9lt2pGZnSyMTc8PgsIIYX/SeDhWVY216y9m6hqKNgjjAGEEAAFUWh EOpa1ifpq8tbJxaqjhMd7K5bHukNPIrl7sbGyMyxds0mOB3GMkF0o9MdHh2fGjoe yajtBLEXKExNmTojIeeCGqkYCowhkny30y0JsO1Ge61uUStM5jNGLnNrabndDwAk GGKMEYQQIYQxRggwRqIoeu+gx3vmuq6u693GHkLI6TXT+aHO4er6vXy+Mj4xdz6V q3oR/OuExXDSbe73GuvcrZOkG0WOZhhhGEkpMcGMMQo4Zaw4ferqxqsXHj1ZzPXt KLK7Vm1vNzeSJwi3O/VsrtC3vbrV8GR4/tLTlWqxa1txwjkXDPaRhHHk2/0OT1ws dF9EXCRpXalOj3TWW7mc2G92Zs9mc1n21js3D3tOBGgqWwSyaxrGe1BUVeVcIAQh hO/FeyllGIa+72cyGQhhFEXQ7fYiJ4rDfGk4tPdC18pV58Zmz8WS/bXBCgaWZ+0I eytyLMA9AIDgglIKIZRSMsYMjbj+4PRjT33h3T/e3LPKRsnIMd3w2tu1Ql6LhIti qzfotzqDfmQ/+8JzlepIt1dXsAgcN4mEaaI4SEQiCaSuz7MFRcbQd+P+oE9Voo+W 8wTWV3bXH+wQnXlRXKiUAgY1rTjo9ICUnHMppRCCc04IMwwjiqIo+u65dkJUVWWM qao6cPoJh4qiJYGDNAW4++0DnikMa7nx7zn7H6ULZyjp1df81gPP2knCAecSQgwk QBAlMU9iwZheLBWX718bnZybOfPkK28tTh2ZSRtmrz9I5RId81K2QhkkSnT81Niz T5/rtzcb+yuqakBCFAXmU7qI42atUduve06ShGT5wYPBIJIw5YXwsG1ZcRD3nfMz I2OFofXtPiLKXjM8cfbxMAw0VcOIUsIgBJQSVVUkEBACxhgAgBDKmJLJZDDGcRzr uo4x5pwnSZxOpymhb7z8jbXlRR45f97f/xBYGAEFx1F/72Dlbdfajvx+HMdCCCEk xhRChBFKEhEnUkpSLJX3NpbWV7ae+8G/30eFG2vbmiYMHeTSFe7Fgd+HSKazFAA3 cLo0ibHoCRk7gSCqEYuo1bQIxaVyhmqgUEqfmF84Mj2vatl0ulguFEsT1fHJohTh QbcWY9zqiemjjyVScQct1WAQY8YUKQFCSFEYQjDhMcYIQoQxUVUVACCEAAD4vq8q OiVaLluM4+Tdq++2Wg3GlInx8f8oWAwlXndv486r1t5tv73K3QYPB4SQxcW7d+7c vn375s2b1yEEmqZQijFBQ+UKDP3D3R0nZB/+kX/4xbdXXUE/8NilIiPDo2WcUjHB XAKIKYAMIbXfbu1v305ruhCGwKg6NjE6NZGgmJoywY5v26v3bveb+67dhghIwgMo mz7fbnqeVI+fe3pobK7TacaRo6gYSAEAMAzjvVAFAIAQAgjfY4QQ0jQNQphKpd5z rVqtmqa5ubmRSpmzszOGIt3ONpO2Rv+C2vCbv/+//NuAnvt7/wQAQGFsW/V2ZzsJ +sI+gFhw18IYcc41TRVCvPyMCQB48UrCeYIxwRhJyTEGaQMBv722tj07P/3Jf/BL X3rpl6r0zTSmmKYJinU9EwZBGHmO03U9jzJWNLXE6+ssH3DF1LNbm2t7e83h4VIS SRF7KVUVAA78ADDWbTh2L2y2oZ6aPHP+SWgU9zvdza1VTYEYYsMw34tKnHPOOYWY Cy6E1HUdQgQhCMNAVdVUKuV5nqqqYRguLS2Vy2VN0wzDMBT01rdfyg3PEyUFvJ8H 4Jl/R4D/3MSd9wrtHqdf6le+NSi8d7/XPnA7O0l/U4QuTLxQSk3TbdtGCAkhpHz/ Dw9SSohkEPqcJwDABMhKJb14/ZWf+Jnnlra22en5C5/4Rytv/pm1/e0FDYIBCkkc xlG3Z1NKqsOjheER34k6tT3bXsnnqxavKwQdnZmNQh8g3vQGPPI0Tc2Vqh3P2WtH u4d9NTV27MJTOFPcPrB6nqsoiCbIdThAgaJo7wV4IQRjBBPsuQEhJIpiAESSJIQQ RVHCMOScb21tEULey/gxxoHTMYwgaD+QWAegBcDn/sLV8L/eP/bro0s/ljv81qDw 3nSLPSvyOuGgBRGmhAgppJAJTwghPEkw/v6rIMSMomtXr0sp0f9d27cGSXJVZ577 zKysrK6qfk7P9LxHoxHMaBiBtBIrC5Al2xJrJEzEQoDZdRgciwXGrHkEDyFjL2AC hwnWLDJhGy+s1qwDvCCLh8UKLIGE0KARkkaP0by7e1r9qq6uqsyqysz7OvvjVpU0 BA7Csev80dH1yKrMc7977ne+c+4pQoxV6Xrry599z/T2PY8/0Buv1sZKYTuNn/nW ySjAOBZBEDrrAJW2aX503hQuCgMZ8P6zS8opRqlR2hgDQBAIo1TbbuPomb7SCsPa xJSolB575tFuXlhlK1GQrC+WBWA/S/vZ6urK2NiYb58GBAHQaAtACCHWWsbY6uoa onMOsyxzzjLG19bWpZSMbQAgY/TAZQfIcAvrL6AOa3oQMe2U2W2zG9tFttArfeas XdL87ld4HAVrubvzDD6y6YaWIugI5wIRvvea2Muuma196Gj7eJI+ePUmwAYAwE74 wPmDt23Z2B7aCz37306m55Luv50uveuK8YAOLu5Nj2z8/Sunfjb8RFjp6T85Bj/e hKd+Y6vvsebQLvVpVbKA2s/F9btOJ4/eunX0/uXMVQQJKXzpbP9Lp5L9tfDDl1f2 xvx8qj/48OrzRhx93ezo8z96rPXey6s1SQHguu9uIjrG+S9w8F+Ye7Zj+Z81dvmH t01c2CWzz7Z37Inpe/ayPM9/9cHstQ/rtz2abSnR39sfjHYQK2UYY0IIPvyODz2Z lxh598GYyQHB+/TK7E1Pbr1tdnNXyX78wvSumL3zQDUtym/cVQso+dCxpn9bUQwG 4KOPrl351VMvveup/V8++fp717bF4o5rtta37Pav/s4jmhLYUYZ3PtwNGfndw5Nk aO73PNajBOYiesfxLGDkrXsizsVHDsWXjvF3/6R9SVV84poZPeye8v5HGi/76vkP vqx2JjGv+u7mdd9tAVDOSoEs/wJj/W1rtsrM28aXAIBR3C5yAHhvfREA9pSpUurW KfM/X86+eFUJACYD8iKf5fyqPOJ+xzsWAOZi3m2t+2e+t8bCcmV7oAHg8ZQAwI6I lLcdmIkYADzSGvSeWlof7DD61rxBOfn7Vx949M0H7r5pBgCmAujmA4HtVDHo+3Ra BQgQCzrstANPNAfX8HgjR4CIk+Zmc+8YB4A7r64BwP6qHAmh31/qIoFziXrFpLz/ V8bf99KYMSZlQCn7Bcb6P+lk6vjhUnpQNDsbF+YzAgDvO25+6d7mL/1jAwB+e39c D+h/eiTx29LX1xv+xGq1GoahMSYIBlP4cI0DwHLPri+dGcpefGOjuZhzADhSAQBY zHlXu9WCA8D1+wfsZuv+Kwb/7Dm4Zcf+39orqwJveyLw3xiGg89vbLYH0mMUkgET HNwXFwMsWzeQ+MIwPJMYAHjX0far72td880VrfVowgLA2+5f/eBPNimBG2a5tTov ur1+8guMlSP9TjIBALfEy73W6iee7j+buE8d4g/+2sSPbp5qt9v/sJgbhL+8etA4 MooGwzs/P3/mzBmtNWODD//k5UFu8a+eSzkZXJYxdnJ8/DOLtXN9dvv2tYVCfn5l uiTKd61Uc0c+utNvVYNUDdCqEAur71njBuEvXjZINnTTQQvLue0D464urwxtxEcO dNAEcWhZAnDHsc0nNvLPXll94Mb60dfNjowFhHAufvKGnZ+6aryj8S9O50BACM6H N/KzDRJHPIuALXpt3W9m3Va/27HWlkqlIAgYY51OJ0mScrkclaOiUIGUSml/VVpr 57BarV577bWPPfbYN6+mAHDjAz1E10mSfr9QWs7sPOREwDnWK2XKeTdN+r0eAFLG giCQjO8uu89fsppY9pYTs3QwR4h1xmjbywurTaEK/+a4FAKh3V43TTo675usTVFL CUEQUCqiqMQ5Y4xa65kNWV1dFZIzxvIsK0XluBwnadrv94QQgMAYo5RRSjjnXHAp hHPu0KFDUoZf+9rXfs5q6PmnpLq5fLJonspbFzhRaZpaa1utVhRFcRyfX5ifn58H gLntc8YYRpiUQZ5nWpswDDln1jq/iwNgAI2XXXH4+edXGs3O8nq+78obtxx4per1 m2urUVyZHCtNTk1Yo5O084Ovf+47L19GgOWM/PlZ3mx29l11qzXWWouAlNA9tbgy NhZFkTGm3+9vLC81253qBNldLTNUq2d/mifLgvTHxuIork9OjoeB9FIMInIuduzY vrCwwDhBHCvHY/X6+MmTJ4XkQRCUwhIlhA+PUikMQlmOytaCZ///LHXottdNupK3 LvSSBiIKISqVSqlUyvNcKUUAfPzZarVqtZo1JgjiNO0UReGcRiTbts1RSo0xrz/G lVKE0Md/+kSeqzxXiIxgK46EE+OVUmWz09lots+cOVcZi6emJuOxsVuerVl0ShWq KAjXhJdKJVEul+M4Zoyh7adJ0uqsPvPQVxFdKEQQhPuuvEVlKXOFo8IAE5RSSgWn 6JwxhjFGKdVadzqJlKXJyalGYx3BUkIAIM/zcrkshGCMEQBKqVdvnLNKF4CEcxmG 4p81FsO815xX6XLRb1lrgyDgnBdFEUURIjabzbwo8jz3wnae5+is0jmhiGCBsDwv pqenOefXXnutlDJJ0h/96MHvv2YMAF7xDysB2rWF5666TvZ7CIwzUdEZ375zW9Lp NJqNiUt++fTRv2eMAiGHXvVWP+u90tLabCmlAPMwDOv18Vqt9u2DiwBww7HpXpZv 2zK7vHCaypDKkILmjErBCfE7viwics5rtVKa9iYmJimljcZ6r9cvReU8zznnURQV RR7IABGttd64xmpnsVSKRnz7Z40VcttYOmv7azrraK29MEYp5Zx7Vcham/WzTifZ PjcnhNBal8LQOeRccG6scVOTU/V6vdVq+cwKY6OWeUAIjUKxeOqp588/N7PlUiqB SqZF1O12p6Ynp2cmGWPt8/ffvf/Ua5/ZffbRrxljCBAC5Jqb3zE9Ock55xLzPLfG DJd7MMbs3LUz63acQ8oE5yLkgZTC+1BKaV7k/SwLg4AxIqUoiqIo1NatWwulsiwL ZKCUYoyipVLKIAi8cbVWiGisybKcc/nzjdVprrRXT2G6YPLEa3hZlhljwjAkhOR5 niTJ6sqaUSYqRUCcKjKCVIooDCrOsjzPp6e39Hq9IAgeeughvxhxMYCxFCLtJFme PfzNO6PaDsaBMSCEWWu00pQyxogvAQukRMBvXHIKAG59bt+TD3zpla/9XWPUg/d8 QRsFiKNlLiqXH7n3b6wu+mmn6Hd11sm4mTywByg3iIVWpSgqlDLOCmIBrHNaSr6y snLFFS9fX2+gQwAH6Nrr3wYAABAcSURBVIJQIiIASCmNMQDSGEMJo5RoXfwcY3FQ qyunSLFhVdcY45wjhAgh/A202+3V1dWzZ8+22+1KpSIE10ZRSpvNjaLQW7bMcM7i OI7jOMsyKSUivrIO79lHQiqGQhi7fLp8+5HZS2rZkpr/r6sz53J596UnB6lcJF/f rP/t+vivP7uPgB2x8LsPnLn1uUusRUSwzl5bzf5grhkOW54QSvcF+X/et7kjNPNd ccdj8nzXOUDKuLUOgCBiEITG6KJQPmFRrVa11ufOndu7dx9jLC+KXq83OTkFSJxz cRxTSnu9np8ZHjE/y7MYhX5nDXXXFikhJIqiAS44Z4xlWba4uHjhwoXNzVYQBJVK xQ1pHhBotzfb7RalhBCH6JRSHsy/uR1CCrc/a4dclH7sFfUD9eDdjxY7g+L3Z9fI kBzfvrRdELyl3qaMXnvL773yde8aFQf8xukDQAgXMixFjPP/sCUJKX7swiCao5T+ wVxrd8l84OlgbwX+6IoyoYRQzjgPZIhItLZCSM6lH3KPAB9dK6WEENbYXq/nV0wP Li/RMMacc0IIH5BcjCybbTx/Il0/01o9u23bNq21tdbPvjRN19fXz58/3263wzCI ophzrrXhglIEKXieZf1+F8Bt3boVABEHQfxMwADgeNv5dkqU0t0VDgBHGwVAMCcU H/rOk2oMAELqOJdRHCMiGzYIIIQwxuKxCmNMiGBGaAB4OotGOXAfNj2ZCoBid4UB EC6ksi6kXCsjhEAgjArtlNdevCeN47jdbhtjKKNKqTzL0QHn3NurXq/PzMwUReGN eBGyygF0Vs/odKXbbvjKAK11EASM0W63u7q6ury8nCRJEARhGIoBP0ZnnTHG15pm ecYYm5mZKQrlVS1EWCsQAA7X2QgFC10LAC+vUwB4Xgcj9QPI6B+QMgiDEqXMIgGA gAAAJUAJUKCkYSQAHCznI0FoSQkAOFJzADDfdUAIodRow4c7nIui4JwLwf1DLyV7 ckMpJUAQUWnl5VNjTZIkzWaz0+nEcVytjo2QRQEAKixpLKTrp7L2MkU9NlZzDqQM hRDtTnt5ZWlpaanRaFSr1Wq1yjlnjBrjcyTEaEcZlQG3xjiHea4QibWISBDhrgWb W/gvlw2GhDL6yae6p9vqzmvixULe2dw26rY0dFDACKGABBxj5B/TiQLpV/aeAAJI qSMEgPxde7pA+rFtzw8HgH1+dWYhF5+6rH++Rz/xjCYEUTtJUavMWY3OaJUXed/H qt69cM69b0V0XAj/knHWOAuEGGf7WbGx0V5YPGtsHsfxcBruEfD0/0rX/h3kGzrr eOVQa10URafTWltbWW+sd7v9Wq3mSakHKiL6FYBSao0mhCC6KPLCKWOMe2w9sG5/ 0LBCCIfOWgsAJ1N8/b3LQMI9B68K4zIh7k3zhzy83jh/iBBCCPgJSAi9a3P2S81Z QCSUeG5JCTma1Y8u1gERAI01BOB0Hr7rzGy/nziNeZYxAGsdsZYQIoVkjJVKJedc lmWcc++zrbUAJE3TIAjzIieEj42NZXmhlPJ5RmO0s4VzJMtyKUpDY53+MsD9LrvK 5B2fREPENE3b7fb6+uryyvNKFTMzs7VqzRNRSqm1lhCitfYUDAEopdYqAOh2u5VK xVrtnLviiiOEEMa5DKS11qc2NzvJqRNn0j6/8sa3zu45SFETEF7YoZR6McT7iJve 8mFEMG7gdP1q8ytv+TAhQADQGGu1A2c1Wq1UlqytzeeJWl/6ccmsCCpw6Mv9udZa QoBSJoTwMUkcl/M8R0TnsN/PxicgjuOiKLwMXYrCLMuSJOecSzls3APF/QCQJQ2j VRRFQoiFhYWNjY1Go9ForAnJZmdnA1nyi67nbM3mpl9W2u3O1NQk4xQRjbW9Xm9s rGqMNkZHUQTgjLGEAqLw8URRFGEYlstRO+0rVRACgAA+UwyDrDolxF+u92MUBg/9 q4wzAAREwjmlYNFSQAaARjDGCTXOOQQUgj/93HPEJ3MIOXLkSBiGhIDWSgihlPKh pVLKOcsZ7Wf5RqOxc9duT8KLogBwkosgiPK8KIrkotWQoKnVapTSEydONBqN5eXl NE3juDxWrXi/yDlDlJ4QUEqf/Pe7AeDAXc9prQGYtRYQ8jyfmJgc1UMNORrzz3jh NAiCKCoR0nfWrwycEE4p8wocIYSgG+HIIY5Se35NREQAJACUUcYEccQiEkTGOaWE MSa4wAK0NoSQf7q+AgA33N/1xSBCcH/9/pZ7vR6llDFaFBQRut1elmXj4+OtVqvb 7aILaEQYK4UBK7S9yFjT05POuSeeeGJ+/tzmZitJO1NTE2EYekfh0PSzgjFmrBaS j4QqACiKQmvq0ye9XrfbTYIg8AuN1ppSWg5CQqhzTheKABBtwqCkgRXdhCFaUhLM EeJ8BQciWMcQ0Tg0wxtDAv4vErj3ro8P0IJ4029+CCgiRaCMyRILK09/96/z3qrL m5Jy5SxAZUisUEqhlOr3+0FQ6vWycjlutdYZI0EQ5HlGgKLDTqtdr9ZmpqazXj/L cm1VHNtyHJO8dFHX7uuvf/Xc3NyxY8cWFxeLohifqPkEZBRFdKg6Lj+/4v0uIv70 DTsB4NL/ccK7bT/mnPNyueyNxTn3908I4VwQAkppSqk1Ji/0Rru/Zcf+2e17kQoC A88CCAgIPgnjrHVuhAI/Pb37/7vtTwLAm5cOIyIQQARw4Jzt9RPVL+67ch0Arrt3 0zrHGPVrhc9CG2MQnTHOORcEYZJ0tFaU0jzPi0IRAuPj9Xq9vmXLljzPm5sbQIBz HkVlKYOjP/7JC8g6ffp0lmUrKytKqWq1Wi6XoyiKosg5Z4xRSvm58Mvbyn/8iskS J0O5HV5Sl5++bscl9eBsW91+dO1koi4bDz9yeOySMU4J3HB/975Xl33m9b5XRwBw 80Pqe9fHAHWAHsLxVRPG1EjivpHO3pPM7BL579QXdopsSQef29h+vgj+9+6nR8HQ PcnUVzsD4v6VuSfffOHwV+YGKc6GkX+5Uv1hNhjXH/7a+L+5Z/VHN28BgNd8r7Ov TN//knBXmc13zSeeTE8meP8NFY875fCLz2z+6U+WrbWcC631+vp6rVbbOjvXTpJ2 u9Xv52Nj8UWkNMsyRNy2bdtLXvKSAwcOzG2bGx8fd85prf1sIoRQxt/50lqJk3f+ aH04C/FPr9txYDx8230L++vBx6+eMcbcfnjs0iq//cne9d9PRtCwwyb7OJQLbnuc EoBZnv9Zc09A3C3xKiHkHeMLe2T/j9f37pT5bRNLo8l+x/JuQfC1lY2RDvemxcud c29cPPjGxUPvW750mqt3bGmNKO6132kYM5KwzQcuC/fG7P3HOnsr/COHK6OPffsP 1iQl//Gy+gDZ6PzOt3a7bS2O16ejqJLneZJ0LvJZHjvXXHONEKLVaiVpu91ue0v5 AAoAnDVbyxwAjq3no+TzvloAAI8sdwFgb1Uyxnzu5NFNbYwbZcPgRRPK//PTYZ7x VB4jQIlaRJwTGQD80cwZANgV5HKYbjhHJwHOh9SNyDQ6BwC3jq29dmyzwiwATAjj 8IVqczNs1Oec2xkzAPhpUwHArpgTMoDIY+sZAESc+qtijEkpfYjDWDA9Xdm1c08Q 8OWVCxchq1KpHD58+OTJU9/+9refffbZXq8Xx/F4fVLwkBBhjb82stKzAHBkIhgZ 60ynAIBX7d0KAOdTy0R4pq0A4EiNOYcAkFkEgEN1PjyFDHc4DjCCZPCUQ3dBhQBw x8ruXz956U3H93Q6g4qf1mZrIOF2ez4GUlmv28/fUNsYY/a95+e897Vo/S8aSCAv sppZ6BoAOFwXADCfmlFk5YbpuxG/K5VKPlOddtur64vdXmfHjp2HDh65yFg333xz HMeNxnoQBO12+8SJE/PzC0opKWVUiqSUgGCt+/wzrczgF66bGcHk9kc2zqT2zmvH FwvxN5szlMkPPbz6XEt96kjloZsmAODrF4x28OmDo/BwlIsdwfOFIok/35g7WUR/ uGX+m5ee/O7lZxkXw2VIDGGC32rXc0e/cdl5RPedZsUg+czupRHcvraEucV/unny xfWNnzyenkvtZ66qnUvNnzyVev/74gMRCYGiKKSUnu4TQjqdTrO50Ww2q9XqRavh 29/+20899VQQBH7522xt9Ho9a1AISSnTurDWrqysDiNk9AlU51wY1Xbuv7w6OWcs BFSdOfFEsvk8AVKtjgnBKaWEUEqpEMLXCxNCtHbrm01txfiWHfWpbYR69kS80yCU CC6DIAhkYB1aYxE9zUaHCGAZIQCIgATAOkSvBDuT9fu60DpvUNOyhen1u5QyLzP4 UMl7G8/XiqIAAkZrzkVRqKIojDFRFB48eDDP8zRNnXNM8KIoyuXy9PT0Dx948EW/ YfHYY7VaLY5jL0V51550uuVyXCpFPsqZmpr0NkLEfr/vqebOy678rXf+YcfWAKAa 2vu+8cVzx+/vJxtbt26dmprgnPkaOx9IGWO0sUqbx48/tdq2srZnz5EbRTTuI1su BKOMUOKsk1JWKpW4EkeRGKkRBAh1VKlCa4WAiE5pa51FY4q832w2sjTLNo+b1hO9 jbSVrjFa8iVHYRg654zRDp0QglHaSRJE1+12pQiSpJskab/fM8b6yLFcLnd7XaVy xmi/32s2Ny5y8LVazYfQUsput6uU6na77XY7z1WlojmnvpBwVAY2GBwAQsji4mJ1 Ww0ACsvrU1sr41u67fUs6xMy6ZlHGJbksMqBMcYRGSWSoSm6Jcmnt24bVfkwxgGI McY5o03Ram1sbqL/xjAIgyAIOGOMSimsNdY6KWWWZ8ZoX3pICOdMagfWasbIKLXl Gbx1lnNmrXGOcM6Kwviswmg7s7XO52WCIFBaBXQQsfR63YuMZT015zTPs14/TZLE GMMFs051u+0oigkhpVLJh1TeRn5iU0rTtFsd7q2q1KZkWJGS5Xk/z7NSqQRAAIhS hnNGCOOM5EaJUlnmljrmVCZLLpQBI5wRSigipVKWOGPGmqJQXttQymhljMkzQoDg cFaB0XlRaDSIjhCCjAOBqnNYCoOsFxJJPDf2roMzoZVChAE71c5ZcBSF4ADOOQfg ut1uHMfOuSiKtC444wAklBHAhRccPBc8DAMphdbab7FHRM4Z50wbnaZplmWUUi+c +hsYmWxicuKF312qjBmjfaDX6/X8gBeDrtfER3YUKOeCC07AdZO2yvu+npH4Fc1q Y7TSSmttjHbOEgJSirAUSikZFwBUG5sXqtfv93p9ax3nknPOOGOCUSo8AxAyFEJI KT1svauilGmtEZFS5mGllBqqyUgIpGk6kD0QOefoHAEaReWLHPz/0zH5PuhfOiyR eBjcf/8Xnv+rADcAlIECVAQwAC/MOwtag7WgNYAADQB9gBwgBegBaADf+6vmqRjA owDaQ+Bf6fj/scNiYhz6L0ALOv/S8xvgz3caOmKAdeeAUhASpADrQLsh0YkANIAC EAAOwAL0APoA60ML/ise/xdCtK2M5A1PQgAAAABJRU5ErkJggg== ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=btn_edit.gif Content-Type: image/gif; name=btn_edit.gif Content-Location: http://l-stat.livejournal.com/img/btn_edit.gif Content-Transfer-Encoding: Base64 R0lGODdhFgAUAKUAAP///4SEhMbGxgAxY3tac4xjezlSe4Rje1JzlAgxY0JjhEpr jDlrnBhKhDFSexA5a1qMxqXe/5zO/yFShClalFqUxpzW/6XW/yFCa3Ol3kp7tUqE tSlSjBhKe2uc1mul1lKEtSFSjHu153u17wAhWmucznOl1kJ7tUpje4yMhLWljIyE exBCe1qUznOEjP/WnP/enN69lEqMxoyMjP/OnHt7e+fGlPfOnP////////////// /////////////////ywAAAAAFgAUAAAGoUCAcEgsGgMAgXLJbDaRzIF04HRClQNC wSCtMq/ZAyKZoHoF4INCuGA0zFWwQ/mARCQT+DMp6DooFRYXeHpLV30YFBkaGxKD HIVofFgdHh8aII4SIYWHWA2WjBIRFhR6np+WGxoiIxUkcKiUJSYnKCkqK7GTTQMs Hi0uLzAxu2e+MjMvNC/GxwM1Ni83XZJnWFNTSrLPZtzXhgHi4+Tl5gFBADs= ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=btn_del.gif Content-Type: image/gif; name=btn_del.gif Content-Location: http://l-stat.livejournal.com/img/btn_del.gif Content-Transfer-Encoding: Base64 R0lGODlhFgAUAPcAAIQAAISEhMbGxv////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////ywAAAAAFgAUAAAIcAAHCBxIsKDBAAMEKFzIsGFDhA4jRoQo saJCigIAAEgYUSNHARg1emw4ciHGjCI/ljT5cWHKjC1ZdhS5cWJMlysf3kT50uFJ hS9zXozZE2XMk0WBHm2ZVCnDnzU7fvxpUWfVilSvXgzAtavXr2ADBAQAOw== ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=paid.gif Content-Type: image/gif; name=paid.gif Content-Location: http://l-stat.livejournal.com/img/paid.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQANUAAP/MAP7LAPvIAPrHAPPAAO67AOy5AOazAOGuAOCtAN2qANuo ANmmANWiAM6bAM2aAMuYAMqXAMeUAMOQAMGOAMCNAL+MAL6LAL2KALyJALuIALqH ALeEALWCALOAALJ/ALF+ALB9AK57AK16AKt4AKl2AKd0AKZzAKVyAKNwAKFuAJto AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAACwALAAAAAAQABAAAAZqQJZwyLIQj8hUCMncODzM 5MBQig4/CgBAgjlONKCUKqvdrkye7uaRIJTfgMKCM2FxGvB3QEMZehZ5WhQVRyEI eREZSBoQeR9MHQx5F31HIwcCDSeGABAaSCgOKhxCISQMHUgqG0gdIlawQQA7 ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=logo.gif Content-Type: image/gif; name=logo.gif Content-Location: http://l-stat.livejournal.com/horizon/logo.gif Content-Transfer-Encoding: Base64 R0lGODlh4QBGAOYAABgrYnyawcfY6pS02kJZievz+lp3pCM3azlRgrfS66i606HC 5GmJtXSiyo2t1HeUvTJJe/X4/PvQnpW53mmawixCdktllcXb8G6exoGs0klMcLHN 5KXC2qzM64y02ePs9f3+/9Tk8//XofD2/NSwlMyWkOPu+WSUvZJ3gtnm867K4X6q 0aaIhndpfIinzZzB43ekzIqy1maCr9/p8yc8cHGNuLbF28zf8t3r+WJ8qFNtmxEn YPr8/aXF55Ssy1dxnvf6/X6YupO74Jq+4l9adV+GsZO21oSw2dPf7ebw+Z6+4p61 0UNhkqjF3WN2nenx+Nrj7nunzuju9Uxrmpe83YyrzqzI36fJ6Y+33b+ijIFifd65 loGexoew1YGu126gx//fo0dfjjpkmDZAbb/X7r/N4anH4gcgXHGgyG6awmmWwGaX v2ycxIOiypm64E9ol2iYwGubw2ucw2ybxICl0I+Bg5uzzoqfvtXm932Qsnyhxxww ZcLN34WhxB8zaP///yH5BAEAAH8ALAAAAADhAEYAAAf/gH+Cg4SFhoeIiYqLjI2O j5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4glUBDDV6 ucDBrS5MCBAQCHfCy8yhegQHADsAAHs0zdjZlwY0O3tjLS0afgAVS5FHXupe2u25 P3s7GiwlKER+03sIjlFoaGwUAsbB0CDKCncIYeWQRqQECw1nzhBwgmAPgCmJVjTA QGENBTYYQsahAKckhS9dEqpU1a2hlnhhFEiREgDCnj15DGXgKKeglyOEsHjpFxAO hQYrk5IKI6+ElmphBICYCuVHNBpVBkVhwwaGIywN4hjFoLTsp24otOzwY0HGnQgj /xQ4OZAPwZEVcb5MmsCRAhqzgDMVATBGywE/bxgozqNjx5kKOsLcZOJV0bpEaAIi Dcx5UhFrYwAQ6MVA8pkxDOxY4UBgLQNEG8WWHFjQUN8JnXNDokGtQpEaRQjEI2Bn w2oVPirsgDDoRT8MaAwemZ5BY8A5GQhREbtZt3dFOW5CqMGAyZ4DyOyo4MBexQOY XTKggYGFUcC/g2BQiPO9fyILABwwhQHRTJEGAgRw0AR7Cv5ADRMpPYIBHN1h0dFB /mU4iBEQlFOBaBh8cUIFBqzH3mqt+fFAJBMaMQgacESh4Yx/PODHTTScMCEGRdAQ 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 FwgAOw== ------------JxuqZ6nLgOmBPtWaPDKENk Content-Disposition: inline; filename=default.htm Content-Type: text/html; charset=utf-16; name=default.htm Content-Location: about:blank Content-Transfer-Encoding: Base64 //48ACEARABPAEMAVABZAFAARQAgAEgAVABNAEwAIABQAFUAQgBMAEkAQwAgACIA LQAvAC8AVwAzAEMALwAvAEQAVABEACAASABUAE0ATAAgADQALgAwADEALwAvAEUA TgAiAD4ACgA8AGgAdABtAGwAIABkAGkAcgA9ACIAbAB0AHIAIgA+AAoAPABoAGUA YQBkAD4ACgAgADwAdABpAHQAbABlAD4AQgBsAGEAbgBrACAAcABhAGcAZQA8AC8A dABpAHQAbABlAD4ACgA8AC8AaABlAGEAZAA+AAoAPABiAG8AZAB5AD4APAAvAGIA bwBkAHkAPgA8AC8AaAB0AG0AbAA+AA== ------------JxuqZ6nLgOmBPtWaPDKENk--