Christmas

PE1FVEEgTkFNRT0iUk9CT1RTIiBDT05URU5UPSJJTkRFWCwgTk9GT0xMT1ciPgogCjxNRVRBIE5BTUU9IlJPQk9UUyIgQ09OVEVOVD0iSU5ERVgsIE5PRk9MTE9XIj4KIAogCiAKIAogCgogCjwhRE9DVFlQRSBodG1sPjxodG1sPgo8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9Imh0dHA6Ly9vcmlnMDkuZGV2aWFudGFydC5uZXQvY2ZkNi9mLzIwMTUvMTE1LzYvMS9jcnlwdG9uaWNfbG9nb19ieV90ZWhzcG90dC1kOHIxOWgxLnBuZyI+CjxoZWFkPgoKPHRpdGxlPkhBQ0tFRCBCWSBBQkhJU0hFSyA8L3RpdGxlPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1nYjIzMTIiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7bWFyZ2luOjA7cGFkZGluZzowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94Oy1tcy1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW8tYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5LGh0bWx7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQ6MTZweC8xLjQgTGF0byxzYW5zLXNlcmlmO2NvbG9yOiNmZWZlZmY7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTpDb21pYyBTYW5zIE1TfWJvZHl7YmFja2dyb3VuZDojMDgwNTEwOy13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1oMXtmb250OjIuNzVlbSBDaW56ZWwsc2VyaWY7Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOi4zNWVtO3RleHQtc2hhZG93OjAgMCAyNXB4IHJnYmEoMjU0LDI1NCwyNTUsLjg1KX1oMntmb250OjEuNDVlbSBDaW56ZWwsc2VyaWY7Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOi41ZW07dGV4dC1zaGFkb3c6MCAwIDI1cHggcmdiYSgyNTQsMjU0LDI1NSwuODUpO3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX1bY2xhc3NePWxldHRlcl17LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgM3MgZWFzZTstbW96LXRyYW5zaXRpb246b3BhY2l0eSAzcyBlYXNlO3RyYW5zaXRpb246b3BhY2l0eSAzcyBlYXNlfS5sZXR0ZXItMHt0cmFuc2l0aW9uLWRlbGF5Oi4yc30ubGV0dGVyLTF7dHJhbnNpdGlvbi1kZWxheTouNHN9LmxldHRlci0ye3RyYW5zaXRpb24tZGVsYXk6LjZzfS5sZXR0ZXItM3t0cmFuc2l0aW9uLWRlbGF5Oi44c30ubGV0dGVyLTR7dHJhbnNpdGlvbi1kZWxheToxc30ubGV0dGVyLTV7dHJhbnNpdGlvbi1kZWxheToxLjJzfS5sZXR0ZXItNnt0cmFuc2l0aW9uLWRlbGF5OjEuNHN9LmxldHRlci03e3RyYW5zaXRpb24tZGVsYXk6MS42c30ubGV0dGVyLTh7dHJhbnNpdGlvbi1kZWxheToxLjhzfS5sZXR0ZXItOXt0cmFuc2l0aW9uLWRlbGF5OjJzfS5sZXR0ZXItMTB7dHJhbnNpdGlvbi1kZWxheToyLjJzfS5sZXR0ZXItMTF7dHJhbnNpdGlvbi1kZWxheToyLjRzfS5sZXR0ZXItMTJ7dHJhbnNpdGlvbi1kZWxheToyLjZzfS5sZXR0ZXItMTN7dHJhbnNpdGlvbi1kZWxheToyLjhzfS5sZXR0ZXItMTR7dHJhbnNpdGlvbi1kZWxheTozc31oMSxoMnt2aXNpYmlsaXR5OmhpZGRlbjstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCl9aDEudHJhbnNpdGlvbi1pbixoMi50cmFuc2l0aW9uLWlue3Zpc2liaWxpdHk6dmlzaWJsZX1oMSBbY2xhc3NePWxldHRlcl0saDIgW2NsYXNzXj1sZXR0ZXJde29wYWNpdHk6MH1oMS50cmFuc2l0aW9uLWluIFtjbGFzc149bGV0dGVyXSxoMi50cmFuc2l0aW9uLWluIFtjbGFzc149bGV0dGVyXXtvcGFjaXR5OjF9I2NvbnRhaW5lcntkaXNwbGF5OnRhYmxlO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6bm9uZX0jY29udGFpbmVyPmRpdntkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246bWlkZGxlfSNjb250YWluZXIgcHtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2xlZnQ6MDtib3R0b206MjVweDtmb250LXNpemU6LjhlbTtsZXR0ZXItc3BhY2luZzouMWVtO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjojNzY3NDdhOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6c3VicGl4ZWwtYW50aWFsaWFzZWQ7Zm9udC1zbW9vdGhpbmc6c3VicGl4ZWwtYW50aWFsaWFzZWR9I2NvbnRhaW5lciBwIHN0cm9uZ3tjb2xvcjojYjNhYmM1fSNjb250YWluZXIgcCBzcGFue2ZvbnQtc2l6ZTouNzVlbTtwYWRkaW5nOjAgMnB4fSNjYW52YXN7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtjdXJzb3I6bm9uZX0jc3RhdHN7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDtsZWZ0OjEwcHg7dG9wOjEwcHh9LmRnLmFje3otaW5kZXg6MTAwIWltcG9ydGFudH0uU1RZTEU0e2NvbG9yOiNGRkZ9Cjwvc3R5bGU+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9mZi5raXMudjIuc2NyLmthc3BlcnNreS1sYWJzLmNvbS81NTMyMUE1Qi00OEZFLTBCNDUtQUNEOS1FMUExODBDNEM0MDcvbWFpbi5qcyIgY2hhcnNldD0iVVRGLTgiPjwvc2NyaXB0PjwvaGVhZD4KPGJvZHk+Cjxib2R5IG9uZHJhZ3N0YXJ0PSJ3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWU9ZmFsc2UiIG9uY29udGV4dG1lbnU9IndpbmRvdy5ldmVudC5yZXR1cm5WYWx1ZT1mYWxzZSIgb25zZWxlY3RzdGFydD0iZXZlbnQucmV0dXJuVmFsdWU9ZmFsc2UiPgo8ZGl2IGlkPSJjb250YWluZXIiPgo8ZGl2Pjxicj48YnI+Cjwvb2JqZWN0Pgo8Y2VudGVyPjxpbWcgc3R5bGU9IndpZHRoOjI1MHB4OyIgc3JjPSJodHRwczovL3d3dy5zcHJlYWRzaGlydC5jb20vaW1hZ2Utc2VydmVyL3YxL2Rlc2lnbnMvMTAwMjY2MTA3Mix3aWR0aD0xNzgsaGVpZ2h0PTE3OC9hbm9ueW1vdXMtbWFzay5wbmciIC8+CjxoMSBpZD0iaDEiPipIQUNLRUQgQlkgQUJISVNIRUsqPC9oMT4KPC9icj4KPGgyIGlkPSJoMiI+Kldpc2hpbmcgeW91IGEgam95b3VzIENocmlzdG1hcy4uICo8L2gyPgo8aDMgaWQ9ImgzIj48YnI+PC9oMz4KPC9mb250Pgo8L3NwYW4+CjwvZm9udD48Zm9udCBzaXplPSAiMjQiPjxmb250IGNvbG9yPSIjOEIwMDAwIiBmYWNlPSJJbXBhY3QiPgo8c3BhbiA8dWw+Cjxmb250IGNvbG9yPSIjOEIwMDAwIj4KPGJyPgoKPGJyPjxicj4KPHAgY2xhc3M9InN0eWxlMTQiIGFsaWduPSJjZW50ZXIiPiA8Zm9udCBjb2xvcj0iIzhCMDAwMCIgZmFjZT0iY291cmllciBuZXciIHNpemU9IjUiPiBHcmVldHogOjwvZm9udD48bWFycXVlZSBzY3JvbGxkZWxheT0iMSIgc2Nyb2xsYW1vdW50PSIyIiBkaXJlY3Rpb249ImxlZnQiIGJlaGF2aW9yPSJzY3JvbGwiIHdpZHRoPSI1MCUiPgo8Zm9udCBjb2xvcj0iI2ZmMDAwMCIgZmFjZT0iVGFob21hIiBzaXplPSIyIj4gIHxBYmhpc2hla3x8e3tGaXJlV0BsbH19fCAtICJNZXJyeSBDaHJpc3RtYXMgVG8gQWxsIE9mIFlvdS4uLi4uLi4iIAo8L2ZvbnQ+PC9tYXJxdWVlPjxicj48L3A+PHAgYWxpZ249ImNlbnRlciI+CjwvZGl2Pgo8L2Rpdj4KPGNhbnZhcyBpZD0iY2FudmFzIj48L2NhbnZhcz4KPHNjcmlwdD4KdmFyIFN0YXRzPWZ1bmN0aW9uKCl7dmFyIGU9RGF0ZS5ub3coKSx0PWUsaT0wLG49MS8wLHI9MCxzPTAsbz0xLzAsYT0wLGw9MCxoPTAsYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmlkPSJzdGF0cyIsYy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx2KCsraCUyKX0sITEpLGMuc3R5bGUuY3NzVGV4dD0id2lkdGg6ODBweDtvcGFjaXR5OjAuOTtjdXJzb3I6cG9pbnRlciI7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5pZD0iZnBzIix1LnN0eWxlLmNzc1RleHQ9InBhZGRpbmc6MCAwIDNweCAzcHg7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6IzAwMiIsYy5hcHBlbmRDaGlsZCh1KTt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmlkPSJmcHNUZXh0IixkLnN0eWxlLmNzc1RleHQ9ImNvbG9yOiMwZmY7Zm9udC1mYW1pbHk6Q29taWMgU2FucyBNUztmb250LXNpemU6OXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MTVweCIsZC5pbm5lckhUTUw9IkZQUyIsdS5hcHBlbmRDaGlsZChkKTt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IocC5pZD0iZnBzR3JhcGgiLHAuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NzRweDtoZWlnaHQ6MzBweDtiYWNrZ3JvdW5kLWNvbG9yOiMwZmYiLHUuYXBwZW5kQ2hpbGQocCk7NzQ+cC5jaGlsZHJlbi5sZW5ndGg7KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5zdHlsZS5jc3NUZXh0PSJ3aWR0aDoxcHg7aGVpZ2h0OjMwcHg7ZmxvYXQ6bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiMxMTMiLHAuYXBwZW5kQ2hpbGQoZil9dmFyIG09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bS5pZD0ibXMiLG0uc3R5bGUuY3NzVGV4dD0icGFkZGluZzowIDAgM3B4IDNweDt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojMDIwO2Rpc3BsYXk6bm9uZSIsYy5hcHBlbmRDaGlsZChtKTt2YXIgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlkPSJtc1RleHQiLGcuc3R5bGUuY3NzVGV4dD0iY29sb3I6IzBmMDtmb250LWZhbWlseTpDb21pYyBTYW5zIE1TO2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoxNXB4IixnLmlubmVySFRNTD0iTVMiLG0uYXBwZW5kQ2hpbGQoZyk7dmFyIHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKHkuaWQ9Im1zR3JhcGgiLHkuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NzRweDtoZWlnaHQ6MzBweDtiYWNrZ3JvdW5kLWNvbG9yOiMwZjAiLG0uYXBwZW5kQ2hpbGQoeSk7NzQ+eS5jaGlsZHJlbi5sZW5ndGg7KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5zdHlsZS5jc3NUZXh0PSJ3aWR0aDoxcHg7aGVpZ2h0OjMwcHg7ZmxvYXQ6bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiMxMzEiLHkuYXBwZW5kQ2hpbGQoZil9dmFyIHY9ZnVuY3Rpb24oZSl7c3dpdGNoKGg9ZSl7Y2FzZSAwOnUuc3R5bGUuZGlzcGxheT0iYmxvY2siLG0uc3R5bGUuZGlzcGxheT0ibm9uZSI7YnJlYWs7Y2FzZSAxOnUuc3R5bGUuZGlzcGxheT0ibm9uZSIsbS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9fSxiPWZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS5hcHBlbmRDaGlsZChlLmZpcnN0Q2hpbGQpO2kuc3R5bGUuaGVpZ2h0PXQrInB4In07cmV0dXJue1JFVklTSU9OOjExLGRvbUVsZW1lbnQ6YyxzZXRNb2RlOnYsYmVnaW46ZnVuY3Rpb24oKXtlPURhdGUubm93KCl9LGVuZDpmdW5jdGlvbigpe3ZhciBoPURhdGUubm93KCk7cmV0dXJuIGk9aC1lLG49TWF0aC5taW4obixpKSxyPU1hdGgubWF4KHIsaSksZy50ZXh0Q29udGVudD1pKyIgTVMgKCIrbisiLSIrcisiKSIsYih5LE1hdGgubWluKDMwLDMwLTMwKihpLzIwMCkpKSxsKyssaD50KzFlMyYmKHM9TWF0aC5yb3VuZCgxZTMqbC8oaC10KSksbz1NYXRoLm1pbihvLHMpLGE9TWF0aC5tYXgoYSxzKSxkLnRleHRDb250ZW50PXMrIiBGUFMgKCIrbysiLSIrYSsiKSIsYihwLE1hdGgubWluKDMwLDMwLTMwKihzLzEwMCkpKSx0PWgsbD0wKSxofSx1cGRhdGU6ZnVuY3Rpb24oKXtlPXRoaXMuZW5kKCl9fX07Cjwvc2NyaXB0Pgo8c2NyaXB0Pgo7KGZ1bmN0aW9uKHdpbmRvdykgewp2YXIgY3R4LApodWUsCmxvZ28sCmZvcm0sCmJ1ZmZlciwKdGFyZ2V0ID0ge30sCnRlbmRyaWxzID0gW10sCnNldHRpbmdzID0ge307CnNldHRpbmdzLmRlYnVnID0gdHJ1ZTsKc2V0dGluZ3MuZnJpY3Rpb24gPSAwLjU7CnNldHRpbmdzLnRyYWlscyA9IDIwOwpzZXR0aW5ncy5zaXplID0gNTA7CnNldHRpbmdzLmRhbXBlbmluZyA9IDAuMjU7CnNldHRpbmdzLnRlbnNpb24gPSAwLjk4OwpNYXRoLlRXT19QSSA9IE1hdGguUEkgKiAyOwovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIE9zY2lsbGF0b3IKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBPc2NpbGxhdG9yKG9wdGlvbnMpIHsKdGhpcy5pbml0KG9wdGlvbnMgfHwge30pOwp9Ck9zY2lsbGF0b3IucHJvdG90eXBlID0gKGZ1bmN0aW9uKCkgewp2YXIgdmFsdWUgPSAwOwpyZXR1cm4gewppbml0OiBmdW5jdGlvbihvcHRpb25zKSB7CnRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlIHx8IDA7CnRoaXMub2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQgfHwgMDsKdGhpcy5mcmVxdWVuY3kgPSBvcHRpb25zLmZyZXF1ZW5jeSB8fCAwLjAwMTsKdGhpcy5hbXBsaXR1ZGUgPSBvcHRpb25zLmFtcGxpdHVkZSB8fCAxOwp9LAp1cGRhdGU6IGZ1bmN0aW9uKCkgewp0aGlzLnBoYXNlICs9IHRoaXMuZnJlcXVlbmN5Owp2YWx1ZSA9IHRoaXMub2Zmc2V0ICsgTWF0aC5zaW4odGhpcy5waGFzZSkgKiB0aGlzLmFtcGxpdHVkZTsKcmV0dXJuIHZhbHVlOwp9LAp2YWx1ZTogZnVuY3Rpb24oKSB7CnJldHVybiB2YWx1ZTsKfQp9Owp9KSgpOwovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIFRlbmRyaWwKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBUZW5kcmlsKG9wdGlvbnMpIHsKdGhpcy5pbml0KG9wdGlvbnMgfHwge30pOwp9ClRlbmRyaWwucHJvdG90eXBlID0gKGZ1bmN0aW9uKCkgewpmdW5jdGlvbiBOb2RlKCkgewp0aGlzLnggPSAwOwp0aGlzLnkgPSAwOwp0aGlzLnZ5ID0gMDsKdGhpcy52eCA9IDA7Cn0KcmV0dXJuIHsKaW5pdDogZnVuY3Rpb24ob3B0aW9ucykgewp0aGlzLnNwcmluZyA9IG9wdGlvbnMuc3ByaW5nICsgKE1hdGgucmFuZG9tKCkgKiAwLjEpIC0gMC4wNTsKdGhpcy5mcmljdGlvbiA9IHNldHRpbmdzLmZyaWN0aW9uICsgKE1hdGgucmFuZG9tKCkgKiAwLjAxKSAtIDAuMDA1Owp0aGlzLm5vZGVzID0gW107CmZvcih2YXIgaSA9IDAsIG5vZGU7IGkgPCBzZXR0aW5ncy5zaXplOyBpKyspIHsKbm9kZSA9IG5ldyBOb2RlKCk7Cm5vZGUueCA9IHRhcmdldC54Owpub2RlLnkgPSB0YXJnZXQueTsKdGhpcy5ub2Rlcy5wdXNoKG5vZGUpOwp9Cn0sCnVwZGF0ZTogZnVuY3Rpb24oKSB7CnZhciBzcHJpbmcgPSB0aGlzLnNwcmluZywKbm9kZSA9IHRoaXMubm9kZXNbMF07Cm5vZGUudnggKz0gKHRhcmdldC54IC0gbm9kZS54KSAqIHNwcmluZzsKbm9kZS52eSArPSAodGFyZ2V0LnkgLSBub2RlLnkpICogc3ByaW5nOwpmb3IodmFyIHByZXYsIGkgPSAwLCBuID0gdGhpcy5ub2Rlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHsKbm9kZSA9IHRoaXMubm9kZXNbaV07CmlmKGkgPiAwKSB7CnByZXYgPSB0aGlzLm5vZGVzW2kgLSAxXTsKbm9kZS52eCArPSAocHJldi54IC0gbm9kZS54KSAqIHNwcmluZzsKbm9kZS52eSArPSAocHJldi55IC0gbm9kZS55KSAqIHNwcmluZzsKbm9kZS52eCArPSBwcmV2LnZ4ICogc2V0dGluZ3MuZGFtcGVuaW5nOwpub2RlLnZ5ICs9IHByZXYudnkgKiBzZXR0aW5ncy5kYW1wZW5pbmc7Cn0Kbm9kZS52eCAqPSB0aGlzLmZyaWN0aW9uOwpub2RlLnZ5ICo9IHRoaXMuZnJpY3Rpb247Cm5vZGUueCArPSBub2RlLnZ4Owpub2RlLnkgKz0gbm9kZS52eTsKc3ByaW5nICo9IHNldHRpbmdzLnRlbnNpb247Cn0KfSwKZHJhdzogZnVuY3Rpb24oKSB7CnZhciB4ID0gdGhpcy5ub2Rlc1swXS54LAp5ID0gdGhpcy5ub2Rlc1swXS55LAphLCBiOwpjdHguYmVnaW5QYXRoKCk7CmN0eC5tb3ZlVG8oeCwgeSk7CmZvcih2YXIgaSA9IDEsIG4gPSB0aGlzLm5vZGVzLmxlbmd0aCAtIDI7IGkgPCBuOyBpKyspIHsKYSA9IHRoaXMubm9kZXNbaV07CmIgPSB0aGlzLm5vZGVzW2kgKyAxXTsKeCA9IChhLnggKyBiLngpICogMC41Owp5ID0gKGEueSArIGIueSkgKiAwLjU7CmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKGEueCwgYS55LCB4LCB5KTsKfQphID0gdGhpcy5ub2Rlc1tpXTsKYiA9IHRoaXMubm9kZXNbaSArIDFdOwpjdHgucXVhZHJhdGljQ3VydmVUbyhhLngsIGEueSwgYi54LCBiLnkpOwpjdHguc3Ryb2tlKCk7CmN0eC5jbG9zZVBhdGgoKTsKfQp9Owp9KSgpOwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGluaXQoZXZlbnQpIHsKZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaW5pdCk7CmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBpbml0KTsKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW91c2Vtb3ZlKTsKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgbW91c2Vtb3ZlKTsKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRvdWNoc3RhcnQpOwptb3VzZW1vdmUoZXZlbnQpOwpyZXNldCgpOwpsb29wKCk7Cn0KZnVuY3Rpb24gcmVzZXQoKSB7CnRlbmRyaWxzID0gW107CmZvcih2YXIgaSA9IDA7IGkgPCBzZXR0aW5ncy50cmFpbHM7IGkrKykgewp0ZW5kcmlscy5wdXNoKG5ldyBUZW5kcmlsKHsKc3ByaW5nOiAwLjQ1ICsgMC4wMjUgKiAoaSAvIHNldHRpbmdzLnRyYWlscykKfSkpOwp9Cn0KZnVuY3Rpb24gbG9vcCgpIHsKaWYoIWN0eC5ydW5uaW5nKSByZXR1cm47CmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInOwpjdHguZmlsbFN0eWxlID0gJ3JnYmEoOCw1LDE2LDAuNCknOwpjdHguZmlsbFJlY3QoMCwgMCwgY3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpOwpjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2xpZ2h0ZXInOwpjdHguc3Ryb2tlU3R5bGUgPSAnaHNsYSgnICsgTWF0aC5yb3VuZChodWUudXBkYXRlKCkpICsgJyw5MCUsNTAlLDAuMjUpJzsKY3R4LmxpbmVXaWR0aCA9IDE7CmlmKGN0eC5mcmFtZSAlIDYwID09IDApIHsKY29uc29sZS5sb2coaHVlLnVwZGF0ZSgpLCBNYXRoLnJvdW5kKGh1ZS51cGRhdGUoKSksIGh1ZS5waGFzZSwgaHVlLm9mZnNldCwgaHVlLmZyZXF1ZW5jeSwgaHVlLmFtcGxpdHVkZSk7Cn0KZm9yKHZhciBpID0gMCwgdGVuZHJpbDsgaSA8IHNldHRpbmdzLnRyYWlsczsgaSsrKSB7CnRlbmRyaWwgPSB0ZW5kcmlsc1tpXTsKdGVuZHJpbC51cGRhdGUoKTsKdGVuZHJpbC5kcmF3KCk7Cn0KY3R4LmZyYW1lKys7CmN0eC5zdGF0cy51cGRhdGUoKTsKcmVxdWVzdEFuaW1GcmFtZShsb29wKTsKfQpmdW5jdGlvbiByZXNpemUoKSB7CmN0eC5jYW52YXMud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKY3R4LmNhbnZhcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7Cn0KZnVuY3Rpb24gc3RhcnQoKSB7CmlmKCFjdHgucnVubmluZykgewpjdHgucnVubmluZyA9IHRydWU7Cmxvb3AoKTsKfQp9CmZ1bmN0aW9uIHN0b3AoKSB7CmN0eC5ydW5uaW5nID0gZmFsc2U7Cn0KZnVuY3Rpb24gbW91c2Vtb3ZlKGV2ZW50KSB7CmlmKGV2ZW50LnRvdWNoZXMpIHsKdGFyZ2V0LnggPSBldmVudC50b3VjaGVzWzBdLnBhZ2VYOwp0YXJnZXQueSA9IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7Cn0gZWxzZSB7CnRhcmdldC54ID0gZXZlbnQuY2xpZW50WAp0YXJnZXQueSA9IGV2ZW50LmNsaWVudFk7Cn0KZXZlbnQucHJldmVudERlZmF1bHQoKTsKfQpmdW5jdGlvbiB0b3VjaHN0YXJ0KGV2ZW50KSB7CmlmKGV2ZW50LnRvdWNoZXMubGVuZ3RoID09IDEpIHsKdGFyZ2V0LnggPSBldmVudC50b3VjaGVzWzBdLnBhZ2VYOwp0YXJnZXQueSA9IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7Cn0KfQpmdW5jdGlvbiBrZXl1cChldmVudCkgewpzd2l0Y2goZXZlbnQua2V5Q29kZSkgewpjYXNlIDMyOgpzYXZlKCk7CmJyZWFrOwpkZWZhdWx0OgovLyBjb25zb2xlLmxvZyhldmVudC5rZXlDb2RlKTsKfQp9CmZ1bmN0aW9uIGxldHRlcnMoaWQpIHsKdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLApsZXR0ZXJzID0gZWwuaW5uZXJIVE1MLnJlcGxhY2UoJyZhbXA7JywgJyYnKS5zcGxpdCgnJyksCmhlYWRpbmcgPSAnJzsKZm9yKHZhciBpID0gMCwgbiA9IGxldHRlcnMubGVuZ3RoLCBsZXR0ZXI7IGkgPCBuOyBpKyspIHsKbGV0dGVyID0gbGV0dGVyc1tpXS5yZXBsYWNlKCcmJywgJyZhbXAnKTsKaGVhZGluZyArPSBsZXR0ZXIudHJpbSgpID8gJzxzcGFuIGNsYXNzPSJsZXR0ZXItJyArIGkgKyAnIj4nICsgbGV0dGVyICsgJzwvc3Bhbj4nIDogJyZuYnNwOyc7Cn0KZWwuaW5uZXJIVE1MID0gaGVhZGluZzsKc2V0VGltZW91dChmdW5jdGlvbigpIHsKZWwuY2xhc3NOYW1lID0gJ3RyYW5zaXRpb24taW4nOwp9LCAoTWF0aC5yYW5kb20oKSAqIDUwMCkgKyA1MDApOwp9CmZ1bmN0aW9uIHNhdmUoKSB7CmlmKCFidWZmZXIpIHsKYnVmZmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CmJ1ZmZlci53aWR0aCA9IHNjcmVlbi5hdmFpbFdpZHRoOwpidWZmZXIuaGVpZ2h0ID0gc2NyZWVuLmF2YWlsSGVpZ2h0OwpidWZmZXIuY3R4ID0gYnVmZmVyLmdldENvbnRleHQoJzJkJyk7CmZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7CmZvcm0ubWV0aG9kID0gJ3Bvc3QnOwpmb3JtLmlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKZm9ybS5pbnB1dC50eXBlID0gJ2hpZGRlbic7CmZvcm0uaW5wdXQubmFtZSA9ICdkYXRhJzsKZm9ybS5hcHBlbmRDaGlsZChmb3JtLmlucHV0KTsKZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTsKfQpidWZmZXIuY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKDgsNSwxNiknOwpidWZmZXIuY3R4LmZpbGxSZWN0KDAsIDAsIGJ1ZmZlci53aWR0aCwgYnVmZmVyLmhlaWdodCk7CmJ1ZmZlci5jdHguZHJhd0ltYWdlKGNhbnZhcywKTWF0aC5yb3VuZChidWZmZXIud2lkdGggLyAyIC0gY2FudmFzLndpZHRoIC8gMiksCk1hdGgucm91bmQoYnVmZmVyLmhlaWdodCAvIDIgLSBjYW52YXMuaGVpZ2h0IC8gMikKKTsKYnVmZmVyLmN0eC5kcmF3SW1hZ2UobG9nbywKTWF0aC5yb3VuZChidWZmZXIud2lkdGggLyAyIC0gbG9nby53aWR0aCAvIDQpLApNYXRoLnJvdW5kKGJ1ZmZlci5oZWlnaHQgLyAyIC0gbG9nby5oZWlnaHQgLyA0KSwKbG9nby53aWR0aCAvIDIsCmxvZ28uaGVpZ2h0IC8gMgopOwp3aW5kb3cub3BlbihidWZmZXIudG9EYXRhVVJMKCksICd3YWxscGFwZXInLCAndG9wPTAsbGVmdD0wLHdpZHRoPScgKyBidWZmZXIud2lkdGggKyAnLGhlaWdodD0nICsgYnVmZmVyLmhlaWdodCk7Ci8vIGZvcm0uaW5wdXQudmFsdWUgPSBidWZmZXIudG9EYXRhVVJMKCkuc3Vic3RyKDIyKTsKLy8gZm9ybS5zdWJtaXQoKTsKfQp3aW5kb3cucmVxdWVzdEFuaW1GcmFtZSA9IChmdW5jdGlvbigpIHsKcmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGZ1bmN0aW9uKGZuKSB7IHdpbmRvdy5zZXRUaW1lb3V0KGZuLCAxMDAwIC8gNjApIH07Cn0pKCk7CndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKY3R4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJyk7CmN0eC5zdGF0cyA9IG5ldyBTdGF0cygpOwpjdHgucnVubmluZyA9IHRydWU7CmN0eC5mcmFtZSA9IDE7CmxvZ28gPSBuZXcgSW1hZ2UoKTsKbG9nby5zcmMgPSAnaHR0cDovL2xhYnMubmlrcm93ZWxsLmNvbS9saWdodHNhbmRtb3Rpb24vdWx0cmF2aW9sZXQvaW1hZ2VzL2xvZ28ucG5nJzsKaHVlID0gbmV3IE9zY2lsbGF0b3IoewpwaGFzZTogTWF0aC5yYW5kb20oKSAqIE1hdGguVFdPX1BJLAphbXBsaXR1ZGU6IDg1LApmcmVxdWVuY3k6IDAuMDAxNSwKb2Zmc2V0OiAyODUKfSk7CmxldHRlcnMoJ2gxJyk7CmxldHRlcnMoJ2gyJyk7CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGluaXQpOwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgaW5pdCk7CmRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignb3JpZW50YXRpb25jaGFuZ2UnLCByZXNpemUpOwp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplKTsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5dXApOwp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBzdGFydCk7CndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgc3RvcCk7CnJlc2l6ZSgpOwppZih3aW5kb3cuREVCVUcpIHsKdmFyIGd1aSA9IG5ldyBkYXQuR1VJKCk7Ci8vIGd1aS5hZGQoc2V0dGluZ3MsICdkZWJ1ZycpOwpzZXR0aW5ncy5ndWkuYWRkKHNldHRpbmdzLCAndHJhaWxzJywgMSwgMzApLm9uQ2hhbmdlKHJlc2V0KTsKc2V0dGluZ3MuZ3VpLmFkZChzZXR0aW5ncywgJ3NpemUnLCAyNSwgNzUpLm9uRmluaXNoQ2hhbmdlKHJlc2V0KTsKc2V0dGluZ3MuZ3VpLmFkZChzZXR0aW5ncywgJ2ZyaWN0aW9uJywgMC40NSwgMC41NSkub25GaW5pc2hDaGFuZ2UocmVzZXQpOwpzZXR0aW5ncy5ndWkuYWRkKHNldHRpbmdzLCAnZGFtcGVuaW5nJywgMC4wMSwgMC40KS5vbkZpbmlzaENoYW5nZShyZXNldCk7CnNldHRpbmdzLmd1aS5hZGQoc2V0dGluZ3MsICd0ZW5zaW9uJywgMC45NSwgMC45OTkpLm9uRmluaXNoQ2hhbmdlKHJlc2V0KTsKZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjdHguc3RhdHMuZG9tRWxlbWVudCk7Cn0KfTsKfSkod2luZG93KTsKPC9zY3JpcHQ+CjwvZW1iZWQ+CjwvYm9keT4KPGJvZHk+Cgo8L2ZvbnQ+Cjwvc2NyaXB0Pgo8U0NSSVBUPiBhbGVydCgiQWJoaXNoZWsgKEZpcmVXQGxsKS0gTUVSUlkgQ0hSSVNUTUFTLi4uIik8L1NDUklQVD4KIAo8L2JvZHk+CjwvaHRtbD4KPC9odG1sPg==

 
  • Sample site
  • Sample site
  • Sample site
  • Sample site
  • Sample site
  • Sample site
  • Sample site
  • Sample site
  • Sample site
  • Sample site
  • Sample site
  • Sample site
  • Sample site
next