{"product_id":"custom-acrylic-boxes","title":"Custom Acrylic Boxes","description":"\u003cdiv id=\"artetribe-acrylic-box-preview-embed\" data-artetribe-build=\"acrylic-box-20260826-blue-open-color-border-v8\"\u003e\n  \u003csection class=\"artetribe-acrylic-box-preview-embed__benefits\" aria-label=\"Custom acrylic box preview features\"\u003e\n    \u003carticle\u003e\n      \u003cspan class=\"artetribe-acrylic-box-preview-embed__icon\" aria-hidden=\"true\"\u003e\u003csvg viewbox=\"0 0 80 80\"\u003e\u003cpath d=\"m13 25 27-14 27 14-27 14-27-14Zm0 0v31l27 14 27-14V25M40 39v31\"\u003e\u003c\/path\u003e\u003cpath class=\"accent\" d=\"M19 28v24l21 11M61 28v24L40 63\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/span\u003e\n      \u003ch3\u003eSix independent faces\u003c\/h3\u003e\n      \u003cp\u003eReplace the bottom, front, back, left, right and lid artwork one face at a time.\u003c\/p\u003e\n    \u003c\/article\u003e\n    \u003carticle\u003e\n      \u003cspan class=\"artetribe-acrylic-box-preview-embed__icon\" aria-hidden=\"true\"\u003e\u003csvg viewbox=\"0 0 80 80\"\u003e\u003crect x=\"10\" y=\"14\" width=\"60\" height=\"52\" rx=\"4\"\u003e\u003c\/rect\u003e\u003ccircle class=\"accent\" cx=\"55\" cy=\"29\" r=\"7\"\u003e\u003c\/circle\u003e\u003cpath d=\"m17 57 15-17 10 10 8-8 13 15M25 9v10M55 61v10\"\u003e\u003c\/path\u003e\u003cpath class=\"accent\" d=\"M6 32h9M65 48h9\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/span\u003e\n      \u003ch3\u003eChoose how images fill\u003c\/h3\u003e\n      \u003cp\u003eKeep proportions with Crop to fill, or use Stretch to fill for the complete image.\u003c\/p\u003e\n    \u003c\/article\u003e\n    \u003carticle\u003e\n      \u003cspan class=\"artetribe-acrylic-box-preview-embed__icon\" aria-hidden=\"true\"\u003e\u003csvg viewbox=\"0 0 80 80\"\u003e\u003cpath d=\"M14 31h52v36H14zM14 31l9-18h45l-2 18M26 47h28\"\u003e\u003c\/path\u003e\u003cpath class=\"accent\" d=\"M23 13c14 7 29 7 45 0M66 31c-11-5-22-8-34-8\"\u003e\u003c\/path\u003e\u003ccircle cx=\"21\" cy=\"31\" r=\"3\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"59\" cy=\"31\" r=\"3\"\u003e\u003c\/circle\u003e\u003c\/svg\u003e\u003c\/span\u003e\n      \u003ch3\u003eInspect the assembled box\u003c\/h3\u003e\n      \u003cp\u003eDrag the lid, orbit the model, explode the panels and preview a transparent acrylic tint.\u003c\/p\u003e\n    \u003c\/article\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"artetribe-acrylic-box-preview-embed__tool\" aria-labelledby=\"artetribe-acrylic-box-preview-title\"\u003e\n    \u003cdiv class=\"artetribe-acrylic-box-preview-embed__heading\"\u003e\n      \u003ch2 id=\"artetribe-acrylic-box-preview-title\"\u003ePreview your custom acrylic box\u003c\/h2\u003e\n      \u003cp\u003eThe sample artwork starts on all six faces. Select any face to replace its image, choose a fill mode, then drag the lid to inspect the finished box.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"artetribe-acrylic-box-preview-embed__frame\" data-preview-shell\u003e\n      \u003cdiv class=\"artetribe-acrylic-box-preview-embed__loading\" data-preview-loading\u003eOpening the 3D acrylic box preview...\u003c\/div\u003e\n      \u003ciframe class=\"artetribe-acrylic-box-preview-embed__iframe\" data-preview-frame title=\"ArteTribe custom acrylic box 3D preview\" loading=\"eager\" scrolling=\"no\" sandbox=\"allow-scripts allow-same-origin allow-downloads\"\u003e\u003c\/iframe\u003e\n      \u003cscript type=\"text\/plain\" data-preview-source\u003ePCFkb2N0eXBlIGh0bWw+CjwhLS0KVEhFU0lTOiBBIHByb2R1Y3Rpb24tbWluZGVkIHNpeC1mYWNlIGNvbmZpZ3VyYXRvciB0aGF0IG1ha2VzIGFzc2VtYmx5IGFuZCBhcnR3b3JrIHBsYWNlbWVudCB1bmRlcnN0YW5kYWJsZSBhdCBhIGdsYW5jZS4KT1dOLVdPUkxEOiBBcnRlVHJpYmUgbGlnaHQgYmx1ZSwgS2xlaW4gYmx1ZSwgZnVsbHkgY2xlYXIgYWNyeWxpYywgYW5kIGV4YWN0IEU3IGN1dHRpbmcgZ2VvbWV0cnkgZGVmaW5lIHRoZSB2aXN1YWwgd29ybGQuClNUT1JZOiBTZWxlY3QgYSBmYWNlLCB1cGxvYWQgaXRzIGFydHdvcmssIGNob29zZSBob3cgaXQgZmlsbHMsIHRoZW4gaW5zcGVjdCB0aGUgYXNzZW1ibGVkLCBleHBsb2RlZCwgY2xvc2VkLCBvciBvcGVuIG9iamVjdC4KRklSU1QgVklFV1BPUlQ6IFRoZSBtb2RlbCwgcHJpbWFyeSBhc3NlbWJseSBhY3Rpb25zLCBhbmQgYWxsIHNpeCBmYWNlIHN0YXRlcyBhcmUgdmlzaWJsZSB3aXRob3V0IGV4cGxhbmF0aW9uLgpGT1JNOiBDb21wYWN0IHR3by1jb2x1bW4gb3BlcmF0aW5nIHdvcmtzcGFjZSBvbiBkZXNrdG9wIGFuZCBhIGNhbG0gc3RhY2tlZCB3b3JrZmxvdyBvbiBtb2JpbGUuCkZJTklTSDogdW5yZXZpZXdlZCBhbmQgdW5kb2N1bWVudGVkIGlzIHVuZmluaXNoZWQ7IHRoaXMgYnVpbGQgZW5kcyB3aXRoIHRoZSBmaW5pc2ggcmV2aWV3LCB0aGUgdmVyZGljdCwgYW5kIERFU0lHTi5tZAotLT4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEsdmlld3BvcnQtZml0PWNvdmVyIj4KICA8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciIgY29udGVudD0iI2VlZjhmZCI+CiAgPHRpdGxlPkN1c3RvbSBBY3J5bGljIEJveCAzRCBQcmV2aWV3IHwgQXJ0ZVRyaWJlPC90aXRsZT4KICA8c3R5bGU+Cjpyb290ewogIGNvbG9yLXNjaGVtZTpsaWdodDsKICAtLWJsdWU6IzA4N2FiNTsKICAtLWJsdWUtZGVlcDojMDY2ZDlmOwogIC0taW5rOiMxNzMyNDc7CiAgLS1tdXRlZDojNjM3YjhkOwogIC0tbGluZTojZDllOGYxOwogIC0td2FzaDojZWVmOGZkOwogIC0tcGFuZWw6I2ZmZjsKICAtLWZvY3VzOiNmZmIwMDA7CiAgLS1zaGFkb3c6MCAxOHB4IDUwcHggcmdiYSgyOCw3NywxMDUsLjEyKTsKICBmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIsc2Fucy1zZXJpZjsKfQoqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0KaHRtbCxib2R5e21hcmdpbjowO21pbi1oZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmOGZjZmU7Y29sb3I6dmFyKC0taW5rKX0KYnV0dG9uLGlucHV0e2ZvbnQ6aW5oZXJpdH0KYnV0dG9ue2NvbG9yOmluaGVyaXR9CmJ1dHRvbjpmb2N1cy12aXNpYmxlLGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZTozcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZm9jdXMpIDcwJSx3aGl0ZSk7b3V0bGluZS1vZmZzZXQ6MnB4fQouc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtoZWlnaHQ6MXB4IWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O21hcmdpbjotMXB4IWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O2NsaXA6cmVjdCgwLDAsMCwwKSFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnR9Ci5hcHAtc2hlbGx7bWluLWhlaWdodDoxMDBkdmg7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtcm93czphdXRvIDFmcjtwYWRkaW5nOjE4cHh9Ci50b3BiYXJ7aGVpZ2h0OjU4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjAgNHB4IDE0cHh9Ci50aXRsZS1ncm91cHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMXB4O21pbi13aWR0aDowfQouYnJhbmQtbWFya3t3aWR0aDoxMnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmx1ZSk7Ym94LXNoYWRvdzo5cHggMCAwIHJnYmEoOCwxMjIsMTgxLC4yMil9Ci50aXRsZS1ncm91cCBoMXttYXJnaW46MDtmb250LXNpemU6MTlweDtsaW5lLWhlaWdodDoxLjE1O2xldHRlci1zcGFjaW5nOi0uMDJlbX0KLnRpdGxlLWdyb3VwIHB7bWFyZ2luOjNweCAwIDA7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZToxMnB4fQoubG9jYWwtYmFkZ2V7cGFkZGluZzo2cHggOXB4O2JvcmRlcjoxcHggc29saWQgI2JmZGRlYTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6I2YzZmJmZjtjb2xvcjojMTg3YWE4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDJlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Ci53b3Jrc3BhY2V7bWluLWhlaWdodDowO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsMWZyKSAzOTJweDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjIycHg7YmFja2dyb3VuZDp2YXIoLS1wYW5lbCk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpfQouc3RhZ2V7cG9zaXRpb246cmVsYXRpdmU7bWluLXdpZHRoOjA7bWluLWhlaWdodDo2NDBweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDQ4JSAzNSUsI2ZmZiAwLCNmNGZiZmUgNDUlLCNlN2Y1ZmIgMTAwJSl9CiNwcmV2aWV3LWNhbnZhc3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG91Y2gtYWN0aW9uOm5vbmU7Y3Vyc29yOmdyYWJ9CiNwcmV2aWV3LWNhbnZhczphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfQojcHJldmlldy1jYW52YXNbZGF0YS1pbnRlcmFjdGlvbj0ibGlkIl17Y3Vyc29yOm5zLXJlc2l6ZX0KI3ByZXZpZXctY2FudmFzLmRyYWdnaW5nLWxpZHtjdXJzb3I6Z3JhYmJpbmd9Ci5zdGFnZS10b29sYmFye3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNnB4O2xlZnQ6MTZweDtkaXNwbGF5OmZsZXg7Z2FwOjhweDtwYWRkaW5nOjZweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMTg4LDIxNywyMzEsLjgpO2JvcmRlci1yYWRpdXM6MTRweDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjg4KTtib3gtc2hhZG93OjAgOHB4IDI2cHggcmdiYSgzNSw5MSwxMjMsLjEpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfQouaWNvbi1idXR0b257aGVpZ2h0OjM4cHg7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6N3B4O3BhZGRpbmc6MCAxMXB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMThzLGNvbG9yIC4xOHMsdHJhbnNmb3JtIC4xOHN9Ci5pY29uLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOiNlYWY2ZmI7Y29sb3I6dmFyKC0tYmx1ZS1kZWVwKX0KLmljb24tYnV0dG9uOmFjdGl2ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxcHgpfQouaWNvbi1idXR0b25bYXJpYS1wcmVzc2VkPSJ0cnVlIl17YmFja2dyb3VuZDp2YXIoLS1ibHVlKTtjb2xvcjojZmZmfQouaWNvbi1idXR0b24uY29tcGFjdHt3aWR0aDozOHB4O3BhZGRpbmc6MH0KLmljb24tYnV0dG9uIHN2Z3t3aWR0aDoxN3B4O2hlaWdodDoxN3B4O2ZpbGw6bm9uZTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxLjg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kfQouc3RhZ2UtaGludHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTtib3R0b206MTdweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMjhweCk7cGFkZGluZzo3cHggMTFweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMTk5LDIyMiwyMzQsLjgpO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC43OCk7Y29sb3I6IzVhNzQ4Njtmb250LXNpemU6MTFweDt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2Ryb3AtZmlsdGVyOmJsdXIoMTBweCk7cG9pbnRlci1ldmVudHM6bm9uZX0KLmxvYWRpbmctc3RhdGV7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjEwcHg7YmFja2dyb3VuZDpyZ2JhKDIzOCwyNDgsMjUzLC44Mik7Y29sb3I6IzQ3NzA4NDtmb250LXNpemU6MTNweDt0cmFuc2l0aW9uOm9wYWNpdHkgLjI1cyx2aXNpYmlsaXR5IC4yNXM7ei1pbmRleDo1fQoubG9hZGluZy1zdGF0ZS5oaWRkZW57b3BhY2l0eTowO3Zpc2liaWxpdHk6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmV9Ci5sb2FkaW5nLXJpbmd7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtib3JkZXI6MnB4IHNvbGlkICNjN2UxZWQ7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1ibHVlKTtib3JkZXItcmFkaXVzOjUwJTthbmltYXRpb246c3BpbiAuODVzIGxpbmVhciBpbmZpbml0ZX0KQGtleWZyYW1lcyBzcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19Ci5zdGFnZS1lcnJvcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjE2cHg7cmlnaHQ6MTZweDtib3R0b206MTZweDtwYWRkaW5nOjEwcHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNlZmI1YjU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6I2ZmZjNmMztjb2xvcjojOGQzMDMwO2ZvbnQtc2l6ZToxMnB4O3otaW5kZXg6Nn0KLmNvbnRyb2wtcGFuZWx7bWluLXdpZHRoOjA7b3ZlcmZsb3c6YXV0bztib3JkZXItbGVmdDoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDojZmZmO3Njcm9sbGJhci13aWR0aDp0aGluO3Njcm9sbGJhci1jb2xvcjojYmRkOGU1IHRyYW5zcGFyZW50fQouY29udHJvbC1zZWN0aW9ue3BhZGRpbmc6MjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTdmMGY1fQouc2VjdGlvbi1oZWFkaW5ne2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxNHB4O21hcmdpbi1ib3R0b206MTRweH0KLnNlY3Rpb24taGVhZGluZyBoMnttYXJnaW46MDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjI1O2xldHRlci1zcGFjaW5nOi0uMDFlbX0KLnNlY3Rpb24taGVhZGluZyBwe21hcmdpbjo0cHggMCAwO2NvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MTFweDtsaW5lLWhlaWdodDoxLjM1fQouY29tcGFjdC1oZWFkaW5ne21hcmdpbi1ib3R0b206MTBweH0KLmFjcnlsaWMtY29sb3ItY29udHJvbHN7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6N3B4fQouY2xlYXItYWNyeWxpY3ttaW4taGVpZ2h0OjM0cHg7cGFkZGluZzowIDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjYzhkZWVhO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNTM2ZDdkO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjgwMDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMThzLGJhY2tncm91bmQtY29sb3IgLjE4cyxjb2xvciAuMThzfQouY2xlYXItYWNyeWxpYzpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYmx1ZSk7Y29sb3I6dmFyKC0tYmx1ZS1kZWVwKTtiYWNrZ3JvdW5kOiNlZGY4ZmR9Ci5jbGVhci1hY3J5bGljLnNlbGVjdGVke2JvcmRlci1jb2xvcjp2YXIoLS1ibHVlKTtiYWNrZ3JvdW5kOiNlZGY4ZmQ7Y29sb3I6dmFyKC0tYmx1ZS1kZWVwKTtib3gtc2hhZG93OjAgMCAwIDFweCByZ2JhKDgsMTIyLDE4MSwuMTIpfQouYWNyeWxpYy1waWNrZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6N3B4O21pbi1oZWlnaHQ6MzRweDtwYWRkaW5nOjVweCA4cHggNXB4IDVweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6I2ZiZmRmZjtjdXJzb3I6cG9pbnRlcn0KLmFjcnlsaWMtcGlja2VyIGlucHV0e3dpZHRoOjI3cHg7aGVpZ2h0OjIzcHg7cGFkZGluZzowO2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtjdXJzb3I6cG9pbnRlcn0KLmFjcnlsaWMtcGlja2VyIGlucHV0Ojotd2Via2l0LWNvbG9yLXN3YXRjaC13cmFwcGVye3BhZGRpbmc6MH0KLmFjcnlsaWMtcGlja2VyIGlucHV0Ojotd2Via2l0LWNvbG9yLXN3YXRjaHtib3JkZXI6MXB4IHNvbGlkICNkNWUzZWE7Ym9yZGVyLXJhZGl1czo2cHh9Ci5hY3J5bGljLXBpY2tlciBzcGFue21pbi13aWR0aDo0MnB4O2NvbG9yOiM0NzYyNzQ7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6ODAwfQoudXBsb2FkLWNvdW50e21pbi13aWR0aDo0NHB4O3BhZGRpbmc6NXB4IDdweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6I2VkZjdmYjtjb2xvcjp2YXIoLS1ibHVlLWRlZXApO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjgwMDt0ZXh0LWFsaWduOmNlbnRlcn0KLmhlYWRpbmctYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9Ci5yZXNldC1hcnR3b3Jre3BhZGRpbmc6NXB4IDdweDtib3JkZXI6MXB4IHNvbGlkICNjOGRlZWE7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM1MzZkN2Q7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6ODAwO2N1cnNvcjpwb2ludGVyfQoucmVzZXQtYXJ0d29yazpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYmx1ZSk7Y29sb3I6dmFyKC0tYmx1ZS1kZWVwKTtiYWNrZ3JvdW5kOiNlZGY4ZmR9Ci5mYWNlLWxpc3R7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo4cHh9Ci5mYWNlLWl0ZW17bWluLXdpZHRoOjA7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpIGF1dG8gYXV0bztnYXA6NXB4O3BhZGRpbmc6NXB4O2JvcmRlcjoxcHggc29saWQgI2RjZWFmMTtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDojZmJmZGZlO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xOHMsYmFja2dyb3VuZC1jb2xvciAuMThzLGJveC1zaGFkb3cgLjE4c30KLmZhY2UtaXRlbTpob3Zlcntib3JkZXItY29sb3I6I2I5ZDhlN30KLmZhY2UtaXRlbS5zZWxlY3RlZHtib3JkZXItY29sb3I6dmFyKC0tYmx1ZSk7YmFja2dyb3VuZDojZjFmOWZkO2JveC1zaGFkb3c6MCAwIDAgMXB4IHJnYmEoOCwxMjIsMTgxLC4xNSl9Ci5mYWNlLXNlbGVjdHttaW4td2lkdGg6MDtwYWRkaW5nOjVweCA0cHg7Ym9yZGVyOjA7YmFja2dyb3VuZDp0cmFuc3BhcmVudDt0ZXh0LWFsaWduOmxlZnQ7Y3Vyc29yOnBvaW50ZXJ9Ci5mYWNlLW5hbWUsLmZhY2Utc3RhdHVze2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfQouZmFjZS1uYW1le2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjgwMH0KLmZhY2Utc3RhdHVze21hcmdpbi10b3A6M3B4O2NvbG9yOiM1OTZmN2U7Zm9udC1zaXplOjExcHh9Ci5mYWNlLXN0YXR1cy5yZWFkeXtjb2xvcjojMTc3NjRkfQoudXBsb2FkLWJ1dHRvbnthbGlnbi1zZWxmOmNlbnRlcjtwYWRkaW5nOjZweCA3cHg7Ym9yZGVyOjFweCBzb2xpZCAjYzhkZWVhO2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1ibHVlLWRlZXApO2ZvbnQtc2l6ZTo5LjVweDtmb250LXdlaWdodDo4MDA7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4xOHMsYm9yZGVyLWNvbG9yIC4xOHN9Ci51cGxvYWQtYnV0dG9uOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1ibHVlKTtiYWNrZ3JvdW5kOiNlZGY4ZmR9Ci5yZW1vdmUtYnV0dG9ue2FsaWduLXNlbGY6Y2VudGVyO3dpZHRoOjI1cHg7aGVpZ2h0OjI3cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgI2Q2ZTRlYjtib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzZiN2Y4ZDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfQoucmVtb3ZlLWJ1dHRvbjpob3Zlcntib3JkZXItY29sb3I6I2Q4OGM4YztiYWNrZ3JvdW5kOiNmZmY1ZjU7Y29sb3I6IzliM2YzZn0KLnJlbW92ZS1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Ci5maWxlLWlucHV0e2Rpc3BsYXk6bm9uZX0KLnNlZ21lbnRlZC1jb250cm9se2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6N3B4O3BhZGRpbmc6NHB4O2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOiNlZWY1Zjh9Ci5maWxsLW9wdGlvbnttaW4td2lkdGg6MDtwYWRkaW5nOjlweCA4cHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDt0ZXh0LWFsaWduOmxlZnQ7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4xOHMsYm94LXNoYWRvdyAuMThzfQouZmlsbC1vcHRpb24gc3BhbiwuZmlsbC1vcHRpb24gc21hbGx7ZGlzcGxheTpibG9ja30KLmZpbGwtb3B0aW9uIHNwYW57Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6ODAwfQouZmlsbC1vcHRpb24gc21hbGx7bWFyZ2luLXRvcDozcHg7Y29sb3I6IzVkNzI4MDtmb250LXNpemU6MTAuNXB4O2xpbmUtaGVpZ2h0OjEuM30KLmZpbGwtb3B0aW9uLnNlbGVjdGVke2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDhweCByZ2JhKDQyLDg4LDExMywuMSl9Ci5maWxsLW9wdGlvbi5zZWxlY3RlZCBzcGFue2NvbG9yOnZhcigtLWJsdWUtZGVlcCl9Ci5ib3JkZXItc2VjdGlvbiBvdXRwdXR7ZmxleDowIDAgYXV0bztjb2xvcjp2YXIoLS1ibHVlLWRlZXApO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjgwMDtsaW5lLWhlaWdodDoxLjR9Ci5ib3JkZXItbW9kZS1jb250cm9se2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDMsMWZyKTtnYXA6NXB4O3BhZGRpbmc6NHB4O2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOiNlZWY1Zjh9Ci5ib3JkZXItb3B0aW9ue21pbi1oZWlnaHQ6MzRweDtwYWRkaW5nOjdweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6ODAwO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMThzLGJveC1zaGFkb3cgLjE4cyxjb2xvciAuMThzfQouYm9yZGVyLW9wdGlvbi5zZWxlY3RlZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tYmx1ZS1kZWVwKTtib3gtc2hhZG93OjAgMnB4IDhweCByZ2JhKDQyLDg4LDExMywuMSl9Ci5ib3JkZXItd2lkdGgtY29udHJvbHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gbWlubWF4KDAsMWZyKTthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7bWFyZ2luLXRvcDoxNHB4O2NvbG9yOiM1MzZkN2Q7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo4MDB9Ci5ib3JkZXItd2lkdGgtY29udHJvbCBpbnB1dHt3aWR0aDoxMDAlO2FjY2VudC1jb2xvcjp2YXIoLS1ibHVlKTtjdXJzb3I6cG9pbnRlcn0KLmNvbnRyb2wtaGVscHttYXJnaW46NnB4IDAgMDtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjkuNXB4O2xpbmUtaGVpZ2h0OjEuNH0KLmJvcmRlci1jb2xvci1jb250cm9scywuYm9yZGVyLWltYWdlLWNvbnRyb2xze21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlN2YwZjV9Ci5ib3JkZXItY29sb3ItY29udHJvbHN7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtjb2xvcjojNTM2ZDdkO2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6ODAwfQouYm9yZGVyLWNvbG9yLWNvbnRyb2xzW2hpZGRlbl0sLmJvcmRlci1pbWFnZS1jb250cm9sc1toaWRkZW5de2Rpc3BsYXk6bm9uZX0KLmJvcmRlci1jb2xvci1waWNrZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6N3B4O21pbi1oZWlnaHQ6MzZweDtwYWRkaW5nOjVweCA4cHggNXB4IDVweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6I2ZiZmRmZjtjdXJzb3I6cG9pbnRlcn0KLmJvcmRlci1jb2xvci1waWNrZXIgaW5wdXR7d2lkdGg6MjhweDtoZWlnaHQ6MjRweDtwYWRkaW5nOjA7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO2N1cnNvcjpwb2ludGVyfQouYm9yZGVyLWNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1jb2xvci1zd2F0Y2gtd3JhcHBlcntwYWRkaW5nOjB9Ci5ib3JkZXItY29sb3ItcGlja2VyIGlucHV0Ojotd2Via2l0LWNvbG9yLXN3YXRjaHtib3JkZXI6MXB4IHNvbGlkICNkNWUzZWE7Ym9yZGVyLXJhZGl1czo2cHh9Ci5ib3JkZXItY29sb3ItcGlja2VyIHNwYW57bWluLXdpZHRoOjUwcHg7Y29sb3I6IzQ3NjI3NDtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo4MDB9Ci5ib3JkZXItaW1hZ2UtY29udHJvbHN7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweH0KLmJvcmRlci1pbWFnZS1jb250cm9scyBzdHJvbmcsLmJvcmRlci1pbWFnZS1jb250cm9scyBzcGFue2Rpc3BsYXk6YmxvY2t9Ci5ib3JkZXItaW1hZ2UtY29udHJvbHMgc3Ryb25ne2ZvbnQtc2l6ZToxMC41cHh9Ci5ib3JkZXItaW1hZ2UtY29udHJvbHMgc3BhbnttYXgtd2lkdGg6MTU1cHg7bWFyZ2luLXRvcDozcHg7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6OS41cHg7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5ib3JkZXItaW1hZ2UtYWN0aW9uc3tkaXNwbGF5OmZsZXg7Z2FwOjVweH0KLmJvcmRlci1pbWFnZS1hY3Rpb25zIGJ1dHRvbnttaW4taGVpZ2h0OjM0cHg7cGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2M4ZGVlYTtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tYmx1ZS1kZWVwKTtmb250LXNpemU6OS41cHg7Zm9udC13ZWlnaHQ6ODAwO2N1cnNvcjpwb2ludGVyfQouYm9yZGVyLWltYWdlLWFjdGlvbnMgYnV0dG9uOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1ibHVlKTtiYWNrZ3JvdW5kOiNlZGY4ZmR9Ci5ib3JkZXItaW1hZ2UtYWN0aW9ucyBidXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Ci5wcmV2aWV3LW5vdGV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjlweDtiYWNrZ3JvdW5kOiNmN2ZiZmQ7Ym9yZGVyLWJvdHRvbTowfQoucHJldmlldy1ub3RlIHN2Z3tmbGV4OjAgMCBhdXRvO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1ibHVlKTtzdHJva2Utd2lkdGg6MS44O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZH0KLnByZXZpZXctbm90ZSBwe21hcmdpbjowO2NvbG9yOiM2MDc3ODY7Zm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MS41fQoudG9hc3R7cG9zaXRpb246Zml4ZWQ7bGVmdDo1MCU7Ym90dG9tOjI0cHg7ei1pbmRleDoyMDttYXgtd2lkdGg6bWluKDQyMHB4LGNhbGMoMTAwdncgLSAzMHB4KSk7cGFkZGluZzo5cHggMTNweDtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDojMTczMjQ3O2NvbG9yOiNmZmY7Zm9udC1zaXplOjExcHg7Ym94LXNoYWRvdzowIDEycHggMzBweCByZ2JhKDE1LDQ1LDYyLC4yMik7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwxMnB4KTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30KLnRvYXN0LnZpc2libGV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwwKX0KQG1lZGlhKG1heC13aWR0aDo5MDBweCl7CiAgLmFwcC1zaGVsbHtwYWRkaW5nOjEwcHh9CiAgLndvcmtzcGFjZXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyO292ZXJmbG93OnZpc2libGU7Ym9yZGVyLXJhZGl1czoxOHB4fQogIC5zdGFnZXttaW4taGVpZ2h0OjU2ZHZoO2hlaWdodDo1NmR2aH0KICAuY29udHJvbC1wYW5lbHtvdmVyZmxvdzp2aXNpYmxlO2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSl9Cn0KQG1lZGlhKG1heC13aWR0aDo1MjBweCl7CiAgLmFwcC1zaGVsbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MDtiYWNrZ3JvdW5kOiNmZmZ9CiAgLnRvcGJhcntoZWlnaHQ6NjJweDtwYWRkaW5nOjlweCAxMnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpfQogIC50aXRsZS1ncm91cCBoMXtmb250LXNpemU6MTZweH0KICAudGl0bGUtZ3JvdXAgcHtmb250LXNpemU6MTBweH0KICAubG9jYWwtYmFkZ2V7Zm9udC1zaXplOjlweH0KICAud29ya3NwYWNle2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmV9CiAgLnN0YWdle2hlaWdodDo1MmR2aDttaW4taGVpZ2h0OjM2MHB4fQogIC5zdGFnZS10b29sYmFye3RvcDoxMHB4O2xlZnQ6MTBweDtyaWdodDoxMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjRweDtwYWRkaW5nOjVweH0KICAuaWNvbi1idXR0b257aGVpZ2h0OjM2cHg7cGFkZGluZzowIDhweDtmb250LXNpemU6MTBweH0KICAuaWNvbi1idXR0b24uY29tcGFjdHt3aWR0aDozNHB4fQogIC5zdGFnZS1oaW50e2JvdHRvbToxMHB4O3dpZHRoOmNhbGMoMTAwJSAtIDIycHgpO2ZvbnQtc2l6ZTo5LjVweDtsaW5lLWhlaWdodDoxLjM7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm9ybWFsfQogIC5jb250cm9sLXNlY3Rpb257cGFkZGluZzoxNnB4fQogIC5hY3J5bGljLWNvbG9yLWNvbnRyb2xze2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0KICAuY2xlYXItYWNyeWxpYywuYWNyeWxpYy1waWNrZXJ7bWluLWhlaWdodDo0NHB4fQogIC5mYWNlLWxpc3R7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0KICAuZmFjZS1pdGVte2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpIDYycHggNDRweH0KICAudXBsb2FkLWJ1dHRvbiwucmVtb3ZlLWJ1dHRvbnttaW4taGVpZ2h0OjQ0cHh9CiAgLnJlbW92ZS1idXR0b257d2lkdGg6NDRweDtoZWlnaHQ6NDRweH0KICAucmVzZXQtYXJ0d29ya3ttaW4taGVpZ2h0OjQ0cHg7cGFkZGluZzo4cHggMTBweH0KICAuYm9yZGVyLW9wdGlvbiwuYm9yZGVyLWltYWdlLWFjdGlvbnMgYnV0dG9ue21pbi1oZWlnaHQ6NDRweH0KICAuYm9yZGVyLWltYWdlLWNvbnRyb2xze2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZmxleC1kaXJlY3Rpb246Y29sdW1ufQp9CkBtZWRpYShwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7CiAgKiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7c2Nyb2xsLWJlaGF2aW9yOmF1dG8haW1wb3J0YW50O2FuaW1hdGlvbi1kdXJhdGlvbjouMDFtcyFpbXBvcnRhbnQ7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDoxIWltcG9ydGFudDt0cmFuc2l0aW9uLWR1cmF0aW9uOi4wMW1zIWltcG9ydGFudH0KfQoKPC9zdHlsZT4KICA8c2NyaXB0IHR5cGU9ImltcG9ydG1hcCI+CiAgewogICAgImltcG9ydHMiOiB7CiAgICAgICJ0aHJlZSI6ICJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3RocmVlQDAuMTYwLjAvYnVpbGQvdGhyZWUubW9kdWxlLmpzIiwKICAgICAgInRocmVlL2FkZG9ucy8iOiAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS90aHJlZUAwLjE2MC4wL2V4YW1wbGVzL2pzbS8iCiAgICB9CiAgfQogIDwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgogIDxtYWluIGNsYXNzPSJhcHAtc2hlbGwiPgogICAgPGhlYWRlciBjbGFzcz0idG9wYmFyIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUtZ3JvdXAiPgogICAgICAgIDxzcGFuIGNsYXNzPSJicmFuZC1tYXJrIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8aDE+Q3VzdG9tIEFjcnlsaWMgQm94PC9oMT4KICAgICAgICAgIDxwPlNpeC1mYWNlIEU3IHN0cnVjdHVyZSBwcmV2aWV3PC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPHNwYW4gY2xhc3M9ImxvY2FsLWJhZGdlIj5MaXZlIDNEIHByZXZpZXc8L3NwYW4+CiAgICA8L2hlYWRlcj4KCiAgICA8c2VjdGlvbiBjbGFzcz0id29ya3NwYWNlIiBhcmlhLWxhYmVsPSJBY3J5bGljIGJveCBjb25maWd1cmF0b3IiPgogICAgICA8ZGl2IGNsYXNzPSJzdGFnZSIgaWQ9InN0YWdlIj4KICAgICAgICA8Y2FudmFzIGlkPSJwcmV2aWV3LWNhbnZhcyIgdGFiaW5kZXg9IjAiIGFyaWEtZGVzY3JpYmVkYnk9InN0YWdlLWhpbnQiIGFyaWEtbGFiZWw9IkludGVyYWN0aXZlIDNEIGFjcnlsaWMgYm94IHByZXZpZXcuIERyYWcgdGhlIGxpZCB0byBvcGVuIG9yIGNsb3NlIGl0LCBjbGljayB0aGUgZnJvbnQgdXBsb2FkIGljb24gdG8gYWRkIGFydHdvcmssIHVzZSBhcnJvdyBrZXlzIHRvIG9yYml0LCBhbmQgdXNlIHBsdXMgb3IgbWludXMgdG8gem9vbS4iPjwvY2FudmFzPgoKICAgICAgICA8ZGl2IGNsYXNzPSJzdGFnZS10b29sYmFyIiBhcmlhLWxhYmVsPSIzRCB2aWV3IGNvbnRyb2xzIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9Imljb24tYnV0dG9uIiBpZD0iYXNzZW1ibHktdG9nZ2xlIiB0eXBlPSJidXR0b24iIGFyaWEtcHJlc3NlZD0iZmFsc2UiIHRpdGxlPSJFeHBsb2RlIGJveCI+CiAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTQgNy41IDEyIDNsOCA0LjUtOCA0LjUtOC00LjVabTAgNC41IDggNC41IDgtNC41TTQgMTYuNWw4IDQuNSA4LTQuNSIvPjwvc3ZnPgogICAgICAgICAgICA8c3Bhbj5FeHBsb2RlPC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJpY29uLWJ1dHRvbiIgaWQ9ImxpZC10b2dnbGUiIHR5cGU9ImJ1dHRvbiIgYXJpYS1wcmVzc2VkPSJmYWxzZSIgdGl0bGU9Ik9wZW4gbGlkIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNNCAxMGgxNnYxMEg0ek00IDEwbDMtNmgxNGwtMSA2TTggMTRoOCIvPjwvc3ZnPgogICAgICAgICAgICA8c3Bhbj5PcGVuIGxpZDwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24gY29tcGFjdCIgaWQ9InJlc2V0LXZpZXciIHR5cGU9ImJ1dHRvbiIgdGl0bGU9IlJlc2V0IHZpZXciIGFyaWEtbGFiZWw9IlJlc2V0IDNEIHZpZXciPgogICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik00LjkgNy41QTggOCAwIDEgMSA0IDE0TTQgNHY0aDQiLz48L3N2Zz4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24gY29tcGFjdCIgaWQ9InNhdmUtcHJldmlldyIgdHlwZT0iYnV0dG9uIiB0aXRsZT0iU2F2ZSBwcmV2aWV3IGltYWdlIiBhcmlhLWxhYmVsPSJTYXZlIHByZXZpZXcgaW1hZ2UiPgogICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAzdjEybTAgMCA0LTRtLTQgNC00LTRNNSAxOWgxNCIvPjwvc3ZnPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InN0YWdlLWhpbnQiIGlkPSJzdGFnZS1oaW50Ij5EcmFnIGxpZCDCtyBEcmFnIGJhY2tncm91bmQgwrcgU2VsZWN0IGZyb250IGljb24gdG8gdXBsb2FkPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSIgaWQ9ImxvYWRpbmctc3RhdGUiIHJvbGU9InN0YXR1cyI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibG9hZGluZy1yaW5nIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPgogICAgICAgICAgPHNwYW4+QnVpbGRpbmcgZXhhY3QgRTcgcGFuZWxzPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InN0YWdlLWVycm9yIiBpZD0ic3RhZ2UtZXJyb3IiIHJvbGU9ImFsZXJ0IiBoaWRkZW4+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGFzaWRlIGNsYXNzPSJjb250cm9sLXBhbmVsIiBhcmlhLWxhYmVsPSJDdXN0b21pemF0aW9uIGNvbnRyb2xzIj4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udHJvbC1zZWN0aW9uIGFjcnlsaWMtY29sb3Itc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWhlYWRpbmciPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxoMj5BY3J5bGljIGNvbG9yPC9oMj4KICAgICAgICAgICAgICA8cD5UcmFuc3BhcmVudCB0aW50IGFjcm9zcyBhbGwgc2l4IHBhbmVsczwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjcnlsaWMtY29sb3ItY29udHJvbHMiPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNsZWFyLWFjcnlsaWMgc2VsZWN0ZWQiIGlkPSJjbGVhci1hY3J5bGljIiB0eXBlPSJidXR0b24iIGFyaWEtcHJlc3NlZD0idHJ1ZSI+Q2xlYXI8L2J1dHRvbj4KICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImFjcnlsaWMtcGlja2VyIiB0aXRsZT0iQ2hvb3NlIGEgY3VzdG9tIHRyYW5zcGFyZW50IGFjcnlsaWMgdGludCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+Q3VzdG9tIGFjcnlsaWMgdGludDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iYWNyeWxpYy1jb2xvciIgdHlwZT0iY29sb3IiIHZhbHVlPSIjZmZmZmZmIiBhcmlhLWxhYmVsPSJDdXN0b20gYWNyeWxpYyB0aW50Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJhY3J5bGljLWNvbG9yLXZhbHVlIj5DbGVhcjwvc3Bhbj4KICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRyb2wtc2VjdGlvbiBmYWNlcy1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGluZyI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPGgyPkZhY2UgYXJ0d29yazwvaDI+CiAgICAgICAgICAgICAgPHA+U2l4IGZhY2VzIHN0YXJ0IHdpdGggYmx1ZSBib3RhbmljYWwgYXJ0d29yayBhbmQgYW4gb3BlbiBsaWQ8L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWFjdGlvbnMiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ1cGxvYWQtY291bnQiIGlkPSJ1cGxvYWQtY291bnQiPjAgLyA2PC9zcGFuPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InJlc2V0LWFydHdvcmsiIGlkPSJyZXNldC1hcnR3b3JrIiB0eXBlPSJidXR0b24iPlJlc3RvcmUgZGVmYXVsdDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImZhY2UtbGlzdCIgaWQ9ImZhY2UtbGlzdCI+CiAgICAgICAgICAgIDxhcnRpY2xlIGNsYXNzPSJmYWNlLWl0ZW0gc2VsZWN0ZWQiIGRhdGEtZmFjZT0iYm90dG9tIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJmYWNlLXNlbGVjdCIgdHlwZT0iYnV0dG9uIiBkYXRhLXNlbGVjdC1mYWNlPSJib3R0b20iIGFyaWEtcHJlc3NlZD0idHJ1ZSI+PHNwYW4gY2xhc3M9ImZhY2UtbmFtZSI+Qm90dG9tPC9zcGFuPjxzcGFuIGNsYXNzPSJmYWNlLXN0YXR1cyI+RW1wdHk8L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idXBsb2FkLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBkYXRhLXVwbG9hZC1mYWNlPSJib3R0b20iIGFyaWEtbGFiZWw9IlVwbG9hZCBhcnR3b3JrIGZvciBCb3R0b20iPlVwbG9hZDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InJlbW92ZS1idXR0b24iIHR5cGU9ImJ1dHRvbiIgZGF0YS1yZW1vdmUtZmFjZT0iYm90dG9tIiBhcmlhLWxhYmVsPSJSZW1vdmUgQm90dG9tIGFydHdvcmsiIGhpZGRlbj7DlzwvYnV0dG9uPgogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZmlsZS1pbnB1dCIgdHlwZT0iZmlsZSIgYWNjZXB0PSJpbWFnZS9wbmcsaW1hZ2UvanBlZyxpbWFnZS93ZWJwIiBkYXRhLWZpbGUtZmFjZT0iYm90dG9tIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICA8L2FydGljbGU+CiAgICAgICAgICAgIDxhcnRpY2xlIGNsYXNzPSJmYWNlLWl0ZW0iIGRhdGEtZmFjZT0iZnJvbnQiPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImZhY2Utc2VsZWN0IiB0eXBlPSJidXR0b24iIGRhdGEtc2VsZWN0LWZhY2U9ImZyb250IiBhcmlhLXByZXNzZWQ9ImZhbHNlIj48c3BhbiBjbGFzcz0iZmFjZS1uYW1lIj5Gcm9udDwvc3Bhbj48c3BhbiBjbGFzcz0iZmFjZS1zdGF0dXMiPkVtcHR5PC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InVwbG9hZC1idXR0b24iIHR5cGU9ImJ1dHRvbiIgZGF0YS11cGxvYWQtZmFjZT0iZnJvbnQiIGFyaWEtbGFiZWw9IlVwbG9hZCBhcnR3b3JrIGZvciBGcm9udCI+VXBsb2FkPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icmVtb3ZlLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBkYXRhLXJlbW92ZS1mYWNlPSJmcm9udCIgYXJpYS1sYWJlbD0iUmVtb3ZlIEZyb250IGFydHdvcmsiIGhpZGRlbj7DlzwvYnV0dG9uPgogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZmlsZS1pbnB1dCIgdHlwZT0iZmlsZSIgYWNjZXB0PSJpbWFnZS9wbmcsaW1hZ2UvanBlZyxpbWFnZS93ZWJwIiBkYXRhLWZpbGUtZmFjZT0iZnJvbnQiIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgIDwvYXJ0aWNsZT4KICAgICAgICAgICAgPGFydGljbGUgY2xhc3M9ImZhY2UtaXRlbSIgZGF0YS1mYWNlPSJiYWNrIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJmYWNlLXNlbGVjdCIgdHlwZT0iYnV0dG9uIiBkYXRhLXNlbGVjdC1mYWNlPSJiYWNrIiBhcmlhLXByZXNzZWQ9ImZhbHNlIj48c3BhbiBjbGFzcz0iZmFjZS1uYW1lIj5CYWNrPC9zcGFuPjxzcGFuIGNsYXNzPSJmYWNlLXN0YXR1cyI+RW1wdHk8L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idXBsb2FkLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBkYXRhLXVwbG9hZC1mYWNlPSJiYWNrIiBhcmlhLWxhYmVsPSJVcGxvYWQgYXJ0d29yayBmb3IgQmFjayI+VXBsb2FkPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icmVtb3ZlLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBkYXRhLXJlbW92ZS1mYWNlPSJiYWNrIiBhcmlhLWxhYmVsPSJSZW1vdmUgQmFjayBhcnR3b3JrIiBoaWRkZW4+w5c8L2J1dHRvbj4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZpbGUtaW5wdXQiIHR5cGU9ImZpbGUiIGFjY2VwdD0iaW1hZ2UvcG5nLGltYWdlL2pwZWcsaW1hZ2Uvd2VicCIgZGF0YS1maWxlLWZhY2U9ImJhY2siIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgIDwvYXJ0aWNsZT4KICAgICAgICAgICAgPGFydGljbGUgY2xhc3M9ImZhY2UtaXRlbSIgZGF0YS1mYWNlPSJsZWZ0Ij4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJmYWNlLXNlbGVjdCIgdHlwZT0iYnV0dG9uIiBkYXRhLXNlbGVjdC1mYWNlPSJsZWZ0IiBhcmlhLXByZXNzZWQ9ImZhbHNlIj48c3BhbiBjbGFzcz0iZmFjZS1uYW1lIj5MZWZ0PC9zcGFuPjxzcGFuIGNsYXNzPSJmYWNlLXN0YXR1cyI+RW1wdHk8L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idXBsb2FkLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBkYXRhLXVwbG9hZC1mYWNlPSJsZWZ0IiBhcmlhLWxhYmVsPSJVcGxvYWQgYXJ0d29yayBmb3IgTGVmdCI+VXBsb2FkPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icmVtb3ZlLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBkYXRhLXJlbW92ZS1mYWNlPSJsZWZ0IiBhcmlhLWxhYmVsPSJSZW1vdmUgTGVmdCBhcnR3b3JrIiBoaWRkZW4+w5c8L2J1dHRvbj4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZpbGUtaW5wdXQiIHR5cGU9ImZpbGUiIGFjY2VwdD0iaW1hZ2UvcG5nLGltYWdlL2pwZWcsaW1hZ2Uvd2VicCIgZGF0YS1maWxlLWZhY2U9ImxlZnQiIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgIDwvYXJ0aWNsZT4KICAgICAgICAgICAgPGFydGljbGUgY2xhc3M9ImZhY2UtaXRlbSIgZGF0YS1mYWNlPSJyaWdodCI+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZmFjZS1zZWxlY3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zZWxlY3QtZmFjZT0icmlnaHQiIGFyaWEtcHJlc3NlZD0iZmFsc2UiPjxzcGFuIGNsYXNzPSJmYWNlLW5hbWUiPlJpZ2h0PC9zcGFuPjxzcGFuIGNsYXNzPSJmYWNlLXN0YXR1cyI+RW1wdHk8L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idXBsb2FkLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBkYXRhLXVwbG9hZC1mYWNlPSJyaWdodCIgYXJpYS1sYWJlbD0iVXBsb2FkIGFydHdvcmsgZm9yIFJpZ2h0Ij5VcGxvYWQ8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJyZW1vdmUtYnV0dG9uIiB0eXBlPSJidXR0b24iIGRhdGEtcmVtb3ZlLWZhY2U9InJpZ2h0IiBhcmlhLWxhYmVsPSJSZW1vdmUgUmlnaHQgYXJ0d29yayIgaGlkZGVuPsOXPC9idXR0b24+CiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmaWxlLWlucHV0IiB0eXBlPSJmaWxlIiBhY2NlcHQ9ImltYWdlL3BuZyxpbWFnZS9qcGVnLGltYWdlL3dlYnAiIGRhdGEtZmlsZS1mYWNlPSJyaWdodCIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgPC9hcnRpY2xlPgogICAgICAgICAgICA8YXJ0aWNsZSBjbGFzcz0iZmFjZS1pdGVtIiBkYXRhLWZhY2U9ImxpZCI+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZmFjZS1zZWxlY3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zZWxlY3QtZmFjZT0ibGlkIiBhcmlhLXByZXNzZWQ9ImZhbHNlIj48c3BhbiBjbGFzcz0iZmFjZS1uYW1lIj5Ub3AgLyBMaWQ8L3NwYW4+PHNwYW4gY2xhc3M9ImZhY2Utc3RhdHVzIj5FbXB0eTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ1cGxvYWQtYnV0dG9uIiB0eXBlPSJidXR0b24iIGRhdGEtdXBsb2FkLWZhY2U9ImxpZCIgYXJpYS1sYWJlbD0iVXBsb2FkIGFydHdvcmsgZm9yIFRvcCAvIExpZCI+VXBsb2FkPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icmVtb3ZlLWJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBkYXRhLXJlbW92ZS1mYWNlPSJsaWQiIGFyaWEtbGFiZWw9IlJlbW92ZSBUb3AgLyBMaWQgYXJ0d29yayIgaGlkZGVuPsOXPC9idXR0b24+CiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmaWxlLWlucHV0IiB0eXBlPSJmaWxlIiBhY2NlcHQ9ImltYWdlL3BuZyxpbWFnZS9qcGVnLGltYWdlL3dlYnAiIGRhdGEtZmlsZS1mYWNlPSJsaWQiIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgIDwvYXJ0aWNsZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRyb2wtc2VjdGlvbiBmaWxsLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIGNvbXBhY3QtaGVhZGluZyI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPGgyPkltYWdlIGZpbGw8L2gyPgogICAgICAgICAgICAgIDxwIGlkPSJzZWxlY3RlZC1mYWNlLWxhYmVsIj5Cb3R0b20gZmFjZTwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlZ21lbnRlZC1jb250cm9sIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iSW1hZ2UgZmlsbCBtb2RlIj4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJmaWxsLW9wdGlvbiBzZWxlY3RlZCIgZGF0YS1maWxsLW1vZGU9ImNvdmVyIiBhcmlhLXByZXNzZWQ9InRydWUiPgogICAgICAgICAgICAgIDxzcGFuPkNyb3AgdG8gZmlsbDwvc3Bhbj4KICAgICAgICAgICAgICA8c21hbGw+S2VlcCBwcm9wb3J0aW9uczwvc21hbGw+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImZpbGwtb3B0aW9uIiBkYXRhLWZpbGwtbW9kZT0ic3RyZXRjaCIgYXJpYS1wcmVzc2VkPSJmYWxzZSI+CiAgICAgICAgICAgICAgPHNwYW4+U3RyZXRjaCB0byBmaWxsPC9zcGFuPgogICAgICAgICAgICAgIDxzbWFsbD5Vc2UgdGhlIGZ1bGwgaW1hZ2U8L3NtYWxsPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRyb2wtc2VjdGlvbiBib3JkZXItc2VjdGlvbiIgYXJpYS1sYWJlbGxlZGJ5PSJib3JkZXItc2VjdGlvbi10aXRsZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWhlYWRpbmcgY29tcGFjdC1oZWFkaW5nIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8aDIgaWQ9ImJvcmRlci1zZWN0aW9uLXRpdGxlIj5QcmludGVkIGJvcmRlcjwvaDI+CiAgICAgICAgICAgICAgPHAgaWQ9ImJvcmRlci10YXJnZXQtbGFiZWwiPkNoYW5nZXMgYXBwbHkgdG8gYWxsIDYgZmFjZXM8L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8b3V0cHV0IGlkPSJib3JkZXItd2lkdGgtdmFsdWUiIGZvcj0iYm9yZGVyLXdpZHRoIj4yLjAgbW08L291dHB1dD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYm9yZGVyLW1vZGUtY29udHJvbCIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlByaW50ZWQgYm9yZGVyIGNvbnRlbnQiPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJvcmRlci1vcHRpb24gc2VsZWN0ZWQiIGRhdGEtYm9yZGVyLW1vZGU9Im5vbmUiIGFyaWEtcHJlc3NlZD0idHJ1ZSI+Tm9uZTwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJvcmRlci1vcHRpb24iIGRhdGEtYm9yZGVyLW1vZGU9ImNvbG9yIiBhcmlhLXByZXNzZWQ9ImZhbHNlIj5Db2xvcjwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJvcmRlci1vcHRpb24iIGRhdGEtYm9yZGVyLW1vZGU9ImltYWdlIiBhcmlhLXByZXNzZWQ9ImZhbHNlIj5JbWFnZTwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJvcmRlci13aWR0aC1jb250cm9sIiBmb3I9ImJvcmRlci13aWR0aCI+CiAgICAgICAgICAgIDxzcGFuPkJvcmRlciB3aWR0aDwvc3Bhbj4KICAgICAgICAgICAgPGlucHV0IGlkPSJib3JkZXItd2lkdGgiIHR5cGU9InJhbmdlIiBtaW49IjAiIG1heD0iMTAiIHN0ZXA9IjAuNSIgdmFsdWU9IjIiIGFyaWEtZGVzY3JpYmVkYnk9ImJvcmRlci13aWR0aC1oZWxwIj4KICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICA8cCBjbGFzcz0iY29udHJvbC1oZWxwIiBpZD0iYm9yZGVyLXdpZHRoLWhlbHAiPjAtMTAgbW0sIG1lYXN1cmVkIGlud2FyZCBmcm9tIHRoZSBleGFjdCBFNyBjdXQgY29udG91ci48L3A+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItY29sb3ItY29udHJvbHMiIGlkPSJib3JkZXItY29sb3ItY29udHJvbHMiIGhpZGRlbj4KICAgICAgICAgICAgPGxhYmVsIGZvcj0iYm9yZGVyLWNvbG9yIj5Cb3JkZXIgY29sb3I8L2xhYmVsPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJvcmRlci1jb2xvci1waWNrZXIiPgogICAgICAgICAgICAgIDxpbnB1dCBpZD0iYm9yZGVyLWNvbG9yIiB0eXBlPSJjb2xvciIgdmFsdWU9IiMwODdhYjUiIGFyaWEtbGFiZWw9IlByaW50ZWQgYm9yZGVyIGNvbG9yIj4KICAgICAgICAgICAgICA8c3BhbiBpZD0iYm9yZGVyLWNvbG9yLXZhbHVlIj4jMDg3QUI1PC9zcGFuPgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItaW1hZ2UtY29udHJvbHMiIGlkPSJib3JkZXItaW1hZ2UtY29udHJvbHMiIGhpZGRlbj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8c3Ryb25nPkJvcmRlciBpbWFnZTwvc3Ryb25nPgogICAgICAgICAgICAgIDxzcGFuIGlkPSJib3JkZXItaW1hZ2Utc3RhdHVzIj5ObyBib3JkZXIgaW1hZ2U8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItaW1hZ2UtYWN0aW9ucyI+CiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJ1cGxvYWQtYm9yZGVyLWltYWdlIj5VcGxvYWQgaW1hZ2U8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9InJlbW92ZS1ib3JkZXItaW1hZ2UiIGhpZGRlbj5SZW1vdmU8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZmlsZS1pbnB1dCIgaWQ9ImJvcmRlci1pbWFnZS1maWxlIiB0eXBlPSJmaWxlIiBhY2NlcHQ9ImltYWdlL3BuZyxpbWFnZS9qcGVnLGltYWdlL3dlYnAiIHRhYmluZGV4PSItMSI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250cm9sLXNlY3Rpb24gcHJldmlldy1ub3RlIj4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDIyYTEwIDEwIDAgMSAwIDAtMjAgMTAgMTAgMCAwIDAgMCAyMFptMC0xNHY1bTAgM3YuMDEiLz48L3N2Zz4KICAgICAgICAgIDxwPlRoZSBwcmV2aWV3IHVzZXMgdGhlIHN1cHBsaWVkIEU3IGN1dHRpbmcgY29udG91cnMgYW5kIGEgMi42IG1tIHRoaWNrbmVzcyBpbmZlcnJlZCBmcm9tIHRoZSBzbG90cy4gT25lIDAtMTAgbW0gcHJpbnRlZCBib3JkZXIgc2V0dGluZyBhbHdheXMgdXBkYXRlcyBhbGwgc2l4IGZhY2VzIHRvZ2V0aGVyLiBQcmludGVkIGNvbG9yIGFuZCBwaHlzaWNhbCBmaXQgcmVtYWluIHJlcHJlc2VudGF0aXZlLjwvcD4KICAgICAgICA8L3NlY3Rpb24+CiAgICAgIDwvYXNpZGU+CiAgICA8L3NlY3Rpb24+CiAgPC9tYWluPgogIDxkaXYgY2xhc3M9InRvYXN0IiBpZD0idG9hc3QiIHJvbGU9InN0YXR1cyIgYXJpYS1saXZlPSJwb2xpdGUiPjwvZGl2PgogIDxzY3JpcHQgdHlwZT0ibW9kdWxlIj4KLy8gR2VuZXJhdGVkIGZyb20gdGhlIHN1cHBsaWVkIEU3IERYRi4gRG8gbm90IGhhbmQtZWRpdC4NCmV4cG9ydCBjb25zdCBFN19HRU9NRVRSWT17InNvdXJjZSI6IkU3LWN1dHRpbmcuZHhmIiwidW5pdHMiOiJtbSIsInRoaWNrbmVzcyI6Mi42LCJzbG90Ijp7Imxlbmd0aCI6MTAuMiwid2lkdGgiOjIuNn0sImhpbmdlSG9sZURpYW1ldGVyIjo1LjAsImV4Y2x1ZGVkTGF5b3V0RW50aXRpZXMiOlsxLDIsMyw0XSwicGFydHMiOnsiYm90dG9tIjp7ImlkIjoiYm90dG9tIiwibGFiZWwiOiJCb3R0b20iLCJvdXRlckVudGl0eSI6MCwiaG9sZUVudGl0aWVzIjpbXSwiYm91bmRzIjp7Im1pblgiOi0xNDIuNTA2MSwibWF4WCI6LTE2Ljk5NDYsIm1pblkiOi00MTcuNDA2NSwibWF4WSI6LTMzMS44MjQyLCJ3aWR0aCI6MTI1LjUxMTUsImhlaWdodCI6ODUuNTgyM30sIm91dGVyIjpbWy0xMzcuNzc0NywtMzM0LjYxNzZdLFstMTMzLjM5OTcsLTMzNC42MTc2XSxbLTEyMy43NzQ3LC0zMzQuNjE3Nl0sWy0xMTQuMTQ5NywtMzM0LjYxNzZdLFstMTA5Ljc3NDcsLTMzNC42MTc2XSxbLTEwOS43NzQ3LC0zMzQuMzM3NF0sWy0xMDkuNzc0NywtMzMzLjcyMDldLFstMTA5Ljc3NDcsLTMzMy4xMDQ0XSxbLTEwOS43NzQ3LC0zMzIuODI0Ml0sWy0xMDkuNjk1OSwtMzMyLjQzNTZdLFstMTA5LjQ4MTIsLTMzMi4xMTc3XSxbLTEwOS4xNjMzLC0zMzEuOTAzXSxbLTEwOC43NzQ3LC0zMzEuODI0Ml0sWy0xMDcuNTI0NywtMzMxLjgyNDJdLFstMTA0Ljc3NDcsLTMzMS44MjQyXSxbLTEwMi4wMjQ3LC0zMzEuODI0Ml0sWy0xMDAuNzc0NywtMzMxLjgyNDJdLFstMTAwLjM4NjEsLTMzMS45MDNdLFstMTAwLjA2ODIsLTMzMi4xMTc3XSxbLTk5Ljg1MzUsLTMzMi40MzU2XSxbLTk5Ljc3NDcsLTMzMi44MjQyXSxbLTk5Ljc3NDcsLTMzMy4xMDQ0XSxbLTk5Ljc3NDcsLTMzMy43MjA5XSxbLTk5Ljc3NDcsLTMzNC4zMzc0XSxbLTk5Ljc3NDcsLTMzNC42MTc2XSxbLTkzLjUyNDcsLTMzNC42MTc2XSxbLTc5Ljc3NDcsLTMzNC42MTc2XSxbLTY2LjAyNDcsLTMzNC42MTc2XSxbLTU5Ljc3NDcsLTMzNC42MTc2XSxbLTU5Ljc3NDcsLTMzNC4zNDhdLFstNTkuNzc0NywtMzMzLjc1NDhdLFstNTkuNzc0NywtMzMzLjE2MTVdLFstNTkuNzc0NywtMzMyLjg5MTldLFstNTkuNjk1OSwtMzMyLjUwMzNdLFstNTkuNDgxMywtMzMyLjE4NTRdLFstNTkuMTYzMywtMzMxLjk3MDddLFstNTguNzc0NywtMzMxLjg5MTldLFstNTcuNTI0NywtMzMxLjg5MTldLFstNTQuNzc0NywtMzMxLjg5MTldLFstNTIuMDI0NywtMzMxLjg5MTldLFstNTAuNzc0NywtMzMxLjg5MTldLFstNTAuMzg2MSwtMzMxLjk3MDddLFstNTAuMDY4MiwtMzMyLjE4NTRdLFstNDkuODUzNSwtMzMyLjUwMzNdLFstNDkuNzc0NywtMzMyLjg5MTldLFstNDkuNzc0NywtMzMzLjE2MTVdLFstNDkuNzc0NywtMzMzLjc1NDhdLFstNDkuNzc0NywtMzM0LjM0OF0sWy00OS43NzQ3LC0zMzQuNjE3Nl0sWy00NS4zOTk3LC0zMzQuNjE3Nl0sWy0zNS43NzQ3LC0zMzQuNjE3Nl0sWy0yNi4xNDk3LC0zMzQuNjE3Nl0sWy0yMS43NzQ3LC0zMzQuNjE3Nl0sWy0yMC45OTgxLC0zMzQuNzc1NF0sWy0yMC4zNjIyLC0zMzUuMjA1MV0sWy0xOS45MzI1LC0zMzUuODQxXSxbLTE5Ljc3NDcsLTMzNi42MTc2XSxbLTE5Ljc3NDcsLTM0MS43NzM1XSxbLTE5Ljc3NDcsLTM1My4xMTY1XSxbLTE5Ljc3NDcsLTM2NC40NTk1XSxbLTE5Ljc3NDcsLTM2OS42MTU0XSxbLTE5LjQ5NjYsLTM2OS42MTU0XSxbLTE4Ljg4NDYsLTM2OS42MTU0XSxbLTE4LjI3MjcsLTM2OS42MTU0XSxbLTE3Ljk5NDYsLTM2OS42MTU0XSxbLTE3LjYwNiwtMzY5LjY5NDJdLFstMTcuMjg4LC0zNjkuOTA4OV0sWy0xNy4wNzM0LC0zNzAuMjI2OF0sWy0xNi45OTQ2LC0zNzAuNjE1NF0sWy0xNi45OTQ2LC0zNzEuODY1NF0sWy0xNi45OTQ2LC0zNzQuNjE1NF0sWy0xNi45OTQ2LC0zNzcuMzY1NF0sWy0xNi45OTQ2LC0zNzguNjE1NF0sWy0xNy4wNzM0LC0zNzkuMDA0XSxbLTE3LjI4OCwtMzc5LjMyMl0sWy0xNy42MDYsLTM3OS41MzY2XSxbLTE3Ljk5NDYsLTM3OS42MTU0XSxbLTE4LjI3MjcsLTM3OS42MTU0XSxbLTE4Ljg4NDcsLTM3OS42MTU0XSxbLTE5LjQ5NjYsLTM3OS42MTU0XSxbLTE5Ljc3NDcsLTM3OS42MTU0XSxbLTE5Ljc3NDcsLTM4NC43NzJdLFstMTkuNzc0NywtMzk2LjExNjVdLFstMTkuNzc0NywtNDA3LjQ2MV0sWy0xOS43NzQ3LC00MTIuNjE3Nl0sWy0xOS45MzI1LC00MTMuMzk0Ml0sWy0yMC4zNjIyLC00MTQuMDMwMV0sWy0yMC45OTgxLC00MTQuNDU5OF0sWy0yMS43NzQ3LC00MTQuNjE3Nl0sWy0yNi4xNDk3LC00MTQuNjE3Nl0sWy0zNS43NzQ3LC00MTQuNjE3Nl0sWy00NS4zOTk3LC00MTQuNjE3Nl0sWy00OS43NzQ3LC00MTQuNjE3Nl0sWy00OS43NzQ3LC00MTQuODk3MV0sWy00OS43NzQ3LC00MTUuNTEyXSxbLTQ5Ljc3NDcsLTQxNi4xMjddLFstNDkuNzc0NywtNDE2LjQwNjVdLFstNDkuODUzNSwtNDE2Ljc5NTFdLFstNTAuMDY4MiwtNDE3LjExM10sWy01MC4zODYxLC00MTcuMzI3N10sWy01MC43NzQ3LC00MTcuNDA2NV0sWy01Mi4wMjQ3LC00MTcuNDA2NV0sWy01NC43NzQ3LC00MTcuNDA2NV0sWy01Ny41MjQ3LC00MTcuNDA2NV0sWy01OC43NzQ3LC00MTcuNDA2NV0sWy01OS4xNjMzLC00MTcuMzI3N10sWy01OS40ODEzLC00MTcuMTEzXSxbLTU5LjY5NTksLTQxNi43OTUxXSxbLTU5Ljc3NDcsLTQxNi40MDY1XSxbLTU5Ljc3NDcsLTQxNi4xMjddLFstNTkuNzc0NywtNDE1LjUxMl0sWy01OS43NzQ3LC00MTQuODk3MV0sWy01OS43NzQ3LC00MTQuNjE3Nl0sWy02Ni4wMjQ3LC00MTQuNjE3Nl0sWy03OS43NzQ3LC00MTQuNjE3Nl0sWy05My41MjQ3LC00MTQuNjE3Nl0sWy05OS43NzQ3LC00MTQuNjE3Nl0sWy05OS43NzQ3LC00MTQuODg5N10sWy05OS43NzQ3LC00MTUuNDg4NF0sWy05OS43NzQ3LC00MTYuMDg3MV0sWy05OS43NzQ3LC00MTYuMzU5Ml0sWy05OS44NTM1LC00MTYuNzQ3OF0sWy0xMDAuMDY4MiwtNDE3LjA2NTddLFstMTAwLjM4NjEsLTQxNy4yODA0XSxbLTEwMC43NzQ3LC00MTcuMzU5Ml0sWy0xMDIuMDI0NywtNDE3LjM1OTJdLFstMTA0Ljc3NDcsLTQxNy4zNTkyXSxbLTEwNy41MjQ3LC00MTcuMzU5Ml0sWy0xMDguNzc0NywtNDE3LjM1OTJdLFstMTA5LjE2MzMsLTQxNy4yODA0XSxbLTEwOS40ODEzLC00MTcuMDY1N10sWy0xMDkuNjk1OSwtNDE2Ljc0NzhdLFstMTA5Ljc3NDcsLTQxNi4zNTkyXSxbLTEwOS43NzQ3LC00MTYuMDg3MV0sWy0xMDkuNzc0NywtNDE1LjQ4ODRdLFstMTA5Ljc3NDcsLTQxNC44ODk3XSxbLTEwOS43NzQ3LC00MTQuNjE3Nl0sWy0xMTQuMTQ5NywtNDE0LjYxNzZdLFstMTIzLjc3NDcsLTQxNC42MTc2XSxbLTEzMy4zOTk3LC00MTQuNjE3Nl0sWy0xMzcuNzc0NywtNDE0LjYxNzZdLFstMTM4LjU1MTMsLTQxNC40NTk4XSxbLTEzOS4xODcyLC00MTQuMDMwMV0sWy0xMzkuNjE2OSwtNDEzLjM5NDJdLFstMTM5Ljc3NDcsLTQxMi42MTc2XSxbLTEzOS43NzQ3LC00MDcuNDYxXSxbLTEzOS43NzQ3LC0zOTYuMTE2NV0sWy0xMzkuNzc0NywtMzg0Ljc3Ml0sWy0xMzkuNzc0NywtMzc5LjYxNTRdLFstMTQwLjA0NTIsLTM3OS42MTU0XSxbLTE0MC42NDA0LC0zNzkuNjE1NF0sWy0xNDEuMjM1NiwtMzc5LjYxNTRdLFstMTQxLjUwNjEsLTM3OS42MTU0XSxbLTE0MS44OTQ3LC0zNzkuNTM2Nl0sWy0xNDIuMjEyNiwtMzc5LjMyMl0sWy0xNDIuNDI3MywtMzc5LjAwNF0sWy0xNDIuNTA2MSwtMzc4LjYxNTRdLFstMTQyLjUwNjEsLTM3Ny4zNjU0XSxbLTE0Mi41MDYxLC0zNzQuNjE1NF0sWy0xNDIuNTA2MSwtMzcxLjg2NTRdLFstMTQyLjUwNjEsLTM3MC42MTU0XSxbLTE0Mi40MjczLC0zNzAuMjI2OF0sWy0xNDIuMjEyNiwtMzY5LjkwODldLFstMTQxLjg5NDcsLTM2OS42OTQyXSxbLTE0MS41MDYxLC0zNjkuNjE1NF0sWy0xNDEuMjM1NiwtMzY5LjYxNTRdLFstMTQwLjY0MDQsLTM2OS42MTU0XSxbLTE0MC4wNDUyLC0zNjkuNjE1NF0sWy0xMzkuNzc0NywtMzY5LjYxNTRdLFstMTM5Ljc3NDcsLTM2NC40NTk1XSxbLTEzOS43NzQ3LC0zNTMuMTE2NV0sWy0xMzkuNzc0NywtMzQxLjc3MzVdLFstMTM5Ljc3NDcsLTMzNi42MTc2XSxbLTEzOS42MTY5LC0zMzUuODQxXSxbLTEzOS4xODcyLC0zMzUuMjA1MV0sWy0xMzguNTUxMywtMzM0Ljc3NTRdXSwiaG9sZXMiOltdfSwiYmFjayI6eyJpZCI6ImJhY2siLCJsYWJlbCI6IkJhY2siLCJvdXRlckVudGl0eSI6NSwiaG9sZUVudGl0aWVzIjpbNiw3XSwiYm91bmRzIjp7Im1pblgiOi05Ljk5MjEsIm1heFgiOjExNS40NzQ3LCJtaW5ZIjotMzI2LjQ5NDgsIm1heFkiOi0yNzYuNDk0OCwid2lkdGgiOjEyNS40NjY4LCJoZWlnaHQiOjUwLjB9LCJvdXRlciI6W1stNS4yNzk2LC0yNzYuNDk0OF0sWzEyLjg0NTQsLTI3Ni40OTQ4XSxbNTIuNzIwMywtMjc2LjQ5NDhdLFs5Mi41OTUyLC0yNzYuNDk0OF0sWzExMC43MjAyLC0yNzYuNDk0OF0sWzExMS40OTY4LC0yNzYuNjUyNl0sWzExMi4xMzI4LC0yNzcuMDgyM10sWzExMi41NjI1LC0yNzcuNzE4Ml0sWzExMi43MjAzLC0yNzguNDk0OF0sWzExMi43MjAzLC0yODEuMzA3M10sWzExMi43MjAzLC0yODcuNDk0OF0sWzExMi43MjAzLC0yOTMuNjgyM10sWzExMi43MjAzLC0yOTYuNDk0OF0sWzExMi45OTQ0LC0yOTYuNDk0OF0sWzExMy41OTc1LC0yOTYuNDk0OF0sWzExNC4yMDA2LC0yOTYuNDk0OF0sWzExNC40NzQ3LC0yOTYuNDk0OF0sWzExNC44NjMzLC0yOTYuNTczNl0sWzExNS4xODEzLC0yOTYuNzg4M10sWzExNS4zOTU5LC0yOTcuMTA2Ml0sWzExNS40NzQ3LC0yOTcuNDk0OF0sWzExNS40NzQ3LC0yOTguNzQ0OF0sWzExNS40NzQ3LC0zMDEuNDk0OF0sWzExNS40NzQ3LC0zMDQuMjQ0OF0sWzExNS40NzQ3LC0zMDUuNDk0OF0sWzExNS4zOTU5LC0zMDUuODgzNF0sWzExNS4xODEzLC0zMDYuMjAxM10sWzExNC44NjMzLC0zMDYuNDE2XSxbMTE0LjQ3NDcsLTMwNi40OTQ4XSxbMTE0LjIwMDYsLTMwNi40OTQ4XSxbMTEzLjU5NzUsLTMwNi40OTQ4XSxbMTEyLjk5NDQsLTMwNi40OTQ4XSxbMTEyLjcyMDMsLTMwNi40OTQ4XSxbMTEyLjcyMDMsLTMwOS4zMDczXSxbMTEyLjcyMDMsLTMxNS40OTQ4XSxbMTEyLjcyMDMsLTMyMS42ODIyXSxbMTEyLjcyMDMsLTMyNC40OTQ3XSxbMTEyLjU2MjUsLTMyNS4yNzEzXSxbMTEyLjEzMjgsLTMyNS45MDczXSxbMTExLjQ5NjgsLTMyNi4zMzddLFsxMTAuNzIwMiwtMzI2LjQ5NDhdLFs5Mi41OTUyLC0zMjYuNDk0OF0sWzUyLjcyMDMsLTMyNi40OTQ4XSxbMTIuODQ1NCwtMzI2LjQ5NDhdLFstNS4yNzk2LC0zMjYuNDk0OF0sWy02LjA1NjIsLTMyNi4zMzddLFstNi42OTIyLC0zMjUuOTA3M10sWy03LjEyMTksLTMyNS4yNzEzXSxbLTcuMjc5NywtMzI0LjQ5NDddLFstNy4yNzk3LC0zMjEuNjgyMl0sWy03LjI3OTcsLTMxNS40OTQ4XSxbLTcuMjc5NywtMzA5LjMwNzNdLFstNy4yNzk3LC0zMDYuNDk0OF0sWy03LjU0NzMsLTMwNi40OTQ4XSxbLTguMTM1OSwtMzA2LjQ5NDhdLFstOC43MjQ1LC0zMDYuNDk0OF0sWy04Ljk5MjEsLTMwNi40OTQ4XSxbLTkuMzgwNywtMzA2LjQxNl0sWy05LjY5ODYsLTMwNi4yMDEzXSxbLTkuOTEzMywtMzA1Ljg4MzRdLFstOS45OTIxLC0zMDUuNDk0OF0sWy05Ljk5MjEsLTMwNC4yNDQ4XSxbLTkuOTkyMSwtMzAxLjQ5NDhdLFstOS45OTIxLC0yOTguNzQ0OF0sWy05Ljk5MjEsLTI5Ny40OTQ4XSxbLTkuOTEzMywtMjk3LjEwNjJdLFstOS42OTg3LC0yOTYuNzg4M10sWy05LjM4MDcsLTI5Ni41NzM2XSxbLTguOTkyMSwtMjk2LjQ5NDhdLFstOC43MjQ1LC0yOTYuNDk0OF0sWy04LjEzNTksLTI5Ni40OTQ4XSxbLTcuNTQ3MywtMjk2LjQ5NDhdLFstNy4yNzk3LC0yOTYuNDk0OF0sWy03LjI3OTcsLTI5My42ODIzXSxbLTcuMjc5NywtMjg3LjQ5NDhdLFstNy4yNzk3LC0yODEuMzA3M10sWy03LjI3OTcsLTI3OC40OTQ4XSxbLTcuMTIxOSwtMjc3LjcxODJdLFstNi42OTIyLC0yNzcuMDgyM10sWy02LjA1NjIsLTI3Ni42NTI2XV0sImhvbGVzIjpbW1szMS43ODUyLC0zMjEuNDQ0OF0sWzMwLjQ5MjgsLTMyMS40NDQ4XSxbMjcuNjQ5NCwtMzIxLjQ0NDhdLFsyNC44MDYsLTMyMS40NDQ4XSxbMjMuNTEzNiwtMzIxLjQ0NDhdLFsyMy4xMzkyLC0zMjEuMzcxNl0sWzIyLjgzMjYsLTMyMS4xNzIxXSxbMjIuNjI1NSwtMzIwLjg3NjldLFsyMi41NDk0LC0zMjAuNTE2M10sWzIyLjU0OTQsLTMyMC40MDAyXSxbMjIuNTQ5NCwtMzIwLjE0NDhdLFsyMi41NDk0LC0zMTkuODg5NF0sWzIyLjU0OTQsLTMxOS43NzMzXSxbMjIuNjI1NSwtMzE5LjQxMjddLFsyMi44MzI2LC0zMTkuMTE3NV0sWzIzLjEzOTIsLTMxOC45MThdLFsyMy41MTM2LC0zMTguODQ0OF0sWzI0LjgwNiwtMzE4Ljg0NDhdLFsyNy42NDk0LC0zMTguODQ0OF0sWzMwLjQ5MjgsLTMxOC44NDQ4XSxbMzEuNzg1MiwtMzE4Ljg0NDhdLFszMi4xNTk2LC0zMTguOTE4XSxbMzIuNDY2MiwtMzE5LjExNzVdLFszMi42NzMzLC0zMTkuNDEyN10sWzMyLjc0OTQsLTMxOS43NzMzXSxbMzIuNzQ5NCwtMzE5Ljg4OTRdLFszMi43NDk0LC0zMjAuMTQ0OF0sWzMyLjc0OTQsLTMyMC40MDAyXSxbMzIuNzQ5NCwtMzIwLjUxNjNdLFszMi42NzMzLC0zMjAuODc2OV0sWzMyLjQ2NjIsLTMyMS4xNzIxXSxbMzIuMTU5NiwtMzIxLjM3MTZdXSxbWzgxLjg4NTMsLTMyMS40NDQ4XSxbODAuNTkyOSwtMzIxLjQ0NDhdLFs3Ny43NDk1LC0zMjEuNDQ0OF0sWzc0LjkwNjEsLTMyMS40NDQ4XSxbNzMuNjEzNywtMzIxLjQ0NDhdLFs3My4yMzkzLC0zMjEuMzcxNl0sWzcyLjkzMjcsLTMyMS4xNzIxXSxbNzIuNzI1NiwtMzIwLjg3NjldLFs3Mi42NDk1LC0zMjAuNTE2M10sWzcyLjY0OTUsLTMyMC40MDAyXSxbNzIuNjQ5NSwtMzIwLjE0NDhdLFs3Mi42NDk1LC0zMTkuODg5NF0sWzcyLjY0OTUsLTMxOS43NzMzXSxbNzIuNzI1NiwtMzE5LjQxMjddLFs3Mi45MzI3LC0zMTkuMTE3NV0sWzczLjIzOTMsLTMxOC45MThdLFs3My42MTM3LC0zMTguODQ0OF0sWzc0LjkwNjEsLTMxOC44NDQ4XSxbNzcuNzQ5NSwtMzE4Ljg0NDhdLFs4MC41OTI5LC0zMTguODQ0OF0sWzgxLjg4NTMsLTMxOC44NDQ4XSxbODIuMjU5NywtMzE4LjkxOF0sWzgyLjU2NjMsLTMxOS4xMTc1XSxbODIuNzczNCwtMzE5LjQxMjddLFs4Mi44NDk1LC0zMTkuNzczM10sWzgyLjg0OTUsLTMxOS44ODk0XSxbODIuODQ5NSwtMzIwLjE0NDhdLFs4Mi44NDk1LC0zMjAuNDAwMl0sWzgyLjg0OTUsLTMyMC41MTYzXSxbODIuNzczNCwtMzIwLjg3NjldLFs4Mi41NjYzLC0zMjEuMTcyMV0sWzgyLjI1OTcsLTMyMS4zNzE2XV1dfSwiZnJvbnQiOnsiaWQiOiJmcm9udCIsImxhYmVsIjoiRnJvbnQiLCJvdXRlckVudGl0eSI6MTAsImhvbGVFbnRpdGllcyI6WzgsOV0sImJvdW5kcyI6eyJtaW5YIjotMTQyLjQ5OTksIm1heFgiOi0xNy4wMDA5LCJtaW5ZIjotMzI5LjgyNDIsIm1heFkiOi0yNzYuODI0Miwid2lkdGgiOjEyNS40OTksImhlaWdodCI6NTMuMH0sIm91dGVyIjpbWy0xMzcuOCwtMjc2LjgyNDJdLFstMTI5LjY2NzMsLTI3Ni44MjQyXSxbLTExMS43NzUyLC0yNzYuODI0Ml0sWy05My44ODMyLC0yNzYuODI0Ml0sWy04NS43NTA0LC0yNzYuODI0Ml0sWy04NS4zNjE4LC0yNzYuOTAzXSxbLTg1LjA0MzksLTI3Ny4xMTc3XSxbLTg0LjgyOTIsLTI3Ny40MzU2XSxbLTg0Ljc1MDQsLTI3Ny44MjQyXSxbLTg0Ljc1MDQsLTI3OC4xMDU1XSxbLTg0Ljc1MDQsLTI3OC43MjQyXSxbLTg0Ljc1MDQsLTI3OS4zNDI5XSxbLTg0Ljc1MDQsLTI3OS42MjQyXSxbLTgzLjE4NzksLTI3OS42MjQyXSxbLTc5Ljc1MDQsLTI3OS42MjQyXSxbLTc2LjMxMjksLTI3OS42MjQyXSxbLTc0Ljc1MDQsLTI3OS42MjQyXSxbLTc0Ljc1MDQsLTI3OS4zNDI5XSxbLTc0Ljc1MDQsLTI3OC43MjQyXSxbLTc0Ljc1MDQsLTI3OC4xMDU1XSxbLTc0Ljc1MDQsLTI3Ny44MjQyXSxbLTc0LjY3MTYsLTI3Ny40MzU2XSxbLTc0LjQ1NjksLTI3Ny4xMTc3XSxbLTc0LjEzOSwtMjc2LjkwM10sWy03My43NTA0LC0yNzYuODI0Ml0sWy02NS42MzMyLC0yNzYuODI0Ml0sWy00Ny43NzUyLC0yNzYuODI0Ml0sWy0yOS45MTczLC0yNzYuODI0Ml0sWy0yMS44LC0yNzYuODI0Ml0sWy0yMS4wMjM1LC0yNzYuOTgyXSxbLTIwLjM4NzUsLTI3Ny40MTE3XSxbLTE5Ljk1NzgsLTI3OC4wNDc3XSxbLTE5LjgsLTI3OC44MjQyXSxbLTE5LjgsLTI4Mi4xMTIyXSxbLTE5LjgsLTI4OS4zNDU4XSxbLTE5LjgsLTI5Ni41Nzk0XSxbLTE5LjgsLTI5OS44Njc0XSxbLTE5LjUxODksLTI5OS44Njc0XSxbLTE4LjkwMDQsLTI5OS44Njc0XSxbLTE4LjI4MiwtMjk5Ljg2NzRdLFstMTguMDAwOSwtMjk5Ljg2NzRdLFstMTcuNjEyMywtMjk5Ljk0NjJdLFstMTcuMjk0NCwtMzAwLjE2MDhdLFstMTcuMDc5NywtMzAwLjQ3ODhdLFstMTcuMDAwOSwtMzAwLjg2NzRdLFstMTcuMDAwOSwtMzAyLjExNzRdLFstMTcuMDAwOSwtMzA0Ljg2NzRdLFstMTcuMDAwOSwtMzA3LjYxNzRdLFstMTcuMDAwOSwtMzA4Ljg2NzRdLFstMTcuMDc5NywtMzA5LjI1Nl0sWy0xNy4yOTQ0LC0zMDkuNTczOV0sWy0xNy42MTIzLC0zMDkuNzg4Nl0sWy0xOC4wMDA5LC0zMDkuODY3NF0sWy0xOC4yODIsLTMwOS44Njc0XSxbLTE4LjkwMDUsLTMwOS44Njc0XSxbLTE5LjUxODksLTMwOS44Njc0XSxbLTE5LjgsLTMwOS44Njc0XSxbLTE5LjgsLTMxMi42NzMxXSxbLTE5LjgsLTMxOC44NDU4XSxbLTE5LjgsLTMyNS4wMTg1XSxbLTE5LjgsLTMyNy44MjQyXSxbLTE5Ljk1NzgsLTMyOC42MDA3XSxbLTIwLjM4NzUsLTMyOS4yMzY3XSxbLTIxLjAyMzUsLTMyOS42NjY0XSxbLTIxLjgsLTMyOS44MjQyXSxbLTM5LjkyNSwtMzI5LjgyNDJdLFstNzkuOCwtMzI5LjgyNDJdLFstMTE5LjY3NSwtMzI5LjgyNDJdLFstMTM3LjgsLTMyOS44MjQyXSxbLTEzOC41NzY1LC0zMjkuNjY2NF0sWy0xMzkuMjEyNSwtMzI5LjIzNjddLFstMTM5LjY0MjIsLTMyOC42MDA3XSxbLTEzOS44LC0zMjcuODI0Ml0sWy0xMzkuOCwtMzI1LjAxODVdLFstMTM5LjgsLTMxOC44NDU4XSxbLTEzOS44LC0zMTIuNjczMV0sWy0xMzkuOCwtMzA5Ljg2NzRdLFstMTQwLjA2NTYsLTMwOS44Njc0XSxbLTE0MC42NDk5LC0zMDkuODY3NF0sWy0xNDEuMjM0MywtMzA5Ljg2NzRdLFstMTQxLjQ5OTksLTMwOS44Njc0XSxbLTE0MS44ODg1LC0zMDkuNzg4Nl0sWy0xNDIuMjA2NCwtMzA5LjU3MzldLFstMTQyLjQyMTEsLTMwOS4yNTZdLFstMTQyLjQ5OTksLTMwOC44Njc0XSxbLTE0Mi40OTk5LC0zMDcuNjE3NF0sWy0xNDIuNDk5OSwtMzA0Ljg2NzRdLFstMTQyLjQ5OTksLTMwMi4xMTc0XSxbLTE0Mi40OTk5LC0zMDAuODY3NF0sWy0xNDIuNDIxMSwtMzAwLjQ3ODhdLFstMTQyLjIwNjQsLTMwMC4xNjA4XSxbLTE0MS44ODg1LC0yOTkuOTQ2Ml0sWy0xNDEuNDk5OSwtMjk5Ljg2NzRdLFstMTQxLjIzNDMsLTI5OS44Njc0XSxbLTE0MC42NDk5LC0yOTkuODY3NF0sWy0xNDAuMDY1NiwtMjk5Ljg2NzRdLFstMTM5LjgsLTI5OS44Njc0XSxbLTEzOS44LC0yOTYuNTc5NF0sWy0xMzkuOCwtMjg5LjM0NThdLFstMTM5LjgsLTI4Mi4xMTIyXSxbLTEzOS44LC0yNzguODI0Ml0sWy0xMzkuNjQyMiwtMjc4LjA0NzddLFstMTM5LjIxMjUsLTI3Ny40MTE3XSxbLTEzOC41NzY1LC0yNzYuOTgyXV0sImhvbGVzIjpbW1stNTAuNjU2LC0zMjQuNzc0Ml0sWy01MS45NDg0LC0zMjQuNzc0Ml0sWy01NC43OTE4LC0zMjQuNzc0Ml0sWy01Ny42MzUyLC0zMjQuNzc0Ml0sWy01OC45Mjc2LC0zMjQuNzc0Ml0sWy01OS4zMDIsLTMyNC43MDFdLFstNTkuNjA4NiwtMzI0LjUwMTVdLFstNTkuODE1NywtMzI0LjIwNjNdLFstNTkuODkxOCwtMzIzLjg0NTddLFstNTkuODkxOCwtMzIzLjcyOTZdLFstNTkuODkxOCwtMzIzLjQ3NDJdLFstNTkuODkxOCwtMzIzLjIxODhdLFstNTkuODkxOCwtMzIzLjEwMjddLFstNTkuODE1NywtMzIyLjc0MjFdLFstNTkuNjA4NiwtMzIyLjQ0NjldLFstNTkuMzAyLC0zMjIuMjQ3NF0sWy01OC45Mjc2LC0zMjIuMTc0Ml0sWy01Ny42MzUyLC0zMjIuMTc0Ml0sWy01NC43OTE4LC0zMjIuMTc0Ml0sWy01MS45NDg0LC0zMjIuMTc0Ml0sWy01MC42NTYsLTMyMi4xNzQyXSxbLTUwLjI4MTYsLTMyMi4yNDc0XSxbLTQ5Ljk3NSwtMzIyLjQ0NjldLFstNDkuNzY3OSwtMzIyLjc0MjFdLFstNDkuNjkxOCwtMzIzLjEwMjddLFstNDkuNjkxOCwtMzIzLjIxODhdLFstNDkuNjkxOCwtMzIzLjQ3NDJdLFstNDkuNjkxOCwtMzIzLjcyOTZdLFstNDkuNjkxOCwtMzIzLjg0NTddLFstNDkuNzY3OSwtMzI0LjIwNjNdLFstNDkuOTc1LC0zMjQuNTAxNV0sWy01MC4yODE2LC0zMjQuNzAxXV0sW1stMTAwLjc1NjEsLTMyNC43NzQyXSxbLTEwMi4wNDg1LC0zMjQuNzc0Ml0sWy0xMDQuODkxOSwtMzI0Ljc3NDJdLFstMTA3LjczNTMsLTMyNC43NzQyXSxbLTEwOS4wMjc3LC0zMjQuNzc0Ml0sWy0xMDkuNDAyMSwtMzI0LjcwMV0sWy0xMDkuNzA4NywtMzI0LjUwMTVdLFstMTA5LjkxNTgsLTMyNC4yMDYzXSxbLTEwOS45OTE5LC0zMjMuODQ1N10sWy0xMDkuOTkxOSwtMzIzLjcyOTZdLFstMTA5Ljk5MTksLTMyMy40NzQyXSxbLTEwOS45OTE5LC0zMjMuMjE4OF0sWy0xMDkuOTkxOSwtMzIzLjEwMjddLFstMTA5LjkxNTgsLTMyMi43NDIxXSxbLTEwOS43MDg3LC0zMjIuNDQ2OV0sWy0xMDkuNDAyMSwtMzIyLjI0NzRdLFstMTA5LjAyNzcsLTMyMi4xNzQyXSxbLTEwNy43MzUzLC0zMjIuMTc0Ml0sWy0xMDQuODkxOSwtMzIyLjE3NDJdLFstMTAyLjA0ODUsLTMyMi4xNzQyXSxbLTEwMC43NTYxLC0zMjIuMTc0Ml0sWy0xMDAuMzgxNywtMzIyLjI0NzRdLFstMTAwLjA3NTEsLTMyMi40NDY5XSxbLTk5Ljg2OCwtMzIyLjc0MjFdLFstOTkuNzkxOSwtMzIzLjEwMjddLFstOTkuNzkxOSwtMzIzLjIxODhdLFstOTkuNzkxOSwtMzIzLjQ3NDJdLFstOTkuNzkxOSwtMzIzLjcyOTZdLFstOTkuNzkxOSwtMzIzLjg0NTddLFstOTkuODY4LC0zMjQuMjA2M10sWy0xMDAuMDc1MSwtMzI0LjUwMTVdLFstMTAwLjM4MTcsLTMyNC43MDFdXV19LCJyaWdodCI6eyJpZCI6InJpZ2h0IiwibGFiZWwiOiJSaWdodCIsIm91dGVyRW50aXR5IjoxNSwiaG9sZUVudGl0aWVzIjpbMTIsMTMsMTQsMTFdLCJib3VuZHMiOnsibWluWCI6LTQyLjI5MjYsIm1heFgiOjQ3LjcwNzQsIm1pblkiOi0yNTUuMTgwMywibWF4WSI6LTE5OC4xODU0LCJ3aWR0aCI6OTAuMCwiaGVpZ2h0Ijo1Ni45OTQ5fSwib3V0ZXIiOltbLTM5Ljg5MjIsLTE5OC4xODU0XSxbLTI2LjU3OTgsLTE5OC4xODU0XSxbMi43MDczLC0xOTguMTg1NF0sWzMxLjk5NDUsLTE5OC4xODU0XSxbNDUuMzA2OSwtMTk4LjE4NTRdLFs0Ni4yMzg5LC0xOTguMzY1M10sWzQ3LjAwMjIsLTE5OC44NTVdLFs0Ny41MTgsLTE5OS41Nzk5XSxbNDcuNzA3NCwtMjAwLjQ2NTFdLFs0Ny43MDc0LC0yMDguNjU4MV0sWzQ3LjcwNzQsLTIyNi42ODI5XSxbNDcuNzA3NCwtMjQ0LjcwNzZdLFs0Ny43MDc0LC0yNTIuOTAwNl0sWzQ3LjUxOCwtMjUzLjc4NThdLFs0Ny4wMDIyLC0yNTQuNTEwN10sWzQ2LjIzODksLTI1NS4wMDA0XSxbNDUuMzA2OSwtMjU1LjE4MDNdLFszMS45OTQ1LC0yNTUuMTgwM10sWzIuNzA3MywtMjU1LjE4MDNdLFstMjYuNTc5OCwtMjU1LjE4MDNdLFstMzkuODkyMiwtMjU1LjE4MDNdLFstNDAuODI0MiwtMjU1LjAwMDRdLFstNDEuNTg3NSwtMjU0LjUxMDddLFstNDIuMTAzMiwtMjUzLjc4NThdLFstNDIuMjkyNiwtMjUyLjkwMDZdLFstNDIuMjkyNiwtMjQ0LjcwNzZdLFstNDIuMjkyNiwtMjI2LjY4MjhdLFstNDIuMjkyNiwtMjA4LjY1ODFdLFstNDIuMjkyNiwtMjAwLjQ2NTFdLFstNDIuMTAzMiwtMTk5LjU3OTldLFstNDEuNTg3NSwtMTk4Ljg1NV0sWy00MC44MjQyLC0xOTguMzY1M11dLCJob2xlcyI6W1tbNDUuMzU3NCwtMjI2LjA0NDVdLFs0NS4zNTc0LC0yMjcuMzM2OV0sWzQ1LjM1NzQsLTIzMC4xODAzXSxbNDUuMzU3NCwtMjMzLjAyMzddLFs0NS4zNTc0LC0yMzQuMzE2MV0sWzQ1LjI4NDIsLTIzNC42OTA1XSxbNDUuMDg0NywtMjM0Ljk5NzFdLFs0NC43ODk1LC0yMzUuMjA0Ml0sWzQ0LjQyODksLTIzNS4yODAzXSxbNDQuMzEyOCwtMjM1LjI4MDNdLFs0NC4wNTc0LC0yMzUuMjgwM10sWzQzLjgwMiwtMjM1LjI4MDNdLFs0My42ODU5LC0yMzUuMjgwM10sWzQzLjMyNTMsLTIzNS4yMDQyXSxbNDMuMDMwMSwtMjM0Ljk5NzFdLFs0Mi44MzA2LC0yMzQuNjkwNV0sWzQyLjc1NzQsLTIzNC4zMTYxXSxbNDIuNzU3NCwtMjMzLjAyMzddLFs0Mi43NTc0LC0yMzAuMTgwM10sWzQyLjc1NzQsLTIyNy4zMzY5XSxbNDIuNzU3NCwtMjI2LjA0NDVdLFs0Mi44MzA2LC0yMjUuNjcwMV0sWzQzLjAzMDEsLTIyNS4zNjM1XSxbNDMuMzI1MywtMjI1LjE1NjRdLFs0My42ODU5LC0yMjUuMDgwM10sWzQzLjgwMiwtMjI1LjA4MDNdLFs0NC4wNTc0LC0yMjUuMDgwM10sWzQ0LjMxMjgsLTIyNS4wODAzXSxbNDQuNDI4OSwtMjI1LjA4MDNdLFs0NC43ODk1LC0yMjUuMTU2NF0sWzQ1LjA4NDcsLTIyNS4zNjM1XSxbNDUuMjg0MiwtMjI1LjY3MDFdXSxbWy0zNy4zNDI2LC0yMjYuMDQ0NV0sWy0zNy4zNDI2LC0yMjcuMzM2OV0sWy0zNy4zNDI2LC0yMzAuMTgwM10sWy0zNy4zNDI2LC0yMzMuMDIzN10sWy0zNy4zNDI2LC0yMzQuMzE2MV0sWy0zNy40MTU4LC0yMzQuNjkwNV0sWy0zNy42MTUzLC0yMzQuOTk3MV0sWy0zNy45MTA1LC0yMzUuMjA0Ml0sWy0zOC4yNzExLC0yMzUuMjgwM10sWy0zOC4zODcyLC0yMzUuMjgwM10sWy0zOC42NDI2LC0yMzUuMjgwM10sWy0zOC44OTgsLTIzNS4yODAzXSxbLTM5LjAxNDEsLTIzNS4yODAzXSxbLTM5LjM3NDcsLTIzNS4yMDQyXSxbLTM5LjY2OTksLTIzNC45OTcxXSxbLTM5Ljg2OTQsLTIzNC42OTA1XSxbLTM5Ljk0MjYsLTIzNC4zMTYxXSxbLTM5Ljk0MjYsLTIzMy4wMjM3XSxbLTM5Ljk0MjYsLTIzMC4xODAzXSxbLTM5Ljk0MjYsLTIyNy4zMzY5XSxbLTM5Ljk0MjYsLTIyNi4wNDQ1XSxbLTM5Ljg2OTQsLTIyNS42NzAxXSxbLTM5LjY2OTksLTIyNS4zNjM1XSxbLTM5LjM3NDcsLTIyNS4xNTY0XSxbLTM5LjAxNDEsLTIyNS4wODAzXSxbLTM4Ljg5OCwtMjI1LjA4MDNdLFstMzguNjQyNiwtMjI1LjA4MDNdLFstMzguMzg3MiwtMjI1LjA4MDNdLFstMzguMjcxMSwtMjI1LjA4MDNdLFstMzcuOTEwNSwtMjI1LjE1NjRdLFstMzcuNjE1MywtMjI1LjM2MzVdLFstMzcuNDE1OCwtMjI1LjY3MDFdXSxbWy0xLjQyODQsLTI0Ny41MzAzXSxbLTAuMTM2LC0yNDcuNTMwM10sWzIuNzA3NCwtMjQ3LjUzMDNdLFs1LjU1MDgsLTI0Ny41MzAzXSxbNi44NDMyLC0yNDcuNTMwM10sWzcuMjE3NiwtMjQ3LjYwMzVdLFs3LjUyNDIsLTI0Ny44MDNdLFs3LjczMTMsLTI0OC4wOTgyXSxbNy44MDc0LC0yNDguNDU4OF0sWzcuODA3NCwtMjQ4LjU3NDldLFs3LjgwNzQsLTI0OC44MzAzXSxbNy44MDc0LC0yNDkuMDg1N10sWzcuODA3NCwtMjQ5LjIwMThdLFs3LjczMTMsLTI0OS41NjI0XSxbNy41MjQyLC0yNDkuODU3Nl0sWzcuMjE3NiwtMjUwLjA1NzFdLFs2Ljg0MzIsLTI1MC4xMzAzXSxbNS41NTA4LC0yNTAuMTMwM10sWzIuNzA3NCwtMjUwLjEzMDNdLFstMC4xMzYsLTI1MC4xMzAzXSxbLTEuNDI4NCwtMjUwLjEzMDNdLFstMS44MDI4LC0yNTAuMDU3MV0sWy0yLjEwOTQsLTI0OS44NTc2XSxbLTIuMzE2NSwtMjQ5LjU2MjRdLFstMi4zOTI2LC0yNDkuMjAxOF0sWy0yLjM5MjYsLTI0OS4wODU3XSxbLTIuMzkyNiwtMjQ4LjgzMDNdLFstMi4zOTI2LC0yNDguNTc0OV0sWy0yLjM5MjYsLTI0OC40NTg4XSxbLTIuMzE2NSwtMjQ4LjA5ODJdLFstMi4xMDk0LC0yNDcuODAzXSxbLTEuODAyOCwtMjQ3LjYwMzVdXSxbWy0zOC4xMjYyLC0yMDAuNDA1NV0sWy0zNy4xNTMxLC0yMDAuNjAyXSxbLTM2LjM1ODQsLTIwMS4xMzc3XSxbLTM1LjgyMjcsLTIwMS45MzI0XSxbLTM1LjYyNjIsLTIwMi45MDU1XSxbLTM1LjgyMjcsLTIwMy44Nzg2XSxbLTM2LjM1ODQsLTIwNC42NzMzXSxbLTM3LjE1MzEsLTIwNS4yMDldLFstMzguMTI2MiwtMjA1LjQwNTVdLFstMzkuMDk5MywtMjA1LjIwOV0sWy0zOS44OTQsLTIwNC42NzMzXSxbLTQwLjQyOTcsLTIwMy44Nzg2XSxbLTQwLjYyNjIsLTIwMi45MDU1XSxbLTQwLjQyOTcsLTIwMS45MzI0XSxbLTM5Ljg5NCwtMjAxLjEzNzddLFstMzkuMDk5MywtMjAwLjYwMl1dXX0sImxlZnQiOnsiaWQiOiJsZWZ0IiwibGFiZWwiOiJMZWZ0Iiwib3V0ZXJFbnRpdHkiOjIwLCJob2xlRW50aXRpZXMiOlsxNywxOCwxOSwxNl0sImJvdW5kcyI6eyJtaW5YIjotMTM3LjYwODcsIm1heFgiOi00Ny42MDg3LCJtaW5ZIjotMjU1LjUwOTYsIm1heFkiOi0xOTguNTE2LCJ3aWR0aCI6OTAuMCwiaGVpZ2h0Ijo1Ni45OTM2fSwib3V0ZXIiOltbLTUwLjAwOTEsLTE5OC41MTZdLFstNjMuMzIxNSwtMTk4LjUxNl0sWy05Mi42MDg2LC0xOTguNTE2XSxbLTEyMS44OTU4LC0xOTguNTE2XSxbLTEzNS4yMDgyLC0xOTguNTE2XSxbLTEzNi4xNDAyLC0xOTguNjk1OV0sWy0xMzYuOTAzNSwtMTk5LjE4NTZdLFstMTM3LjQxOTMsLTE5OS45MTA1XSxbLTEzNy42MDg3LC0yMDAuNzk1N10sWy0xMzcuNjA4NywtMjA4Ljk4ODVdLFstMTM3LjYwODcsLTIyNy4wMTI4XSxbLTEzNy42MDg3LC0yNDUuMDM3MV0sWy0xMzcuNjA4NywtMjUzLjIyOTldLFstMTM3LjQxOTMsLTI1NC4xMTUxXSxbLTEzNi45MDM1LC0yNTQuODRdLFstMTM2LjE0MDIsLTI1NS4zMjk3XSxbLTEzNS4yMDgyLC0yNTUuNTA5Nl0sWy0xMjEuODk1OCwtMjU1LjUwOTZdLFstOTIuNjA4NiwtMjU1LjUwOTZdLFstNjMuMzIxNSwtMjU1LjUwOTZdLFstNTAuMDA5MSwtMjU1LjUwOTZdLFstNDkuMDc3MSwtMjU1LjMyOTddLFstNDguMzEzOCwtMjU0Ljg0XSxbLTQ3Ljc5ODEsLTI1NC4xMTUxXSxbLTQ3LjYwODcsLTI1My4yMjk5XSxbLTQ3LjYwODcsLTI0NS4wMzcxXSxbLTQ3LjYwODcsLTIyNy4wMTI4XSxbLTQ3LjYwODcsLTIwOC45ODg1XSxbLTQ3LjYwODcsLTIwMC43OTU3XSxbLTQ3Ljc5ODEsLTE5OS45MTA1XSxbLTQ4LjMxMzgsLTE5OS4xODU2XSxbLTQ5LjA3NzEsLTE5OC42OTU5XV0sImhvbGVzIjpbW1stMTM1LjI1ODcsLTIyNi4zNzM4XSxbLTEzNS4yNTg3LC0yMjcuNjY2Ml0sWy0xMzUuMjU4NywtMjMwLjUwOTZdLFstMTM1LjI1ODcsLTIzMy4zNTNdLFstMTM1LjI1ODcsLTIzNC42NDU0XSxbLTEzNS4xODU1LC0yMzUuMDE5OF0sWy0xMzQuOTg2LC0yMzUuMzI2NF0sWy0xMzQuNjkwOCwtMjM1LjUzMzVdLFstMTM0LjMzMDIsLTIzNS42MDk2XSxbLTEzNC4yMTQxLC0yMzUuNjA5Nl0sWy0xMzMuOTU4NywtMjM1LjYwOTZdLFstMTMzLjcwMzMsLTIzNS42MDk2XSxbLTEzMy41ODcyLC0yMzUuNjA5Nl0sWy0xMzMuMjI2NiwtMjM1LjUzMzVdLFstMTMyLjkzMTQsLTIzNS4zMjY0XSxbLTEzMi43MzE5LC0yMzUuMDE5OF0sWy0xMzIuNjU4NywtMjM0LjY0NTRdLFstMTMyLjY1ODcsLTIzMy4zNTNdLFstMTMyLjY1ODcsLTIzMC41MDk2XSxbLTEzMi42NTg3LC0yMjcuNjY2Ml0sWy0xMzIuNjU4NywtMjI2LjM3MzhdLFstMTMyLjczMTksLTIyNS45OTk0XSxbLTEzMi45MzE0LC0yMjUuNjkyOF0sWy0xMzMuMjI2NiwtMjI1LjQ4NTddLFstMTMzLjU4NzIsLTIyNS40MDk2XSxbLTEzMy43MDMzLC0yMjUuNDA5Nl0sWy0xMzMuOTU4NywtMjI1LjQwOTZdLFstMTM0LjIxNDEsLTIyNS40MDk2XSxbLTEzNC4zMzAyLC0yMjUuNDA5Nl0sWy0xMzQuNjkwOCwtMjI1LjQ4NTddLFstMTM0Ljk4NiwtMjI1LjY5MjhdLFstMTM1LjE4NTUsLTIyNS45OTk0XV0sW1stNTIuNTU4NywtMjI2LjM3MzhdLFstNTIuNTU4NywtMjI3LjY2NjJdLFstNTIuNTU4NywtMjMwLjUwOTZdLFstNTIuNTU4NywtMjMzLjM1M10sWy01Mi41NTg3LC0yMzQuNjQ1NF0sWy01Mi40ODU1LC0yMzUuMDE5OF0sWy01Mi4yODYsLTIzNS4zMjY0XSxbLTUxLjk5MDgsLTIzNS41MzM1XSxbLTUxLjYzMDIsLTIzNS42MDk2XSxbLTUxLjUxNDEsLTIzNS42MDk2XSxbLTUxLjI1ODcsLTIzNS42MDk2XSxbLTUxLjAwMzMsLTIzNS42MDk2XSxbLTUwLjg4NzIsLTIzNS42MDk2XSxbLTUwLjUyNjYsLTIzNS41MzM1XSxbLTUwLjIzMTQsLTIzNS4zMjY0XSxbLTUwLjAzMTksLTIzNS4wMTk4XSxbLTQ5Ljk1ODcsLTIzNC42NDU0XSxbLTQ5Ljk1ODcsLTIzMy4zNTNdLFstNDkuOTU4NywtMjMwLjUwOTZdLFstNDkuOTU4NywtMjI3LjY2NjJdLFstNDkuOTU4NywtMjI2LjM3MzhdLFstNTAuMDMxOSwtMjI1Ljk5OTRdLFstNTAuMjMxNCwtMjI1LjY5MjhdLFstNTAuNTI2NiwtMjI1LjQ4NTddLFstNTAuODg3MiwtMjI1LjQwOTZdLFstNTEuMDAzMywtMjI1LjQwOTZdLFstNTEuMjU4NywtMjI1LjQwOTZdLFstNTEuNTE0MSwtMjI1LjQwOTZdLFstNTEuNjMwMiwtMjI1LjQwOTZdLFstNTEuOTkwOCwtMjI1LjQ4NTddLFstNTIuMjg2LC0yMjUuNjkyOF0sWy01Mi40ODU1LC0yMjUuOTk5NF1dLFtbLTg4LjQ3MjksLTI0Ny44NTk2XSxbLTg5Ljc2NTMsLTI0Ny44NTk2XSxbLTkyLjYwODcsLTI0Ny44NTk2XSxbLTk1LjQ1MjEsLTI0Ny44NTk2XSxbLTk2Ljc0NDUsLTI0Ny44NTk2XSxbLTk3LjExODksLTI0Ny45MzI4XSxbLTk3LjQyNTUsLTI0OC4xMzIzXSxbLTk3LjYzMjYsLTI0OC40Mjc1XSxbLTk3LjcwODcsLTI0OC43ODgxXSxbLTk3LjcwODcsLTI0OC45MDQyXSxbLTk3LjcwODcsLTI0OS4xNTk2XSxbLTk3LjcwODcsLTI0OS40MTVdLFstOTcuNzA4NywtMjQ5LjUzMTFdLFstOTcuNjMyNiwtMjQ5Ljg5MTddLFstOTcuNDI1NSwtMjUwLjE4NjldLFstOTcuMTE4OSwtMjUwLjM4NjRdLFstOTYuNzQ0NSwtMjUwLjQ1OTZdLFstOTUuNDUyMSwtMjUwLjQ1OTZdLFstOTIuNjA4NywtMjUwLjQ1OTZdLFstODkuNzY1MywtMjUwLjQ1OTZdLFstODguNDcyOSwtMjUwLjQ1OTZdLFstODguMDk4NSwtMjUwLjM4NjRdLFstODcuNzkxOSwtMjUwLjE4NjldLFstODcuNTg0OCwtMjQ5Ljg5MTddLFstODcuNTA4NywtMjQ5LjUzMTFdLFstODcuNTA4NywtMjQ5LjQxNV0sWy04Ny41MDg3LC0yNDkuMTU5Nl0sWy04Ny41MDg3LC0yNDguOTA0Ml0sWy04Ny41MDg3LC0yNDguNzg4MV0sWy04Ny41ODQ4LC0yNDguNDI3NV0sWy04Ny43OTE5LC0yNDguMTMyM10sWy04OC4wOTg1LC0yNDcuOTMyOF1dLFtbLTUxLjc3NTEsLTIwMC43MzQ4XSxbLTUyLjc0ODIsLTIwMC45MzEzXSxbLTUzLjU0MjksLTIwMS40NjddLFstNTQuMDc4NiwtMjAyLjI2MTddLFstNTQuMjc1MSwtMjAzLjIzNDhdLFstNTQuMDc4NiwtMjA0LjIwNzldLFstNTMuNTQyOSwtMjA1LjAwMjZdLFstNTIuNzQ4MiwtMjA1LjUzODNdLFstNTEuNzc1MSwtMjA1LjczNDhdLFstNTAuODAyLC0yMDUuNTM4M10sWy01MC4wMDczLC0yMDUuMDAyNl0sWy00OS40NzE2LC0yMDQuMjA3OV0sWy00OS4yNzUxLC0yMDMuMjM0OF0sWy00OS40NzE2LC0yMDIuMjYxN10sWy01MC4wMDczLC0yMDEuNDY3XSxbLTUwLjgwMiwtMjAwLjkzMTNdXV19LCJsaWQiOnsiaWQiOiJsaWQiLCJsYWJlbCI6IlRvcCAvIExpZCIsIm91dGVyRW50aXR5IjoyMSwiaG9sZUVudGl0aWVzIjpbXSwiYm91bmRzIjp7Im1pblgiOi0xNS4zNzc1LCJtYXhYIjoxMTMuNTM1LCJtaW5ZIjotNDE3LjQ3NywibWF4WSI6LTMyOC40OTQ4LCJ3aWR0aCI6MTI4LjkxMjUsImhlaWdodCI6ODguOTgyMn0sIm91dGVyIjpbWzEwOS4xMDc4LC00MTcuNDc3XSxbMTA5LjA5NjQsLTQxNy40NzddLFsxMDkuMDcxNCwtNDE3LjQ3N10sWzEwOS4wNDY0LC00MTcuNDc3XSxbMTA5LjAzNSwtNDE3LjQ3N10sWzkwLjI5ODcsLTQxNy40NzddLFs0OS4wNzg4LC00MTcuNDc3XSxbNy44NTg4LC00MTcuNDc3XSxbLTEwLjg3NzUsLTQxNy40NzddLFstMTAuODc5OCwtNDE3LjQ3N10sWy0xMC44ODQ5LC00MTcuNDc3XSxbLTEwLjg4OTksLTQxNy40NzddLFstMTAuODkyMiwtNDE3LjQ3N10sWy0xMS40MzY4LC00MTcuNDc3XSxbLTEyLjYzNDgsLTQxNy40NzddLFstMTMuODMyOSwtNDE3LjQ3N10sWy0xNC4zNzc1LC00MTcuNDc3XSxbLTE0Ljc2NjEsLTQxNy4zOTgyXSxbLTE1LjA4NCwtNDE3LjE4MzVdLFstMTUuMjk4NywtNDE2Ljg2NTZdLFstMTUuMzc3NSwtNDE2LjQ3N10sWy0xNS4zNzc1LC00MTYuMDg2NF0sWy0xNS4zNzc1LC00MTUuMjI3XSxbLTE1LjM3NzUsLTQxNC4zNjc2XSxbLTE1LjM3NzUsLTQxMy45NzddLFstMTUuMjk4NywtNDEzLjU4ODRdLFstMTUuMDg0LC00MTMuMjcwNF0sWy0xNC43NjYxLC00MTMuMDU1OF0sWy0xNC4zNzc1LC00MTIuOTc3XSxbLTEzLjgzMjksLTQxMi45NzddLFstMTIuNjM0OSwtNDEyLjk3N10sWy0xMS40MzY4LC00MTIuOTc3XSxbLTEwLjg5MjIsLTQxMi45NzddLFstMTAuODkyMiwtNDAxLjAyMzldLFstMTAuODkyMiwtMzc0LjcyN10sWy0xMC44OTIyLC0zNDguNDMwMV0sWy0xMC44OTIyLC0zMzYuNDc3XSxbLTEwLjczNDYsLTMzNS42OTk4XSxbLTEwLjMwNTMsLTMzNS4wNjM5XSxbLTkuNjY5NCwtMzM0LjYzNDZdLFstOC44OTIyLC0zMzQuNDc3XSxbLTAuNTk5OSwtMzM0LjQ3N10sWzE3LjY0MzMsLTMzNC40NzddLFszNS44ODY1LC0zMzQuNDc3XSxbNDQuMTc4OCwtMzM0LjQ3N10sWzQ0LjE3ODgsLTMzMy44NTQ4XSxbNDQuMTc4OCwtMzMyLjQ4NTldLFs0NC4xNzg4LC0zMzEuMTE3XSxbNDQuMTc4OCwtMzMwLjQ5NDhdLFs0NC4zMzY0LC0zMjkuNzE3Nl0sWzQ0Ljc2NTcsLTMyOS4wODE3XSxbNDUuNDAxNiwtMzI4LjY1MjRdLFs0Ni4xNzg4LC0zMjguNDk0OF0sWzQ3LjA4NSwtMzI4LjQ5NDhdLFs0OS4wNzg4LC0zMjguNDk0OF0sWzUxLjA3MjYsLTMyOC40OTQ4XSxbNTEuOTc4OCwtMzI4LjQ5NDhdLFs1Mi43NTYsLTMyOC42NTI0XSxbNTMuMzkxOSwtMzI5LjA4MTddLFs1My44MjEyLC0zMjkuNzE3Nl0sWzUzLjk3ODgsLTMzMC40OTQ4XSxbNTMuOTc4OCwtMzMxLjExN10sWzUzLjk3ODgsLTMzMi40ODU5XSxbNTMuOTc4OCwtMzMzLjg1NDhdLFs1My45Nzg4LC0zMzQuNDc3XSxbNjIuMjgwMiwtMzM0LjQ3N10sWzgwLjU0MzMsLTMzNC40NzddLFs5OC44MDY0LC0zMzQuNDc3XSxbMTA3LjEwNzgsLTMzNC40NzddLFsxMDcuODg1LC0zMzQuNjM0Nl0sWzEwOC41MjA5LC0zMzUuMDYzOV0sWzEwOC45NTAyLC0zMzUuNjk5OF0sWzEwOS4xMDc4LC0zMzYuNDc3XSxbMTA5LjEwNzgsLTM0OC40MzAxXSxbMTA5LjEwNzgsLTM3NC43MjddLFsxMDkuMTA3OCwtNDAxLjAyMzldLFsxMDkuMTA3OCwtNDEyLjk3N10sWzEwOS42NDMzLC00MTIuOTc3XSxbMTEwLjgyMTQsLTQxMi45NzddLFsxMTEuOTk5NSwtNDEyLjk3N10sWzExMi41MzUsLTQxMi45NzddLFsxMTIuOTIzNiwtNDEzLjA1NThdLFsxMTMuMjQxNiwtNDEzLjI3MDRdLFsxMTMuNDU2MiwtNDEzLjU4ODRdLFsxMTMuNTM1LC00MTMuOTc3XSxbMTEzLjUzNSwtNDE0LjM2NzZdLFsxMTMuNTM1LC00MTUuMjI3XSxbMTEzLjUzNSwtNDE2LjA4NjRdLFsxMTMuNTM1LC00MTYuNDc3XSxbMTEzLjQ1NjIsLTQxNi44NjU2XSxbMTEzLjI0MTYsLTQxNy4xODM1XSxbMTEyLjkyMzYsLTQxNy4zOTgyXSxbMTEyLjUzNSwtNDE3LjQ3N10sWzExMS45OTk1LC00MTcuNDc3XSxbMTEwLjgyMTQsLTQxNy40NzddLFsxMDkuNjQzMywtNDE3LjQ3N11dLCJob2xlcyI6W119fX07DQoKaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnOwppbXBvcnQge09yYml0Q29udHJvbHN9IGZyb20gJ3RocmVlL2FkZG9ucy9jb250cm9scy9PcmJpdENvbnRyb2xzLmpzJzsKCgpjb25zdCBGQUNFX0lEUyA9IFsnYm90dG9tJywgJ2Zyb250JywgJ2JhY2snLCAnbGVmdCcsICdyaWdodCcsICdsaWQnXTsKY29uc3QgRkFDRV9MQUJFTFMgPSB7Ym90dG9tOidCb3R0b20nLGZyb250OidGcm9udCcsYmFjazonQmFjaycsbGVmdDonTGVmdCcscmlnaHQ6J1JpZ2h0JyxsaWQ6J1RvcCAvIExpZCd9Owpjb25zdCBERUZBVUxUX0FSVFdPUktfTkFNRSA9ICdhcnRldHJpYmUtYWNyeWxpYy1ib3gtYmx1ZS1ib3RhbmljYWwtdGV4dHVyZS5wbmcnOwpjb25zdCBERUZBVUxUX0FSVFdPUktfQ0ROX1VSTCA9IGBodHRwczovL2Nkbi5zaG9waWZ5LmNvbS9zL2ZpbGVzLzEvMDU3Mi8wNjI3LzYxOTYvZmlsZXMvJHtERUZBVUxUX0FSVFdPUktfTkFNRX1gOwpjb25zdCBERUZBVUxUX0FSVFdPUktfTE9DQUxfVVJMID0gYC4uL3Nob3BpZnktdXBsb2FkLyR7REVGQVVMVF9BUlRXT1JLX05BTUV9YDsKY29uc3QgREVGQVVMVF9BUlRXT1JLX1VSTFMgPSAvXihsb2NhbGhvc3R8MTI3XC4wXC4wXC4xKSQvLnRlc3QobG9jYXRpb24uaG9zdG5hbWUpCiAgPyBbREVGQVVMVF9BUlRXT1JLX0xPQ0FMX1VSTCxERUZBVUxUX0FSVFdPUktfQ0ROX1VSTF0KICA6IFtERUZBVUxUX0FSVFdPUktfQ0ROX1VSTF07CmNvbnN0IFRISUNLTkVTUyA9IEU3X0dFT01FVFJZLnRoaWNrbmVzczsKY29uc3QgcmVkdWNlZE1vdGlvbiA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7Cgpjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcHJldmlldy1jYW52YXMnKTsKY29uc3Qgc3RhZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3RhZ2UnKTsKY29uc3QgbG9hZGluZ1N0YXRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2xvYWRpbmctc3RhdGUnKTsKY29uc3Qgc3RhZ2VFcnJvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzdGFnZS1lcnJvcicpOwpjb25zdCB0b2FzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0b2FzdCcpOwpjb25zdCBhc3NlbWJseUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhc3NlbWJseS10b2dnbGUnKTsKY29uc3QgbGlkQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2xpZC10b2dnbGUnKTsKY29uc3QgYWNyeWxpY0NvbG9ySW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWNyeWxpYy1jb2xvcicpOwpjb25zdCBhY3J5bGljQ29sb3JWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhY3J5bGljLWNvbG9yLXZhbHVlJyk7CmNvbnN0IGNsZWFyQWNyeWxpY0J1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjbGVhci1hY3J5bGljJyk7CmNvbnN0IGJvcmRlcldpZHRoSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYm9yZGVyLXdpZHRoJyk7CmNvbnN0IGJvcmRlcldpZHRoVmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYm9yZGVyLXdpZHRoLXZhbHVlJyk7CmNvbnN0IGJvcmRlckNvbG9ySW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYm9yZGVyLWNvbG9yJyk7CmNvbnN0IGJvcmRlckNvbG9yVmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYm9yZGVyLWNvbG9yLXZhbHVlJyk7CmNvbnN0IGJvcmRlckNvbG9yQ29udHJvbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYm9yZGVyLWNvbG9yLWNvbnRyb2xzJyk7CmNvbnN0IGJvcmRlckltYWdlQ29udHJvbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYm9yZGVyLWltYWdlLWNvbnRyb2xzJyk7CmNvbnN0IGJvcmRlckltYWdlU3RhdHVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2JvcmRlci1pbWFnZS1zdGF0dXMnKTsKY29uc3QgYm9yZGVySW1hZ2VJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNib3JkZXItaW1hZ2UtZmlsZScpOwpjb25zdCBib3JkZXJJbWFnZVJlbW92ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNyZW1vdmUtYm9yZGVyLWltYWdlJyk7Cgpjb25zdCBmYWNlU3RhdGUgPSBPYmplY3QuZnJvbUVudHJpZXMoRkFDRV9JRFMubWFwKGlkID0+IFtpZCwgewogIG1vZGU6J2NvdmVyJywKICBpbWFnZTpudWxsLAogIGZpbGVOYW1lOicnLAogIHRleHR1cmU6bnVsbAp9XSkpOwpjb25zdCBib3JkZXJTdGF0ZSA9IHsKICBtb2RlOidjb2xvcicsCiAgd2lkdGg6MiwKICBjb2xvcjonIzA4N2FiNScsCiAgaW1hZ2U6bnVsbCwKICBmaWxlTmFtZTonJwp9OwpsZXQgc2VsZWN0ZWRGYWNlID0gJ2JvdHRvbSc7CmxldCBleHBsb2RlZCA9IGZhbHNlOwpsZXQgbGlkT3BlbiA9IHRydWU7CmxldCB0b2FzdFRpbWVyID0gMDsKbGV0IHZpc2libGUgPSB0cnVlOwpsZXQgcGFnZVZpc2libGUgPSAhZG9jdW1lbnQuaGlkZGVuOwpsZXQgZnJhbWVSZXF1ZXN0ID0gMDsKbGV0IGRlZmF1bHRBcnR3b3JrUHJvbWlzZSA9IG51bGw7CmxldCBib3JkZXJSZWZyZXNoVGltZXIgPSAwOwoKZnVuY3Rpb24gc2hvd1RvYXN0KG1lc3NhZ2UpewogIHdpbmRvdy5jbGVhclRpbWVvdXQodG9hc3RUaW1lcik7CiAgdG9hc3QudGV4dENvbnRlbnQgPSBtZXNzYWdlOwogIHRvYXN0LmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTsKICB0b2FzdFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdG9hc3QuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpLCAyMjAwKTsKfQoKZnVuY3Rpb24gc2hvd0Vycm9yKGVycm9yKXsKICBsb2FkaW5nU3RhdGUuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7CiAgc3RhZ2VFcnJvci5oaWRkZW4gPSBmYWxzZTsKICBzdGFnZUVycm9yLnRleHRDb250ZW50ID0gYFByZXZpZXcgY291bGQgbm90IHN0YXJ0OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gOwp9CgpmdW5jdGlvbiBub3JtYWxpemVkTG9vcChwb2ludHMsIGJvdW5kcyl7CiAgY29uc3QgY3ggPSAoYm91bmRzLm1pblggKyBib3VuZHMubWF4WCkgLyAyOwogIGNvbnN0IGN5ID0gKGJvdW5kcy5taW5ZICsgYm91bmRzLm1heFkpIC8gMjsKICByZXR1cm4gcG9pbnRzLm1hcCgoW3gseV0pID0+IG5ldyBUSFJFRS5WZWN0b3IyKHggLSBjeCwgeSAtIGN5KSk7Cn0KCmZ1bmN0aW9uIG1ha2VTaGFwZShwYXJ0KXsKICBjb25zdCBvdXRlciA9IG5vcm1hbGl6ZWRMb29wKHBhcnQub3V0ZXIsIHBhcnQuYm91bmRzKTsKICBpZiAoIVRIUkVFLlNoYXBlVXRpbHMuaXNDbG9ja1dpc2Uob3V0ZXIpKSBvdXRlci5yZXZlcnNlKCk7CiAgY29uc3Qgc2hhcGUgPSBuZXcgVEhSRUUuU2hhcGUob3V0ZXIpOwogIGZvciAoY29uc3QgaG9sZVBvaW50cyBvZiBwYXJ0LmhvbGVzKXsKICAgIGNvbnN0IGhvbGUgPSBub3JtYWxpemVkTG9vcChob2xlUG9pbnRzLCBwYXJ0LmJvdW5kcyk7CiAgICBpZiAoVEhSRUUuU2hhcGVVdGlscy5pc0Nsb2NrV2lzZShob2xlKSkgaG9sZS5yZXZlcnNlKCk7CiAgICBzaGFwZS5ob2xlcy5wdXNoKG5ldyBUSFJFRS5QYXRoKGhvbGUpKTsKICB9CiAgcmV0dXJuIHNoYXBlOwp9CgpmdW5jdGlvbiBhc3NpZ25Ob3JtYWxpemVkVXZzKGdlb21ldHJ5LCBib3VuZHMpewogIGNvbnN0IHBvc2l0aW9uID0gZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpOwogIGNvbnN0IHV2ID0gZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCd1dicpOwogIGNvbnN0IG1pblggPSAtYm91bmRzLndpZHRoIC8gMjsKICBjb25zdCBtaW5ZID0gLWJvdW5kcy5oZWlnaHQgLyAyOwogIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwb3NpdGlvbi5jb3VudDsgaW5kZXggKz0gMSl7CiAgICB1di5zZXRYWShpbmRleCwgKHBvc2l0aW9uLmdldFgoaW5kZXgpIC0gbWluWCkgLyBib3VuZHMud2lkdGgsIChwb3NpdGlvbi5nZXRZKGluZGV4KSAtIG1pblkpIC8gYm91bmRzLmhlaWdodCk7CiAgfQogIHV2Lm5lZWRzVXBkYXRlID0gdHJ1ZTsKfQoKZnVuY3Rpb24gbWFrZUJhc2lzUXVhdGVybmlvbih4QXhpcywgeUF4aXMsIHpBeGlzKXsKICBjb25zdCBtYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpLm1ha2VCYXNpcyh4QXhpcywgeUF4aXMsIHpBeGlzKTsKICByZXR1cm4gbmV3IFRIUkVFLlF1YXRlcm5pb24oKS5zZXRGcm9tUm90YXRpb25NYXRyaXgobWF0cml4KTsKfQoKY29uc3QgY2xlYXJNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbCh7CiAgY29sb3I6MHhmZmZmZmYsCiAgcm91Z2huZXNzOjAuMDYsCiAgbWV0YWxuZXNzOjAsCiAgdHJhbnNtaXNzaW9uOjEsCiAgdGhpY2tuZXNzOlRISUNLTkVTUywKICBpb3I6MS40OSwKICBjbGVhcmNvYXQ6MC40MiwKICBjbGVhcmNvYXRSb3VnaG5lc3M6MC4xLAogIHRyYW5zcGFyZW50OnRydWUsCiAgb3BhY2l0eTowLjI1LAogIHNpZGU6VEhSRUUuRG91YmxlU2lkZSwKICBkZXB0aFdyaXRlOmZhbHNlCn0pOwoKY29uc3QgUEFSVF9DT05GSUcgPSB7CiAgYm90dG9tOntwb3NpdGlvbjpbMCwwLDBdLHJvdGF0aW9uOltNYXRoLlBJLzIsMCwwXSxleHBsb2RlOlswLC0zNCwwXX0sCiAgLy8gVGhlc2UgZGF0dW1zIGNvbWUgZnJvbSB0aGUgRTcgc2xvdCBjZW50ZXJzLCBub3QgdGhlIG91dGVyIGJvdW5kaW5nIGJveGVzLgogIGZyb250Ontwb3NpdGlvbjpbMCwyMC4xNSw0MS4zXSxyb3RhdGlvbjpbMCwwLDBdLGV4cGxvZGU6WzAsMjUsNTJdfSwKICBiYWNrOntwb3NpdGlvbjpbMCwxOC42NSwtNDEuM10scm90YXRpb246WzAsTWF0aC5QSSwwXSxleHBsb2RlOlswLDI1LC01Ml19LAogIGxlZnQ6e3Bvc2l0aW9uOlstNjEuMywyMi4xNDY4LDBdLHJvdGF0aW9uOlswLE1hdGguUEkvMiwwXSxleHBsb2RlOlstNTYsMjIsMF19LAogIHJpZ2h0Ontwb3NpdGlvbjpbNjEuMywyMi4xNDc0NSwwXSxyb3RhdGlvbjpbMCwtTWF0aC5QSS8yLDBdLGV4cGxvZGU6WzU2LDIyLDBdfSwKICBsaWQ6e3Bvc2l0aW9uOlswLDQ1LjkyNDgsLTQwLjgzMzZdLHJvdGF0aW9uOm51bGwsY29udGVudE9mZnNldFo6NDIuMjQxMSxleHBsb2RlOlswLDQ4LC0yMF19Cn07Cgpjb25zdCBzY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpOwpzY2VuZS5iYWNrZ3JvdW5kID0gbmV3IFRIUkVFLkNvbG9yKDB4ZWZmOWZkKTsKY29uc3QgY2FtZXJhID0gbmV3IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKDM1LDEsMC4xLDE2MDApOwpjb25zdCBkZWZhdWx0Q2FtZXJhUG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygxOTAsMTM4LDIxMCk7CmNvbnN0IGRlZmF1bHRUYXJnZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygwLDI1LDApOwpjYW1lcmEucG9zaXRpb24uY29weShkZWZhdWx0Q2FtZXJhUG9zaXRpb24pOwoKY29uc3QgcmVuZGVyZXIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJlcih7Y2FudmFzLGFudGlhbGlhczp0cnVlLGFscGhhOmZhbHNlLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0cnVlLHBvd2VyUHJlZmVyZW5jZTonaGlnaC1wZXJmb3JtYW5jZSd9KTsKcmVuZGVyZXIub3V0cHV0Q29sb3JTcGFjZSA9IFRIUkVFLlNSR0JDb2xvclNwYWNlOwpyZW5kZXJlci50b25lTWFwcGluZyA9IFRIUkVFLkFDRVNGaWxtaWNUb25lTWFwcGluZzsKcmVuZGVyZXIudG9uZU1hcHBpbmdFeHBvc3VyZSA9IDEuMDU7CnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oTWF0aC5taW4od2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSwyKSk7Cgpjb25zdCBjb250cm9scyA9IG5ldyBPcmJpdENvbnRyb2xzKGNhbWVyYSxyZW5kZXJlci5kb21FbGVtZW50KTsKY29udHJvbHMudGFyZ2V0LmNvcHkoZGVmYXVsdFRhcmdldCk7CmNvbnRyb2xzLmVuYWJsZURhbXBpbmcgPSBmYWxzZTsKY29udHJvbHMubWluRGlzdGFuY2UgPSAxMzA7CmNvbnRyb2xzLm1heERpc3RhbmNlID0gNjIwOwpjb250cm9scy5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSSAqIDAuOTI7CmNvbnRyb2xzLnVwZGF0ZSgpOwoKc2NlbmUuYWRkKG5ldyBUSFJFRS5IZW1pc3BoZXJlTGlnaHQoMHhmZmZmZmYsMHhjOGUwZWEsMi4yNSkpOwpjb25zdCBrZXlMaWdodCA9IG5ldyBUSFJFRS5EaXJlY3Rpb25hbExpZ2h0KDB4ZmZmZmZmLDMuMCk7CmtleUxpZ2h0LnBvc2l0aW9uLnNldCgtMTcwLDIzMCwxODApOwpzY2VuZS5hZGQoa2V5TGlnaHQpOwpjb25zdCByaW1MaWdodCA9IG5ldyBUSFJFRS5EaXJlY3Rpb25hbExpZ2h0KDB4Y2RlZmZmLDEuNzUpOwpyaW1MaWdodC5wb3NpdGlvbi5zZXQoMTgwLDExMCwtMTgwKTsKc2NlbmUuYWRkKHJpbUxpZ2h0KTsKCmNvbnN0IG1vZGVsUm9vdCA9IG5ldyBUSFJFRS5Hcm91cCgpOwptb2RlbFJvb3QubmFtZSA9ICdBY3J5bGljQm94QXNzZW1ibHlSb290JzsKc2NlbmUuYWRkKG1vZGVsUm9vdCk7Cgpjb25zdCBydW50aW1lID0gewogIHBhcnRzOnt9LAogIG1lc2hlczp7fSwKICBzb2NrZXRzOnt9LAogIGNvbGxpZGVyczp7fSwKICBjbGlja2FibGU6W10sCiAgYXJ0d29ya01lc2hlczp7fSwKICBhcnR3b3JrTWF0ZXJpYWxzOnt9LAogIGFydHdvcmtFZGdlTWF0ZXJpYWxzOnt9LAogIHVwbG9hZFByb21wdHM6e30sCiAgb3V0bGluZXM6e30sCiAgc2V0RXhwbG9kZWQsCiAgc2V0TGlkT3BlbiwKICBzZWxlY3RQYXJ0Cn07Cm1vZGVsUm9vdC51c2VyRGF0YS5zY3VscHRSdW50aW1lID0gcnVudGltZTsKCmZ1bmN0aW9uIGJ1aWxkUGFydChpZCl7CiAgY29uc3QgZGF0YSA9IEU3X0dFT01FVFJZLnBhcnRzW2lkXTsKICBjb25zdCBjb25maWcgPSBQQVJUX0NPTkZJR1tpZF07CiAgY29uc3Qgc2hhcGUgPSBtYWtlU2hhcGUoZGF0YSk7CiAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuRXh0cnVkZUdlb21ldHJ5KHNoYXBlLHtkZXB0aDpUSElDS05FU1MsYmV2ZWxFbmFibGVkOmZhbHNlLGN1cnZlU2VnbWVudHM6MixzdGVwczoxfSk7CiAgZ2VvbWV0cnkudHJhbnNsYXRlKDAsMCwtVEhJQ0tORVNTLzIpOwogIGdlb21ldHJ5LmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7CiAgYXNzaWduTm9ybWFsaXplZFV2cyhnZW9tZXRyeSxkYXRhLmJvdW5kcyk7CgogIGNvbnN0IHBpdm90ID0gbmV3IFRIUkVFLkdyb3VwKCk7CiAgcGl2b3QubmFtZSA9IGBwYXJ0OiR7aWR9OnBpdm90YDsKICBwaXZvdC5wb3NpdGlvbi5mcm9tQXJyYXkoY29uZmlnLnBvc2l0aW9uKTsKICBwaXZvdC51c2VyRGF0YS5wYXJ0SWQgPSBpZDsKICBwaXZvdC51c2VyRGF0YS5hc3NlbWJsZWRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCkuZnJvbUFycmF5KGNvbmZpZy5wb3NpdGlvbik7CiAgcGl2b3QudXNlckRhdGEuZXhwbG9kZWRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCkuZnJvbUFycmF5KGNvbmZpZy5wb3NpdGlvbikuYWRkKG5ldyBUSFJFRS5WZWN0b3IzKCkuZnJvbUFycmF5KGNvbmZpZy5leHBsb2RlKSk7CiAgcGl2b3QudXNlckRhdGEuY29sbGlkZXIgPSB7dHlwZTonYm94JyxzaXplOltkYXRhLmJvdW5kcy53aWR0aCxkYXRhLmJvdW5kcy5oZWlnaHQsVEhJQ0tORVNTXX07CgogIGNvbnN0IGNvbnRlbnQgPSBuZXcgVEhSRUUuR3JvdXAoKTsKICBjb250ZW50Lm5hbWUgPSBgcGFydDoke2lkfTpjb250ZW50YDsKICBpZiAoaWQgPT09ICdsaWQnKXsKICAgIGNvbnRlbnQucXVhdGVybmlvbi5jb3B5KG1ha2VCYXNpc1F1YXRlcm5pb24oCiAgICAgIG5ldyBUSFJFRS5WZWN0b3IzKC0xLDAsMCksCiAgICAgIG5ldyBUSFJFRS5WZWN0b3IzKDAsMCwxKSwKICAgICAgbmV3IFRIUkVFLlZlY3RvcjMoMCwxLDApCiAgICApKTsKICAgIGNvbnRlbnQucG9zaXRpb24ueiA9IGNvbmZpZy5jb250ZW50T2Zmc2V0WjsKICAgIHBpdm90LnVzZXJEYXRhLmhpbmdlQXhpcyA9IFsxLDAsMF07CiAgfSBlbHNlIHsKICAgIGNvbnRlbnQucm90YXRpb24uZnJvbUFycmF5KGNvbmZpZy5yb3RhdGlvbik7CiAgfQoKICBjb25zdCBib2R5ID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksW2NsZWFyTWF0ZXJpYWwsY2xlYXJNYXRlcmlhbF0pOwogIGJvZHkubmFtZSA9IGBtZXNoOiR7aWR9OmFjcnlsaWNgOwogIGJvZHkudXNlckRhdGEucGFydElkID0gaWQ7CiAgYm9keS5yZW5kZXJPcmRlciA9IDE7CiAgY29udGVudC5hZGQoYm9keSk7CgogIGNvbnN0IGFydHdvcmtHZW9tZXRyeSA9IG5ldyBUSFJFRS5TaGFwZUdlb21ldHJ5KHNoYXBlLDIpOwogIGFzc2lnbk5vcm1hbGl6ZWRVdnMoYXJ0d29ya0dlb21ldHJ5LGRhdGEuYm91bmRzKTsKICBjb25zdCBhcnR3b3JrTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoewogICAgY29sb3I6MHhmZmZmZmYsCiAgICB0cmFuc3BhcmVudDp0cnVlLAogICAgb3BhY2l0eTowLAogICAgc2lkZTpUSFJFRS5Eb3VibGVTaWRlLAogICAgZGVwdGhXcml0ZTpmYWxzZSwKICAgIHBvbHlnb25PZmZzZXQ6dHJ1ZSwKICAgIHBvbHlnb25PZmZzZXRGYWN0b3I6LTIsCiAgICBwb2x5Z29uT2Zmc2V0VW5pdHM6LTIsCiAgICB0b25lTWFwcGVkOmZhbHNlCiAgfSk7CiAgY29uc3QgYXJ0d29ya0VkZ2VNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7CiAgICBjb2xvcjoweGZmZmZmZiwKICAgIHRyYW5zcGFyZW50OmZhbHNlLAogICAgb3BhY2l0eToxLAogICAgc2lkZTpUSFJFRS5Eb3VibGVTaWRlLAogICAgZGVwdGhXcml0ZTp0cnVlLAogICAgdG9uZU1hcHBlZDpmYWxzZQogIH0pOwogIGNvbnN0IGFydHdvcmsgPSBuZXcgVEhSRUUuTWVzaChhcnR3b3JrR2VvbWV0cnksYXJ0d29ya01hdGVyaWFsKTsKICBhcnR3b3JrLm5hbWUgPSBgbWVzaDoke2lkfTphcnR3b3JrYDsKICBjb25zdCBhcnR3b3JrRmFjZXNJbndhcmQgPSBpZCA9PT0gJ2xlZnQnIHx8IGlkID09PSAncmlnaHQnOwogIGFydHdvcmsucG9zaXRpb24ueiA9IChhcnR3b3JrRmFjZXNJbndhcmQ\/LTE6MSkqKFRISUNLTkVTUyAvIDIgKyAwLjA0NSk7CiAgaWYgKGFydHdvcmtGYWNlc0lud2FyZCkgYXJ0d29yay5yb3RhdGlvbi55ID0gTWF0aC5QSTsKICBhcnR3b3JrLnVzZXJEYXRhLnBhcnRJZCA9IGlkOwogIGFydHdvcmsucmVuZGVyT3JkZXIgPSA0OwogIGNvbnRlbnQuYWRkKGFydHdvcmspOwoKICBjb25zdCBvdXRsaW5lTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTGluZUJhc2ljTWF0ZXJpYWwoe2NvbG9yOjB4OGZhZWJhLHRyYW5zcGFyZW50OnRydWUsb3BhY2l0eTowLjQ2LGRlcHRoVGVzdDpmYWxzZX0pOwogIGNvbnN0IG91dGxpbmUgPSBuZXcgVEhSRUUuTGluZVNlZ21lbnRzKG5ldyBUSFJFRS5FZGdlc0dlb21ldHJ5KGdlb21ldHJ5LDI1KSxvdXRsaW5lTWF0ZXJpYWwpOwogIG91dGxpbmUubmFtZSA9IGBtZXNoOiR7aWR9OnNlbGVjdGlvbi1vdXRsaW5lYDsKICBvdXRsaW5lLnZpc2libGUgPSBmYWxzZTsKICBvdXRsaW5lLnJlbmRlck9yZGVyID0gOTsKICBjb250ZW50LmFkZChvdXRsaW5lKTsKCiAgY29uc3Qgc29ja2V0ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7CiAgc29ja2V0Lm5hbWUgPSBpZCA9PT0gJ2xpZCcgPyAnc29ja2V0OmxpZC1oaW5nZS1heGlzJyA6IGBzb2NrZXQ6JHtpZH06YXNzZW1ibHlgOwogIHNvY2tldC51c2VyRGF0YS5zb2NrZXRGb3IgPSBpZDsKICBwaXZvdC5hZGQoc29ja2V0KTsKICBydW50aW1lLnNvY2tldHNbc29ja2V0Lm5hbWVdID0gc29ja2V0OwoKICBwaXZvdC5hZGQoY29udGVudCk7CiAgbW9kZWxSb290LmFkZChwaXZvdCk7CiAgcnVudGltZS5wYXJ0c1tpZF0gPSBwaXZvdDsKICBydW50aW1lLm1lc2hlc1tpZF0gPSBib2R5OwogIHJ1bnRpbWUuYXJ0d29ya01lc2hlc1tpZF0gPSBhcnR3b3JrOwogIHJ1bnRpbWUuYXJ0d29ya01hdGVyaWFsc1tpZF0gPSBhcnR3b3JrTWF0ZXJpYWw7CiAgcnVudGltZS5hcnR3b3JrRWRnZU1hdGVyaWFsc1tpZF0gPSBhcnR3b3JrRWRnZU1hdGVyaWFsOwogIHJ1bnRpbWUub3V0bGluZXNbaWRdID0gb3V0bGluZTsKICBydW50aW1lLmNvbGxpZGVyc1tpZF0gPSBwaXZvdC51c2VyRGF0YS5jb2xsaWRlcjsKICBydW50aW1lLmNsaWNrYWJsZS5wdXNoKGJvZHksYXJ0d29yayk7CgogIGlmIChpZCA9PT0gJ2Zyb250Jyl7CiAgICBjb25zdCBwcm9tcHRDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKICAgIHByb21wdENhbnZhcy53aWR0aCA9IDI1NjsKICAgIHByb21wdENhbnZhcy5oZWlnaHQgPSAyNTY7CiAgICBjb25zdCBwcm9tcHRDb250ZXh0ID0gcHJvbXB0Q2FudmFzLmdldENvbnRleHQoJzJkJyk7CiAgICBwcm9tcHRDb250ZXh0LmNsZWFyUmVjdCgwLDAsMjU2LDI1Nik7CiAgICBwcm9tcHRDb250ZXh0LmJlZ2luUGF0aCgpOwogICAgcHJvbXB0Q29udGV4dC5hcmMoMTI4LDEyOCw5MSwwLE1hdGguUEkqMik7CiAgICBwcm9tcHRDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwyNTUsMjU1LC45MiknOwogICAgcHJvbXB0Q29udGV4dC5maWxsKCk7CiAgICBwcm9tcHRDb250ZXh0LmxpbmVXaWR0aCA9IDEwOwogICAgcHJvbXB0Q29udGV4dC5zdHJva2VTdHlsZSA9ICcjMDg3QUI1JzsKICAgIHByb21wdENvbnRleHQuc3Ryb2tlKCk7CiAgICBwcm9tcHRDb250ZXh0LnN0cm9rZVN0eWxlID0gJyMwODdBQjUnOwogICAgcHJvbXB0Q29udGV4dC5saW5lV2lkdGggPSAxMzsKICAgIHByb21wdENvbnRleHQubGluZUNhcCA9ICdyb3VuZCc7CiAgICBwcm9tcHRDb250ZXh0LmxpbmVKb2luID0gJ3JvdW5kJzsKICAgIHByb21wdENvbnRleHQuYmVnaW5QYXRoKCk7CiAgICBwcm9tcHRDb250ZXh0Lm1vdmVUbygxMjgsMTY0KTsKICAgIHByb21wdENvbnRleHQubGluZVRvKDEyOCw4Myk7CiAgICBwcm9tcHRDb250ZXh0Lm1vdmVUbyg5NCwxMTYpOwogICAgcHJvbXB0Q29udGV4dC5saW5lVG8oMTI4LDgyKTsKICAgIHByb21wdENvbnRleHQubGluZVRvKDE2MiwxMTYpOwogICAgcHJvbXB0Q29udGV4dC5tb3ZlVG8oODIsMTc0KTsKICAgIHByb21wdENvbnRleHQubGluZVRvKDgyLDE5Myk7CiAgICBwcm9tcHRDb250ZXh0LmxpbmVUbygxNzQsMTkzKTsKICAgIHByb21wdENvbnRleHQubGluZVRvKDE3NCwxNzQpOwogICAgcHJvbXB0Q29udGV4dC5zdHJva2UoKTsKICAgIGNvbnN0IHByb21wdFRleHR1cmUgPSBuZXcgVEhSRUUuQ2FudmFzVGV4dHVyZShwcm9tcHRDYW52YXMpOwogICAgcHJvbXB0VGV4dHVyZS5jb2xvclNwYWNlID0gVEhSRUUuU1JHQkNvbG9yU3BhY2U7CiAgICBjb25zdCBwcm9tcHRNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7CiAgICAgIG1hcDpwcm9tcHRUZXh0dXJlLAogICAgICB0cmFuc3BhcmVudDp0cnVlLAogICAgICBvcGFjaXR5OjAuOTYsCiAgICAgIHNpZGU6VEhSRUUuRG91YmxlU2lkZSwKICAgICAgZGVwdGhXcml0ZTpmYWxzZSwKICAgICAgZGVwdGhUZXN0OmZhbHNlLAogICAgICB0b25lTWFwcGVkOmZhbHNlCiAgICB9KTsKICAgIGNvbnN0IHByb21wdCA9IG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDE4LDE4KSxwcm9tcHRNYXRlcmlhbCk7CiAgICBwcm9tcHQubmFtZSA9ICdwcm9tcHQ6ZnJvbnQ6dXBsb2FkJzsKICAgIHByb21wdC5wb3NpdGlvbi5zZXQoMCw0LFRISUNLTkVTUy8yKzAuMTgpOwogICAgcHJvbXB0LnVzZXJEYXRhLnBhcnRJZCA9ICdmcm9udCc7CiAgICBwcm9tcHQudXNlckRhdGEudXBsb2FkUHJvbXB0RmFjZSA9ICdmcm9udCc7CiAgICBwcm9tcHQucmVuZGVyT3JkZXIgPSA4OwogICAgY29udGVudC5hZGQocHJvbXB0KTsKICAgIHJ1bnRpbWUudXBsb2FkUHJvbXB0cy5mcm9udCA9IHByb21wdDsKICAgIHJ1bnRpbWUuY2xpY2thYmxlLnB1c2gocHJvbXB0KTsKICB9Cn0KCkZBQ0VfSURTLmZvckVhY2goYnVpbGRQYXJ0KTsKY29uc3QgbGVmdEhpbmdlU29ja2V0ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7CmxlZnRIaW5nZVNvY2tldC5uYW1lID0gJ3NvY2tldDpsZWZ0OmhpbmdlLWhvbGUtNW1tJzsKbGVmdEhpbmdlU29ja2V0LnBvc2l0aW9uLnNldCgwLDIzLjc3OCwtNDAuODMzNik7CnJ1bnRpbWUucGFydHMubGVmdC5hZGQobGVmdEhpbmdlU29ja2V0KTsKcnVudGltZS5zb2NrZXRzW2xlZnRIaW5nZVNvY2tldC5uYW1lXSA9IGxlZnRIaW5nZVNvY2tldDsKY29uc3QgcmlnaHRIaW5nZVNvY2tldCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpOwpyaWdodEhpbmdlU29ja2V0Lm5hbWUgPSAnc29ja2V0OnJpZ2h0OmhpbmdlLWhvbGUtNW1tJzsKcmlnaHRIaW5nZVNvY2tldC5wb3NpdGlvbi5zZXQoMCwyMy43NzczNSwtNDAuODMzNik7CnJ1bnRpbWUucGFydHMucmlnaHQuYWRkKHJpZ2h0SGluZ2VTb2NrZXQpOwpydW50aW1lLnNvY2tldHNbcmlnaHRIaW5nZVNvY2tldC5uYW1lXSA9IHJpZ2h0SGluZ2VTb2NrZXQ7Cgpjb25zdCBtb3Rpb24gPSB7YXNzZW1ibHk6bnVsbCxsaWQ6bnVsbCxwZW5kaW5nRml0OmZhbHNlfTsKY29uc3QgTElEX09QRU5fQU5HTEUgPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQoLTExMik7CgpmdW5jdGlvbiBlYXNlSW5PdXRDdWJpYyh2YWx1ZSl7CiAgcmV0dXJuIHZhbHVlIDwgMC41ID8gNCp2YWx1ZSp2YWx1ZSp2YWx1ZSA6IDEtTWF0aC5wb3coLTIqdmFsdWUrMiwzKS8yOwp9CgpmdW5jdGlvbiBiZWdpbkFuaW1hdGlvbihraW5kLHBheWxvYWQpewogIGNvbnN0IHtmaXQ9ZmFsc2UsLi4uYW5pbWF0aW9ufSA9IHBheWxvYWQ7CiAgbW90aW9uW2tpbmRdID0gey4uLmFuaW1hdGlvbixzdGFydDpwZXJmb3JtYW5jZS5ub3coKSxkdXJhdGlvbjpyZWR1Y2VkTW90aW9uPzA6YW5pbWF0aW9uLmR1cmF0aW9ufTsKICBpZiAoZml0KSBtb3Rpb24ucGVuZGluZ0ZpdCA9IHRydWU7CiAgcmVxdWVzdFJlbmRlcigpOwp9CgpmdW5jdGlvbiBzZXRFeHBsb2RlZChuZXh0KXsKICBleHBsb2RlZCA9IEJvb2xlYW4obmV4dCk7CiAgY29uc3Qgc3RhcnRzID0ge307CiAgY29uc3QgZW5kcyA9IHt9OwogIGZvciAoY29uc3QgaWQgb2YgRkFDRV9JRFMpewogICAgc3RhcnRzW2lkXSA9IHJ1bnRpbWUucGFydHNbaWRdLnBvc2l0aW9uLmNsb25lKCk7CiAgICBlbmRzW2lkXSA9IHJ1bnRpbWUucGFydHNbaWRdLnVzZXJEYXRhW2V4cGxvZGVkPydleHBsb2RlZFBvc2l0aW9uJzonYXNzZW1ibGVkUG9zaXRpb24nXS5jbG9uZSgpOwogIH0KICBiZWdpbkFuaW1hdGlvbignYXNzZW1ibHknLHtzdGFydHMsZW5kcyxkdXJhdGlvbjo2ODAsZml0OnRydWV9KTsKICBhc3NlbWJseUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsU3RyaW5nKGV4cGxvZGVkKSk7CiAgYXNzZW1ibHlCdXR0b24ucXVlcnlTZWxlY3Rvcignc3BhbicpLnRleHRDb250ZW50ID0gZXhwbG9kZWQgPyAnQXNzZW1ibGUnIDogJ0V4cGxvZGUnOwogIGFzc2VtYmx5QnV0dG9uLnRpdGxlID0gZXhwbG9kZWQgPyAnQXNzZW1ibGUgYm94JyA6ICdFeHBsb2RlIGJveCc7Cn0KCmZ1bmN0aW9uIHN5bmNMaWRCdXR0b24obmV4dCl7CiAgbGlkT3BlbiA9IEJvb2xlYW4obmV4dCk7CiAgbGlkQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJyxTdHJpbmcobGlkT3BlbikpOwogIGxpZEJ1dHRvbi5xdWVyeVNlbGVjdG9yKCdzcGFuJykudGV4dENvbnRlbnQgPSBsaWRPcGVuID8gJ0Nsb3NlIGxpZCcgOiAnT3BlbiBsaWQnOwogIGxpZEJ1dHRvbi50aXRsZSA9IGxpZE9wZW4gPyAnQ2xvc2UgbGlkJyA6ICdPcGVuIGxpZCc7Cn0KCmZ1bmN0aW9uIHNldExpZE9wZW4obmV4dCx7ZHVyYXRpb249NjIwfT17fSl7CiAgc3luY0xpZEJ1dHRvbihuZXh0KTsKICBiZWdpbkFuaW1hdGlvbignbGlkJyx7ZnJvbTpydW50aW1lLnBhcnRzLmxpZC5yb3RhdGlvbi54LHRvOmxpZE9wZW4\/TElEX09QRU5fQU5HTEU6MCxkdXJhdGlvbixmaXQ6ZmFsc2V9KTsKfQoKZnVuY3Rpb24gdXBkYXRlTW90aW9uKG5vdyl7CiAgbGV0IGFjdGl2ZSA9IGZhbHNlOwogIGlmIChtb3Rpb24uYXNzZW1ibHkpewogICAgY29uc3QgdmFsdWUgPSBtb3Rpb24uYXNzZW1ibHkuZHVyYXRpb24gPT09IDAgPyAxIDogTWF0aC5taW4oMSwobm93LW1vdGlvbi5hc3NlbWJseS5zdGFydCkvbW90aW9uLmFzc2VtYmx5LmR1cmF0aW9uKTsKICAgIGNvbnN0IGVhc2VkID0gZWFzZUluT3V0Q3ViaWModmFsdWUpOwogICAgZm9yIChjb25zdCBpZCBvZiBGQUNFX0lEUyl7CiAgICAgIHJ1bnRpbWUucGFydHNbaWRdLnBvc2l0aW9uLmxlcnBWZWN0b3JzKG1vdGlvbi5hc3NlbWJseS5zdGFydHNbaWRdLG1vdGlvbi5hc3NlbWJseS5lbmRzW2lkXSxlYXNlZCk7CiAgICB9CiAgICBpZiAodmFsdWUgPj0gMSkgbW90aW9uLmFzc2VtYmx5ID0gbnVsbDsgZWxzZSBhY3RpdmUgPSB0cnVlOwogIH0KICBpZiAobW90aW9uLmxpZCl7CiAgICBjb25zdCB2YWx1ZSA9IG1vdGlvbi5saWQuZHVyYXRpb24gPT09IDAgPyAxIDogTWF0aC5taW4oMSwobm93LW1vdGlvbi5saWQuc3RhcnQpL21vdGlvbi5saWQuZHVyYXRpb24pOwogICAgcnVudGltZS5wYXJ0cy5saWQucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5sZXJwKG1vdGlvbi5saWQuZnJvbSxtb3Rpb24ubGlkLnRvLGVhc2VJbk91dEN1YmljKHZhbHVlKSk7CiAgICBpZiAodmFsdWUgPj0gMSkgbW90aW9uLmxpZCA9IG51bGw7IGVsc2UgYWN0aXZlID0gdHJ1ZTsKICB9CiAgcmV0dXJuIGFjdGl2ZTsKfQoKZnVuY3Rpb24gZml0Q2FtZXJhVG9Nb2RlbChwYWRkaW5nPTEuMTgpewogIGNvbnN0IGJveCA9IG5ldyBUSFJFRS5Cb3gzKCkuc2V0RnJvbU9iamVjdChtb2RlbFJvb3QpOwogIGNvbnN0IHNwaGVyZSA9IGJveC5nZXRCb3VuZGluZ1NwaGVyZShuZXcgVEhSRUUuU3BoZXJlKCkpOwogIGlmICghTnVtYmVyLmlzRmluaXRlKHNwaGVyZS5yYWRpdXMpIHx8IHNwaGVyZS5yYWRpdXMgPD0gMCkgcmV0dXJuOwogIGNvbnN0IGRpcmVjdGlvbiA9IGNhbWVyYS5wb3NpdGlvbi5jbG9uZSgpLnN1Yihjb250cm9scy50YXJnZXQpLm5vcm1hbGl6ZSgpOwogIGNvbnN0IGhhbGZGb3YgPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQoY2FtZXJhLmZvdiowLjUpOwogIGNvbnN0IGhvcml6b250YWxGYWN0b3IgPSBjYW1lcmEuYXNwZWN0IDwgMSA\/IDEvY2FtZXJhLmFzcGVjdCA6IDE7CiAgY29uc3QgZGlzdGFuY2UgPSAoc3BoZXJlLnJhZGl1cy9NYXRoLnNpbihoYWxmRm92KSkqcGFkZGluZypob3Jpem9udGFsRmFjdG9yOwogIGNvbnRyb2xzLnRhcmdldC5jb3B5KHNwaGVyZS5jZW50ZXIpOwogIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHNwaGVyZS5jZW50ZXIpLmFkZChkaXJlY3Rpb24ubXVsdGlwbHlTY2FsYXIoZGlzdGFuY2UpKTsKICBjYW1lcmEubmVhciA9IE1hdGgubWF4KDAuMSxkaXN0YW5jZS1zcGhlcmUucmFkaXVzKjIuMik7CiAgY2FtZXJhLmZhciA9IGRpc3RhbmNlK3NwaGVyZS5yYWRpdXMqNDsKICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpOwogIGNvbnRyb2xzLnVwZGF0ZSgpOwp9CgpmdW5jdGlvbiByZW5kZXJGcmFtZShub3c9cGVyZm9ybWFuY2Uubm93KCkpewogIGZyYW1lUmVxdWVzdCA9IDA7CiAgaWYgKCF2aXNpYmxlIHx8ICFwYWdlVmlzaWJsZSkgcmV0dXJuOwogIGNvbnN0IGFjdGl2ZSA9IHVwZGF0ZU1vdGlvbihub3cpOwogIGlmICghYWN0aXZlICYmIG1vdGlvbi5wZW5kaW5nRml0KXsKICAgIG1vdGlvbi5wZW5kaW5nRml0ID0gZmFsc2U7CiAgICBmaXRDYW1lcmFUb01vZGVsKCk7CiAgfQogIHJlbmRlcmVyLnJlbmRlcihzY2VuZSxjYW1lcmEpOwogIGlmIChhY3RpdmUpIGZyYW1lUmVxdWVzdCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXJGcmFtZSk7Cn0KCmZ1bmN0aW9uIHJlcXVlc3RSZW5kZXIoKXsKICBpZiAoIWZyYW1lUmVxdWVzdCAmJiB2aXNpYmxlICYmIHBhZ2VWaXNpYmxlKSBmcmFtZVJlcXVlc3QgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyRnJhbWUpOwp9Cgpjb250cm9scy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLHJlcXVlc3RSZW5kZXIpOwoKZnVuY3Rpb24gcmVzaXplUmVuZGVyZXIoKXsKICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsc3RhZ2UuY2xpZW50V2lkdGgpOwogIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsc3RhZ2UuY2xpZW50SGVpZ2h0KTsKICBjb25zdCBwaXhlbFJhdGlvID0gcmVuZGVyZXIuZ2V0UGl4ZWxSYXRpbygpOwogIGlmIChjYW52YXMud2lkdGggIT09IE1hdGgucm91bmQod2lkdGgqcGl4ZWxSYXRpbykgfHwgY2FudmFzLmhlaWdodCAhPT0gTWF0aC5yb3VuZChoZWlnaHQqcGl4ZWxSYXRpbykpewogICAgcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCxoZWlnaHQsZmFsc2UpOwogICAgY2FtZXJhLmFzcGVjdCA9IHdpZHRoL2hlaWdodDsKICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CiAgICByZXF1ZXN0UmVuZGVyKCk7CiAgfQp9Cm5ldyBSZXNpemVPYnNlcnZlcihyZXNpemVSZW5kZXJlcikub2JzZXJ2ZShzdGFnZSk7Cm5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IHsKICB2aXNpYmxlID0gZW50cmllc1swXT8uaXNJbnRlcnNlY3RpbmcgPz8gdHJ1ZTsKICBpZiAodmlzaWJsZSkgcmVxdWVzdFJlbmRlcigpOwp9LHt0aHJlc2hvbGQ6MC4wMn0pLm9ic2VydmUoc3RhZ2UpOwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywoKSA9PiB7CiAgcGFnZVZpc2libGUgPSAhZG9jdW1lbnQuaGlkZGVuOwogIGlmIChwYWdlVmlzaWJsZSkgcmVxdWVzdFJlbmRlcigpOwp9KTsKCmZ1bmN0aW9uIHN5bmNCb3JkZXJVaSgpewogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWJvcmRlci1tb2RlXScpLmZvckVhY2goYnV0dG9uID0+IHsKICAgIGNvbnN0IHNlbGVjdGVkID0gYnV0dG9uLmRhdGFzZXQuYm9yZGVyTW9kZSA9PT0gYm9yZGVyU3RhdGUubW9kZTsKICAgIGJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCdzZWxlY3RlZCcsc2VsZWN0ZWQpOwogICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJyxTdHJpbmcoc2VsZWN0ZWQpKTsKICB9KTsKICBib3JkZXJXaWR0aElucHV0LnZhbHVlID0gU3RyaW5nKGJvcmRlclN0YXRlLndpZHRoKTsKICBib3JkZXJXaWR0aFZhbHVlLnRleHRDb250ZW50ID0gYCR7Ym9yZGVyU3RhdGUud2lkdGgudG9GaXhlZCgxKX0gbW1gOwogIGJvcmRlckNvbG9ySW5wdXQudmFsdWUgPSBib3JkZXJTdGF0ZS5jb2xvcjsKICBib3JkZXJDb2xvclZhbHVlLnRleHRDb250ZW50ID0gYm9yZGVyU3RhdGUuY29sb3IudG9VcHBlckNhc2UoKTsKICBib3JkZXJDb2xvckNvbnRyb2xzLmhpZGRlbiA9IGJvcmRlclN0YXRlLm1vZGUgIT09ICdjb2xvcic7CiAgYm9yZGVySW1hZ2VDb250cm9scy5oaWRkZW4gPSBib3JkZXJTdGF0ZS5tb2RlICE9PSAnaW1hZ2UnOwogIGJvcmRlckltYWdlU3RhdHVzLnRleHRDb250ZW50ID0gYm9yZGVyU3RhdGUuZmlsZU5hbWUgfHwgJ05vIGJvcmRlciBpbWFnZSc7CiAgYm9yZGVySW1hZ2VSZW1vdmUuaGlkZGVuID0gIWJvcmRlclN0YXRlLmltYWdlOwp9CgpmdW5jdGlvbiByZWJ1aWxkQWxsQm9yZGVyVGV4dHVyZXMoKXsKICBmb3IgKGNvbnN0IGlkIG9mIEZBQ0VfSURTKSBidWlsZEFydHdvcmtUZXh0dXJlKGlkKTsKfQoKZnVuY3Rpb24gdXBkYXRlQm9yZGVyU3RhdGUobXV0YXRvcix7cmVidWlsZD10cnVlfT17fSl7CiAgbXV0YXRvcihib3JkZXJTdGF0ZSk7CiAgaWYgKHJlYnVpbGQpIHJlYnVpbGRBbGxCb3JkZXJUZXh0dXJlcygpOwp9CgpmdW5jdGlvbiBzY2hlZHVsZUJvcmRlclJlYnVpbGQoKXsKICB3aW5kb3cuY2xlYXJUaW1lb3V0KGJvcmRlclJlZnJlc2hUaW1lcik7CiAgYm9yZGVyUmVmcmVzaFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQocmVidWlsZEFsbEJvcmRlclRleHR1cmVzLDcwKTsKfQoKZnVuY3Rpb24gc2VsZWN0UGFydChpZCl7CiAgaWYgKCFGQUNFX0lEUy5pbmNsdWRlcyhpZCkpIHJldHVybjsKICBzZWxlY3RlZEZhY2UgPSBpZDsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZmFjZS1pdGVtJykuZm9yRWFjaChpdGVtID0+IGl0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgnc2VsZWN0ZWQnLGl0ZW0uZGF0YXNldC5mYWNlPT09aWQpKTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zZWxlY3QtZmFjZV0nKS5mb3JFYWNoKGJ1dHRvbiA9PiBidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLFN0cmluZyhidXR0b24uZGF0YXNldC5zZWxlY3RGYWNlPT09aWQpKSk7CiAgZm9yIChjb25zdCBmYWNlSWQgb2YgRkFDRV9JRFMpIHJ1bnRpbWUub3V0bGluZXNbZmFjZUlkXS52aXNpYmxlID0gZmFjZUlkID09PSBpZDsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0ZWQtZmFjZS1sYWJlbCcpLnRleHRDb250ZW50ID0gYCR7RkFDRV9MQUJFTFNbaWRdfSBmYWNlYDsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1maWxsLW1vZGVdJykuZm9yRWFjaChidXR0b24gPT4gewogICAgY29uc3Qgc2VsZWN0ZWQgPSBidXR0b24uZGF0YXNldC5maWxsTW9kZSA9PT0gZmFjZVN0YXRlW2lkXS5tb2RlOwogICAgYnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoJ3NlbGVjdGVkJyxzZWxlY3RlZCk7CiAgICBidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLFN0cmluZyhzZWxlY3RlZCkpOwogIH0pOwogIHN5bmNCb3JkZXJVaSgpOwogIHJlcXVlc3RSZW5kZXIoKTsKfQoKY29uc3QgcmF5Y2FzdGVyID0gbmV3IFRIUkVFLlJheWNhc3RlcigpOwpjb25zdCBwb2ludGVyID0gbmV3IFRIUkVFLlZlY3RvcjIoKTsKbGV0IHBvaW50ZXJTdGFydCA9IG51bGw7CmxldCBsaWREcmFnID0gbnVsbDsKCmZ1bmN0aW9uIHBpY2tQYXJ0KGNsaWVudFgsY2xpZW50WSl7CiAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICBwb2ludGVyLnNldCgoKGNsaWVudFgtcmVjdC5sZWZ0KS9yZWN0LndpZHRoKSoyLTEsLSgoY2xpZW50WS1yZWN0LnRvcCkvcmVjdC5oZWlnaHQpKjIrMSk7CiAgcmF5Y2FzdGVyLnNldEZyb21DYW1lcmEocG9pbnRlcixjYW1lcmEpOwogIHJldHVybiByYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0cyhydW50aW1lLmNsaWNrYWJsZSxmYWxzZSlbMF0gfHwgbnVsbDsKfQoKZnVuY3Rpb24gZmluaXNoTGlkRHJhZyhldmVudCl7CiAgaWYgKCFsaWREcmFnIHx8IGV2ZW50LnBvaW50ZXJJZCAhPT0gbGlkRHJhZy5wb2ludGVySWQpIHJldHVybiBmYWxzZTsKICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogIGlmIChjYW52YXMuaGFzUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKSkgY2FudmFzLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpOwogIGNvbnRyb2xzLmVuYWJsZWQgPSB0cnVlOwogIGNhbnZhcy5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnZ2luZy1saWQnKTsKICBjb25zdCBtb3ZlZCA9IGxpZERyYWcubW92ZWQ7CiAgY29uc3Qgc2hvdWxkT3BlbiA9IHJ1bnRpbWUucGFydHMubGlkLnJvdGF0aW9uLnggPCBMSURfT1BFTl9BTkdMRS8yOwogIGxpZERyYWcgPSBudWxsOwogIGlmIChtb3ZlZCkgc2V0TGlkT3BlbihzaG91bGRPcGVuLHtkdXJhdGlvbjpyZWR1Y2VkTW90aW9uPzA6MjIwfSk7CiAgZWxzZSBzZWxlY3RQYXJ0KCdsaWQnKTsKICBwb2ludGVyU3RhcnQgPSBudWxsOwogIHJldHVybiB0cnVlOwp9CgpjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLGV2ZW50ID0+IHsKICBwb2ludGVyU3RhcnQgPSB7eDpldmVudC5jbGllbnRYLHk6ZXZlbnQuY2xpZW50WX07CiAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCB8fCBleHBsb2RlZCkgcmV0dXJuOwogIGNvbnN0IGhpdCA9IHBpY2tQYXJ0KGV2ZW50LmNsaWVudFgsZXZlbnQuY2xpZW50WSk7CiAgaWYgKGhpdD8ub2JqZWN0LnVzZXJEYXRhLnBhcnRJZCAhPT0gJ2xpZCcpIHJldHVybjsKICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogIG1vdGlvbi5saWQgPSBudWxsOwogIG1vdGlvbi5wZW5kaW5nRml0ID0gZmFsc2U7CiAgbGlkRHJhZyA9IHsKICAgIHBvaW50ZXJJZDpldmVudC5wb2ludGVySWQsCiAgICBzdGFydFk6ZXZlbnQuY2xpZW50WSwKICAgIHN0YXJ0QW5nbGU6cnVudGltZS5wYXJ0cy5saWQucm90YXRpb24ueCwKICAgIG1vdmVkOmZhbHNlCiAgfTsKICBjb250cm9scy5lbmFibGVkID0gZmFsc2U7CiAgY2FudmFzLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CiAgY2FudmFzLmNsYXNzTGlzdC5hZGQoJ2RyYWdnaW5nLWxpZCcpOwp9LHtjYXB0dXJlOnRydWV9KTsKCmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsZXZlbnQgPT4gewogIGlmIChsaWREcmFnICYmIGV2ZW50LnBvaW50ZXJJZCA9PT0gbGlkRHJhZy5wb2ludGVySWQpewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogICAgY29uc3QgZnVsbFRyYXZlbCA9IE1hdGgubWluKDI2MCxNYXRoLm1heCgxNTAsY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCowLjM2KSk7CiAgICBjb25zdCBkZWx0YSA9IChldmVudC5jbGllbnRZLWxpZERyYWcuc3RhcnRZKSpNYXRoLmFicyhMSURfT1BFTl9BTkdMRSkvZnVsbFRyYXZlbDsKICAgIHJ1bnRpbWUucGFydHMubGlkLnJvdGF0aW9uLnggPSBUSFJFRS5NYXRoVXRpbHMuY2xhbXAobGlkRHJhZy5zdGFydEFuZ2xlK2RlbHRhLExJRF9PUEVOX0FOR0xFLDApOwogICAgbGlkRHJhZy5tb3ZlZCB8fD0gTWF0aC5hYnMoZXZlbnQuY2xpZW50WS1saWREcmFnLnN0YXJ0WSk+MzsKICAgIHN5bmNMaWRCdXR0b24ocnVudGltZS5wYXJ0cy5saWQucm90YXRpb24ueCA8IExJRF9PUEVOX0FOR0xFLzIpOwogICAgcmVxdWVzdFJlbmRlcigpOwogICAgcmV0dXJuOwogIH0KICBpZiAoZXZlbnQucG9pbnRlclR5cGUgPT09ICdtb3VzZScpewogICAgY29uc3QgaGl0ID0gcGlja1BhcnQoZXZlbnQuY2xpZW50WCxldmVudC5jbGllbnRZKTsKICAgIGNhbnZhcy5kYXRhc2V0LmludGVyYWN0aW9uID0gIWV4cGxvZGVkICYmIGhpdD8ub2JqZWN0LnVzZXJEYXRhLnBhcnRJZCA9PT0gJ2xpZCcgPyAnbGlkJyA6ICdvcmJpdCc7CiAgfQp9LHtjYXB0dXJlOnRydWV9KTsKCmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLGV2ZW50ID0+IHsKICBpZiAoZmluaXNoTGlkRHJhZyhldmVudCkpIHJldHVybjsKICBpZiAoIXBvaW50ZXJTdGFydCB8fCBNYXRoLmh5cG90KGV2ZW50LmNsaWVudFgtcG9pbnRlclN0YXJ0LngsZXZlbnQuY2xpZW50WS1wb2ludGVyU3RhcnQueSk+NSl7cG9pbnRlclN0YXJ0PW51bGw7cmV0dXJuO30KICBjb25zdCBoaXQgPSBwaWNrUGFydChldmVudC5jbGllbnRYLGV2ZW50LmNsaWVudFkpOwogIHBvaW50ZXJTdGFydCA9IG51bGw7CiAgaWYgKGhpdD8ub2JqZWN0LnVzZXJEYXRhLnVwbG9hZFByb21wdEZhY2UpewogICAgY29uc3QgaWQgPSBoaXQub2JqZWN0LnVzZXJEYXRhLnVwbG9hZFByb21wdEZhY2U7CiAgICBzZWxlY3RQYXJ0KGlkKTsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWZpbGUtZmFjZT0iJHtpZH0iXWApLmNsaWNrKCk7CiAgfSBlbHNlIGlmIChoaXQ\/Lm9iamVjdC51c2VyRGF0YS5wYXJ0SWQpewogICAgc2VsZWN0UGFydChoaXQub2JqZWN0LnVzZXJEYXRhLnBhcnRJZCk7CiAgfQp9LHtjYXB0dXJlOnRydWV9KTsKCmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJyxldmVudCA9PiB7ZmluaXNoTGlkRHJhZyhldmVudCk7fSx7Y2FwdHVyZTp0cnVlfSk7CmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybGVhdmUnLCgpID0+IHtpZiAoIWxpZERyYWcpIGNhbnZhcy5kYXRhc2V0LmludGVyYWN0aW9uID0gJ29yYml0Jzt9KTsKCmZ1bmN0aW9uIHJlc2V0VmlldygpewogIGNhbWVyYS5wb3NpdGlvbi5jb3B5KGRlZmF1bHRDYW1lcmFQb3NpdGlvbik7CiAgY29udHJvbHMudGFyZ2V0LmNvcHkoZGVmYXVsdFRhcmdldCk7CiAgY29udHJvbHMudXBkYXRlKCk7CiAgcmVxdWVzdFJlbmRlcigpOwp9CgpmdW5jdGlvbiB1cGRhdGVBY3J5bGljQ29sb3IodmFsdWUpewogIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpOwogIGNvbnN0IGlzQ2xlYXIgPSBub3JtYWxpemVkID09PSAnI2ZmZmZmZic7CiAgY2xlYXJNYXRlcmlhbC5jb2xvci5zZXQodmFsdWUpOwogIGFjcnlsaWNDb2xvcklucHV0LnZhbHVlID0gbm9ybWFsaXplZDsKICBhY3J5bGljQ29sb3JWYWx1ZS50ZXh0Q29udGVudCA9IGlzQ2xlYXIgPyAnQ2xlYXInIDogbm9ybWFsaXplZC50b1VwcGVyQ2FzZSgpOwogIGNsZWFyQWNyeWxpY0J1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCdzZWxlY3RlZCcsaXNDbGVhcik7CiAgY2xlYXJBY3J5bGljQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJyxTdHJpbmcoaXNDbGVhcikpOwogIHJlcXVlc3RSZW5kZXIoKTsKfQoKZnVuY3Rpb24gbG9hZEltYWdlKGZpbGUpewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpID0+IHsKICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7CiAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpOwogICAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1VSTC5yZXZva2VPYmplY3RVUkwodXJsKTtyZXNvbHZlKGltYWdlKTt9OwogICAgaW1hZ2Uub25lcnJvciA9ICgpID0+IHtVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7cmVqZWN0KG5ldyBFcnJvcignVGhlIHNlbGVjdGVkIGltYWdlIGNvdWxkIG5vdCBiZSByZWFkLicpKTt9OwogICAgaW1hZ2Uuc3JjID0gdXJsOwogIH0pOwp9CgpmdW5jdGlvbiBsb2FkUmVtb3RlSW1hZ2UodXJsKXsKICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUscmVqZWN0KSA9PiB7CiAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpOwogICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJzsKICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1hZ2UpOwogICAgaW1hZ2Uub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1RoZSBzYW1wbGUgYXJ0d29yayBjb3VsZCBub3QgYmUgbG9hZGVkLicpKTsKICAgIGltYWdlLnNyYyA9IHVybDsKICB9KTsKfQoKZnVuY3Rpb24gZ2V0RGVmYXVsdEFydHdvcmtJbWFnZSgpewogIGlmICghZGVmYXVsdEFydHdvcmtQcm9taXNlKXsKICAgIGRlZmF1bHRBcnR3b3JrUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgIGxldCBsYXN0RXJyb3I7CiAgICAgIGZvciAoY29uc3QgdXJsIG9mIERFRkFVTFRfQVJUV09SS19VUkxTKXsKICAgICAgICB0cnl7cmV0dXJuIGF3YWl0IGxvYWRSZW1vdGVJbWFnZSh1cmwpO31jYXRjaChlcnJvcil7bGFzdEVycm9yID0gZXJyb3I7fQogICAgICB9CiAgICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ1RoZSBzYW1wbGUgYXJ0d29yayBjb3VsZCBub3QgYmUgbG9hZGVkLicpOwogICAgfSkoKTsKICB9CiAgcmV0dXJuIGRlZmF1bHRBcnR3b3JrUHJvbWlzZTsKfQoKZnVuY3Rpb24gZHJhd0ltYWdlVG9DYW52YXMoY29udGV4dCxpbWFnZSx3aWR0aCxoZWlnaHQsbW9kZT0nY292ZXInKXsKICBpZiAobW9kZSA9PT0gJ3N0cmV0Y2gnKXsKICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLDAsMCx3aWR0aCxoZWlnaHQpOwogICAgcmV0dXJuOwogIH0KICBjb25zdCB0YXJnZXRBc3BlY3QgPSB3aWR0aC9oZWlnaHQ7CiAgY29uc3QgaW1hZ2VBc3BlY3QgPSBpbWFnZS5uYXR1cmFsV2lkdGgvaW1hZ2UubmF0dXJhbEhlaWdodDsKICBsZXQgc3g9MCxzeT0wLHN3PWltYWdlLm5hdHVyYWxXaWR0aCxzaD1pbWFnZS5uYXR1cmFsSGVpZ2h0OwogIGlmIChpbWFnZUFzcGVjdCA+IHRhcmdldEFzcGVjdCl7c3c9aW1hZ2UubmF0dXJhbEhlaWdodCp0YXJnZXRBc3BlY3Q7c3g9KGltYWdlLm5hdHVyYWxXaWR0aC1zdykvMjt9CiAgZWxzZSB7c2g9aW1hZ2UubmF0dXJhbFdpZHRoL3RhcmdldEFzcGVjdDtzeT0oaW1hZ2UubmF0dXJhbEhlaWdodC1zaCkvMjt9CiAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2Usc3gsc3ksc3csc2gsMCwwLHdpZHRoLGhlaWdodCk7Cn0KCmZ1bmN0aW9uIG1ha2VQYW5lbENhbnZhc1BhdGgoaWQsd2lkdGgsaGVpZ2h0KXsKICBjb25zdCBwYXJ0ID0gRTdfR0VPTUVUUlkucGFydHNbaWRdOwogIGNvbnN0IHBhdGggPSBuZXcgUGF0aDJEKCk7CiAgZm9yIChjb25zdCBwb2ludHMgb2YgW3BhcnQub3V0ZXIsLi4ucGFydC5ob2xlc10pewogICAgcG9pbnRzLmZvckVhY2goKFt4LHldLGluZGV4KSA9PiB7CiAgICAgIGNvbnN0IGNhbnZhc1ggPSAoKHgtcGFydC5ib3VuZHMubWluWCkvcGFydC5ib3VuZHMud2lkdGgpKndpZHRoOwogICAgICBjb25zdCBjYW52YXNZID0gKChwYXJ0LmJvdW5kcy5tYXhZLXkpL3BhcnQuYm91bmRzLmhlaWdodCkqaGVpZ2h0OwogICAgICBpZiAoaW5kZXggPT09IDApIHBhdGgubW92ZVRvKGNhbnZhc1gsY2FudmFzWSk7CiAgICAgIGVsc2UgcGF0aC5saW5lVG8oY2FudmFzWCxjYW52YXNZKTsKICAgIH0pOwogICAgcGF0aC5jbG9zZVBhdGgoKTsKICB9CiAgcmV0dXJuIHBhdGg7Cn0KCmZ1bmN0aW9uIGRyYXdQYW5lbEJvcmRlcihjb250ZXh0LGlkLGJvcmRlclN0YXRlLHdpZHRoLGhlaWdodCl7CiAgaWYgKGJvcmRlclN0YXRlLm1vZGUgPT09ICdub25lJyB8fCBib3JkZXJTdGF0ZS53aWR0aCA8PSAwKSByZXR1cm4gZmFsc2U7CiAgaWYgKGJvcmRlclN0YXRlLm1vZGUgPT09ICdpbWFnZScgJiYgIWJvcmRlclN0YXRlLmltYWdlKSByZXR1cm4gZmFsc2U7CiAgY29uc3QgbGF5ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKICBsYXllci53aWR0aCA9IHdpZHRoOwogIGxheWVyLmhlaWdodCA9IGhlaWdodDsKICBjb25zdCBsYXllckNvbnRleHQgPSBsYXllci5nZXRDb250ZXh0KCcyZCcse2FscGhhOnRydWV9KTsKICBpZiAoYm9yZGVyU3RhdGUubW9kZSA9PT0gJ2ltYWdlJykgZHJhd0ltYWdlVG9DYW52YXMobGF5ZXJDb250ZXh0LGJvcmRlclN0YXRlLmltYWdlLHdpZHRoLGhlaWdodCwnY292ZXInKTsKICBlbHNlIGlmIChib3JkZXJTdGF0ZS5tb2RlID09PSAnY29sb3InKXsKICAgIGxheWVyQ29udGV4dC5maWxsU3R5bGUgPSBib3JkZXJTdGF0ZS5jb2xvcjsKICAgIGxheWVyQ29udGV4dC5maWxsUmVjdCgwLDAsd2lkdGgsaGVpZ2h0KTsKICB9CiAgY29uc3QgcGF0aCA9IG1ha2VQYW5lbENhbnZhc1BhdGgoaWQsd2lkdGgsaGVpZ2h0KTsKICBsYXllckNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWluJzsKICBsYXllckNvbnRleHQuZmlsbFN0eWxlID0gJyNmZmZmZmYnOwogIGxheWVyQ29udGV4dC5maWxsKHBhdGgsJ2V2ZW5vZGQnKTsKICBsYXllckNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWluJzsKICBsYXllckNvbnRleHQubGluZVdpZHRoID0gTWF0aC5tYXgoMSwoYm9yZGVyU3RhdGUud2lkdGgqMip3aWR0aCkvRTdfR0VPTUVUUlkucGFydHNbaWRdLmJvdW5kcy53aWR0aCk7CiAgbGF5ZXJDb250ZXh0LmxpbmVKb2luID0gJ3JvdW5kJzsKICBsYXllckNvbnRleHQubGluZUNhcCA9ICdyb3VuZCc7CiAgbGF5ZXJDb250ZXh0LnN0cm9rZVN0eWxlID0gJyNmZmZmZmYnOwogIGxheWVyQ29udGV4dC5zdHJva2UocGF0aCk7CiAgY29udGV4dC5kcmF3SW1hZ2UobGF5ZXIsMCwwKTsKICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gY2xlYXJSZW5kZXJlZEFydHdvcmsoaWQpewogIGNvbnN0IHN0YXRlID0gZmFjZVN0YXRlW2lkXTsKICBzdGF0ZS50ZXh0dXJlPy5kaXNwb3NlKCk7CiAgc3RhdGUudGV4dHVyZSA9IG51bGw7CiAgY29uc3QgbWF0ZXJpYWwgPSBydW50aW1lLmFydHdvcmtNYXRlcmlhbHNbaWRdOwogIG1hdGVyaWFsLm1hcCA9IG51bGw7CiAgbWF0ZXJpYWwub3BhY2l0eSA9IDA7CiAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlOwogIGNvbnN0IGN1dEFydHdvcmtNYXRlcmlhbCA9IHJ1bnRpbWUuYXJ0d29ya0VkZ2VNYXRlcmlhbHNbaWRdOwogIGN1dEFydHdvcmtNYXRlcmlhbC5tYXAgPSBudWxsOwogIGN1dEFydHdvcmtNYXRlcmlhbC5vcGFjaXR5ID0gMDsKICBjdXRBcnR3b3JrTWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlOwogIGN1dEFydHdvcmtNYXRlcmlhbC5kZXB0aFdyaXRlID0gZmFsc2U7CiAgY3V0QXJ0d29ya01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKICBydW50aW1lLm1lc2hlc1tpZF0ubWF0ZXJpYWxbMV0gPSBjbGVhck1hdGVyaWFsOwogIHJlcXVlc3RSZW5kZXIoKTsKfQoKZnVuY3Rpb24gYnVpbGRBcnR3b3JrVGV4dHVyZShpZCl7CiAgY29uc3Qgc3RhdGUgPSBmYWNlU3RhdGVbaWRdOwogIGNvbnN0IGltYWdlID0gc3RhdGUuaW1hZ2U7CiAgY29uc3QgaGFzQm9yZGVyID0gYm9yZGVyU3RhdGUubW9kZSAhPT0gJ25vbmUnICYmIGJvcmRlclN0YXRlLndpZHRoID4gMCAmJiAoYm9yZGVyU3RhdGUubW9kZSAhPT0gJ2ltYWdlJyB8fCBib3JkZXJTdGF0ZS5pbWFnZSk7CiAgaWYgKCFpbWFnZSAmJiAhaGFzQm9yZGVyKXsKICAgIGNsZWFyUmVuZGVyZWRBcnR3b3JrKGlkKTsKICAgIHJldHVybjsKICB9CiAgY29uc3QgYm91bmRzID0gRTdfR0VPTUVUUlkucGFydHNbaWRdLmJvdW5kczsKICBjb25zdCBhc3BlY3QgPSBib3VuZHMud2lkdGgvYm91bmRzLmhlaWdodDsKICBsZXQgd2lkdGg7CiAgbGV0IGhlaWdodDsKICBpZiAoYXNwZWN0ID49IDEpe3dpZHRoPTE1MzY7aGVpZ2h0PU1hdGgubWF4KDI1NixNYXRoLnJvdW5kKHdpZHRoL2FzcGVjdCkpO30KICBlbHNlIHtoZWlnaHQ9MTUzNjt3aWR0aD1NYXRoLm1heCgyNTYsTWF0aC5yb3VuZChoZWlnaHQqYXNwZWN0KSk7fQogIGNvbnN0IGFydHdvcmtDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKICBhcnR3b3JrQ2FudmFzLndpZHRoID0gd2lkdGg7CiAgYXJ0d29ya0NhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CiAgY29uc3QgY29udGV4dCA9IGFydHdvcmtDYW52YXMuZ2V0Q29udGV4dCgnMmQnLHthbHBoYTp0cnVlfSk7CiAgY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSB0cnVlOwogIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gJ2hpZ2gnOwogIGlmIChpbWFnZSkgZHJhd0ltYWdlVG9DYW52YXMoY29udGV4dCxpbWFnZSx3aWR0aCxoZWlnaHQsc3RhdGUubW9kZSk7CiAgZHJhd1BhbmVsQm9yZGVyKGNvbnRleHQsaWQsYm9yZGVyU3RhdGUsd2lkdGgsaGVpZ2h0KTsKICBzdGF0ZS50ZXh0dXJlPy5kaXNwb3NlKCk7CiAgc3RhdGUudGV4dHVyZSA9IG5ldyBUSFJFRS5DYW52YXNUZXh0dXJlKGFydHdvcmtDYW52YXMpOwogIHN0YXRlLnRleHR1cmUuY29sb3JTcGFjZSA9IFRIUkVFLlNSR0JDb2xvclNwYWNlOwogIHN0YXRlLnRleHR1cmUuYW5pc290cm9weSA9IE1hdGgubWluKDgscmVuZGVyZXIuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKSk7CiAgY29uc3QgbWF0ZXJpYWwgPSBydW50aW1lLmFydHdvcmtNYXRlcmlhbHNbaWRdOwogIG1hdGVyaWFsLm1hcCA9IHN0YXRlLnRleHR1cmU7CiAgbWF0ZXJpYWwub3BhY2l0eSA9IDAuOTI7CiAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlOwogIGNvbnN0IGN1dEFydHdvcmtNYXRlcmlhbCA9IHJ1bnRpbWUuYXJ0d29ya0VkZ2VNYXRlcmlhbHNbaWRdOwogIGN1dEFydHdvcmtNYXRlcmlhbC5tYXAgPSBzdGF0ZS50ZXh0dXJlOwogIGN1dEFydHdvcmtNYXRlcmlhbC5vcGFjaXR5ID0gMTsKICBjdXRBcnR3b3JrTWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBmYWxzZTsKICBjdXRBcnR3b3JrTWF0ZXJpYWwuZGVwdGhXcml0ZSA9IHRydWU7CiAgY3V0QXJ0d29ya01hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKICBydW50aW1lLm1lc2hlc1tpZF0ubWF0ZXJpYWxbMV0gPSBjdXRBcnR3b3JrTWF0ZXJpYWw7CiAgcmVxdWVzdFJlbmRlcigpOwp9CgpmdW5jdGlvbiB1cGRhdGVVcGxvYWRVaSgpewogIGxldCBjb3VudCA9IDA7CiAgZm9yIChjb25zdCBpZCBvZiBGQUNFX0lEUyl7CiAgICBjb25zdCBzdGF0ZSA9IGZhY2VTdGF0ZVtpZF07CiAgICBjb25zdCBzdGF0dXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1mYWNlPSIke2lkfSJdIC5mYWNlLXN0YXR1c2ApOwogICAgY29uc3QgdXBsb2FkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtdXBsb2FkLWZhY2U9IiR7aWR9Il1gKTsKICAgIGNvbnN0IHJlbW92ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXJlbW92ZS1mYWNlPSIke2lkfSJdYCk7CiAgICBpZiAoc3RhdGUuaW1hZ2UpewogICAgICBjb3VudCArPSAxOwogICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSBzdGF0ZS5maWxlTmFtZTsKICAgICAgc3RhdHVzLmNsYXNzTGlzdC5hZGQoJ3JlYWR5Jyk7CiAgICAgIHVwbG9hZC50ZXh0Q29udGVudCA9ICdSZXBsYWNlJzsKICAgICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsYFJlcGxhY2UgYXJ0d29yayBmb3IgJHtGQUNFX0xBQkVMU1tpZF19YCk7CiAgICAgIHJlbW92ZS5oaWRkZW4gPSBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICdFbXB0eSc7CiAgICAgIHN0YXR1cy5jbGFzc0xpc3QucmVtb3ZlKCdyZWFkeScpOwogICAgICB1cGxvYWQudGV4dENvbnRlbnQgPSAnVXBsb2FkJzsKICAgICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsYFVwbG9hZCBhcnR3b3JrIGZvciAke0ZBQ0VfTEFCRUxTW2lkXX1gKTsKICAgICAgcmVtb3ZlLmhpZGRlbiA9IHRydWU7CiAgICB9CiAgfQogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN1cGxvYWQtY291bnQnKS50ZXh0Q29udGVudCA9IGAke2NvdW50fSAvIDZgOwogIGlmIChydW50aW1lLnVwbG9hZFByb21wdHMuZnJvbnQpIHJ1bnRpbWUudXBsb2FkUHJvbXB0cy5mcm9udC52aXNpYmxlID0gdHJ1ZTsKICByZXF1ZXN0UmVuZGVyKCk7Cn0KCmZ1bmN0aW9uIHJlbW92ZUFydHdvcmsoaWQse25vdGlmeT10cnVlfT17fSl7CiAgY29uc3Qgc3RhdGUgPSBmYWNlU3RhdGVbaWRdOwogIHN0YXRlLmltYWdlID0gbnVsbDsKICBzdGF0ZS5maWxlTmFtZSA9ICcnOwogIHN0YXRlLm1vZGUgPSAnY292ZXInOwogIGJ1aWxkQXJ0d29ya1RleHR1cmUoaWQpOwogIHVwZGF0ZVVwbG9hZFVpKCk7CiAgaWYgKHNlbGVjdGVkRmFjZSA9PT0gaWQpIHNlbGVjdFBhcnQoaWQpOwogIHJlcXVlc3RSZW5kZXIoKTsKICBpZiAobm90aWZ5KSBzaG93VG9hc3QoYCR7RkFDRV9MQUJFTFNbaWRdfSBhcnR3b3JrIHJlbW92ZWQuYCk7Cn0KCmFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVEZWZhdWx0QXJ0d29yayh7b25seUVtcHR5PWZhbHNlLG5vdGlmeT10cnVlfT17fSl7CiAgdHJ5ewogICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBnZXREZWZhdWx0QXJ0d29ya0ltYWdlKCk7CiAgICBmb3IgKGNvbnN0IGlkIG9mIEZBQ0VfSURTKXsKICAgICAgY29uc3Qgc3RhdGUgPSBmYWNlU3RhdGVbaWRdOwogICAgICBpZiAob25seUVtcHR5ICYmIHN0YXRlLmltYWdlKSBjb250aW51ZTsKICAgICAgc3RhdGUudGV4dHVyZT8uZGlzcG9zZSgpOwogICAgICBzdGF0ZS50ZXh0dXJlID0gbnVsbDsKICAgICAgc3RhdGUuaW1hZ2UgPSBpbWFnZTsKICAgICAgc3RhdGUuZmlsZU5hbWUgPSBERUZBVUxUX0FSVFdPUktfTkFNRTsKICAgICAgc3RhdGUubW9kZSA9ICdjb3Zlcic7CiAgICAgIGJ1aWxkQXJ0d29ya1RleHR1cmUoaWQpOwogICAgfQogICAgdXBkYXRlVXBsb2FkVWkoKTsKICAgIHNlbGVjdFBhcnQoc2VsZWN0ZWRGYWNlKTsKICAgIGlmIChub3RpZnkpIHNob3dUb2FzdCgnU2FtcGxlIGFydHdvcmsgcmVzdG9yZWQgb24gYWxsIHNpeCBmYWNlcy4nKTsKICB9IGNhdGNoIChlcnJvcil7CiAgICBkZWZhdWx0QXJ0d29ya1Byb21pc2UgPSBudWxsOwogICAgc2hvd1RvYXN0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1RoZSBzYW1wbGUgYXJ0d29yayBjb3VsZCBub3QgYmUgbG9hZGVkLicpOwogIH0KfQoKZnVuY3Rpb24gcmVzZXRBcnR3b3JrKCl7CiAgdm9pZCByZXN0b3JlRGVmYXVsdEFydHdvcmsoe29ubHlFbXB0eTpmYWxzZSxub3RpZnk6dHJ1ZX0pOwp9Cgphc3luYyBmdW5jdGlvbiBoYW5kbGVVcGxvYWQoaWQsZmlsZSl7CiAgaWYgKCFmaWxlKSByZXR1cm47CiAgaWYgKGZpbGUuc2l6ZSA+IDE1KjEwMjQqMTAyNCl7c2hvd1RvYXN0KCdQbGVhc2UgY2hvb3NlIGFuIGltYWdlIHNtYWxsZXIgdGhhbiAxNSBNQi4nKTtyZXR1cm47fQogIHRyeXsKICAgIGNvbnN0IGltYWdlID0gYXdhaXQgbG9hZEltYWdlKGZpbGUpOwogICAgZmFjZVN0YXRlW2lkXS5pbWFnZSA9IGltYWdlOwogICAgZmFjZVN0YXRlW2lkXS5maWxlTmFtZSA9IGZpbGUubmFtZTsKICAgIGJ1aWxkQXJ0d29ya1RleHR1cmUoaWQpOwogICAgdXBkYXRlVXBsb2FkVWkoKTsKICAgIHNlbGVjdFBhcnQoaWQpOwogICAgc2hvd1RvYXN0KGAke0ZBQ0VfTEFCRUxTW2lkXX0gYXJ0d29yayBhZGRlZC5gKTsKICB9IGNhdGNoIChlcnJvcil7CiAgICBzaG93VG9hc3QoZXJyb3IubWVzc2FnZSk7CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBoYW5kbGVCb3JkZXJVcGxvYWQoZmlsZSl7CiAgaWYgKCFmaWxlKSByZXR1cm47CiAgaWYgKGZpbGUuc2l6ZSA+IDE1KjEwMjQqMTAyNCl7c2hvd1RvYXN0KCdQbGVhc2UgY2hvb3NlIGEgYm9yZGVyIGltYWdlIHNtYWxsZXIgdGhhbiAxNSBNQi4nKTtyZXR1cm47fQogIHRyeXsKICAgIGNvbnN0IGltYWdlID0gYXdhaXQgbG9hZEltYWdlKGZpbGUpOwogICAgYm9yZGVyU3RhdGUuaW1hZ2UgPSBpbWFnZTsKICAgIGJvcmRlclN0YXRlLmZpbGVOYW1lID0gZmlsZS5uYW1lOwogICAgYm9yZGVyU3RhdGUubW9kZSA9ICdpbWFnZSc7CiAgICByZWJ1aWxkQWxsQm9yZGVyVGV4dHVyZXMoKTsKICAgIHN5bmNCb3JkZXJVaSgpOwogICAgc2hvd1RvYXN0KCdCb3JkZXIgaW1hZ2UgYXBwbGllZCB0byBhbGwgc2l4IGZhY2VzLicpOwogIH0gY2F0Y2ggKGVycm9yKXsKICAgIHNob3dUb2FzdChlcnJvci5tZXNzYWdlKTsKICB9Cn0KCmFzc2VtYmx5QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoKSA9PiBzZXRFeHBsb2RlZCghZXhwbG9kZWQpKTsKbGlkQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoKSA9PiBzZXRMaWRPcGVuKCFsaWRPcGVuKSk7CmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNyZXNldC12aWV3JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHJlc2V0Vmlldyk7CmFjcnlsaWNDb2xvcklucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxldmVudCA9PiB1cGRhdGVBY3J5bGljQ29sb3IoZXZlbnQudGFyZ2V0LnZhbHVlKSk7CmNsZWFyQWNyeWxpY0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsKCkgPT4gdXBkYXRlQWNyeWxpY0NvbG9yKCcjZmZmZmZmJykpOwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2F2ZS1wcmV2aWV3JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCgpID0+IHsKICByZW5kZXJlci5yZW5kZXIoc2NlbmUsY2FtZXJhKTsKICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogIGxpbmsuZG93bmxvYWQgPSAnYXJ0ZXRyaWJlLWFjcnlsaWMtYm94LXByZXZpZXcucG5nJzsKICBsaW5rLmhyZWYgPSByZW5kZXJlci5kb21FbGVtZW50LnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7CiAgbGluay5jbGljaygpOwogIHNob3dUb2FzdCgnUHJldmlldyBpbWFnZSBzYXZlZC4nKTsKfSk7CmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXNlbGVjdC1mYWNlXScpLmZvckVhY2goYnV0dG9uID0+IGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsKCkgPT4gc2VsZWN0UGFydChidXR0b24uZGF0YXNldC5zZWxlY3RGYWNlKSkpOwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS11cGxvYWQtZmFjZV0nKS5mb3JFYWNoKGJ1dHRvbiA9PiBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWZpbGUtZmFjZT0iJHtidXR0b24uZGF0YXNldC51cGxvYWRGYWNlfSJdYCkuY2xpY2soKSkpOwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1yZW1vdmUtZmFjZV0nKS5mb3JFYWNoKGJ1dHRvbiA9PiBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCgpID0+IHJlbW92ZUFydHdvcmsoYnV0dG9uLmRhdGFzZXQucmVtb3ZlRmFjZSkpKTsKZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Jlc2V0LWFydHdvcmsnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycscmVzZXRBcnR3b3JrKTsKZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtZmlsZS1mYWNlXScpLmZvckVhY2goaW5wdXQgPT4gaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxldmVudCA9PiB7CiAgaGFuZGxlVXBsb2FkKGlucHV0LmRhdGFzZXQuZmlsZUZhY2UsZXZlbnQudGFyZ2V0LmZpbGVzPy5bMF0pOwogIGV2ZW50LnRhcmdldC52YWx1ZT0nJzsKfSkpOwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1maWxsLW1vZGVdJykuZm9yRWFjaChidXR0b24gPT4gYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoKSA9PiB7CiAgZmFjZVN0YXRlW3NlbGVjdGVkRmFjZV0ubW9kZSA9IGJ1dHRvbi5kYXRhc2V0LmZpbGxNb2RlOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWZpbGwtbW9kZV0nKS5mb3JFYWNoKG9wdGlvbiA9PiB7CiAgICBjb25zdCBhY3RpdmUgPSBvcHRpb24gPT09IGJ1dHRvbjsKICAgIG9wdGlvbi5jbGFzc0xpc3QudG9nZ2xlKCdzZWxlY3RlZCcsYWN0aXZlKTsKICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsU3RyaW5nKGFjdGl2ZSkpOwogIH0pOwogIGlmIChmYWNlU3RhdGVbc2VsZWN0ZWRGYWNlXS5pbWFnZSkgYnVpbGRBcnR3b3JrVGV4dHVyZShzZWxlY3RlZEZhY2UpOwogIHNob3dUb2FzdChgJHtGQUNFX0xBQkVMU1tzZWxlY3RlZEZhY2VdfSB1c2VzICR7YnV0dG9uLmRhdGFzZXQuZmlsbE1vZGU9PT0nY292ZXInPydjcm9wIHRvIGZpbGwnOidzdHJldGNoIHRvIGZpbGwnfS5gKTsKfSkpOwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1ib3JkZXItbW9kZV0nKS5mb3JFYWNoKGJ1dHRvbiA9PiBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCgpID0+IHsKICBjb25zdCBtb2RlID0gYnV0dG9uLmRhdGFzZXQuYm9yZGVyTW9kZTsKICB1cGRhdGVCb3JkZXJTdGF0ZShzdGF0ZSA9PiB7c3RhdGUubW9kZSA9IG1vZGU7fSk7CiAgc3luY0JvcmRlclVpKCk7CiAgY29uc3QgbmVlZHNJbWFnZSA9IG1vZGUgPT09ICdpbWFnZScgJiYgIWJvcmRlclN0YXRlLmltYWdlOwogIGlmIChuZWVkc0ltYWdlKSBib3JkZXJJbWFnZUlucHV0LmNsaWNrKCk7CiAgZWxzZSBzaG93VG9hc3QoYEFsbCBzaXggYm9yZGVycyBzZXQgdG8gJHttb2RlfS5gKTsKfSkpOwpib3JkZXJXaWR0aElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxldmVudCA9PiB7CiAgY29uc3Qgd2lkdGggPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTsKICB1cGRhdGVCb3JkZXJTdGF0ZShzdGF0ZSA9PiB7c3RhdGUud2lkdGggPSB3aWR0aDt9LHtyZWJ1aWxkOmZhbHNlfSk7CiAgYm9yZGVyV2lkdGhWYWx1ZS50ZXh0Q29udGVudCA9IGAke3dpZHRoLnRvRml4ZWQoMSl9IG1tYDsKICBzY2hlZHVsZUJvcmRlclJlYnVpbGQoKTsKfSk7CmJvcmRlcldpZHRoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxyZWJ1aWxkQWxsQm9yZGVyVGV4dHVyZXMpOwpib3JkZXJDb2xvcklucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxldmVudCA9PiB7CiAgY29uc3QgY29sb3IgPSBldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKTsKICB1cGRhdGVCb3JkZXJTdGF0ZShzdGF0ZSA9PiB7CiAgICBzdGF0ZS5jb2xvciA9IGNvbG9yOwogICAgc3RhdGUubW9kZSA9ICdjb2xvcic7CiAgfSx7cmVidWlsZDpmYWxzZX0pOwogIHN5bmNCb3JkZXJVaSgpOwogIHNjaGVkdWxlQm9yZGVyUmVidWlsZCgpOwp9KTsKYm9yZGVySW1hZ2VJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLGV2ZW50ID0+IHsKICB2b2lkIGhhbmRsZUJvcmRlclVwbG9hZChldmVudC50YXJnZXQuZmlsZXM\/LlswXSk7CiAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7Cn0pOwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdXBsb2FkLWJvcmRlci1pbWFnZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoKSA9PiBib3JkZXJJbWFnZUlucHV0LmNsaWNrKCkpOwpib3JkZXJJbWFnZVJlbW92ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsKCkgPT4gewogIHVwZGF0ZUJvcmRlclN0YXRlKHN0YXRlID0+IHsKICAgIHN0YXRlLmltYWdlID0gbnVsbDsKICAgIHN0YXRlLmZpbGVOYW1lID0gJyc7CiAgICBpZiAoc3RhdGUubW9kZSA9PT0gJ2ltYWdlJykgc3RhdGUubW9kZSA9ICdub25lJzsKICB9KTsKICBzeW5jQm9yZGVyVWkoKTsKICBzaG93VG9hc3QoJ0JvcmRlciBpbWFnZSByZW1vdmVkIGZyb20gYWxsIHNpeCBmYWNlcy4nKTsKfSk7CgpjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsZXZlbnQgPT4gewogIGNvbnN0IG9mZnNldCA9IGNhbWVyYS5wb3NpdGlvbi5jbG9uZSgpLnN1Yihjb250cm9scy50YXJnZXQpOwogIGNvbnN0IGFuZ2xlID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDgpOwogIGxldCBoYW5kbGVkID0gdHJ1ZTsKICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykgb2Zmc2V0LmFwcGx5QXhpc0FuZ2xlKGNhbWVyYS51cCxhbmdsZSk7CiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIG9mZnNldC5hcHBseUF4aXNBbmdsZShjYW1lcmEudXAsLWFuZ2xlKTsKICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykgb2Zmc2V0LmFwcGx5QXhpc0FuZ2xlKG5ldyBUSFJFRS5WZWN0b3IzKDEsMCwwKS5hcHBseVF1YXRlcm5pb24oY2FtZXJhLnF1YXRlcm5pb24pLm5vcm1hbGl6ZSgpLC1hbmdsZSk7CiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykgb2Zmc2V0LmFwcGx5QXhpc0FuZ2xlKG5ldyBUSFJFRS5WZWN0b3IzKDEsMCwwKS5hcHBseVF1YXRlcm5pb24oY2FtZXJhLnF1YXRlcm5pb24pLm5vcm1hbGl6ZSgpLGFuZ2xlKTsKICBlbHNlIGlmIChldmVudC5rZXkgPT09ICcrJyB8fCBldmVudC5rZXkgPT09ICc9Jykgb2Zmc2V0LnNldExlbmd0aChNYXRoLm1heChjb250cm9scy5taW5EaXN0YW5jZSxvZmZzZXQubGVuZ3RoKCkqMC45KSk7CiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnLScgfHwgZXZlbnQua2V5ID09PSAnXycpIG9mZnNldC5zZXRMZW5ndGgoTWF0aC5taW4oY29udHJvbHMubWF4RGlzdGFuY2Usb2Zmc2V0Lmxlbmd0aCgpKjEuMSkpOwogIGVsc2UgaGFuZGxlZCA9IGZhbHNlOwogIGlmICghaGFuZGxlZCkgcmV0dXJuOwogIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgY2FtZXJhLnBvc2l0aW9uLmNvcHkoY29udHJvbHMudGFyZ2V0KS5hZGQob2Zmc2V0KTsKICBjYW1lcmEubG9va0F0KGNvbnRyb2xzLnRhcmdldCk7CiAgY29udHJvbHMudXBkYXRlKCk7CiAgcmVxdWVzdFJlbmRlcigpOwp9KTsKCnJ1bnRpbWUucGFydHMubGlkLnJvdGF0aW9uLnggPSBMSURfT1BFTl9BTkdMRTsKc3luY0xpZEJ1dHRvbih0cnVlKTsKcmVzaXplUmVuZGVyZXIoKTsKZml0Q2FtZXJhVG9Nb2RlbCgxLjE1KTsKZGVmYXVsdENhbWVyYVBvc2l0aW9uLmNvcHkoY2FtZXJhLnBvc2l0aW9uKTsKZGVmYXVsdFRhcmdldC5jb3B5KGNvbnRyb2xzLnRhcmdldCk7CnNlbGVjdFBhcnQoJ2JvdHRvbScpOwpsb2FkaW5nU3RhdGUuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7CnJlcXVlc3RSZW5kZXIoKTsKdm9pZCByZXN0b3JlRGVmYXVsdEFydHdvcmsoe29ubHlFbXB0eTp0cnVlLG5vdGlmeTpmYWxzZX0pOwoKd2luZG93Ll9fQVJURVRSSUJFX0FDUllMSUNfQk9YX1BSRVZJRVdfXyA9IHsKICB2ZXJzaW9uOidzaG9waWZ5LXYxJywKICBnZW9tZXRyeTpFN19HRU9NRVRSWSwKICBydW50aW1lLAogIGZhY2VTdGF0ZSwKICBzZXRFeHBsb2RlZCwKICBzZXRMaWRPcGVuLAogIHNlbGVjdFBhcnQsCiAgdXBkYXRlQWNyeWxpY0NvbG9yLAogIHJlc3RvcmVEZWZhdWx0QXJ0d29yaywKICBidWlsZEFydHdvcmtUZXh0dXJlLAogIGJvcmRlclN0YXRlCn07Cgo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==\u003c\/script\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"artetribe-acrylic-box-preview-embed__story\" aria-labelledby=\"artetribe-acrylic-box-story-title\"\u003e\n    \u003cdiv class=\"artetribe-acrylic-box-preview-embed__story-intro\"\u003e\n      \u003ch2 id=\"artetribe-acrylic-box-story-title\"\u003eSee the whole box before you order\u003c\/h2\u003e\n      \u003cp\u003eBuild all six panels in one live preview. Adjust the artwork, border, acrylic tint and lid, then inspect how the complete composition comes together.\u003c\/p\u003e\n      \u003cp class=\"artetribe-acrylic-box-preview-embed__story-note\"\u003eThe preview represents your design choices. Printed color and physical fit remain representative.\u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003col class=\"artetribe-acrylic-box-preview-embed__steps\"\u003e\n      \u003cli\u003e\n        \u003cstrong\u003eBuild every face\u003c\/strong\u003e\n        \u003cp\u003eReplace the bottom, front, back, left, right and lid independently, using Crop to fill or Stretch to fill.\u003c\/p\u003e\n      \u003c\/li\u003e\n      \u003cli\u003e\n        \u003cstrong\u003eSet one printed border\u003c\/strong\u003e\n        \u003cp\u003eApply the same color, uploaded image and 0-10 mm width across all six panels.\u003c\/p\u003e\n      \u003c\/li\u003e\n      \u003cli\u003e\n        \u003cstrong\u003eInspect the structure\u003c\/strong\u003e\n        \u003cp\u003eOpen the lid, orbit the box and explode the exact E7 panels to review the edges, tabs and alignment.\u003c\/p\u003e\n      \u003c\/li\u003e\n    \u003c\/ol\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n  #artetribe-acrylic-box-preview-embed{--at-ink:#18212b;--at-muted:#64717d;--at-line:rgba(20,45,66,.12);--at-blue:#087ab5;--at-pale:#eaf6fb;width:min(1320px,calc(100% - 32px));margin:32px auto 48px;color:var(--at-ink);font-family:inherit}\n  #artetribe-acrylic-box-preview-embed *{box-sizing:border-box}\n  #artetribe-acrylic-box-preview-embed h2,#artetribe-acrylic-box-preview-embed h3,#artetribe-acrylic-box-preview-embed p{margin-top:0}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__benefits{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:48px;margin-bottom:44px;padding:30px 48px;border-block:1px solid var(--at-line)}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__benefits article{display:grid;grid-template-rows:80px auto auto;justify-items:center;text-align:center}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__icon{display:block;width:80px;height:80px;margin-bottom:14px}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__icon svg{display:block;width:100%;height:100%;fill:none;stroke:#98a8b0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__icon .accent{stroke:#ff9151}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__benefits h3{margin-bottom:9px;font:inherit;font-size:20px;font-weight:800;line-height:1.2}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__benefits p{max-width:350px;margin-bottom:0;color:var(--at-muted);font-size:14px;line-height:1.55}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__heading{max-width:840px;margin-bottom:18px}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__heading h2{margin-bottom:8px;font:inherit;font-size:clamp(30px,4vw,44px);font-weight:900;line-height:1.04;letter-spacing:-.035em;text-transform:uppercase}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__heading p{margin-bottom:0;color:var(--at-muted);font-size:15px;line-height:1.55}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__tool{margin-bottom:68px}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__frame{position:relative;min-height:900px;overflow:hidden;border:1px solid var(--at-line);border-radius:16px;background:var(--at-pale);box-shadow:0 22px 54px rgba(58,91,123,.12)}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__iframe{display:block;width:100%;height:900px;overflow:hidden;border:0;opacity:0;background:var(--at-pale);transition:opacity .18s ease}\n  #artetribe-acrylic-box-preview-embed.is-loaded .artetribe-acrylic-box-preview-embed__iframe{opacity:1}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__loading{position:absolute;inset:0;display:grid;place-items:center;padding:24px;color:var(--at-muted);font-size:14px;text-align:center}\n  #artetribe-acrylic-box-preview-embed.is-loaded .artetribe-acrylic-box-preview-embed__loading{display:none}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__story{display:grid;grid-template-columns:minmax(0,.82fr) minmax(420px,1.18fr);gap:clamp(44px,7vw,92px);align-items:start;padding:clamp(40px,6vw,72px);border-radius:16px;background:var(--at-pale)}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__story-intro h2{max-width:12ch;margin-bottom:18px;font:inherit;font-size:clamp(34px,4.2vw,54px);font-weight:900;line-height:1.02;letter-spacing:-.035em}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__story-intro\u003ep{max-width:46ch;margin-bottom:0;color:var(--at-muted);font-size:16px;line-height:1.65}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__story-intro .artetribe-acrylic-box-preview-embed__story-note{margin-top:28px;padding-top:18px;border-top:1px solid var(--at-line);color:var(--at-ink);font-size:12px;line-height:1.55}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__steps{margin:0;padding:0;border-top:1px solid var(--at-line);list-style:none}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__steps li{display:grid;grid-template-columns:minmax(150px,.48fr) minmax(0,1fr);gap:clamp(20px,3vw,38px);padding:24px 0;border-bottom:1px solid var(--at-line)}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__steps strong{color:var(--at-blue);font-size:15px;line-height:1.35}\n  #artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__steps p{max-width:52ch;margin:0;color:var(--at-muted);font-size:14px;line-height:1.58}\n  #artetribe-acrylic-box-preview-embed.is-viewport-breakout{width:100vw;max-width:none;margin-left:calc(50% - 50vw);padding-inline:14px}\n  @media(max-width:1000px){#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__story{grid-template-columns:minmax(0,.9fr) minmax(360px,1.1fr);gap:36px}}\n  @media(max-width:900px){#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__benefits{gap:24px;padding-inline:22px}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__benefits h3{font-size:18px}}\n  @media(max-width:800px){#artetribe-acrylic-box-preview-embed{width:100%;margin:26px auto 42px}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__benefits{grid-template-columns:1fr;gap:30px;margin-inline:14px;margin-bottom:34px;padding:26px 8px}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__heading{padding-inline:14px}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__frame{min-height:1320px;border-radius:0;border-inline:0;box-shadow:none}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__iframe{height:1320px}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__tool{margin-bottom:48px}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__story{grid-template-columns:1fr;gap:30px;margin-inline:14px;padding:34px 24px}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__story-intro h2{max-width:15ch}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__steps li{grid-template-columns:1fr;gap:7px}}\n  @media(max-width:430px){#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__heading h2{font-size:30px}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__frame{min-height:1360px}#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__iframe{height:1360px}}\n  @media(prefers-reduced-motion:reduce){#artetribe-acrylic-box-preview-embed .artetribe-acrylic-box-preview-embed__iframe{transition:none}}\n\u003c\/style\u003e\n\n\u003cscript\u003e\n(()=\u003e{\n  const root=document.getElementById('artetribe-acrylic-box-preview-embed');\n  if(!root||root.dataset.previewReady==='true')return;\n  root.dataset.previewReady='true';\n  const owningSection=root.closest('.shopify-section,[id^=\"shopify-section-\"]');\n  const productInfo=root.closest('product-info,.product__info,.product__info-container,.product__info-wrapper,.product-info,.product-info__wrapper,[data-product-info],[id*=\"ProductInfo\"]');\n  if((productInfo||root.getBoundingClientRect().width\u003c760)\u0026\u0026owningSection\u0026\u0026owningSection.parentElement)owningSection.insertAdjacentElement('afterend',root);\n  if(root.getBoundingClientRect().width\u003cMath.min(760,innerWidth*.72))root.classList.add('is-viewport-breakout');\n  const frame=root.querySelector('[data-preview-frame]');\n  const shell=root.querySelector('[data-preview-shell]');\n  const source=root.querySelector('[data-preview-source]');\n  const loading=root.querySelector('[data-preview-loading]');\n  let frameSizer=null;\n  const syncFrameHeight=()=\u003e{\n    try{\n      const doc=frame.contentDocument;\n      if(!doc)return;\n      const height=Math.ceil(Math.max(doc.documentElement.scrollHeight,doc.body?.scrollHeight||0));\n      if(height\u003c1)return;\n      frame.style.height=`${height}px`;\n      shell.style.minHeight=`${height}px`;\n    }catch{}\n  };\n  try{\n    const encoded=source.textContent.replace(\/\\s+\/g,'');\n    if(!encoded)throw new Error('Embedded preview source is empty.');\n    const bytes=Uint8Array.from(atob(encoded),character=\u003echaracter.charCodeAt(0));\n    const doc=new TextDecoder().decode(bytes);\n    frame.addEventListener('load',()=\u003e{\n      root.classList.add('is-loaded');\n      syncFrameHeight();\n      const observed=frame.contentDocument?.body;\n      if(observed\u0026\u0026'ResizeObserver'in window){frameSizer=new ResizeObserver(syncFrameHeight);frameSizer.observe(observed)}\n      requestAnimationFrame(syncFrameHeight);\n      setTimeout(syncFrameHeight,500);\n    },{once:true});\n    frame.srcdoc=doc;\n    source.remove();\n  }catch(error){\n    if(loading)loading.textContent='The 3D preview could not be opened. Refresh the page and try again.';\n    console.error('ArteTribe acrylic box preview failed to initialize.',error);\n  }\n})();\n\u003c\/script\u003e\n","brand":"ArteTribe","offers":[{"title":"1","offer_id":49063291584612,"sku":null,"price":10.0,"currency_code":"USD","in_stock":true},{"title":"5","offer_id":49063291617380,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"10","offer_id":49063291650148,"sku":null,"price":80.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0572\/0627\/6196\/files\/artetribe-acrylic-box-blue-botanical-closed-v1.png?v=1787721099","url":"https:\/\/artetribe.co\/products\/custom-acrylic-boxes","provider":"ArteTribe","version":"1.0","type":"link"}