nayef f
2016- 3- 8, 12:52 AM
اللي يبي يدخل الموقع من متصفح كروم
يضغط على Details
بعدين visit this unsafe site (data:text/html;charset=utf-8,%3C!doctype%20html%3E%0A%3Chtml%20i18n-values=%22dir%3Atextdirection;lang%3Alanguage%22%3 E%0A%3Chead%3E%0A%20%20%3Cmeta%20charset=%22utf-8%22%3E%0A%20%20%3Cmeta%20name=%22viewport%22%0A%2 0%20%20%20%20%20content=%22initial-scale=1,%20minimum-scale=1,%20width=device-width%22%3E%0A%20%20%3Ctitle%20i18n-content=%22tabTitle%22%3E%3C/title%3E%0A%20%20%3Cstyle%3E/*%20Copyright%202014%20The%20Chromium%20Authors.%2 0All%20rights%20reserved.%0A%20%20%20Use%20of%20th is%20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20%20%20found %20in%20the%20LICENSE%20file.%20*/%0A%0Aa%20%7B%0A%20%20color%3A%20%23585858;%0A%7D% 0A%0A.bad-clock%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAAB V7bNHAAAFo0lEQVR4Xu3cS1OTVxwG8Ha6dsZNt/0S7ozX+wUSGKN7ycIvkJ2OiNcdbvwMfABXLS1VvLXFSMWUgFAh 1oJICCEGq8UFp8+fPu87J4S3vrmcvIfOceaZMKOSnN/8z/+c95Yv3B8XFxcXFxcXFzNRZ89+rZLJJNKLDCAZdfp0Hini5zWJ/Izk5e+QAf7bpPzf/yvKLkD0I1lArCOqwazL70D65Xdub5RUagcA0kDJCYCJ8Hen5b2 2D8y5czvVmTN9gCkRwHzwXvKe8t72wij1JWB6AFMIBDAPVZDPI J/Fth7zDWAeESD64LPIZ7ICBwAxZBFRlmURiUWLk0ymuCwrG8NtQ yqKKfUVYG4RwP7gs8pnbhsOAO4gapvlTluQzFaO+Uoy3nNMAay urlalcOqUKaSUudUKTa9dQN/t3m0EiWOItX6fw6W8nUCDyFJHh5ktAMbUuh0yN4HtBPpWgGIxN YQUTSBhTC3ZccvW3QNoawUR6Afk7p49ZpAwtuYPPHlsFUkFEeh HAA0jy61GwthkjM1UTx8BIq2gIeDcQ+7v3atKnZ2trqK+xs/n8JRFVBUEJL+CBGgYQD/t369WWomEMTZ0PgkAaQ8g6ik2RJyH+/apxwD6BSm3tpLS9QPxTGDUFTQkTZrT6wGApIJGkKcHD6p38XjL zkzWfw6ZADb0oHvAEaBHAPpZKohAv7YSCWOup3r6CRBpBX3v9R +pHuSxAB04oDKI4EjGDh1qDRLGXA9Q1iagYQFigxagJwR6Bpwx ptIsEsYc+roVANajBhpkcxag+3qDBs5TRMd5jowfPtws0rqMPU z1JAkQbQ8i0F1vBWP/GQHOqEwvgWGywPmNWW0GCWMPA9RrA9Cg339YPQR6AhwBGtuEM4 7kjhxRE0jDSBh7GKABC4CqGzSBZHplNCDA6PGBXhw9qt4nEo0A DYQBytgCJLvnB97yLs2ZQM+Q59WV4+NM8nWqESSMPcwOOm8BEA 8v2KC5QcxIgxYgTq0sgSY8HFaP4Ewjvx87Vi9SPgxQ0QYgHqD6 q9cIK2jU7z2sHIY4NUAzyF/hkYphptiaDUBjFy6oYa//aLtnArHn1FaOjvMSkdfZsEgY+7YBqpTLKnvxonrI/jPiTS/ijBPHAxKYFxrONDLD5I8f33j9AKQQQHZOsaVr1wSlBmkcSN7hx agGlPtM5Xg4swR6xXwGqWhnk2aWr1/fEmni0iUfiNPLX84nQ+L8wbw+ceK/kPKGlnnzSFNA8nbPOQBNalOKOEw1DiMwfuaQj11dDS7z3ChGmV IA0nRvr8oCaKPvbMJ5ycxqOLObKudP4syfPCmpRcLYDRxqmMlK ANLM5cvSf/zqmUI4rQik9ZwAnDnkDbKA/K0jYeyhD1ZtRnoFJKxSWuVwWjHEERjiyCsrR8N5iyu3i4iPhLE bON1hNuUApNdXrgAooHJqgHQchDiSApE+dXXxdIeBE2am8+7Gj S2R5oBU1ZCDp5WfBR2HweVtueaWNXDKNXqkeSARRlutiMP404p ZJJCHU0RwKanf8El786kEIL0BEisnsOfoOJICIzjLSLmjY5fFl 33CZ/XmzSCkwMqZD5hWgkOgnIELh/Yhvb16Vc0RqXa1Ympx1EoikTZw6TnavA9AWujpERgdh0B+5bAp +72npBKJHQZuXrAPqXD7dlDlEIdVw+BGCKmePgO3v9iHBJzaym F0nCUNB9f3C6q7e6eBG6jsyofz57V9DrOpIRc0GMkKUuns7DFw C56dwYGnvpTX9hzGwynF47wFz8BNnLYGx1ScUn64WlXjlOPxxY 8Yk6HbgO1H0nsOo+OsVRKJmNEbyW3PGpAAhGg9hwFOyj2KQCR/WjG4TeaWe5hlE5LAlBG8bvUwi3sc6lN390blGMBxD9S5RzINxD 3U6x4Ld18s4L6awt64LzdxX4/zDxj9/IEueAvhAAAAAElFTkSuQmCC)%201x,%0A%20%20%20%20%20%2 0url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAAD QmBKKAAACvlBMVEUAAAD/gID/gID/VVX/VVX/Tk7/YmL/YGD/VVXzUVH/XV32UlL/W1v2T0//WFj3UlL/UlL3UFD/WFjwTk7/U1P/U1PxTU3/V1fyT0//VFTzTk7/UlLwTU3/VVX0UFD/VFT/VFT1Tk7/VVX/VFT/U1PyT0//VFT/U1PxTEz/UlLuS0v/U1P/UlL/VFT0T0//U1P0Tk7/VFT/U1PuTU3/UlLzTU3/U1P/U1PwTEz/UlL/U1PvTU3/U1P/U1PxTU3/U1PzTk70Tk7/U1PyTk7/U1PzTk7/U1P/U1P6UFD/UlLzTk7/U1P/U1PyTk7/U1PtTEz/UlLyTU3/U1P/UlL/UlLxTk7/UlLvTEz/U1PvTU3/U1P/U1P/UlLxTEzxTU3zTU3/UlK7Ozu8Ozu8PDy9PDy+PDy+PT2/PDy/PT3APDzAPT3BPT3BPj7CPT3CPj7DPT3DPj7EPj7EPz/FPj7FPz/GPj7GPz/HPz/HQEDIPz/IQEDJPz/JQEDKQEDKQUHLQEDLQUHMQEDMQUHNQUHNQkLOQUHOQkLOZWXPQ UHPQkLPZWXQQkLRQkLRQ0PSQkLSQ0PSZmbTQ0PTZmbUQ0PURET VQ0PVRETVaGjWRETWRUXXRETXRUXXaGjYRUXZRUXZaGjaRUXaR kbaaWnbRUXbRkbbaWncRkbdRkbdaWneRkbeR0ffRkbfR0ffa2v gR0fga2vhR0fhSEjha2viR0fiSEjia2vjSEjjbGzkSEjkSUnkb GzlSEjlSUnlbGzmSUnmbGznSUnnSkroSkrobW3pSkrqSkrqS0v qi4vrS0vriYnri4vsS0vsiYntS0vtTEzuTEzvTEzwTEzwTU3w6 OjxTU3x6OjyTU3y6Ojy6eny8vLz8/P0Tk71Tk72Tk72cnL3T0/3cnL4T0/4cnL5T0/5c3P6T0/7UFD8UFD9UFD/UlJJWZWgAAAAYXRSTlMAAgQGDA0NEBUWFhwcHR0fHyAgNDQ3OD g9PT4+QkJDQ0lLS15fdHR1fHyEhIWGiIiJiYuVlaioqaurrK+v uLm5u7u7wsLExMXGxszM0tTU2dna2t/p7Ozt7fPz+fv+/v7+jD+tjQAACYhJREFUeAHs1cFqwjAcx/G1FR0iIqKIFFEUHKJQKlIRFKGUilSKVCmiHrKpCDuPHcbA99xt jA1+b7HLjmMkaeIu+TzBl18C/xtFURRFURSFQ6bc6g0ns8Uq3u3i1WI2GfZa5cz/tKQafW+NX629fiN11Rij1p3v8af9vFszrpRTGWxAZTOoyK8pdp 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)%202x);%0A%7D%0A%0A body%20%7B%0A%20%20background-color%3A%20%23f7f7f7;%0A%20%20color%3A%20%23646464 ;%0A%7D%0A%0Abody.safe-browsing%20%7B%0A%20%20background-color%3A%20rgb(206,%2052,%2038);%0A%20%20color%3A% 20white;%0A%7D%0A%0Abutton%20%7B%0A%20%20-webkit-user-select%3A%20none;%0A%20%20background%3A%20rgb(76,% 20142,%20250);%0A%20%20border%3A%200;%0A%20%20bord er-radius%3A%202px;%0A%20%20box-sizing%3A%20border-box;%0A%20%20color%3A%20%23fff;%0A%20%20cursor%3A% 20pointer;%0A%20%20float%3A%20right;%0A%20%20font-size%3A%20.875em;%0A%20%20margin%3A%200;%0A%20%20p adding%3A%2010px%2024px;%0A%20%20transition%3A%20b ox-shadow%20200ms%20cubic-bezier(0.4,%200,%200.2,%201);%0A%7D%0A%0A%5Bdir='r tl'%5D%20button%20%7B%0A%20%20float%3A%20left;%0A% 7D%0A%0Abutton%3Aactive%20%7B%0A%20%20background%3 A%20rgb(50,%20102,%20213);%0A%20%20outline%3A%200; %0A%7D%0A%0Abutton%3Ahover%20%7B%0A%20%20box-shadow%3A%200%201px%203px%20rgba(0,%200,%200,%20.5 0);%0A%7D%0A%0A%23debugging%20%7B%0A%20%20display% 3A%20inline;%0A%20%20overflow%3A%20auto;%0A%7D%0A% 0A.debugging-content%20%7B%0A%20%20line-height%3A%201em;%0A%20%20margin-bottom%3A%200;%0A%20%20margin-top%3A%201em;%0A%7D%0A%0A.debugging-title%20%7B%0A%20%20font-weight%3A%20bold;%0A%7D%0A%0A%23details%20%7B%0A%2 0%20color%3A%20%23696969;%0A%20%20margin%3A%2045px %200%2050px;%0A%7D%0A%0A%23details%20p%3Anot(%3Afi rst-of-type)%20%7B%0A%20%20margin-top%3A%2020px;%0A%7D%0A%0A%23details-button%20%7B%0A%20%20background%3A%20inherit;%0A%2 0%20border%3A%200;%0A%20%20float%3A%20none;%0A%20% 20margin%3A%200;%0A%20%20padding%3A%2010px%200;%0A %20%20text-decoration%3A%20underline;%0A%7D%0A%0A%23details-button%3Ahover%20%7B%0A%20%20box-shadow%3A%20inherit;%0A%7D%0A%0A.error-code%20%7B%0A%20%20color%3A%20%23696969;%0A%20%20d isplay%3A%20inline;%0A%20%20font-size%3A%20.86667em;%0A%20%20margin-top%3A%2015px;%0A%20%20opacity%3A%20.5;%0A%20%20te xt-transform%3A%20uppercase;%0A%7D%0A%0A%23error-debugging-info%20%7B%0A%20%20font-size%3A%200.8em;%0A%7D%0A%0Ah1%20%7B%0A%20%20color %3A%20%23333;%0A%20%20font-size%3A%201.6em;%0A%20%20font-weight%3A%20normal;%0A%20%20line-height%3A%201.25em;%0A%20%20margin-bottom%3A%2016px;%0A%7D%0A%0Ah2%20%7B%0A%20%20font-size%3A%201.2em;%0A%20%20font-weight%3A%20normal;%0A%7D%0A%0A.hidden%20%7B%0A%20 %20display%3A%20none;%0A%7D%0A%0Ahtml%20%7B%0A%20% 20-webkit-text-size-adjust%3A%20100%25;%0A%20%20font-size%3A%20125%25;%0A%7D%0A%0A.icon%20%7B%0A%20%20b ackground-repeat%3A%20no-repeat;%0A%20%20background-size%3A%20100%25;%0A%20%20height%3A%2072px;%0A%20% 20margin%3A%200%200%2040px;%0A%20%20width%3A%2072p x;%0A%7D%0A%0Ainput%5Btype=checkbox%5D%20%7B%0A%20 %20opacity%3A%200;%0A%7D%0A%0Ainput%5Btype=checkbo x%5D%3Afocus%20~%20.checkbox%20%7B%0A%20%20outline %3A%20-webkit-focus-ring-color%20auto%205px;%0A%7D%0A%0A.interstitial-wrapper%20%7B%0A%20%20box-sizing%3A%20border-box;%0A%20%20font-size%3A%201em;%0A%20%20line-height%3A%201.6em;%0A%20%20margin%3A%20100px%20aut o%200;%0A%20%20max-width%3A%20600px;%0A%20%20width%3A%20100%25;%0A%7D %0A%0A%23main-message%20%3E%20p%20%7B%0A%20%20display%3A%20inlin e;%0A%7D%0A%0A%23extended-reporting-opt-in%20%7B%0A%20%20font-size%3A%20.875em;%0A%20%20margin-top%3A%2039px;%0A%7D%0A%0A%23extended-reporting-opt-in%20label%20%7B%0A%20%20position%3A%20relative;%0 A%7D%0A%0A.nav-wrapper%20%7B%0A%20%20margin-top%3A%2051px;%0A%7D%0A%0A.nav-wrapper%3A%3Aafter%20%7B%0A%20%20clear%3A%20both;% 0A%20%20content%3A%20'';%0A%20%20display%3A%20tabl e;%0A%20%20width%3A%20100%25;%0A%7D%0A%0A.safe-browsing%20%3A-webkit-any(%0A%20%20%20%20a,%20%23details,%20%23details-button,%20h1,%20h2,%20p,%20.small-link)%20%7B%0A%20%20color%3A%20white;%0A%7D%0A%0A. safe-browsing%20button%20%7B%0A%20%20background-color%3A%20rgba(255,%20255,%20255,%20.15);%0A%7D%0 A%0A.safe-browsing%20button%3Aactive%20%7B%0A%20%20backgroun d-color%3A%20rgba(255,%20255,%20255,%20.25);%0A%7D%0 A%0A.safe-browsing%20button%3Ahover%20%7B%0A%20%20box-shadow%3A%200%202px%203px%20rgba(0,%200,%200,%20.5 );%0A%7D%0A%0A.safe-browsing%20.error-code%20%7B%0A%20%20display%3A%20none;%0A%7D%0A%0A. safe-browsing%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAAB iM0N1AAACFlBMVEX////19fX////////39/f39/f29vb09PQAAAD8/Pz29vbu7u7t7e3bRDfv7+/r6+vcRTjq6ur09PTy8vL86efp6en8/Pzz8/Pw8PDqUEPj4+Ps7OzdRjnfRzrx8fHdRTjl5eXf39/aQzb7+/ve3t7mTUDSPTDpT0L19fX////gSDvZVEneRjnkSz76+vrm5ubVPzLZQjXTPjHKNirNOCzn1dPrU EPoTkHbVkvOOi3jSj3QOy7RPC/o6Ojd3d3cRDfeRzni4uL39/fqUEL29vb5+fntZlrZxsTPOi3RT0TXVEjcV0zWQDPlYFTWU0f8 6ejYQjX96ejoYVb14uH96ujhSTzUPjHUUUb14uDq19bk5OTlTD/n5+fMOCva2trm1NLp1tXey8riSTziSj3wfHLZ2dnYxcPrZFnQT kLTUEXnTUDaVUrXQTTKNyruZ1rNOSzQOy/hzsznTkHROy/hSTvYQTThSDvsZlnWUkfeRzrqY1jgzczcRTfnYVXlX1PZVUrdW EzlYFPLNyvfSDrfzMvXU0fkX1LYVEnc3NzkX1Ph4eHNTEHPOy7 pdm3oT0Hbycfj0M/POi7YQTXgW0/PTUHVUUbZQzbuZlrodmzl0tDOOS3lTD7LNyrmYVXSY1n76OfeW U3l09HaaV/tZlnsZVnm09HqYlfNS0HcysjUPzLOTEHKNinST0XbaV/o1dTTY1ng4ODrUUPxo4TUAAAAC3RSTlMAABDKAMoAAAAAyh18q Q0AAAPjSURBVHhe7dbjmiRZEAbgHq2SKNuutm3bY9vm2rZt6w4 3IjE13VFTfXpyf05cwPtExIn8qqoe+5/qIbSmHkJbt2XvW9u2VjEXOvYl6lDJjkMl+w5Kdhwq2XdQsuNQy b6Dkh2HSvYdlOw6VKKOfQkd+xJ12CXq2JHsOyhVdhaPLFLA8aa jolTOOdc8TCTHU7n3F8pId6EyzrB3wAvSeicYfKaMVIKo0+yFW is5XgWnEJ5Y3QR0ZMALHf0L0lrnZiEgy98NsUK4IWDQ+mHurvN sMBjoDfcIrccSQ4wQSh97sdJvHZ+x+oGxAnfkntMjR/dFqxkhlL73Ng+kW1qStxyW0xuWBTl/7Oi+7m5fNSuE+06n06dOJXfPO4z9FMKyHGtFJ5GIRqoZIZSut1 xKJj8vFr90QD+9gUBYEF4eQScafc23J84MZeeOJ5O7i8X2Q1P6 fmRBOG30A06kRoozQ9mZn8A5vLSUez4YCPT0xCynry9S0+X0x5 mhrGO+vf3wFf0MoZ88zPUKzNXnQ8cpgcQGofTkoWumg3OhA3P5 9nQ5FUlRuDgjhNJULof7kc250NmFjqJIkp9zMUP4XnjOsVh+BO 4ngXNFsB8nODwvutggdPT7EWJ1s+NvQz+4Zyc42I/EcZzHxbbsl9ABBpz3zkwfLM2lSH4/z3G8iBKFaI4VcD/CR3V1ZyZra2/c1t8LFJzLz3Gi6PGEXASic4EThvvJPz17FaDl+g8vwlxO3A/2Y0Kai0DEgfcK4/2MjE+iU586+aOxH4XndQYdt9v1uFkUsvIHvgv93X+Zrv11OZW6 3PnHfpBgLr0fkEKhkNutPmoWgUr5A3eI99x98MX6VKrzwujoWJ MxFy+KHPTj0dyVISt/BCN/otEXVlKdHW+0tTWeaNLnQgb6cUNpFSArf0rfqe+dlY6Od8+fb3 zugwMcj2MBpGkIZTJbzKLQJyR/dtV8erLts8a9XzQ0fGXtR9MhtRL09Tckf5zOb8egn7NnX99pzR Uy+skMPmIWhbILEyR/FGn/ib0NDT8f4ETe4xFD+PDYjzrYv90s+MmmUivJH0Vq+u137EcUrT 2rbuinf4cFlf0TsfonyR9J+uvvnfohitiOBhAOtmODvyNDCZI/+Jka/Vhrzqj96Gwg/UPyR78fEecyoUHTqSxV+0j+gAOllfaDDoMUIflj3qHmVrGfDDp MUhfJH9HcD0BGP2xSXCL5g5DRj/5ezJKf5A+URhwWieQPPBdxWCSO5I9K7odRWpc/5J5ZJRe3Ln9U8l6skmdN/tD9sEuhUv6Qe96kdG/+PEEddol8Xw8skfx5YEldlz+0/gOZkEIssMdljwAAAABJRU5ErkJggg==)%201x,%0A%20%20%20 %20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAAD QmBKKAAAB/lBMVEUAAAD////////4+Pj09PTz8/P19fX39/f29vb39/f19fXhSTzgSDvfRzrjl5HwpJ7gSDreRzrkmJHrUUPeRjneRznd RjndRTjjmJHcRTjkmJLcRDffSDrbRDfbQzbaQzbYjIbs7OzpUE L0p6HY2NjZ2dnpT0LoTkHgRzrXjIbu7u7oT0H0p6DhSTvcRTfZ jYfX19fa2trv7+/pT0HnTkHnTUDzpqDb29ve3t7mTUDw8PDnTkDmTT/lTD/ypp/c3Nzf39/aRDfg4ODx8fHkSz7ypZ/Zjofi4uLy8vLjSz7xpZ7d3d3h4eHj4+Pz8/PmTD/lTD7jSz3jSj3iSTzk5OTl5eXm5ub09PTiSj3n5+fiSjzp6enZQ zbr6+vzpp/kTD7q6ur19fXo6Oj29vbxpJ7t7e3ZQjXYQTXYQjXXQTTajojXQ DTaj4jYQTTXQDPWQDPVPzLZjoj39/fUPjHaj4nTPjH4+PjXjIXYjYfUPzLSPTDbkIrUPjLTPTDSPDDc kYvRPC/////WPzPQOy71qKHVPzPTPTHPOi3ckozwpJ3YjYbPOy7POi7dk4zqU ELSPC/ROy/OOS3NOSzQOy/OOi3OOSzNOCzMOCvLNyvbkYrKNirLNyrbkYvKNinJNinKNyrbk ovqUEPNOCvhSDvdRjjjl5DckovJNSnlmZLrUEOrszXuAAAAC3R STlMAgAAAAAAAAACAgKEmtJUAAAnFSURBVHgB7M6xDYBADMBAw +ZINGzNCG+lcJWb4FhrrbXWWmfXM3HdE9xng898hPqEI8ynHCE +6QjxSUeITzpCfNIR4pOOEJ90hPikI8QnHSE+6QjxSUeITzoi+ ugR1ceOyD5yRPdxI8KPGlF+zIj0I0akHzEi/YgR6UeMSD9iRPoRI9KPGJF+xIj0I0akHzEi/YgR6UeMEJ90hP+87yN933yE//y00j0OwjAMBeDu2P2BkBCgt/XSJXd46kJviZ2dYkVK5Jcx+vTiAnF69v3TLBrcngPwibYLEY+t osHrAYqOQzQR0czL1fduK0hwAyx/RRsRM4e7ijqCRCnl8HSk/8UmiiE9+oEEdoqjo4mqJ4QYY372AolaDsBSlCSnHhUtygkpv/LYBySKMElVGUvOPPyuoJzzuq5jJxBKNdnUS3555rrQIaWYvrSW UVKbUBiFF8CDZZoJk0nxigaoYppqRYOGalOsVUENiElM06LWhb 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)%202x) ;%0A%7D%0A%0A.small-link%20%7B%0A%20%20color%3A%20%23696969;%0A%20%20f ont-size%3A%20.875em;%0A%7D%0A%0A.ssl%20.icon%20%7B%0A %20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAAB iM0N1AAACClBMVEUAAADbRTfrTjvcRjraQjbcRDjbRDjbRTfaR DXZQDPZQTTbQzfaRDbcRDfbQzbVKyvZQzXaQzbaRDbIPjLaRDb YQzfXQTfaQzbZQzbbRDi/QADbRDfbQDfbJCTcRTjbQzbIPjPbQzfbQzfbRTfTQyzcRzvbQz baRDbaQjfbQzbaQzbaQzbaRDfYQTTaRDfbQzfaRDbaQzbbQjbb QjbZQjTZQzbaQzbYQTTVQTXbRDbPQDDbQzbIPzPbQzfbRDfbNz fZRDaAAADVOSvYQDbbRDa/QCDZRDbqVUDaQTPbRDfGPDLbQjXHPjTVQEDJPTLGPTHKPTPYTj vGPDHbRDe+Oi+6OS64OC7LPzLHPTL7+/urNSv5+fm/OjD4+PjEPDHFPDG5OC67OS/DOzG8OS+9Oi/COzDrn5nAOzDtoZvBOzD9/f36+vq3OC62Ny339/fIPjLsoJr+/v6xNizx8fHFPDCnMymjMii1NyyfMSfz8/PUlI+uNivLlI+oMynDPDDUlY+zNyylMiipNCrOlI/JPjLHPTHKPjKhMijPlI+3OC2+Oy/FPTH29vaqNSq5OS319fW8Oi7AOy/BOy+sNSv////VlZD8/PzQlZDKlI+iMijCPDDYmJO0NyykMiiwNiy2OC27OS69Oi6gMSf Yl5K4OC3MPzPempXBPDDqnpjy8vL09PTHPjLRlZDbmZMWYj36A AAAUnRSTlMAgQ1CaODzz4soSuj4/tkGV9303/FBM9ic8gTpHAffhc+MKtAXQbDHdMaudtc7rX7q+n93Nl/VJyu4EK9B9vwOXgISNOIIgAw32vJNgAz+84ENOFEUuAAAA25JR EFUeAHsz0lPwmAQxvEWSxdaWiAIyAIBkQXc9yXuezw+3/+7mAkc1MxrZho9kPR3fZL/ZKxM5n80a05jXA+jKKyPG06tmTIT+C180/IDS689AmPU1nacKlhVR9fpwain6RxiabtfGgw7neGg5J9iaU/eKWDhYsf64m2GhYK0k7yDXJ/8HD72QeJEGJqAHDCHz0OQiTAUgxxx0+MNTbGsE4A8PbNjH+RMF JqDvPDjZUTjXBS6Alk3rLs0zkShKcitYb2jcSoKlUESw3pMY1k UqoDcG9YHGiuiEEB+n1cvlLM9FyLupp0zd7a6UMivGTtFqBQNp dculPL8dzbUbDbkQc1jQy7UNtgQUshCfxb67Lw+ltMGoygALzL JLiuvsvNMXsNPkElJZAkQIIxASHRsesEUXOy49zi99+Qdc84vB XuBPJLYefPNOfdezfzOZq//ZZpBoezZ2TXJjMW+BYPgrKxkrxwtpn0OCEHKL0/zxDTtUg9WDU6ekpOnfNlu7gQbNiEVklkQzqfmeNUKtP7lfP5CL ZjsRWdr3JhEvweAIF2oaqHA8WjCiUZ71d1AB2mqKuIAwnyYp/duVNoIAEESeei8bUz2T6utUiu0EQgSecp95Inu96qjN8ViKFTx DzlOeW8N8zlFLzqh5G+/kL0vOHuH2+g1KpXAPE8mlXV/kLhDrd+Hc/jrBfO8Zx5F0dObfiC7V7+9tUaoM3R6JQ/0dNoIe4ece26/HDe24XQ6QzAMpOvpI1kOe4XoMI/Y1x84P2tdzEeBYxiyHI+HPUI/WAx5muIOh3Bq5+ilHKAXnTgyeav2l72YJ8o7PK/ZgfS0YRzRsazMV4/Dfs3vHffM76JV7HbFeJgHgWQrl8mkvK5fYR7hFHE+nDPzyHae4 0zKM7S4szqZfhf2/XBflJgnkfD+iViYD/Pwp+B+PiDPR+ahM/ABLb6iU0Sv6d5lOLlj5vGRCL9d556/sJdg0CuXSmUSiSXJBwRJnHPSmU+c+8phznCW6jOhe25ShY7TC9 LUkaQHPl9sFfZSeIcsBoe9BpJUn/f7hqwozh1azHPi5JEiD2e/1m+7S+tw/g8I++J8IvXI3KPZ7+Nbd92lTYOMfYepAR0p8nhhtgPphkxhQNN 9JaS6FJlbuOl/kft3XCVxzydg4EhP5p8+c0H+Affig2wpFL3DAAAAAElFTkSuQm CC)%201x,%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAAD QmBKKAAACx1BMVEUAAADcRDfbSDjbRTfbRDfhSzwAAADbRDjbR zjbRTjbQzbaRDfaRDbcRDfTQyzXQzbZQDPbRDfcRDfbRTm/QCDaQzfbQzbaQzbMMzPbQzfbQzXaQzfeRjrbQjbVOSvbRDfaQz baQzfFPDLZQjfZQzbVQCvZQzXaQjXaRDbXQTfbQzfaQTPZQTa/QADaQzbcRDjZQjXaQzfbRDTaQzbaQzbbQzfbQzfaRDfbQzbHQD TMMzPbNzfaQjfbQzbaQzfbRDbWQDTZQzfaQDXEPTHXQTbGPTHb RDbYQTTVRDPaQzbaRDXaQTXZQzXbRDfXQDDXRDTaRDbbQzbGPD LHPTPZQjTbRDfPQDDbRDbYQjbbRDbaQjbZQjbaQzfaQzfaQzXa QzbbJCTDPTDFPTTFPDLaQzbbRDbbPTHLPDXbQzbbQzfbRDfgST nSPC3EPTHbRTfbQzbbRDfbQzbaRDfEPTHFPDLaQzbGPTLaQzat NiuiMiioNCntoZuuNivsoJrLlJCxNiy3OC2vNizz8/O3OC7Ok47+/v7x8fHWQTXMk4+9Oi739/f19fXw8PD29vb09PSlMymfMSfZQjW1Ny2zNyy7OS6nNCn4+Pjy 8vKvNiu4OC2/Oy/WQjXYQjXMlI+sNSvVQTWpNCqjMimdMCfAOy/v7++4OC6+Oi/Rl5K1OC3////8/PzFPDHNk477+/u6OS7XQjX6+vq0Nyy5OC67OS+5OS29Oi/Qko3BOy+8OS/DPDCkMinSl5LPk47Rk46wNiy8Oi6/OjDAOzCeMCe2OC3CPDDCOzDDPDG5OS6sNCrEPTGyNizEPDGgMS fBOzD9/f3Qk46tNSvnnZezNizDOzHonpi0Ny2uNSvOlI+1Nyz5+fm7Oi7 NlJDNlI/TmJOjMiioNCqqNCq4OS3Oko3MlZDVQTSrNCqmMynPko2sNSrQl pGhMijFPTHbRDeKorW+AAAAeHRSTlMA2UCB7CIB8zLIt8j4vhc TFPzYVQjk/qQF95TJVFUS+p37vl16DDVh6jOoNy8Eir9luzHC4+gqte9ACg6 DhZmpLJUw80eB0yce3XxSV+kgQFrF+jI2zBC4QvBZUZ/ffcEH2VTHq/0VIpu2sTER2cewYmOe7Nj67Nj6WWwvAAAICklEQVR4AezV105b QRDG8TEuxj4uOMEdgxG9QOggOgjRC0j0fgGIFKVEQn7p7yFyOc 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)%202x );%0A%7D%0A%0A.captive-portal%20.icon%20%7B%0A%20%20background-image%3A%20-webkit-image-set(%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAEyElEQVR4Xu3afWhVZRwH8LvdmjVSjKyQbKazia1k1s L6YzXoZdy28/J8f5XRC7hwEVk0hZQCXY2SipCgYgappXMQ5Ya9ELZqoEM3VHqx Bkapm21jOBWmbLfudk+0Peeu2+mc3zk9514WbN9/zz18ds75Pc/vPM+JTP9NZzrT+b9Fn2nGxHrainb8ggEaRgLn0IOjaMFroloU/Ssg1yxBLZpxBD00QufpODrRiFX6IiUKXY8XcRAJsryC3nRL7Ep sQJ/r0V3iSS0/MKU4D6uoQwLY/P1q4i0aYX9xVqyPRH1jbr8UtfSbE8CDqIK60wBjOEb7aDf24CB O/gN12LjJF4dM+dPAoNgMdNkUxLENQltAFViJdbTWfFTcaRbiMXy CpE1CM4vR5uAzdwB/hcxCDI5jXqGFeAadNJoGH0ErVhg3YPs46Ad9JldNS3GCAbDPkF GG/eJGWktn3PA4IUB3oxPzGY4AXSBLCSTLgfZxx2MLV1Q5tFHeWxW QDNalHulWeo4q9GW4VVShng5J0KgZ8+bkYpcEqIJk6H2y0CiW4 H58gGMYQhyn8DlqUUltZIk1XF01kKUW5yhm3gVB3Q76MDaRyXB QR1aIIJnyi6jNZUgs8uTQfUiGDJIxZ9OPfxEwhAO0F70To5NR5 skxrsUgWaGDZLQCHBHVxnKxWjwuivRS7McK7na1kpUZkEwUzXb FiZfZcVk8pE6xZ3u34AV5TFJUsV2ObBHU0+Q5wu0eJ21krw+eD 4lzBvOYf7wLeyI5DEfLx2l1DPqoSXK8SItis/gm41mlago/9P2UApklZE0pkHhdAv6YIiB8NwEQL9HvUwCkzZHz15g5Gw8jmR 0QtsizvOoACUjAIdlOZQUkHpCgDqd1gwRslhX3djZAmDsBwpAT JPtDUZPqGFuyUWU453IWu7fFHZOvhjiQ+aqiDheQ/bJjXpf2oP+caRA+cgPJpkxckeZfiIHMgmirC8gee4rz0qF6KV3 IJEi86R8kg0oazQ6Iv2Uyoiajt4x/qJ1BfcCe6JQZC/BQ82XvDLYHJPUEK3tmYHTmlotpbzCSwsDomDpc+mD6VgHETB3M 5Or2c5xUBvGTq7P98DjBEjqrBOLbD2eDZj7o+aJdhnhooJxUbd/r1cJ+yl1mJMMBGWUSP6zlezT5SIirGNKacEB4bwKEXcxrEN7gT hUGSCtILaZXMC+KiGN+5kHYITndkSj7Ko3GTIPMEvtJFKt9LDY giZtVQTLnqUPUOJcV8KWE95df4m85ps0+CQ/ig68xN72lscF4yveCFTa5g9AXnDR5lczC1Jr+4UhuCsAv6YlH3 EDURFbgPCG3Y2altmPG9FIJ8LnoOYLbXNDzgi+Myvkqii9sIuo cAHZZuN9tAKi6hnaiBwka9f942y2rzFcut4tZOO+3r5J6xcVmY EeKc9xlPuC3FhDHynBA6LQ5GGA2ftnNl82RqDrIDgb1ZU4Anxz UTc7raDeWhwPCUW0BA/C7gYeP9cWqILSUX8YAgmxxIoF3tYL/DkK9Y/znwm8CI4lvRLV+dVAQThOpOPht8p+ogZ4W9/jijFFD5eXhWPgPCXjMh/pSVYD6pxaywPGOKOIBWfkYhXYKozgvy5/rYBva8avzcx19sSrgT2jJnjJMVMiUAAAAAElFTkSuQmCC)%201 x,%0A%20%20%20%20%20%20url(data%3Aimage/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAQAAAB 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)%202x);%0A%7D%0A%0A .checkbox%20%7B%0A%20%20background%3A%20transparen t;%0A%20%20border%3A%201px%20solid%20white;%0A%20% 20border-radius%3A%202px;%0A%20%20display%3A%20block;%0A%20 %20height%3A%2014px;%0A%20%20left%3A%200;%0A%20%20 position%3A%20absolute;%0A%20%20right%3A%200;%0A%2 0%20top%3A%20-1px;%0A%20%20width%3A%2014px;%0A%7D%0A%0A.checkbox %3A%3Abefore%20%7B%0A%20%20background%3A%20transpa rent;%0A%20%20border%3A%202px%20solid%20white;%0A% 20%20border-right-width%3A%200;%0A%20%20border-top-width%3A%200;%0A%20%20content%3A%20'';%0A%20%20hei ght%3A%204px;%0A%20%20left%3A%202px;%0A%20%20opaci ty%3A%200;%0A%20%20position%3A%20absolute;%0A%20%2 0top%3A%203px;%0A%20%20transform%3A%20rotate(-45deg);%0A%20%20width%3A%209px;%0A%7D%0A%0A.ssl-opt-in%20.checkbox%20%7B%0A%20%20border-color%3A%20%23696969;%0A%7D%0A%0A.ssl-opt-in%20.checkbox%3A%3Abefore%20%7B%0A%20%20border-color%3A%20%23696969;%0A%7D%0A%0Ainput%5Btype=chec kbox%5D%3Achecked%20~%20.checkbox%3A%3Abefore%20%7 B%0A%20%20opacity%3A%201;%0A%7D%0A%0A@media%20(max-width%3A%20700px)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20padding%3A%200%2010%25 ;%0A%20%20%7D%0A%0A%20%20%23error-debugging-info%20%7B%0A%20%20%20%20overflow%3A%20auto;%0A%20 %20%7D%0A%7D%0A%0A@media%20(max-height%3A%20600px)%20%7B%0A%20%20.error-code%20%7B%0A%20%20%20%20margin-top%3A%2010px;%0A%20%20%7D%0A%7D%0A%0A@media%20(ma x-width%3A%20420px)%20%7B%0A%20%20button,%0A%20%20%5 Bdir='rtl'%5D%20button,%0A%20%20.small-link%20%7B%0A%20%20%20%20float%3A%20none;%0A%20%20 %20%20font-size%3A%20.825em;%0A%20%20%20%20font-weight%3A%20400;%0A%20%20%20%20margin%3A%200;%0A%2 0%20%20%20text-transform%3A%20uppercase;%0A%20%20%20%20width%3A%2 0100%25;%0A%20%20%7D%0A%0A%20%20%23details%20%7B%0 A%20%20%20%20margin%3A%2020px%200%2020px%200;%0A%2 0%20%7D%0A%0A%20%20%23details%20p%3Anot(%3Afirst-of-type)%20%7B%0A%20%20%20%20margin-top%3A%2010px;%0A%20%20%7D%0A%0A%20%20%23details-button%20%7B%0A%20%20%20%20display%3A%20block;%0A% 20%20%20%20margin-top%3A%2020px;%0A%20%20%20%20text-align%3A%20center;%0A%20%20%20%20width%3A%20100%25 ;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20padding%3A%200%205%25; %0A%20%20%7D%0A%0A%20%20%23extended-reporting-opt-in%20%7B%0A%20%20%20%20margin-top%3A%2024px;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20margin-top%3A%2030px;%0A%20%20%7D%0A%7D%0A%0A/**%0A%20*%20Mobile%20specific%20styling.%0A%20*%20 Navigation%20buttons%20are%20anchored%20to%20the%2 0bottom%20of%20the%20screen.%0A%20*%20Details%20me ssage%20replaces%20the%20top%20content%20in%20its% 20own%20scrollable%20area.%0A%20*/%0A%0A@media%20(max-width%3A%20420px)%20and%20(max-height%3A%20736px)%20and%20(orientation%3A%20portr ait)%20%7B%0A%20%20%23details-button%20%7B%0A%20%20%20%20border%3A%200;%0A%20%20 %20%20margin%3A%208px%200%200;%0A%20%20%7D%0A%0A%2 0%20.secondary-button%20%7B%0A%20%20%20%20-webkit-margin-end%3A%200;%0A%20%20%20%20margin-top%3A%2016px;%0A%20%20%7D%0A%7D%0A%0A/*%20Fixed%20nav.%20*/%0A@media%20(min-width%3A%20240px)%20and%20(max-width%3A%20420px)%20and%0A%20%20%20%20%20%20%20(mi n-height%3A%20401px)%20and%20(max-height%3A%20736px)%20and%20(orientation%3Aportrait ),%0A%20%20%20%20%20%20%20(min-width%3A%20421px)%20and%20(max-width%3A%20736px)%20and%20(min-height%3A%20240px)%20and%0A%20%20%20%20%20%20%20(m ax-height%3A%20420px)%20and%20(orientation%3Alandscap e)%20%7B%0A%20%20body%20.nav-wrapper%20%7B%0A%20%20%20%20background%3A%20%23f7f 7f7;%0A%20%20%20%20bottom%3A%200;%0A%20%20%20%20bo x-shadow%3A%200%20-22px%2040px%20rgb(247,%20247,%20247);%0A%20%20%20% 20left%3A%200;%0A%20%20%20%20margin%3A%200;%0A%20% 20%20%20max-width%3A%20736px;%0A%20%20%20%20padding-left%3A%2024px;%0A%20%20%20%20padding-right%3A%2024px;%0A%20%20%20%20position%3A%20fixed ;%0A%20%20%20%20z-index%3A%201;%0A%20%20%7D%0A%0A%20%20body.safe-browsing%20.nav-wrapper%20%7B%0A%20%20%20%20background%3A%20rgb(20 6,%2052,%2038);%0A%20%20%20%20box-shadow%3A%200%20-22px%2040px%20rgb(206,%2052,%2038);%0A%20%20%7D%0A %0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20max-width%3A%20736px;%0A%20%20%7D%0A%0A%20%20%23detail s,%0A%20%20%23main-content%20%7B%0A%20%20%20%20padding-bottom%3A%2040px;%0A%20%20%7D%0A%7D%0A%0A@media%20 (max-width%3A%20420px)%20and%20(max-height%3A%20736px)%20and%20(orientation%3A%20portr ait),%0A%20%20%20%20%20%20%20(max-width%3A%20736px)%20and%20(max-height%3A%20420px)%20and%20(orientation%3A%20lands cape)%20%7B%0A%20%20body%20%7B%0A%20%20%20%20margi n%3A%200%20auto;%0A%20%20%7D%0A%0A%20%20button,%0A %20%20%5Bdir='rtl'%5D%20button,%0A%20%20button.sma ll-link%20%7B%0A%20%20%20%20font-family%3A%20Roboto-Regular,Helvetica;%0A%20%20%20%20font-size%3A%20.933em;%0A%20%20%20%20font-weight%3A%20600;%0A%20%20%20%20margin%3A%206px%200 ;%0A%20%20%20%20text-transform%3A%20uppercase;%0A%20%20%7D%0A%0A%20%20. nav-wrapper%20%7B%0A%20%20%20%20box-sizing%3A%20border-box;%0A%20%20%20%20padding-bottom%3A%208px;%0A%20%20%20%20width%3A%20100%25;% 0A%20%20%7D%0A%0A%20%20.error-code%20%7B%0A%20%20%20%20margin-top%3A%200;%0A%20%20%7D%0A%0A%20%20%23details%20%7 B%0A%20%20%20%20box-sizing%3A%20border-box;%0A%20%20%20%20height%3A%20auto;%0A%20%20%20%2 0margin%3A%200;%0A%20%20%20%20opacity%3A%201;%0A%2 0%20%20%20transition%3A%20opacity%20250ms%20cubic-bezier(0.4,%200,%200.2,%201);%0A%20%20%7D%0A%0A%20 %20%23details.hidden,%0A%20%20%23main-content.hidden%20%7B%0A%20%20%20%20display%3A%20bl ock;%0A%20%20%20%20height%3A%200;%0A%20%20%20%20op acity%3A%200;%0A%20%20%20%20overflow%3A%20hidden;% 0A%20%20%20%20transition%3A%20none;%0A%20%20%7D%0A %0A%20%20%23details-button%20%7B%0A%20%20%20%20padding-bottom%3A%2016px;%0A%20%20%20%20padding-top%3A%2016px;%0A%20%20%7D%0A%0A%20%20h1%20%7B%0A% 20%20%20%20font-size%3A%201.5em;%0A%20%20%20%20margin-bottom%3A%208px;%0A%20%20%7D%0A%0A%20%20.icon%20%7 B%0A%20%20%20%20margin-bottom%3A%2012px;%0A%20%20%7D%0A%0A%20%20.intersti tial-wrapper%20%7B%0A%20%20%20%20box-sizing%3A%20border-box;%0A%20%20%20%20margin%3A%2024px%20auto%2012px; %0A%20%20%20%20padding%3A%200%2024px;%0A%20%20%20% 20position%3A%20relative;%0A%20%20%7D%0A%0A%20%20. interstitial-wrapper%20p%20%7B%0A%20%20%20%20font-size%3A%20.95em;%0A%20%20%20%20line-height%3A%201.61em;%0A%20%20%20%20margin-top%3A%208px;%0A%20%20%7D%0A%0A%20%20%23main-content%20%7B%0A%20%20%20%20margin%3A%200;%0A%20%2 0%20%20transition%3A%20opacity%20100ms%20cubic-bezier(0.4,%200,%200.2,%201);%0A%20%20%7D%0A%0A%20 %20.small-link%20%7B%0A%20%20%20%20border%3A%200;%0A%20%20%7 D%0A%0A%20%20.suggested-left%20%3E%20%23control-buttons,%0A%20%20.suggested-right%20%3E%20%23control-buttons%20%7B%0A%20%20%20%20float%3A%20none;%0A%20 %20%20%20margin%3A%200;%0A%20%20%7D%0A%7D%0A%0A@me dia%20(min-height%3A%20400px)%20and%20(orientation%3Aportrait )%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin-bottom%3A%20145px;%0A%20%20%7D%0A%7D%0A%0A@media%2 0(min-height%3A%20299px)%20and%20(orientation%3Aportrait )%20%7B%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding-bottom%3A%2016px;%0A%20%20%7D%0A%7D%0A%0A@media%20 (min-height%3A%20405px)%20and%20(max-height%3A%20736px)%20and%0A%20%20%20%20%20%20%20(m ax-width%3A%20420px)%20and%20(orientation%3Aportrait) %20%7B%0A%20%20.icon%20%7B%0A%20%20%20%20margin-bottom%3A%2024px;%0A%20%20%7D%0A%0A%20%20.intersti tial-wrapper%20%7B%0A%20%20%20%20margin-top%3A%2064px;%0A%20%20%7D%0A%7D%0A%0A@media%20(mi n-height%3A%20480px)%20and%20(max-width%3A%20420px)%20and%0A%20%20%20%20%20%20%20(ma x-height%3A%20736px)%20and%20(orientation%3A%20portr ait),%0A%20%20%20%20%20%20%20(min-height%3A%20338px)%20and%20(max-height%3A%20420px)%20and%20(max-width%3A%20736px)%20and%0A%20%20%20%20%20%20%20(or ientation%3A%20landscape)%20%7B%0A%20%20.icon%20%7 B%0A%20%20%20%20margin-bottom%3A%2024px;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding-bottom%3A%2024px;%0A%20%20%7D%0A%7D%0A%0A@media%20 (min-height%3A%20500px)%20and%20(max-width%3A%20414px)%20and%20(orientation%3A%20portra it)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin-top%3A%2096px;%0A%20%20%7D%0A%7D%0A%0A/*%20Phablet%20sizing%20*/%0A@media%20(min-width%3A%20375px)%20and%20(min-height%3A%20641px)%20and%20(max-height%3A%20736px)%20and%0A%20%20%20%20%20%20%20(m ax-width%3A%20414px)%20and%20(orientation%3A%20portra it)%20%7B%0A%20%20button,%0A%20%20%5Bdir='rtl'%5D% 20button,%0A%20%20.small-link%20%7B%0A%20%20%20%20font-size%3A%201em;%0A%20%20%20%20padding-bottom%3A%2012px;%0A%20%20%20%20padding-top%3A%2012px;%0A%20%20%7D%0A%0A%20%20body%3Anot(. offline)%20.icon%20%7B%0A%20%20%20%20height%3A%208 0px;%0A%20%20%20%20width%3A%2080px;%0A%20%20%7D%0A %0A%20%20%23details-button%20%7B%0A%20%20%20%20margin-top%3A%2028px;%0A%20%20%7D%0A%0A%20%20h1%20%7B%0A% 20%20%20%20font-size%3A%201.7em;%0A%20%20%7D%0A%0A%20%20.icon%20%7 B%0A%20%20%20%20margin-bottom%3A%2028px;%0A%20%20%7D%0A%0A%20%20.intersti tial-wrapper%20%7B%0A%20%20%20%20padding%3A%2028px;%0A% 20%20%7D%0A%0A%20%20.interstitial-wrapper%20p%20%7B%0A%20%20%20%20font-size%3A%201.05em;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding%3A%2028px;%0A% 20%20%7D%0A%7D%0A%0A@media%20(min-width%3A%20420px)%20and%20(max-width%3A%20736px)%20and%0A%20%20%20%20%20%20%20(mi n-height%3A%20240px)%20and%20(max-height%3A%20298px)%20and%0A%20%20%20%20%20%20%20(o rientation%3Alandscape)%20%7B%0A%20%20body%3Anot(. offline)%20.icon%20%7B%0A%20%20%20%20height%3A%205 0px;%0A%20%20%20%20width%3A%2050px;%0A%20%20%7D%0A %0A%20%20.icon%20%7B%0A%20%20%20%20padding-top%3A%200;%0A%20%20%7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin-top%3A%2016px;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding%3A%200%2024px% 208px;%0A%20%20%7D%0A%7D%0A%0A@media%20(min-width%3A%20420px)%20and%20(max-width%3A%20736px)%20and%0A%20%20%20%20%20%20%20(mi n-height%3A%20240px)%20and%20(max-height%3A%20420px)%20and%0A%20%20%20%20%20%20%20(o rientation%3Alandscape)%20%7B%0A%20%20%23details-button%20%7B%0A%20%20%20%20margin%3A%200;%0A%20%20 %7D%0A%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin-bottom%3A%2070px;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20margin-top%3A%200;%0A%20%20%7D%0A%0A%20%20%23extended-reporting-opt-in%20%7B%0A%20%20%20%20margin-top%3A%200;%0A%20%20%7D%0A%7D%0A%0A/*%20Phablet%20landscape%20*/%0A@media%20(min-width%3A%20680px)%20and%20(max-height%3A%20414px)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20margin%3A%2024px%20aut o;%0A%20%20%7D%0A%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20margin%3A%2016px%20aut o%200;%0A%20%20%7D%0A%7D%0A%0A@media%20(max-height%3A%20240px)%20and%20(orientation%3A%20lands cape),%0A%20%20%20%20%20%20%20(max-height%3A%20480px)%20and%20(orientation%3A%20portr ait),%0A%20%20%20%20%20%20%20(max-width%3A%20419px)%20and%20(max-height%3A%20323px)%20%7B%0A%20%20body%3Anot(.offli ne)%20.icon%20%7B%0A%20%20%20%20height%3A%2056px;% 0A%20%20%20%20width%3A%2056px;%0A%20%20%7D%0A%0A%2 0%20.icon%20%7B%0A%20%20%20%20margin-bottom%3A%2016px;%0A%20%20%7D%0A%7D%0A%0A/*%20Small%20mobile%20screens.%20No%20fixed%20nav.% 20*/%0A@media%20(max-height%3A%20400px)%20and%20(orientation%3A%20portr ait),%0A%20%20%20%20%20%20%20(max-height%3A%20239px)%20and%20(orientation%3A%20lands cape),%0A%20%20%20%20%20%20%20(max-width%3A%20419px)%20and%20(max-height%3A%20399px)%20%7B%0A%20%20.interstitial-wrapper%20%7B%0A%20%20%20%20display%3A%20flex;%0A% 20%20%20%20flex-direction%3A%20column;%0A%20%20%20%20margin-bottom%3A%200;%0A%20%20%7D%0A%0A%20%20%23details%2 0%7B%0A%20%20%20%20flex%3A%201%201%20auto;%0A%20%2 0%20%20order%3A%200;%0A%20%20%7D%0A%0A%20%20%23mai n-content%20%7B%0A%20%20%20%20flex%3A%201%201%20auto ;%0A%20%20%20%20order%3A%200;%0A%20%20%7D%0A%0A%20 %20.nav-wrapper%20%7B%0A%20%20%20%20flex%3A%200%201%20auto ;%0A%20%20%20%20margin-top%3A%208px;%0A%20%20%20%20order%3A%201;%0A%20%20 %20%20padding-left%3A%200;%0A%20%20%20%20padding-right%3A%200;%0A%20%20%20%20position%3A%20relative ;%0A%20%20%20%20width%3A%20100%25;%0A%20%20%7D%0A% 7D%0A%0A@media%20(max-width%3A%20239px)%20and%20(orientation%3A%20portra it)%20%7B%0A%20%20.nav-wrapper%20%7B%0A%20%20%20%20padding-left%3A%200;%0A%20%20%20%20padding-right%3A%200;%0A%20%20%7D%0A%7D%0A%3C/style%3E%0A%20%20%3Cscript%3E//%20Copyright%20(c)%202012%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A//%20//%20Copyright%20(c)%202013%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A/**%0A%20*%20@fileoverview%20Assertion%20support.%0 A%20*/%0A%0A/**%0A%20*%20Verify%20%7Ccondition%7C%20is%20truthy %20and%20return%20%7Ccondition%7C%20if%20so.%0A%20 *%20@template%20T%0A%20*%20@param%20%7BT%7D%20cond ition%20A%20condition%20to%20check%20for%20truthin ess.%20%20Note%20that%20this%0A%20*%20%20%20%20%20 may%20be%20used%20to%20test%20whether%20a%20value% 20is%20defined%20or%20not,%20and%20we%20don't%20wa nt%0A%20*%20%20%20%20%20to%20force%20a%20cast%20to %20Boolean.%0A%20*%20@param%20%7Bstring=%7D%20opt_ message%20A%20message%20to%20show%20on%20failure.% 0A%20*%20@return%20%7BT%7D%20A%20non-null%20%7Ccondition%7C.%0A%20*/%0Afunction%20assert(condition,%20opt_message)%20% 7B%0A%20%20'use%20strict';%0A%20%20if%20(!conditio n)%20%7B%0A%20%20%20%20var%20msg%20=%20'Assertion% 20failed';%0A%20%20%20%20if%20(opt_message)%0A%20% 20%20%20%20%20msg%20=%20msg%20+%20'%3A%20'%20+%20o pt_message;%0A%20%20%20%20throw%20new%20Error(msg) ;%0A%20%20%7D%0A%20%20return%20condition;%0A%7D%0A %0A/**%0A%20*%20Call%20this%20from%20places%20in%20the %20code%20that%20should%20never%20be%20reached.%0A %20*%0A%20*%20For%20example,%20handling%20all%20th e%20values%20of%20enum%20with%20a%20switch()%20lik e%20this%3A%0A%20*%0A%20*%20%20%20function%20getVa lueFromEnum(enum)%20%7B%0A%20*%20%20%20%20%20switc h%20(enum)%20%7B%0A%20*%20%20%20%20%20%20%20case%2 0ENUM_FIRST_OF_TWO%3A%0A%20*%20%20%20%20%20%20%20% 20%20return%20first%0A%20*%20%20%20%20%20%20%20cas e%20ENUM_LAST_OF_TWO%3A%0A%20*%20%20%20%20%20%20%2 0%20%20return%20last;%0A%20*%20%20%20%20%20%7D%0A% 20*%20%20%20%20%20assertNotReached();%0A%20*%20%20 %20%20%20return%20document;%0A%20*%20%20%20%7D%0A% 20*%0A%20*%20This%20code%20should%20only%20be%20hi t%20in%20the%20case%20of%20serious%20programmer%20 error%20or%0A%20*%20unexpected%20input.%0A%20*%0A% 20*%20@param%20%7Bstring=%7D%20opt_message%20A%20m essage%20to%20show%20when%20this%20is%20hit.%0A%20 */%0Afunction%20assertNotReached(opt_message)%20%7B% 0A%20%20throw%20new%20Error(opt_message%20%7C%7C%2 0'Unreachable%20code%20hit');%0A%7D%0A%0A/**%0A%20*%20@param%20%7B*%7D%20value%20The%20value %20to%20check.%0A%20*%20@param%20%7Bfunction(new%3 A%20T,%20...)%7D%20type%20A%20user-defined%20constructor.%0A%20*%20@param%20%7Bstring =%7D%20opt_message%20A%20message%20to%20show%20whe n%20this%20is%20hit.%0A%20*%20@return%20%7BT%7D%0A %20*%20@template%20T%0A%20*/%0Afunction%20assertInstanceof(value,%20type,%20op t_message)%20%7B%0A%20%20if%20(!(value%20instanceo f%20type))%20%7B%0A%20%20%20%20throw%20new%20Error (opt_message%20%7C%7C%0A%20%20%20%20%20%20%20%20%2 0%20%20%20%20%20%20%20%20%20%20%20value%20+%20'%20 is%20not%20a%5Bn%5D%20'%20+%20(type.name%20%7C%7C% 20typeof%20type));%0A%20%20%7D%0A%20%20return%20va lue;%0A%7D%0A%0A%0A/**%0A%20*%20Alias%20for%20document.getElementById. %0A%20*%20@param%20%7Bstring%7D%20id%20The%20ID%20 of%20the%20element%20to%20find.%0A%20*%20@return%2 0%7BHTMLElement%7D%20The%20found%20element%20or%20 null%20if%20not%20found.%0A%20*/%0Afunction%20$(id)%20%7B%0A%20%20return%20documen t.getElementById(id);%0A%7D%0A%0A/**%0A%20*%20Add%20an%20accessible%20message%20to%2 0the%20page%20that%20will%20be%20announced%20to%0A %20*%20users%20who%20have%20spoken%20feedback%20on ,%20but%20will%20be%20invisible%20to%20all%0A%20*% 20other%20users.%20It's%20removed%20right%20away%2 0so%20it%20doesn't%20clutter%20the%20DOM.%0A%20*%2 0@param%20%7Bstring%7D%20msg%20The%20text%20to%20b e%20pronounced.%0A%20*/%0Afunction%20announceAccessibleMessage(msg)%20%7B %0A%20%20var%20element%20=%20document.createElemen t('div');%0A%20%20element.setAttribute('aria-live',%20'polite');%0A%20%20element.style.position %20=%20'relative';%0A%20%20element.style.left%20=% 20'-9999px';%0A%20%20element.style.height%20=%20'0px'; %0A%20%20element.innerText%20=%20msg;%0A%20%20docu ment.body.appendChild(element);%0A%20%20window.set Timeout(function()%20%7B%0A%20%20%20%20document.bo dy.removeChild(element);%0A%20%20%7D,%200);%0A%7D% 0A%0A/**%0A%20*%20Calls%20chrome.send%20with%20a%20callb ack%20and%20restores%20the%20original%20afterwards .%0A%20*%20@param%20%7Bstring%7D%20name%20The%20na me%20of%20the%20message%20to%20send.%0A%20*%20@par am%20%7B!Array%7D%20params%20The%20parameters%20to %20send.%0A%20*%20@param%20%7Bstring%7D%20callback Name%20The%20name%20of%20the%20function%20that%20t he%20backend%20calls.%0A%20*%20@param%20%7B!Functi on%7D%20callback%20The%20function%20to%20call.%0A% 20*/%0Afunction%20chromeSend(name,%20params,%20callbac kName,%20callback)%20%7B%0A%20%20var%20old%20=%20g lobal%5BcallbackName%5D;%0A%20%20global%5Bcallback Name%5D%20=%20function()%20%7B%0A%20%20%20%20//%20restore%0A%20%20%20%20global%5BcallbackName%5D% 20=%20old;%0A%0A%20%20%20%20var%20args%20=%20Array .prototype.slice.call(arguments);%0A%20%20%20%20re turn%20callback.apply(global,%20args);%0A%20%20%7D ;%0A%20%20chrome.send(name,%20params);%0A%7D%0A%0A/**%0A%20*%20Returns%20the%20scale%20factors%20supp orted%20by%20this%20platform%20for%20webui%0A%20*% 20resources.%0A%20*%20@return%20%7BArray%7D%20The% 20supported%20scale%20factors.%0A%20*/%0Afunction%20getSupportedScaleFactors()%20%7B%0A% 20%20var%20supportedScaleFactors%20=%20%5B%5D;%0A% 20%20if%20(cr.isMac%20%7C%7C%20cr.isChromeOS%20%7C %7C%20cr.isWindows%20%7C%7C%20cr.isLinux)%20%7B%0A %20%20%20%20//%20All%20desktop%20platforms%20support%20zooming%2 0which%20also%20updates%20the%0A%20%20%20%20//%20renderer's%20device%20scale%20factors%20(a.k.a% 20devicePixelRatio),%20and%0A%20%20%20%20//%20these%20platforms%20has%20high%20DPI%20assets%2 0for%202.0x.%20Use%201x%20and%202x%20in%0A%20%20%2 0%20//%20image-set%20on%20these%20platforms%20so%20that%20the%20r enderer%20can%20pick%20the%0A%20%20%20%20//%20closest%20image%20for%20the%20current%20device% 20scale%20factor.%0A%20%20%20%20supportedScaleFact ors.push(1);%0A%20%20%20%20supportedScaleFactors.p ush(2);%0A%20%20%7D%20else%20%7B%0A%20%20%20%20//%20For%20other%20platforms%20that%20use%20fixed%20 device%20scale%20factor,%20use%0A%20%20%20%20//%20the%20window's%20device%20pixel%20ratio.%0A%20% 20%20%20//%20TODO(oshima)%3A%20Investigate%20if%20Android/iOS%20need%20to%20use%20image-set.%0A%20%20%20%20supportedScaleFactors.push(wind ow.devicePixelRatio);%0A%20%20%7D%0A%20%20return%2 0supportedScaleFactors;%0A%7D%0A%0A/**%0A%20*%20Generates%20a%20CSS%20url%20string.%0A %20*%20@param%20%7Bstring%7D%20s%20The%20URL%20to% 20generate%20the%20CSS%20url%20for.%0A%20*%20@retu rn%20%7Bstring%7D%20The%20CSS%20url%20string.%0A%2 0*/%0Afunction%20url(s)%20%7B%0A%20%20//%20http%3A//www.w3.org/TR/css3-values/%23uris%0A%20%20//%20Parentheses,%20commas,%20whitespace%20character s,%20single%20quotes%20(')%20and%20double%0A%20%20//%20quotes%20(%22)%20appearing%20in%20a%20URI%20mus t%20be%20escaped%20with%20a%20backslash%0A%20%20va r%20s2%20=%20s.replace(/(%5C(%7C%5C)%7C%5C,%7C%5Cs%7C%5C'%7C%5C%22%7C%5C%5 C)/g,%20'%5C%5C$1');%0A%20%20//%20WebKit%20has%20a%20bug%20when%20it%20comes%20to %20URLs%20that%20end%20with%20%5C%0A%20%20//%20https%3A//bugs.webkit.org/show_bug.cgi%3Fid=28885%0A%20%20if%20(/%5C%5C%5C%5C$/.test(s2))%20%7B%0A%20%20%20%20//%20Add%20a%20space%20to%20work%20around%20the%20We bKit%20bug.%0A%20%20%20%20s2%20+=%20'%20';%0A%20%2 0%7D%0A%20%20return%20'url(%22'%20+%20s2%20+%20'%2 2)';%0A%7D%0A%0A/**%0A%20*%20Returns%20the%20URL%20of%20the%20image ,%20or%20an%20image%20set%20of%20URLs%20for%20the% 20profile%20avatar.%0A%20*%20Default%20avatars%20h ave%20resources%20available%20for%20multiple%20sca lefactors,%20whereas%0A%20*%20the%20GAIA%20profile %20image%20only%20comes%20in%20one%20size.%0A%20*% 0A%20*%20@param%20%7Bstring%7D%20path%20The%20path %20of%20the%20image.%0A%20*%20@return%20%7Bstring% 7D%20The%20url,%20or%20an%20image%20set%20of%20URL s%20of%20the%20avatar%20image.%0A%20*/%0Afunction%20getProfileAvatarIcon(path)%20%7B%0A% 20%20var%20chromeThemePath%20=%20'chrome%3A//theme';%0A%20%20var%20isDefaultAvatar%20=%0A%20%20 %20%20%20%20(path.slice(0,%20chromeThemePath.lengt h)%20==%20chromeThemePath);%0A%20%20return%20isDef aultAvatar%20%3F%20imageset(path%20+%20'@scalefact orx')%3A%20url(path);%0A%7D%0A%0A/**%0A%20*%20Generates%20a%20CSS%20-webkit-image-set%20for%20a%20chrome%3A//%20url.%0A%20*%20An%20entry%20in%20the%20image%20s et%20is%20added%20for%20each%20of%20getSupportedSc aleFactors().%0A%20*%20The%20scale-factor-specific%20url%20is%20generated%20by%20replacing%2 0the%20first%20instance%20of%0A%20*%20'scalefactor '%20in%20%7Cpath%7C%20with%20the%20numeric%20scale %20factor.%0A%20*%20@param%20%7Bstring%7D%20path%2 0The%20URL%20to%20generate%20an%20image%20set%20fo r.%0A%20*%20%20%20%20%20'scalefactor'%20should%20b e%20a%20substring%20of%20%7Cpath%7C.%0A%20*%20@ret urn%20%7Bstring%7D%20The%20CSS%20-webkit-image-set.%0A%20*/%0Afunction%20imageset(path)%20%7B%0A%20%20var%20s upportedScaleFactors%20=%20getSupportedScaleFactor s();%0A%0A%20%20var%20replaceStartIndex%20=%20path .indexOf('scalefactor');%0A%20%20if%20(replaceStar tIndex%20%3C%200)%0A%20%20%20%20return%20url(path) ;%0A%0A%20%20var%20s%20=%20'';%0A%20%20for%20(var% 20i%20=%200;%20i%20%3C%20supportedScaleFactors.len gth;%20++i)%20%7B%0A%20%20%20%20var%20scaleFactor% 20=%20supportedScaleFactors%5Bi%5D;%0A%20%20%20%20 var%20pathWithScaleFactor%20=%20path.substr(0,%20r eplaceStartIndex)%20+%20scaleFactor%20+%0A%20%20%2 0%20%20%20%20%20path.substr(replaceStartIndex%20+% 20'scalefactor'.length);%0A%0A%20%20%20%20s%20+=%2 0url(pathWithScaleFactor)%20+%20'%20'%20+%20scaleF actor%20+%20'x';%0A%0A%20%20%20%20if%20(i%20!=%20s upportedScaleFactors.length%20-%201)%0A%20%20%20%20%20%20s%20+=%20',%20';%0A%20%2 0%7D%0A%20%20return%20'-webkit-image-set('%20+%20s%20+%20')';%0A%7D%0A%0A/**%0A%20*%20Parses%20query%20parameters%20from%20L ocation.%0A%20*%20@param%20%7BLocation%7D%20locati on%20The%20URL%20to%20generate%20the%20CSS%20url%2 0for.%0A%20*%20@return%20%7BObject%7D%20Dictionary %20containing%20name%20value%20pairs%20for%20URL%0 A%20*/%0Afunction%20parseQueryParams(location)%20%7B%0A% 20%20var%20params%20=%20%7B%7D;%0A%20%20var%20quer y%20=%20unescape(location.search.substring(1));%0A %20%20var%20vars%20=%20query.split('&');%0A%20%20for%20(var%20i%20=%200;%20i%20%3C%20va rs.length;%20i++)%20%7B%0A%20%20%20%20var%20pair%2 0=%20vars%5Bi%5D.split('=');%0A%20%20%20%20params% 5Bpair%5B0%5D%5D%20=%20pair%5B1%5D;%0A%20%20%7D%0A %20%20return%20params;%0A%7D%0A%0A/**%0A%20*%20Creates%20a%20new%20URL%20by%20appendi ng%20or%20replacing%20the%20given%20query%20key%20 and%20value.%0A%20*%20Not%20supporting%20URL%20wit h%20username%20and%20password.%0A%20*%20@param%20% 7BLocation%7D%20location%20The%20original%20URL.%0 A%20*%20@param%20%7Bstring%7D%20key%20The%20query% 20parameter%20name.%0A%20*%20@param%20%7Bstring%7D %20value%20The%20query%20parameter%20value.%0A%20* %20@return%20%7Bstring%7D%20The%20constructed%20ne w%20URL.%0A%20*/%0Afunction%20setQueryParam(location,%20key,%20val ue)%20%7B%0A%20%20var%20query%20=%20parseQueryPara ms(location);%0A%20%20query%5BencodeURIComponent(k ey)%5D%20=%20encodeURIComponent(value);%0A%0A%20%2 0var%20newQuery%20=%20'';%0A%20%20for%20(var%20q%2 0in%20query)%20%7B%0A%20%20%20%20newQuery%20+=%20( newQuery%20%3F%20'&'%20%3A%20'%3F')%20+%20q%20+%20'='%20+%20query%5Bq %5D;%0A%20%20%7D%0A%0A%20%20return%20location.orig in%20+%20location.pathname%20+%20newQuery%20+%20lo cation.hash;%0A%7D%0A%0A/**%0A%20*%20@param%20%7BNode%7D%20el%20A%20node%20 to%20search%20for%20ancestors%20with%20%7CclassNam e%7C.%0A%20*%20@param%20%7Bstring%7D%20className%2 0A%20class%20to%20search%20for.%0A%20*%20@return%2 0%7BElement%7D%20A%20node%20with%20class%20of%20%7 CclassName%7C%20or%20null%20if%20none%20is%20found .%0A%20*/%0Afunction%20findAncestorByClass(el,%20className) %20%7B%0A%20%20return%20/**%20@type%20%7BElement%7D%20*/(findAncestor(el,%20function(el)%20%7B%0A%20%20%20 %20return%20el.classList%20&&%20el.classList.contains(className);%0A%20%20%7D)) ;%0A%7D%0A%0A/**%0A%20*%20Return%20the%20first%20ancestor%20for% 20which%20the%20%7B@code%20predicate%7D%20returns% 20true.%0A%20*%20@param%20%7BNode%7D%20node%20The% 20node%20to%20check.%0A%20*%20@param%20%7Bfunction (Node)%3Aboolean%7D%20predicate%20The%20function%2 0that%20tests%20the%0A%20*%20%20%20%20%20nodes.%0A %20*%20@return%20%7BNode%7D%20The%20found%20ancest or%20or%20null%20if%20not%20found.%0A%20*/%0Afunction%20findAncestor(node,%20predicate)%20%7 B%0A%20%20var%20last%20=%20false;%0A%20%20while%20 (node%20!=%20null%20&&%20!(last%20=%20predicate(node)))%20%7B%0A%20%20%2 0%20node%20=%20node.parentNode;%0A%20%20%7D%0A%20% 20return%20last%20%3F%20node%20%3A%20null;%0A%7D%0 A%0Afunction%20swapDomNodes(a,%20b)%20%7B%0A%20%20 var%20afterA%20=%20a.nextSibling;%0A%20%20if%20(af terA%20==%20b)%20%7B%0A%20%20%20%20swapDomNodes(b, %20a);%0A%20%20%20%20return;%0A%20%20%7D%0A%20%20v ar%20aParent%20=%20a.parentNode;%0A%20%20b.parentN ode.replaceChild(a,%20b);%0A%20%20aParent.insertBe fore(b,%20afterA);%0A%7D%0A%0A/**%0A%20*%20Disables%20text%20selection%20and%20dr agging,%20with%20optional%20whitelist%20callbacks. %0A%20*%20@param%20%7Bfunction(Event)%3Aboolean=%7 D%20opt_allowSelectStart%20Unless%20this%20functio n%0A%20*%20%20%20%20is%20defined%20and%20returns%2 0true,%20the%20onselectionstart%20event%20will%20b e%0A%20*%20%20%20%20surpressed.%0A%20*%20@param%20 %7Bfunction(Event)%3Aboolean=%7D%20opt_allowDragSt art%20Unless%20this%20function%0A%20*%20%20%20%20i s%20defined%20and%20returns%20true,%20the%20ondrag start%20event%20will%20be%20surpressed.%0A%20*/%0Afunction%20disableTextSelectAndDrag(opt_allowSe lectStart,%20opt_allowDragStart)%20%7B%0A%20%20//%20Disable%20text%20selection.%0A%20%20document.on selectstart%20=%20function(e)%20%7B%0A%20%20%20%20 if%20(!(opt_allowSelectStart%20&&%20opt_allowSelectStart.call(this,%20e)))%0A%20%20 %20%20%20%20e.preventDefault();%0A%20%20%7D;%0A%0A %20%20//%20Disable%20dragging.%0A%20%20document.ondragstar t%20=%20function(e)%20%7B%0A%20%20%20%20if%20(!(op t_allowDragStart%20&&%20opt_allowDragStart.call(this,%20e)))%0A%20%20%2 0%20%20%20e.preventDefault();%0A%20%20%7D;%0A%7D%0 A%0A/**%0A%20*%20TODO(dbeam)%3A%20DO%20NOT%20USE.%20THI S%20IS%20DEPRECATED.%20Use%20an%20action-link%20instead.%0A%20*%20Call%20this%20to%20stop%2 0clicks%20on%20%3Ca%20href=%22%23%22%3E%20links%20 from%20scrolling%20to%20the%20top%20of%0A%20*%20th e%20page%20(and%20possibly%20showing%20a%20%23%20i n%20the%20link).%0A%20*/%0Afunction%20preventDefaultOnPoundLinkClicks()%20 %7B%0A%20%20document.addEventListener('click',%20f unction(e)%20%7B%0A%20%20%20%20var%20anchor%20=%20 findAncestor(/**%20@type%20%7BNode%7D%20*/(e.target),%20function(el)%20%7B%0A%20%20%20%20%20 %20return%20el.tagName%20==%20'A';%0A%20%20%20%20% 7D);%0A%20%20%20%20//%20Use%20getAttribute()%20to%20prevent%20URL%20nor malization.%0A%20%20%20%20if%20(anchor%20&&%20anchor.getAttribute('href')%20==%20'%23')%0A%20 %20%20%20%20%20e.preventDefault();%0A%20%20%7D);%0 A%7D%0A%0A/**%0A%20*%20Check%20the%20directionality%20of%20th e%20page.%0A%20*%20@return%20%7Bboolean%7D%20True% 20if%20Chrome%20is%20running%20an%20RTL%20UI.%0A%2 0*/%0Afunction%20isRTL()%20%7B%0A%20%20return%20docum ent.documentElement.dir%20==%20'rtl';%0A%7D%0A%0A/**%0A%20*%20Get%20an%20element%20that's%20known%20 to%20exist%20by%20its%20ID.%20We%20use%20this%20in stead%20of%20just%0A%20*%20calling%20getElementByI d%20and%20not%20checking%20the%20result%20because% 20this%20lets%20us%0A%20*%20satisfy%20the%20JSComp iler%20type%20system.%0A%20*%20@param%20%7Bstring% 7D%20id%20The%20identifier%20name.%0A%20*%20@retur n%20%7B!HTMLElement%7D%20the%20Element.%0A%20*/%0Afunction%20getRequiredElement(id)%20%7B%0A%20%2 0return%20assertInstanceof($(id),%20HTMLElement,%0 A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20% 20%20%20%20%20%20%20%20%20%20'Missing%20required%2 0element%3A%20'%20+%20id);%0A%7D%0A%0A/**%0A%20*%20Query%20an%20element%20that's%20known% 20to%20exist%20by%20a%20selector.%20We%20use%20thi s%20instead%20of%0A%20*%20just%20calling%20querySe lector%20and%20not%20checking%20the%20result%20bec ause%20this%20lets%20us%0A%20*%20satisfy%20the%20J SCompiler%20type%20system.%0A%20*%20@param%20%7Bst ring%7D%20selectors%20CSS%20selectors%20to%20query %20the%20element.%0A%20*%20@param%20%7B(!Document% 7C!DocumentFragment%7C!Element)=%7D%20opt_context% 20An%20optional%0A%20*%20%20%20%20%20context%20obj ect%20for%20querySelector.%0A%20*%20@return%20%7B! HTMLElement%7D%20the%20Element.%0A%20*/%0Afunction%20queryRequiredElement(selectors,%20op t_context)%20%7B%0A%20%20var%20element%20=%20(opt_ context%20%7C%7C%20document).querySelector(selecto rs);%0A%20%20return%20assertInstanceof(element,%20 HTMLElement,%0A%20%20%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Missin g%20required%20element%3A%20'%20+%20selectors);%0A %7D%0A%0A//%20Handle%20click%20on%20a%20link.%20If%20the%20li nk%20points%20to%20a%20chrome%3A%20or%20file%3A%20 url,%20then%0A//%20call%20into%20the%20browser%20to%20do%20the%20n avigation.%0Adocument.addEventListener('click',%20 function(e)%20%7B%0A%20%20if%20(e.defaultPrevented )%0A%20%20%20%20return;%0A%0A%20%20var%20el%20=%20 e.target;%0A%20%20if%20(el.nodeType%20==%20Node.EL EMENT_NODE%20&&%0A%20%20%20%20%20%20el.webkitMatchesSelector('A,% 20A%20*'))%20%7B%0A%20%20%20%20while%20(el.tagName %20!=%20'A')%20%7B%0A%20%20%20%20%20%20el%20=%20el .parentElement;%0A%20%20%20%20%7D%0A%0A%20%20%20%2 0if%20((el.protocol%20==%20'file%3A'%20%7C%7C%20el .protocol%20==%20'about%3A')%20&&%0A%20%20%20%20%20%20%20%20(e.button%20==%200%20%7 C%7C%20e.button%20==%201))%20%7B%0A%20%20%20%20%20 %20chrome.send('navigateToUrl',%20%5B%0A%20%20%20% 20%20%20%20%20el.href,%0A%20%20%20%20%20%20%20%20e l.target,%0A%20%20%20%20%20%20%20%20e.button,%0A%2 0%20%20%20%20%20%20%20e.altKey,%0A%20%20%20%20%20% 20%20%20e.ctrlKey,%0A%20%20%20%20%20%20%20%20e.met aKey,%0A%20%20%20%20%20%20%20%20e.shiftKey%0A%20%2 0%20%20%20%20%5D);%0A%20%20%20%20%20%20e.preventDe fault();%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D);%0A% 0A/**%0A%20*%20Creates%20a%20new%20URL%20which%20is%2 0the%20old%20URL%20with%20a%20GET%20param%20of%20k ey=value.%0A%20*%20@param%20%7Bstring%7D%20url%20T he%20base%20URL.%20There%20is%20not%20sanity%20che cking%20on%20the%20URL%20so%0A%20*%20%20%20%20%20i t%20must%20be%20passed%20in%20a%20proper%20format. %0A%20*%20@param%20%7Bstring%7D%20key%20The%20key% 20of%20the%20param.%0A%20*%20@param%20%7Bstring%7D %20value%20The%20value%20of%20the%20param.%0A%20*% 20@return%20%7Bstring%7D%20The%20new%20URL.%0A%20*/%0Afunction%20appendParam(url,%20key,%20value)%20% 7B%0A%20%20var%20param%20=%20encodeURIComponent(ke y)%20+%20'='%20+%20encodeURIComponent(value);%0A%0 A%20%20if%20(url.indexOf('%3F')%20==%20-1)%0A%20%20%20%20return%20url%20+%20'%3F'%20+%20pa ram;%0A%20%20return%20url%20+%20'&'%20+%20param;%0A%7D%0A%0A/**%0A%20*%20Creates%20a%20CSS%20-webkit-image-set%20for%20a%20favicon%20request.%0A%20*%20@param %20%7Bstring%7D%20url%20The%20url%20for%20the%20fa vicon.%0A%20*%20@param%20%7Bnumber=%7D%20opt_size% 20Optional%20preferred%20size%20of%20the%20favicon .%0A%20*%20@param%20%7Bstring=%7D%20opt_type%20Opt ional%20type%20of%20favicon%20to%20request.%20Vali d%20values%0A%20*%20%20%20%20%20are%20'favicon'%20 and%20'touch-icon'.%20Default%20is%20'favicon'.%0A%20*%20@retur n%20%7Bstring%7D%20-webkit-image-set%20for%20the%20favicon.%0A%20*/%0Afunction%20getFaviconImageSet(url,%20opt_size,% 20opt_type)%20%7B%0A%20%20var%20size%20=%20opt_siz e%20%7C%7C%2016;%0A%20%20var%20type%20=%20opt_type %20%7C%7C%20'favicon';%0A%20%20return%20imageset(% 0A%20%20%20%20%20%20'chrome%3A//'%20+%20type%20+%20'/size/'%20+%20size%20+%20'@scalefactorx/'%20+%20url);%0A%7D%0A%0A/**%0A%20*%20Creates%20a%20new%20URL%20for%20a%20fa vicon%20request%20for%20the%20current%20device%20p ixel%20ratio.%0A%20*%20The%20URL%20must%20be%20upd ated%20when%20the%20user%20moves%20the%20browser%2 0to%20a%20screen%20with%20a%0A%20*%20different%20d evice%20pixel%20ratio.%20Use%20getFaviconImageSet( )%20for%20the%20updating%20to%0A%20*%20occur%20aut omatically.%0A%20*%20@param%20%7Bstring%7D%20url%2 0The%20url%20for%20the%20favicon.%0A%20*%20@param% 20%7Bnumber=%7D%20opt_size%20Optional%20preferred% 20size%20of%20the%20favicon.%0A%20*%20@param%20%7B string=%7D%20opt_type%20Optional%20type%20of%20fav icon%20to%20request.%20Valid%20values%0A%20*%20%20 %20%20%20are%20'favicon'%20and%20'touch-icon'.%20Default%20is%20'favicon'.%0A%20*%20@retur n%20%7Bstring%7D%20Updated%20URL%20for%20the%20fav icon.%0A%20*/%0Afunction%20getFaviconUrlForCurrentDevicePixelRa tio(url,%20opt_size,%20opt_type)%20%7B%0A%20%20var %20size%20=%20opt_size%20%7C%7C%2016;%0A%20%20var% 20type%20=%20opt_type%20%7C%7C%20'favicon';%0A%20% 20return%20'chrome%3A//'%20+%20type%20+%20'/size/'%20+%20size%20+%20'@'%20+%0A%20%20%20%20%20%20win dow.devicePixelRatio%20+%20'x/'%20+%20url;%0A%7D%0A%0A/**%0A%20*%20Creates%20an%20element%20of%20a%20spec ified%20type%20with%20a%20specified%20class%20name .%0A%20*%20@param%20%7Bstring%7D%20type%20The%20no de%20type.%0A%20*%20@param%20%7Bstring%7D%20classN ame%20The%20class%20name%20to%20use.%0A%20*%20@ret urn%20%7BElement%7D%20The%20created%20element.%0A% 20*/%0Afunction%20createElementWithClassName(type,%20c lassName)%20%7B%0A%20%20var%20elm%20=%20document.c reateElement(type);%0A%20%20elm.className%20=%20cl assName;%0A%20%20return%20elm;%0A%7D%0A%0A/**%0A%20*%20webkitTransitionEnd%20does%20not%20alw ays%20fire%20(e.g.%20when%20animation%20is%20abort ed%0A%20*%20or%20when%20no%20paint%20happens%20dur ing%20the%20animation).%20This%20function%20sets%2 0up%0A%20*%20a%20timer%20and%20emulate%20the%20eve nt%20if%20it%20is%20not%20fired%20when%20the%20tim er%20expires.%0A%20*%20@param%20%7B!HTMLElement%7D %20el%20The%20element%20to%20watch%20for%20webkitT ransitionEnd.%0A%20*%20@param%20%7Bnumber%7D%20tim eOut%20The%20maximum%20wait%20time%20in%20millisec onds%20for%20the%0A%20*%20%20%20%20%20webkitTransi tionEnd%20to%20happen.%0A%20*/%0Afunction%20ensureTransitionEndEvent(el,%20timeO ut)%20%7B%0A%20%20var%20fired%20=%20false;%0A%20%2 0el.addEventListener('webkitTransitionEnd',%20func tion%20f(e)%20%7B%0A%20%20%20%20el.removeEventList ener('webkitTransitionEnd',%20f);%0A%20%20%20%20fi red%20=%20true;%0A%20%20%7D);%0A%20%20window.setTi meout(function()%20%7B%0A%20%20%20%20if%20(!fired) %0A%20%20%20%20%20%20cr.dis*****SimpleEvent(el,%20 'webkitTransitionEnd',%20true);%0A%20%20%7D,%20tim eOut);%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollTop%20get ter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc%2 0The%20document%20node%20where%20information%20wil l%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20* %20@return%20%7Bnumber%7D%20The%20Y%20document%20s croll%20offset.%0A%20*/%0Afunction%20scrollTopForDocument(doc)%20%7B%0A%2 0%20return%20doc.documentElement.scrollTop%20%7C%7 C%20doc.body.scrollTop;%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollTop%20set ter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc%2 0The%20document%20node%20where%20information%20wil l%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20* %20@param%20%7Bnumber%7D%20value%20The%20target%20 Y%20scroll%20offset.%0A%20*/%0Afunction%20setScrollTopForDocument(doc,%20value )%20%7B%0A%20%20doc.documentElement.scrollTop%20=% 20doc.body.scrollTop%20=%20value;%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollLeft%20ge tter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc% 20The%20document%20node%20where%20information%20wi ll%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20 *%20@return%20%7Bnumber%7D%20The%20X%20document%20 scroll%20offset.%0A%20*/%0Afunction%20scrollLeftForDocument(doc)%20%7B%0A% 20%20return%20doc.documentElement.scrollLeft%20%7C %7C%20doc.body.scrollLeft;%0A%7D%0A%0A/**%0A%20*%20Alias%20for%20document.scrollLeft%20se tter.%0A%20*%20@param%20%7B!HTMLDocument%7D%20doc% 20The%20document%20node%20where%20information%20wi ll%20be%0A%20*%20%20%20%20%20queried%20from.%0A%20 *%20@param%20%7Bnumber%7D%20value%20The%20target%2 0X%20scroll%20offset.%0A%20*/%0Afunction%20setScrollLeftForDocument(doc,%20valu e)%20%7B%0A%20%20doc.documentElement.scrollLeft%20 =%20doc.body.scrollLeft%20=%20value;%0A%7D%0A%0A/**%0A%20*%20Replaces%20'&',%20'%3C',%20'%3E',%20'%22',%20and%20'''%20charac ters%20with%20their%20HTML%20encoding.%0A%20*%20@p aram%20%7Bstring%7D%20original%20The%20original%20 string.%0A%20*%20@return%20%7Bstring%7D%20The%20st ring%20with%20all%20the%20characters%20mentioned%2 0above%20replaced.%0A%20*/%0Afunction%20HTMLEscape(original)%20%7B%0A%20%20r eturn%20original.replace(/&/g,%20'&')%0A%20%20%20%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20.replace(/%3C/g,%20'<')%0A%20%20%20%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20.replace(/%3E/g,%20'>')%0A%20%20%20%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20.replace(/%22/g,%20'"')%0A%20%20%20%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20.replace(/'/g,%20'&%2339;');%0A%7D%0A%0A/**%0A%20*%20Shortens%20the%20provided%20string%20( if%20necessary)%20to%20a%20string%20of%20length%20 at%20most%0A%20*%20%7CmaxLength%7C.%0A%20*%20@para m%20%7Bstring%7D%20original%20The%20original%20str ing.%0A%20*%20@param%20%7Bnumber%7D%20maxLength%20 The%20maximum%20length%20allowed%20for%20the%20str ing.%0A%20*%20@return%20%7Bstring%7D%20The%20origi nal%20string%20if%20its%20length%20does%20not%20ex ceed%0A%20*%20%20%20%20%20%7CmaxLength%7C.%20Other wise%20the%20first%20%7CmaxLength%7C%20-%201%20characters%20with%20'...'%0A%20*%20%20%20%2 0%20appended.%0A%20*/%0Afunction%20elide(original,%20maxLength)%20%7B%0 A%20%20if%20(original.length%20%3C=%20maxLength)%0 A%20%20%20%20return%20original;%0A%20%20return%20o riginal.substring(0,%20maxLength%20-%201)%20+%20'%5Cu2026';%0A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Avar%20C APTIVEPORTAL_CMD_OPEN_LOGIN_PAGE%20=%20'openLoginP age';%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Afunctio n%20setupSSLDebuggingInfo()%20%7B%0A%20%20if%20(lo adTimeData.getString('type')%20!=%20'SSL')%0A%20%2 0%20%20return;%0A%0A%20%20//%20The%20titles%20are%20not%20internationalized%20 because%20this%20is%20debugging%20information%0A%2 0%20//%20for%20bug%20reports,%20help%20center%20posts,%2 0etc.%0A%20%20appendDebuggingField('Subject',%20lo adTimeData.getString('subject'));%0A%20%20appendDe buggingField('Issuer',%20loadTimeData.getString('i ssuer'));%0A%20%20appendDebuggingField('Expires%20 on',%20loadTimeData.getString('expirationDate'));% 0A%20%20appendDebuggingField('Current%20date',%20l oadTimeData.getString('currentDate'));%0A%20%20app endDebuggingField('PEM%20encoded%20chain',%20loadT imeData.getString('pem'));%0A%0A%20%20$('error-code').addEventListener('click',%20toggleDebugging Info);%0A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202015%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A'use%20 strict';%0A%0A//%20Other%20constants%20defined%20in%20security_int erstitial_page.h.%0Avar%20SB_BOX_CHECKED%20=%20'bo xchecked';%0Avar%20SB_DISPLAY_CHECK_BOX%20=%20'dis playcheckbox';%0A%0A//%20This%20sets%20up%20the%20Extended%20Safe%20Brow sing%20Reporting%20opt-in,%20either%20for%0A//%20reporting%20malware%20or%20invalid%20certificat e%20chains.%20Does%20nothing%20if%20the%0A//%20interstitial%20type%20is%20not%20SAFEBROWSING%2 0or%20SSL%20or%20CAPTIVE_PORTAL.%0Afunction%20setu pExtendedReportingCheckbox()%20%7B%0A%20%20var%20i nterstitialType%20=%20loadTimeData.getString('type ');%0A%20%20if%20(interstitialType%20!=%20'SAFEBRO WSING'%20&&%20interstitialType%20!=%20'SSL'%20&&%0A%20%20%20%20%20%20interstitialType%20!=%20'CAPT IVE_PORTAL')%20%7B%0A%20%20%20%20return;%0A%20%20% 7D%0A%0A%20%20if%20(!loadTimeData.getBoolean(SB_DI SPLAY_CHECK_BOX))%20%7B%0A%20%20%20%20return;%0A%2 0%20%7D%0A%0A%20%20$('opt-in-label').innerHTML%20=%20loadTimeData.getString('op tInLink');%0A%20%20$('opt-in-checkbox').checked%20=%20loadTimeData.getBoolean(S B_BOX_CHECKED);%0A%20%20$('extended-reporting-opt-in').classList.remove('hidden');%0A%0A%20%20var%20 className%20=%20interstitialType%20==%20'SAFEBROWS ING'%20%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20% 20%20%20%20%20%20'safe-browsing-opt-in'%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20%20'ssl-opt-in';%0A%20%20$('extended-reporting-opt-in').classList.add(className);%0A%0A%20%20$('body' ).classList.add('extended-reporting-has-checkbox');%0A%0A%20%20$('opt-in-checkbox').addEventListener('click',%20function()% 20%7B%0A%20%20%20%20sendCommand($('opt-in-checkbox').checked%20%3F%0A%20%20%20%20%20%20%20%2 0%20%20%20%20%20%20%20%20CMD_DO_REPORT%20%3A%0A%20 %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CMD_D ONT_REPORT);%0A%20%20%7D);%0A%7D%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202015%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0Avar%20m obileNav%20=%20false;%0A%0A/**%0A%20*%20For%20small%20screen%20mobile%20the%20 navigation%20buttons%20are%20moved%0A%20*%20below% 20the%20advanced%20text.%0A%20*/%0Afunction%20onResize()%20%7B%0A%20%20var%20helpO uterBox%20=%20document.querySelector('%23details') ;%0A%20%20var%20mainContent%20=%20document.querySe lector('%23main-content');%0A%20%20var%20mediaQuery%20=%20'(min-width%3A%20240px)%20and%20(max-width%3A%20420px)%20and%20'%20+%0A%20%20%20%20%20% 20'(max-height%3A%20736px)%20and%20(min-height%3A%20401px)%20and%20'%20+%0A%20%20%20%20%20 %20'(orientation%3A%20portrait),%20(max-width%3A%20736px)%20and%20'%20+%0A%20%20%20%20%20% 20'(max-height%3A%20420px)%20and%20(min-height%3A%20240px)%20and%20'%20+%0A%20%20%20%20%20 %20'(min-width%3A%20421px)%20and%20(orientation%3A%20landsc ape)';%0A%0A%20%20var%20detailsHidden%20=%20helpOu terBox.classList.contains('hidden');%0A%20%20var%2 0runnerContainer%20=%20document.querySelector('.ru nner-container');%0A%0A%20%20//%20Check%20for%20change%20in%20nav%20status.%0A%20 %20if%20(mobileNav%20!=%20window.matchMedia(mediaQ uery).matches)%20%7B%0A%20%20%20%20mobileNav%20=%2 0!mobileNav;%0A%0A%20%20%20%20//%20Handle%20showing%20the%20top%20content%20/%20details%20sections%20according%20to%20state.%0A %20%20%20%20if%20(mobileNav)%20%7B%0A%20%20%20%20% 20%20mainContent.classList.toggle('hidden',%20!det ailsHidden);%0A%20%20%20%20%20%20helpOuterBox.clas sList.toggle('hidden',%20detailsHidden);%0A%20%20% 20%20%20%20if%20(runnerContainer)%20%7B%0A%20%20%2 0%20%20%20%20%20runnerContainer.classList.toggle(' hidden',%20!detailsHidden);%0A%20%20%20%20%20%20%7 D%0A%20%20%20%20%7D%20else%20if%20(!detailsHidden) %20%7B%0A%20%20%20%20%20%20//%20Non%20mobile%20nav%20with%20visible%20details.% 0A%20%20%20%20%20%20mainContent.classList.remove(' hidden');%0A%20%20%20%20%20%20helpOuterBox.classLi st.remove('hidden');%0A%20%20%20%20%20%20if%20(run nerContainer)%20%7B%0A%20%20%20%20%20%20%20%20runn erContainer.classList.remove('hidden');%0A%20%20%2 0%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D% 0A%0Afunction%20setupMobileNav()%20%7B%0A%20%20win dow.addEventListener('resize',%20onResize);%0A%20% 20onResize();%0A%7D%0A%0Adocument.addEventListener ('DOMContentLoaded',%20setupMobileNav);%0A%3C/script%3E%0A%20%20%3Cscript%3E//%20Copyright%202014%20The%20Chromium%20Authors.%20 All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A//%20This%20is%20the%20shared%20code%20for%20the%20n ew%20(Chrome%2037)%20security%20interstitials.%20I t%20is%0A//%20used%20for%20both%20SSL%20interstitials%20and%2 0Safe%20Browsing%20interstitials.%0A%0Avar%20expan dedDetails%20=%20false;%0Avar%20keyPressState%20=% 200;%0A%0A//%20Should%20match%20SecurityInterstitialCommands%2 0in%20security_interstitial_page.h%0Avar%20CMD_DON T_PROCEED%20=%200;%0Avar%20CMD_PROCEED%20=%201;%0A//%20Ways%20for%20user%20to%20get%20more%20informati on%0Avar%20CMD_SHOW_MORE_SECTION%20=%202;%0Avar%20 CMD_OPEN_HELP_CENTER%20=%203;%0Avar%20CMD_OPEN_DIA GNOSTIC%20=%204;%0A//%20Primary%20button%20actions%0Avar%20CMD_RELOAD%2 0=%205;%0Avar%20CMD_OPEN_DATE_SETTINGS%20=%206;%0A var%20CMD_OPEN_LOGIN%20=%207;%0A//%20Safe%20Browsing%20Extended%20Reporting%0Avar%20 CMD_DO_REPORT%20=%208;%0Avar%20CMD_DONT_REPORT%20= %209;%0Avar%20CMD_OPEN_REPORTING_PRIVACY%20=%2010; %0A//%20Report%20a%20phishing%20error.%0Avar%20CMD_REPO RT_PHISHING_ERROR%20=%2011;%0A%0A/**%0A%20*%20A%20convenience%20method%20for%20sendi ng%20commands%20to%20the%20parent%20page.%0A%20*%2 0@param%20%7Bstring%7D%20cmd%20%20The%20command%20 to%20send.%0A%20*/%0Afunction%20sendCommand(cmd)%20%7B%0A%20%20windo w.domAutomationController.setAutomationId(1);%0A%2 0%20window.domAutomationController.send(cmd);%0A%7 D%0A%0A/**%0A%20*%20This%20allows%20errors%20to%20be%20ski ppped%20by%20typing%20%22danger%22%20into%20the%20 page.%0A%20*%20@param%20%7Bstring%7D%20e%20The%20k ey%20that%20was%20just%20pressed.%0A%20*/%0Afunction%20handleKeypress(e)%20%7B%0A%20%20var% 20BYPASS_SEQUENCE%20=%20'badidea';%0A%20%20if%20(B YPASS_SEQUENCE.charCodeAt(keyPressState)%20==%20e. keyCode)%20%7B%0A%20%20%20%20keyPressState++;%0A%2 0%20%20%20if%20(keyPressState%20==%20BYPASS_SEQUEN CE.length)%20%7B%0A%20%20%20%20%20%20sendCommand(C MD_PROCEED);%0A%20%20%20%20%20%20keyPressState%20= %200;%0A%20%20%20%20%7D%0A%20%20%7D%20else%20%7B%0 A%20%20%20%20keyPressState%20=%200;%0A%20%20%7D%0A %7D%0A%0A/**%0A%20*%20This%20appends%20a%20piece%20of%20debu gging%20information%20to%20the%20end%20of%20the%20 warning.%0A%20*%20When%20complete,%20the%20caller% 20must%20also%20make%20the%20debugging%20div%0A%20 *%20(error-debugging-info)%20visible.%0A%20*%20@param%20%7Bstring%7D%20 title%20%20The%20name%20of%20this%20debugging%20fi eld.%0A%20*%20@param%20%7Bstring%7D%20value%20%20T he%20value%20of%20the%20debugging%20field.%0A%20*/%0Afunction%20appendDebuggingField(title,%20value) %20%7B%0A%20%20//%20The%20values%20input%20here%20are%20not%20trust ed.%20Never%20use%20innerHTML%20on%20these%0A%20%2 0//%20values!%0A%20%20var%20spanTitle%20=%20document. createElement('span');%0A%20%20spanTitle.classList .add('debugging-title');%0A%20%20spanTitle.innerText%20=%20title%2 0+%20'%3A%20';%0A%0A%20%20var%20spanValue%20=%20do cument.createElement('span');%0A%20%20spanValue.cl assList.add('debugging-value');%0A%20%20spanValue.innerText%20=%20value;% 0A%0A%20%20var%20pElem%20=%20document.createElemen t('p');%0A%20%20pElem.classList.add('debugging-content');%0A%20%20pElem.appendChild(spanTitle);%0 A%20%20pElem.appendChild(spanValue);%0A%20%20$('er ror-debugging-info').appendChild(pElem);%0A%7D%0A%0Afunction%20t oggleDebuggingInfo()%20%7B%0A%20%20$('error-debugging-info').classList.toggle('hidden');%0A%7D%0A%0Afunc tion%20setupEvents()%20%7B%0A%20%20var%20overridab le%20=%20loadTimeData.getBoolean('overridable');%0 A%20%20var%20interstitialType%20=%20loadTimeData.g etString('type');%0A%20%20var%20ssl%20=%20intersti tialType%20==%20'SSL';%0A%20%20var%20captivePortal %20=%20interstitialType%20==%20'CAPTIVE_PORTAL';%0 A%20%20var%20badClock%20=%20ssl%20&&%20loadTimeData.getBoolean('bad_clock');%0A%20%20v ar%20hidePrimaryButton%20=%20badClock%20&&%20loadTimeData.getBoolean(%0A%20%20%20%20%20%20'h ide_primary_button');%0A%0A%20%20if%20(ssl)%20%7B% 0A%20%20%20%20$('body').classList.add(badClock%20% 3F%20'bad-clock'%20%3A%20'ssl');%0A%20%20%20%20$('error-code').textContent%20=%20loadTimeData.getString('e rrorCode');%0A%20%20%20%20$('error-code').classList.remove('hidden');%0A%20%20%7D%20e lse%20if%20(captivePortal)%20%7B%0A%20%20%20%20$(' body').classList.add('captive-portal');%0A%20%20%7D%20else%20%7B%0A%20%20%20%20$ ('body').classList.add('safe-browsing');%0A%20%20%7D%0A%0A%20%20if%20(hidePrima ryButton)%20%7B%0A%20%20%20%20$('primary-button').classList.add('hidden');%0A%20%20%7D%20el se%20%7B%0A%20%20%20%20$('primary-button').addEventListener('click',%20function()%20 %7B%0A%20%20%20%20%20%20switch%20(interstitialType )%20%7B%0A%20%20%20%20%20%20%20%20case%20'CAPTIVE_ PORTAL'%3A%0A%20%20%20%20%20%20%20%20%20%20sendCom mand(CMD_OPEN_LOGIN);%0A%20%20%20%20%20%20%20%20%2 0%20break;%0A%0A%20%20%20%20%20%20%20%20case%20'SS L'%3A%0A%20%20%20%20%20%20%20%20%20%20if%20(badClo ck)%0A%20%20%20%20%20%20%20%20%20%20%20%20sendComm and(CMD_OPEN_DATE_SETTINGS);%0A%20%20%20%20%20%20% 20%20%20%20else%20if%20(overridable)%0A%20%20%20%2 0%20%20%20%20%20%20%20%20sendCommand(CMD_DONT_PROC EED);%0A%20%20%20%20%20%20%20%20%20%20else%0A%20%2 0%20%20%20%20%20%20%20%20%20%20sendCommand(CMD_REL OAD);%0A%20%20%20%20%20%20%20%20%20%20break;%0A%0A %20%20%20%20%20%20%20%20case%20'SAFEBROWSING'%3A%0 A%20%20%20%20%20%20%20%20%20%20sendCommand(CMD_DON T_PROCEED);%0A%20%20%20%20%20%20%20%20%20%20break; %0A%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20% 20%20%20%20%20%20%20%20throw%20'Invalid%20intersti tial%20type';%0A%20%20%20%20%20%20%7D%0A%20%20%20% 20%7D);%0A%20%20%7D%0A%0A%20%20if%20(overridable)% 20%7B%0A%20%20%20%20//%20Captive%20portal%20page%20isn't%20overridable.% 0A%20%20%20%20$('proceed-link').addEventListener('click',%20function(event) %20%7B%0A%20%20%20%20%20%20sendCommand(CMD_PROCEED );%0A%20%20%20%20%7D);%0A%20%20%7D%20else%20if%20( !ssl)%20%7B%0A%20%20%20%20$('final-paragraph').classList.add('hidden');%0A%20%20%7D%0 A%0A%20%20if%20(ssl%20&&%20overridable)%20%7B%0A%20%20%20%20$('proceed-link').classList.add('small-link');%0A%20%20%7D%20else%20if%20($('help-link'))%20%7B%0A%20%20%20%20//%20Overridable%20SSL%20page%20doesn't%20have%20thi s%20link.%0A%20%20%20%20$('help-link').addEventListener('click',%20function(event) %20%7B%0A%20%20%20%20%20%20if%20(ssl%20%7C%7C%20lo adTimeData.getBoolean('phishing'))%0A%20%20%20%20% 20%20%20%20sendCommand(CMD_OPEN_HELP_CENTER);%0A%2 0%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20sen dCommand(CMD_OPEN_DIAGNOSTIC);%0A%20%20%20%20%7D); %0A%20%20%7D%0A%0A%20%20if%20(captivePortal)%20%7B %0A%20%20%20%20//%20Captive%20portal%20page%20doesn't%20have%20deta ils%20button.%0A%20%20%20%20$('details-button').classList.add('hidden');%0A%20%20%7D%20el se%20%7B%0A%20%20%20%20$('details-button').addEventListener('click',%20function(even t)%20%7B%0A%20%20%20%20%20%20var%20hiddenDetails%2 0=%20$('details').classList.toggle('hidden');%0A%0 A%20%20%20%20%20%20if%20(mobileNav)%20%7B%0A%20%20 %20%20%20%20%20%20//%20Details%20appear%20over%20the%20main%20content% 20on%20small%20screens.%0A%20%20%20%20%20%20%20%20 $('main-content').classList.toggle('hidden',%20!hiddenDeta ils);%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%2 0%20%20%20%20%20%20$('main-content').classList.remove('hidden');%0A%20%20%20% 20%20%20%7D%0A%0A%20%20%20%20%20%20$('details-button').innerText%20=%20hiddenDetails%20%3F%0A%20 %20%20%20%20%20%20%20%20%20loadTimeData.getString( 'openDetails')%20%3A%0A%20%20%20%20%20%20%20%20%20 %20loadTimeData.getString('closeDetails');%0A%20%2 0%20%20%20%20if%20(!expandedDetails)%20%7B%0A%20%2 0%20%20%20%20%20%20//%20Record%20a%20histogram%20entry%20only%20the%20f irst%20time%20that%20details%20is%20opened.%0A%20% 20%20%20%20%20%20%20sendCommand(CMD_SHOW_MORE_SECT ION);%0A%20%20%20%20%20%20%20%20expandedDetails%20 =%20true;%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7 D);%0A%20%20%7D%0A%0A%20%20//%20TODO(felt)%3A%20This%20should%20be%20simplified %20once%20the%20Finch%20trial%20is%20no%20longer%0 A%20%20//%20needed.%0A%20%20if%20(interstitialType%20==%20' SAFEBROWSING'%20&&%0A%20%20%20%20%20%20loadTimeData.getBoolean('phis hing')%20&&%20$('report-error-link'))%20%7B%0A%20%20%20%20$('report-error-link').addEventListener('click',%20function(event) %20%7B%0A%20%20%20%20%20%20sendCommand(CMD_REPORT_ PHISHING_ERROR);%0A%20%20%20%20%7D);%0A%20%20%7D%0 A%0A%20%20preventDefaultOnPoundLinkClicks();%0A%20 %20setupExtendedReportingCheckbox();%0A%20%20setup SSLDebuggingInfo();%0A%20%20document.addEventListe ner('keypress',%20handleKeypress);%0A%7D%0A%0Adocu ment.addEventListener('DOMContentLoaded',%20setupE vents);%0A%3C/script%3E%0A%3C/head%3E%0A%3Cbody%20id=%22body%22%3E%0A%20%20%3Cdi v%20class=%22interstitial-wrapper%22%3E%0A%20%20%20%20%3Cdiv%20id=%22main-content%22%3E%0A%20%20%20%20%20%20%3Cdiv%20class=% 22icon%22%20id=%22icon%22%3E%3C/div%3E%0A%20%20%20%20%20%20%3Cdiv%20id=%22main-message%22%3E%0A%20%20%20%20%20%20%20%20%3Ch1%20i1 8n-content=%22heading%22%3E%3C/h1%3E%0A%20%20%20%20%20%20%20%20%3Cp%20i18n-values=%22.innerHTML%3AprimaryParagraph%22%3E%3C/p%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20id=%22debu gging%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv %20id=%22error-code%22%20class=%22error-code%22%3E%3C/div%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id =%22error-debugging-info%22%20class=%22hidden%22%3E%3C/div%3E%0A%20%20%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%20%20%3Cdiv%20id=%22extended-reporting-opt-in%22%20class=%22hidden%22%3E%0A%20%20%20%20%20%20 %20%20%3Clabel%3E%0A%20%20%20%20%20%20%20%20%20%20 %3Cinput%20type=%22checkbox%22%20id=%22opt-in-checkbox%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3C span%20class=%22checkbox%22%3E%3C/span%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cspan%20 id=%22opt-in-label%22%3E%3C/span%3E%0A%20%20%20%20%20%20%20%20%3C/label%3E%0A%20%20%20%20%20%20%3C/div%3E%0A%20%20%20%20%3C/div%3E%0A%20%20%20%20%3Cdiv%20class=%22nav-wrapper%22%3E%0A%20%20%20%20%20%20%3Cbutton%20i18n-content=%22primaryButtonText%22%20id=%22primary-button%22%3E%3C/button%3E%0A%20%20%20%20%20%20%3Cbutton%20id=%22de tails-button%22%20class=%22small-link%22%0A%20%20%20%20%20%20%20%20%20%20i18n-content=%22openDetails%22%3E%3C/button%3E%0A%20%20%20%20%3C/div%3E%0A%20%20%20%20%3Cdiv%20id=%22details%22%20c lass=%22hidden%22%3E%0A%20%20%20%20%20%20%3Cp%20i1 8n-values=%22.innerHTML%3AexplanationParagraph%22%3E% 3C/p%3E%0A%20%20%20%20%20%20%3Cp%20i18n-values=%22.innerHTML%3AfinalParagraph%22%20id=%22f inal-paragraph%22%3E%3C/p%3E%0A%20%20%20%20%3C/div%3E%0A%20%20%3C/div%3E%0A%3C/body%3E%0A%3C/html%3E%0A%3Cstyle%3E/*%20Copyright%202014%20The%20Chromium%20Authors.%2 0All%20rights%20reserved.%0A%20*%20Use%20of%20this %20source%20code%20is%20governed%20by%20a%20BSD-style%20license%20that%20can%20be%0A%20*%20found%2 0in%20the%20LICENSE%20file.%20*/%0A%0A/*%20This%20file%20is%20dynamically%20processed%20b y%20a%20C++%20data%20source%20handler%20to%20fill% 20in%0A%20*%20some%20per-platform/locale%20styles%20that%20dramatically%20alter%20th e%20page.%20This%20is%0A%20*%20done%20to%20reduce% 20flicker,%20as%20JS%20may%20not%20run%20before%20 the%20page%20is%20rendered.%0A%20*%0A%20*%20There% 20are%20two%20ways%20to%20include%20this%20stylesh eet%3A%0A%20*%201.%20via%20its%20chrome%3A//resources/%20URL%20in%20HTML,%20i.e.%3A%0A%20*%0A%20*%20%20% 20%3Clink%20rel=%22stylesheet%22%20href=%22chrome% 3A//resources/css/text_defaults.css%22%3E%0A%20*%0A%20*%202.%20via%2 0the%20webui%3A%3AAppendWebUICSSTextDefaults()%20m ethod%20to%20directly%20append%20it%0A%20*%20to%20 an%20HTML%20string.%0A%20*%20Otherwise%20its%20$pl aceholders%20won't%20be%20expanded.%20*/%0A%0Ahtml%20%7B%0A%20%20direction%3A%20ltr;%0A%7D %0A%0Abody%20%7B%0A%20%20font-family%3A%20'Helvetica%20Neue',%20'Lucida%20Grande ',%20sans-serif;%0A%20%20font-size%3A%2075%25;%0A%7D%0A%0Abutton%20%7B%0A%20%20f ont-family%3A%20'Helvetica%20Neue',%20'Lucida%20Grande ',%20sans-serif;%0A%7D%0A%3C/style%3E%3Cscript%3E//%20Copyright%20(c)%202012%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A/**%0A%20*%20@fileoverview%20This%20file%20defines% 20a%20singleton%20which%20provides%20access%20to%2 0all%20data%0A%20*%20that%20is%20available%20as%20 soon%20as%20the%20page's%20resources%20are%20loade d%20(before%20DOM%0A%20*%20content%20has%20finishe d%20loading).%20This%20data%20includes%20both%20lo calized%20strings%20and%0A%20*%20any%20data%20that %20is%20important%20to%20have%20ready%20from%20a%2 0very%20early%20stage%20(e.g.%20things%0A%20*%20th at%20must%20be%20displayed%20right%20away).%0A%20*/%0A%0Avar%20loadTimeData;%0A%0A//%20Expose%20this%20type%20globally%20as%20a%20temp orary%20work%20around%20until%0A//%20https%3A//github.com/google/closure-compiler/issues/544%20is%20fixed.%0A/**%20@constructor%20*/%0Afunction%20LoadTimeData()%20%7B%7D%0A%0A(functi on()%20%7B%0A%20%20'use%20strict';%0A%0A%20%20Load TimeData.prototype%20=%20%7B%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Sets%20the%20backing%20obj ect.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note% 20that%20there%20is%20no%20getter%20for%20%7Cdata_ %7C%20to%20discourage%20abuse%20of%20the%20form%3A %0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20 %20var%20value%20=%20loadTimeData.data()%5B'key'%5 D;%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20@param% 20%7BObject%7D%20value%20The%20de-serialized%20page%20data.%0A%20%20%20%20%20*/%0A%20%20%20%20set%20data(value)%20%7B%0A%20%20%20 %20%20%20expect(!this.data_,%20'Re-setting%20data.');%0A%20%20%20%20%20%20this.data_% 20=%20value;%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Returns%20a%20JsEvalContex t%20for%20%7Cdata_%7C.%0A%20%20%20%20%20*%20@retur ns%20%7BJsEvalContext%7D%0A%20%20%20%20%20*/%0A%20%20%20%20createJsEvalContext%3A%20function() %20%7B%0A%20%20%20%20%20%20return%20new%20JsEvalCo ntext(this.data_);%0A%20%20%20%20%7D,%0A%0A%20%20% 20%20/**%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20id %20An%20ID%20of%20a%20value%20that%20might%20exist .%0A%20%20%20%20%20*%20@return%20%7Bboolean%7D%20T rue%20if%20%7Cid%7C%20is%20a%20key%20in%20the%20di ctionary.%0A%20%20%20%20%20*/%0A%20%20%20%20valueExists%3A%20function(id)%20%7B %0A%20%20%20%20%20%20return%20id%20in%20this.data_ ;%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Fetches%20a%20value,%20exp ecting%20that%20it%20exists.%0A%20%20%20%20%20*%20 @param%20%7Bstring%7D%20id%20The%20key%20that%20id entifies%20the%20desired%20value.%0A%20%20%20%20%2 0*%20@return%20%7B*%7D%20The%20corresponding%20val ue.%0A%20%20%20%20%20*/%0A%20%20%20%20getValue%3A%20function(id)%20%7B%0A %20%20%20%20%20%20expect(this.data_,%20'No%20data. %20Did%20you%20remember%20to%20include%20strings.j s%3F');%0A%20%20%20%20%20%20var%20value%20=%20this .data_%5Bid%5D;%0A%20%20%20%20%20%20expect(typeof% 20value%20!=%20'undefined',%20'Could%20not%20find% 20value%20for%20'%20+%20id);%0A%20%20%20%20%20%20r eturn%20value;%0A%20%20%20%20%7D,%0A%0A%20%20%20%2 0/**%0A%20%20%20%20%20*%20As%20above,%20but%20also%2 0makes%20sure%20that%20the%20value%20is%20a%20stri ng.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20i d%20The%20key%20that%20identifies%20the%20desired% 20string.%0A%20%20%20%20%20*%20@return%20%7Bstring %7D%20The%20corresponding%20string%20value.%0A%20% 20%20%20%20*/%0A%20%20%20%20getString%3A%20function(id)%20%7B%0 A%20%20%20%20%20%20var%20value%20=%20this.getValue (id);%0A%20%20%20%20%20%20expectIsType(id,%20value ,%20'string');%0A%20%20%20%20%20%20return%20/**%20@type%20%7Bstring%7D%20*/%20(value);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Returns%20a%20formatted%20 localized%20string%20where%20$1%20to%20$9%20are%20 replaced%20by%20the%0A%20%20%20%20%20*%20second%20 to%20the%20tenth%20argument.%0A%20%20%20%20%20*%20 @param%20%7Bstring%7D%20id%20The%20ID%20of%20the%2 0string%20we%20want.%0A%20%20%20%20%20*%20@param%2 0%7B...string%7D%20var_args%20The%20extra%20values %20to%20include%20in%20the%20formatted%0A%20%20%20 %20%20*%20%20%20%20%20output.%0A%20%20%20%20%20*%2 0@return%20%7Bstring%7D%20The%20formatted%20string .%0A%20%20%20%20%20*/%0A%20%20%20%20getStringF%3A%20function(id,%20var_ args)%20%7B%0A%20%20%20%20%20%20var%20value%20=%20 this.getString(id);%0A%20%20%20%20%20%20if%20(!val ue)%0A%20%20%20%20%20%20%20%20return%20'';%0A%0A%2 0%20%20%20%20%20var%20varArgs%20=%20arguments;%0A% 20%20%20%20%20%20return%20value.replace(/%5C$%5B$1-9%5D/g,%20function(m)%20%7B%0A%20%20%20%20%20%20%20%20r eturn%20m%20==%20'$$'%20%3F%20'$'%20%3A%20varArgs% 5Bm%5B1%5D%5D;%0A%20%20%20%20%20%20%7D);%0A%20%20% 20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20As%20above,%20but%20also%2 0makes%20sure%20that%20the%20value%20is%20a%20bool ean.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%20 id%20The%20key%20that%20identifies%20the%20desired %20boolean.%0A%20%20%20%20%20*%20@return%20%7Bbool ean%7D%20The%20corresponding%20boolean%20value.%0A %20%20%20%20%20*/%0A%20%20%20%20getBoolean%3A%20function(id)%20%7B% 0A%20%20%20%20%20%20var%20value%20=%20this.getValu e(id);%0A%20%20%20%20%20%20expectIsType(id,%20valu e,%20'boolean');%0A%20%20%20%20%20%20return%20/**%20@type%20%7Bboolean%7D%20*/%20(value);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20As%20above,%20but%20also%2 0makes%20sure%20that%20the%20value%20is%20an%20int eger.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D%2 0id%20The%20key%20that%20identifies%20the%20desire d%20number.%0A%20%20%20%20%20*%20@return%20%7Bnumb er%7D%20The%20corresponding%20number%20value.%0A%2 0%20%20%20%20*/%0A%20%20%20%20getInteger%3A%20function(id)%20%7B% 0A%20%20%20%20%20%20var%20value%20=%20this.getValu e(id);%0A%20%20%20%20%20%20expectIsType(id,%20valu e,%20'number');%0A%20%20%20%20%20%20expect(value%2 0==%20Math.floor(value),%20'Number%20isn%5C't%20in teger%3A%20'%20+%20value);%0A%20%20%20%20%20%20ret urn%20/**%20@type%20%7Bnumber%7D%20*/%20(value);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20Override%20values%20in%20l oadTimeData%20with%20the%20values%20found%20in%20% 7Creplacements%7C.%0A%20%20%20%20%20*%20@param%20% 7BObject%7D%20replacements%20The%20dictionary%20ob ject%20of%20keys%20to%20replace.%0A%20%20%20%20%20 */%0A%20%20%20%20overrideValues%3A%20function(replac ements)%20%7B%0A%20%20%20%20%20%20expect(typeof%20 replacements%20==%20'object',%0A%20%20%20%20%20%20 %20%20%20%20%20%20%20'Replacements%20must%20be%20a %20dictionary%20object.');%0A%20%20%20%20%20%20for %20(var%20key%20in%20replacements)%20%7B%0A%20%20% 20%20%20%20%20%20this.data_%5Bkey%5D%20=%20replace ments%5Bkey%5D;%0A%20%20%20%20%20%20%7D%0A%20%20%2 0%20%7D%0A%20%20%7D;%0A%0A%20%20/**%0A%20%20%20*%20Checks%20condition,%20displays%2 0error%20message%20if%20expectation%20fails.%0A%20 %20%20*%20@param%20%7B*%7D%20condition%20The%20con dition%20to%20check%20for%20truthiness.%0A%20%20%2 0*%20@param%20%7Bstring%7D%20message%20The%20messa ge%20to%20display%20if%20the%20check%20fails.%0A%2 0%20%20*/%0A%20%20function%20expect(condition,%20message)%2 0%7B%0A%20%20%20%20if%20(!condition)%20%7B%0A%20%2 0%20%20%20%20console.error('Unexpected%20condition %20on%20'%20+%20document.location.href%20+%20'%3A% 20'%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20% 20%20%20%20%20%20%20message);%0A%20%20%20%20%7D%0A %20%20%7D%0A%0A%20%20/**%0A%20%20%20*%20Checks%20that%20the%20given%20va lue%20has%20the%20given%20type.%0A%20%20%20*%20@pa ram%20%7Bstring%7D%20id%20The%20id%20of%20the%20va lue%20(only%20used%20for%20error%20message).%0A%20 %20%20*%20@param%20%7B*%7D%20value%20The%20value%2 0to%20check%20the%20type%20on.%0A%20%20%20*%20@par am%20%7Bstring%7D%20type%20The%20type%20we%20expec t%20%7Cvalue%7C%20to%20be.%0A%20%20%20*/%0A%20%20function%20expectIsType(id,%20value,%20ty pe)%20%7B%0A%20%20%20%20expect(typeof%20value%20== %20type,%20'%5B'%20+%20value%20+%20'%5D%20('%20+%2 0id%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20% 20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20 %20%20%20')%20is%20not%20a%20'%20+%20type);%0A%20% 20%7D%0A%0A%20%20expect(!loadTimeData,%20'should%2 0only%20include%20this%20file%20once');%0A%20%20lo adTimeData%20=%20new%20LoadTimeData;%0A%7D)();%0A% 3C/script%3E%3Cscript%3EloadTimeData.data%20=%20%7B%2 2boxchecked%22%3Afalse,%22closeDetails%22%3A%22Hid e%20details%22,%22displaycheckbox%22%3Atrue,%22exp lanationParagraph%22%3A%22Google%20Safe%20Browsing %20recently%20detected%20phishing%20on%20www.ckfu. org.%20%5Cu003Ca%20href=%5C%22%23%5C%22%20id=%5C%2 2help-link%5C%22%3EPhishing%20sites%5Cu003C/a%3E%20pretend%20to%20be%20other%20websites%20to%2 0trick%20you.%22,%22finalParagraph%22%3A%22You%20c an%20%5Cu003Ca%20href=%5C%22%23%5C%22%20id=%5C%22r eport-error-link%5C%22%3Ereport%20a%20detection%20problem%5Cu0 03C/a%3E%20or,%20if%20you%20understand%20the%20risks%2 0to%20your%20security,%20%5Cu003Ca%20href=%5C%22%2 3%5C%22%20id=%5C%22proceed-link%5C%22%3Evisit%20this%20unsafe%20site%5Cu003C/a%3E.%22,%22fontfamily%22%3A%22'Helvetica%20Neue', %20'Lucida%20Grande',%20sans-serif%22,%22fontsize%22%3A%2275%25%22,%22heading%2 2%3A%22Deceptive%20site%20ahead%22,%22language%22% 3A%22en%22,%22openDetails%22%3A%22Details%22,%22op tInLink%22%3A%22Automatically%20report%20details%2 0of%20possible%20security%20incidents%20to%20Googl e.%20%5Cu003Ca%20id=%5C%22privacy-link%5C%22%20href=%5C%22%5C%22%20onclick=%5C%22sen dCommand(10);%20return%20false;%5C%22%20onmousedow n=%5C%22return%20false;%5C%22%3EPrivacy%20policy%5 Cu003C/a%3E%22,%22overridable%22%3Atrue,%22phishing%22%3A true,%22primaryButtonText%22%3A%22Back%20to%20safe ty%22,%22primaryParagraph%22%3A%22Attackers%20on%2 0%5Cu003Cstrong%3Ewww.ckfu.org%5Cu003C/strong%3E%20may%20trick%20you%20into%20doing%20som ething%20dangerous%20like%20installing%20software% 20or%20revealing%20your%20personal%20information%2 0(for%20example,%20passwords,%20phone%20numbers,%2 0or%20credit%20cards).%22,%22tabTitle%22%3A%22Secu rity%20error%22,%22textdirection%22%3A%22ltr%22,%2 2type%22%3A%22SAFEBROWSING%22%7D;%3C/script%3E%3Cscript%3E//%20Copyright%20(c)%202012%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A//%20//%20Copyright%20(c)%202012%20The%20Chromium%20Autho rs.%20All%20rights%20reserved.%0A//%20Use%20of%20this%20source%20code%20is%20governed %20by%20a%20BSD-style%20license%20that%20can%20be%0A//%20found%20in%20the%20LICENSE%20file.%0A%0A/**%20@typedef%20%7BDocument%7CDocumentFragment%7CE lement%7D%20*/%0Avar%20ProcessingRoot;%0A%0A/**%0A%20*%20@fileoverview%20This%20is%20a%20simple %20template%20engine%20inspired%20by%20JsTemplates %0A%20*%20optimized%20for%20i18n.%0A%20*%0A%20*%20 It%20currently%20supports%20three%20handlers%3A%0A %20*%0A%20*%20%20%20*%20i18n-content%20which%20sets%20the%20textContent%20of%20 the%20element.%0A%20*%0A%20*%20%20%20%20%20%3Cspan %20i18n-content=%22myContent%22%3E%3C/span%3E%0A%20*%0A%20*%20%20%20*%20i18n-options%20which%20generates%20%3Coption%3E%20eleme nts%20for%20a%20%3Cselect%3E.%0A%20*%0A%20*%20%20% 20%20%20%3Cselect%20i18n-options=%22myOptionList%22%3E%3C/select%3E%0A%20*%0A%20*%20%20%20*%20i18n-values%20is%20a%20list%20of%20attribute-value%20or%20property-value%20pairs.%0A%20*%20%20%20%20%20Properties%20a re%20prefixed%20with%20a%20'.'%20and%20can%20conta in%20nested%20properties.%0A%20*%0A%20*%20%20%20%2 0%20%3Cspan%20i18n-values=%22title%3AmyTitle;.style.fontSize%3AfontSi ze%22%3E%3C/span%3E%0A%20*%0A%20*%20This%20file%20is%20a%20cop y%20of%20i18n_template.js,%20with%20minor%20tweaks %20to%20support%20using%0A%20*%20load_time_data.js .%20It%20should%20replace%20i18n_template.js%20eve ntually.%0A%20*/%0A%0Avar%20i18nTemplate%20=%20(function()%20%7B%0 A%20%20/**%0A%20%20%20*%20This%20provides%20the%20handlers %20for%20the%20templating%20engine.%20The%20key%20 is%20used%20as%0A%20%20%20*%20the%20attribute%20na me%20and%20the%20value%20is%20the%20function%20tha t%20gets%20called%20for%20every%0A%20%20%20*%20sin gle%20node%20that%20has%20this%20attribute.%0A%20% 20%20*%20@type%20%7B!Object%7D%0A%20%20%20*/%0A%20%20var%20handlers%20=%20%7B%0A%20%20%20%20/**%0A%20%20%20%20%20*%20This%20handler%20sets%20th e%20textContent%20of%20the%20element.%0A%20%20%20% 20%20*%20@param%20%7B!HTMLElement%7D%20element%20T he%20node%20to%20modify.%0A%20%20%20%20%20*%20@par am%20%7Bstring%7D%20key%20The%20name%20of%20the%20 value%20in%20%7Cdata%7C.%0A%20%20%20%20%20*%20@par am%20%7B!LoadTimeData%7D%20data%20The%20data%20sou rce%20to%20draw%20from.%0A%20%20%20%20%20*%20@para m%20%7B!Array%3CProcessingRoot%3E%7D%20visited%0A% 20%20%20%20%20*/%0A%20%20%20%20'i18n-content'%3A%20function(element,%20key,%20data,%20v isited)%20%7B%0A%20%20%20%20%20%20element.textCont ent%20=%20data.getString(key);%0A%20%20%20%20%7D,% 0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20This%20handler%20adds%20op tions%20to%20a%20%3Cselect%3E%20element.%0A%20%20% 20%20%20*%20@param%20%7B!HTMLElement%7D%20select%2 0The%20node%20to%20modify.%0A%20%20%20%20%20*%20@p aram%20%7Bstring%7D%20key%20The%20name%20of%20the% 20value%20in%20%7Cdata%7C.%20It%20should%0A%20%20% 20%20%20*%20%20%20%20%20identify%20an%20array%20of %20values%20to%20initialize%20an%20%3Coption%3E.%2 0Each%20value,%0A%20%20%20%20%20*%20%20%20%20%20if %20a%20pair,%20represents%20%5Bcontent,%20value%5D .%20Otherwise,%20it%20should%20be%20a%0A%20%20%20% 20%20*%20%20%20%20%20content%20string%20with%20no% 20value.%0A%20%20%20%20%20*%20@param%20%7B!LoadTim eData%7D%20data%20The%20data%20source%20to%20draw% 20from.%0A%20%20%20%20%20*%20@param%20%7B!Array%3C ProcessingRoot%3E%7D%20visited%0A%20%20%20%20%20*/%0A%20%20%20%20'i18n-options'%3A%20function(select,%20key,%20data,%20vi sited)%20%7B%0A%20%20%20%20%20%20var%20options%20= %20data.getValue(key);%0A%20%20%20%20%20%20options .forEach(function(optionData)%20%7B%0A%20%20%20%20 %20%20%20%20var%20option%20=%20typeof%20optionData %20==%20'string'%20%3F%0A%20%20%20%20%20%20%20%20% 20%20%20%20new%20Option(optionData)%20%3A%0A%20%20 %20%20%20%20%20%20%20%20%20%20new%20Option(optionD ata%5B1%5D,%20optionData%5B0%5D);%0A%20%20%20%20%2 0%20%20%20select.appendChild(option);%0A%20%20%20% 20%20%20%7D);%0A%20%20%20%20%7D,%0A%0A%20%20%20%20/**%0A%20%20%20%20%20*%20This%20is%20used%20to%20se t%20HTML%20attributes%20and%20DOM%20properties.%20 The%20syntax%20is%3A%0A%20%20%20%20%20*%20%20%20at tributename%3Akey;%0A%20%20%20%20%20*%20%20%20.dom Property%3Akey;%0A%20%20%20%20%20*%20%20%20.nested .dom.property%3Akey%0A%20%20%20%20%20*%20@param%20 %7B!HTMLElement%7D%20element%20The%20node%20to%20m odify.%0A%20%20%20%20%20*%20@param%20%7Bstring%7D% 20attributeAndKeys%20The%20path%20of%20the%20attri bute%20to%20modify%0A%20%20%20%20%20*%20%20%20%20% 20followed%20by%20a%20colon,%20and%20the%20name%20 of%20the%20value%20in%20%7Cdata%7C.%0A%20%20%20%20 %20*%20%20%20%20%20Multiple%20attribute/key%20pairs%20may%20be%20separated%20by%20semicolo ns.%0A%20%20%20%20%20*%20@param%20%7B!LoadTimeData %7D%20data%20The%20data%20source%20to%20draw%20fro m.%0A%20%20%20%20%20*%20@param%20%7B!Array%3CProce ssingRoot%3E%7D%20visited%0A%20%20%20%20%20*/%0A%20%20%20%20'i18n-values'%3A%20function(element,%20attributeAndKeys, %20data,%20visited)%20%7B%0A%20%20%20%20%20%20var% 20parts%20=%20attributeAndKeys.replace(/%5Cs/g,%20'').split(/;/);%0A%20%20%20%20%20%20parts.forEach(function(part )%20%7B%0A%20%20%20%20%20%20%20%20if%20(!part)%0A% 20%20%20%20%20%20%20%20%20%20return;%0A%0A%20%20%2 0%20%20%20%20%20var%20attributeAndKeyPair%20=%20pa rt.match(/%5E(%5B%5E%3A%5D+)%3A(.+)$/);%0A%20%20%20%20%20%20%20%20if%20(!attributeAndKe yPair)%0A%20%20%20%20%20%20%20%20%20%20throw%20new %20Error('malformed%20i18n-values%3A%20'%20+%20attributeAndKeys);%0A%0A%20%20 %20%20%20%20%20%20var%20propName%20=%20attributeAn dKeyPair%5B1%5D;%0A%20%20%20%20%20%20%20%20var%20p ropExpr%20=%20attributeAndKeyPair%5B2%5D;%0A%0A%20 %20%20%20%20%20%20%20var%20value%20=%20data.getVal ue(propExpr);%0A%0A%20%20%20%20%20%20%20%20//%20Allow%20a%20property%20of%20the%20form%20'.foo. bar'%20to%20assign%20a%20value%20into%0A%20%20%20% 20%20%20%20%20//%20element.foo.bar.%0A%20%20%20%20%20%20%20%20if%2 0(propName%5B0%5D%20==%20'.')%20%7B%0A%20%20%20%20 %20%20%20%20%20%20var%20path%20=%20propName.slice( 1).split('.');%0A%20%20%20%20%20%20%20%20%20%20var %20targetObject%20=%20element;%0A%20%20%20%20%20%2 0%20%20%20%20while%20(targetObject%20&&%20path.length%20%3E%201)%20%7B%0A%20%20%20%20%20% 20%20%20%20%20%20%20targetObject%20=%20targetObjec t%5Bpath.shift()%5D;%0A%20%20%20%20%20%20%20%20%20 %20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(targe tObject)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20 %20targetObject%5Bpath%5D%20=%20value;%0A%20%20%20 %20%20%20%20%20%20%20%20%20//%20In%20case%20we%20set%20innerHTML%20(ignoring%20 others)%20we%20need%20to%20recursively%0A%20%20%20 %20%20%20%20%20%20%20%20%20//%20check%20the%20content.%0A%20%20%20%20%20%20%20% 20%20%20%20%20if%20(path%20==%20'innerHTML')%20%7B %0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%2 0(var%20i%20=%200;%20i%20%3C%20element.children.le ngth;%20++i)%20%7B%0A%20%20%20%20%20%20%20%20%20%2 0%20%20%20%20%20%20processWithoutCycles(element.ch ildren%5Bi%5D,%20data,%20visited,%20false);%0A%20% 20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20 %20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%2 0%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D% 20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20eleme nt.setAttribute(propName,%20/**%20@type%20%7Bstring%7D%20*/(value));%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%2 0%20%20%20%7D);%0A%20%20%20%20%7D%0A%20%20%7D;%0A% 0A%20%20var%20prefixes%20=%20%5B''%5D;%0A%0A%20%20//%20Only%20look%20through%20shadow%20DOM%20when%20i t's%20supported.%20As%20of%20April%202015,%20iOS%0 A%20%20//%20Chrome%20doesn't%20support%20shadow%20DOM.%0A%2 0%20if%20(Element.prototype.createShadowRoot)%0A%2 0%20%20%20prefixes.push('*%20/deep/%20');%0A%0A%20%20var%20attributeNames%20=%20Objec t.keys(handlers);%0A%20%20var%20selector%20=%20pre fixes.map(function(prefix)%20%7B%0A%20%20%20%20ret urn%20prefix%20+%20'%5B'%20+%20attributeNames.join ('%5D,%20'%20+%20prefix%20+%20'%5B')%20+%20'%5D';% 0A%20%20%7D).join(',%20');%0A%0A%20%20/**%0A%20%20%20*%20Processes%20a%20DOM%20tree%20usi ng%20a%20%7Cdata%7C%20source%20to%20populate%20tem plate%20values.%0A%20%20%20*%20@param%20%7B!Proces singRoot%7D%20root%20The%20root%20of%20the%20DOM%2 0tree%20to%20process.%0A%20%20%20*%20@param%20%7B! LoadTimeData%7D%20data%20The%20data%20to%20draw%20 from.%0A%20%20%20*/%0A%20%20function%20process(root,%20data)%20%7B%0A %20%20%20%20processWithoutCycles(root,%20data,%20% 5B%5D,%20true);%0A%20%20%7D%0A%0A%20%20/**%0A%20%20%20*%20Internal%20process()%20method%20 that%20stops%20cycles%20while%20processing.%0A%20% 20%20*%20@param%20%7B!ProcessingRoot%7D%20root%0A% 20%20%20*%20@param%20%7B!LoadTimeData%7D%20data%0A %20%20%20*%20@param%20%7B!Array%3CProcessingRoot%3 E%7D%20visited%20Already%20visited%20roots.%0A%20% 20%20*%20@param%20%7Bboolean%7D%20mark%20Whether%2 0nodes%20should%20be%20marked%20processed.%0A%20%2 0%20*/%0A%20%20function%20processWithoutCycles(root,%20d ata,%20visited,%20mark)%20%7B%0A%20%20%20%20if%20( visited.indexOf(root)%20%3E=%200)%20%7B%0A%20%20%2 0%20%20%20//%20Found%20a%20cycle.%20Stop%20it.%0A%20%20%20%20% 20%20return;%0A%20%20%20%20%7D%0A%0A%20%20%20%20//%20Mark%20the%20node%20as%20visited%20before%20rec ursing.%0A%20%20%20%20visited.push(root);%0A%0A%20 %20%20%20var%20importLinks%20=%20root.querySelecto rAll('link%5Brel=import%5D');%0A%20%20%20%20for%20 (var%20i%20=%200;%20i%20%3C%20importLinks.length;% 20++i)%20%7B%0A%20%20%20%20%20%20var%20importLink% 20=%20/**%20@type%20%7B!HTMLLinkElement%7D%20*/(importLinks%5Bi%5D);%0A%20%20%20%20%20%20if%20(!i mportLink.import)%20%7B%0A%20%20%20%20%20%20%20%20//%20Happens%20when%20a%20%3Clink%20rel=import%3E%20 is%20inside%20a%20%3Ctemplate%3E.%0A%20%20%20%20%2 0%20%20%20//%20TODO(dbeam)%3A%20should%20we%20log%20an%20error %20if%20we%20detect%20that%20here%3F%0A%20%20%20%2 0%20%20%20%20continue;%0A%20%20%20%20%20%20%7D%0A% 20%20%20%20%20%20processWithoutCycles(importLink.i mport,%20data,%20visited,%20mark);%0A%20%20%20%20% 7D%0A%0A%20%20%20%20var%20templates%20=%20root.que rySelectorAll('template');%0A%20%20%20%20for%20(va r%20i%20=%200;%20i%20%3C%20templates.length;%20++i )%20%7B%0A%20%20%20%20%20%20var%20template%20=%20/**%20@type%20%7BHTMLTemplateElement%7D%20*/(templates%5Bi%5D);%0A%20%20%20%20%20%20if%20(!tem plate.content)%0A%20%20%20%20%20%20%20%20continue; %0A%20%20%20%20%20%20processWithoutCycles(template .content,%20data,%20visited,%20mark);%0A%20%20%20% 20%7D%0A%0A%20%20%20%20var%20isElement%20=%20root% 20instanceof%20Element;%0A%20%20%20%20if%20(isElem ent%20&&%20root.webkitMatchesSelector(selector))%0A%20%20% 20%20%20%20processElement(/**%20@type%20%7B!Element%7D%20*/(root),%20data,%20visited);%0A%0A%20%20%20%20var%2 0elements%20=%20root.querySelectorAll(selector);%0 A%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C%20e lements.length;%20++i)%20%7B%0A%20%20%20%20%20%20p rocessElement(elements%5Bi%5D,%20data,%20visited); %0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20(mark)%20 %7B%0A%20%20%20%20%20%20var%20processed%20=%20isEl ement%20%3F%20%5Broot%5D%20%3A%20root.children;%0A %20%20%20%20%20%20if%20(processed)%20%7B%0A%20%20% 20%20%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C %20processed.length;%20++i)%20%7B%0A%20%20%20%20%2 0%20%20%20%20%20processed%5Bi%5D.setAttribute('i18 n-processed',%20'');%0A%20%20%20%20%20%20%20%20%7D%0 A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20% 7D%0A%0A%20%20/**%0A%20%20%20*%20Run%20through%20various%20%5Bi18 n-*%5D%20attributes%20and%20populate.%0A%20%20%20*%2 0@param%20%7B!Element%7D%20element%0A%20%20%20*%20 @param%20%7B!LoadTimeData%7D%20data%0A%20%20%20*%2 0@param%20%7B!Array%3CProcessingRoot%3E%7D%20visit ed%0A%20%20%20*/%0A%20%20function%20processElement(element,%20data ,%20visited)%20%7B%0A%20%20%20%20for%20(var%20i%20 =%200;%20i%20%3C%20attributeNames.length;%20i++)%2 0%7B%0A%20%20%20%20%20%20var%20name%20=%20attribut eNames%5Bi%5D;%0A%20%20%20%20%20%20var%20attribute %20=%20element.getAttribute(name);%0A%20%20%20%20% 20%20if%20(attribute%20!=%20null)%0A%20%20%20%20%2 0%20%20%20handlers%5Bname%5D(element,%20attribute, %20data,%20visited);%0A%20%20%20%20%7D%0A%20%20%7D %0A%0A%20%20return%20%7B%0A%20%20%20%20process%3A% 20process%0A%20%20%7D;%0A%7D());%0A%0A%0Ai18nTempl ate.process(document,%20loadTimeData);%0A%3C/script%3E#).