mockup-dallas.citizenservice-digital.com Open in urlscan Pro
185.210.101.112  Public Scan

Submitted URL: https://mockup-dallas.citizenservice-digital.com/
Effective URL: https://mockup-dallas.citizenservice-digital.com/Pages/default.aspx.html
Submission: On March 31 via automatic, source certstream-suspicious — Scanned from DE

Form analysis 1 forms found in the DOM

POST /Pages/default.aspx.html

<form method="post" action="/Pages/default.aspx.html" id="aspnetForm" onsubmit="if (typeof(_spFormOnSubmitWrapper) != 'undefined') {return _spFormOnSubmitWrapper();} else {return true;}">
  <input type="hidden" name="_wpcmWpid" id="_wpcmWpid" value="">
  <input type="hidden" name="wpcmVal" id="wpcmVal" value="">
  <input type="hidden" name="MSOWebPartPage_PostbackSource" id="MSOWebPartPage_PostbackSource" value="">
  <input type="hidden" name="MSOTlPn_SelectedWpId" id="MSOTlPn_SelectedWpId" value="">
  <input type="hidden" name="MSOTlPn_View" id="MSOTlPn_View" value="0">
  <input type="hidden" name="MSOTlPn_ShowSettings" id="MSOTlPn_ShowSettings" value="False">
  <input type="hidden" name="MSOGallery_SelectedLibrary" id="MSOGallery_SelectedLibrary" value="">
  <input type="hidden" name="MSOGallery_FilterString" id="MSOGallery_FilterString" value="">
  <input type="hidden" name="MSOTlPn_Button" id="MSOTlPn_Button" value="none">
  <input type="hidden" name="__REQUESTDIGEST" id="__REQUESTDIGEST" value="0xBB96C03BDA283E57F778DCE8349C2D6B2636DB86085F7864571F9C6CA53B28D23F3D1E3546484AC8FF2B4E47C51FEECBECE9E1CB26AE56019B3552E4237E9B5B,31 Mar 2022 08:41:44 -0000">
  <input type="hidden" name="MSOSPWebPartManager_DisplayModeName" id="MSOSPWebPartManager_DisplayModeName" value="Browse">
  <input type="hidden" name="MSOSPWebPartManager_ExitingDesignMode" id="MSOSPWebPartManager_ExitingDesignMode" value="false">
  <input type="hidden" name="MSOWebPartPage_Shared" id="MSOWebPartPage_Shared" value="">
  <input type="hidden" name="MSOLayout_LayoutChanges" id="MSOLayout_LayoutChanges" value="">
  <input type="hidden" name="MSOLayout_InDesignMode" id="MSOLayout_InDesignMode" value="">
  <input type="hidden" name="_wpSelected" id="_wpSelected" value="">
  <input type="hidden" name="_wzSelected" id="_wzSelected" value="">
  <input type="hidden" name="MSOSPWebPartManager_OldDisplayModeName" id="MSOSPWebPartManager_OldDisplayModeName" value="Browse">
  <input type="hidden" name="MSOSPWebPartManager_StartWebPartEditingName" id="MSOSPWebPartManager_StartWebPartEditingName" value="false">
  <input type="hidden" name="MSOSPWebPartManager_EndWebPartEditing" id="MSOSPWebPartManager_EndWebPartEditing" value="false">
  <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
    value="/wEPDwUBMA9kFgJmD2QWAgIBD2QWBAIBD2QWBgIRD2QWAmYPZBYCAgMPFgIeE1ByZXZpb3VzQ29udHJvbE1vZGULKYgBTWljcm9zb2Z0LlNoYXJlUG9pbnQuV2ViQ29udHJvbHMuU1BDb250cm9sTW9kZSwgTWljcm9zb2Z0LlNoYXJlUG9pbnQsIFZlcnNpb249MTUuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49NzFlOWJjZTExMWU5NDI5YwFkAiUPZBYCAgMPZBYCZg9kFgJmDzwrAAYAZAInD2QWAgIBD2QWCgUmZ184ZDc1ZDdhYV82YTA4XzRiYzlfODRjZl9iNjE4NTRhMGM0MjYPZBYCZg8WAh4JaW5uZXJodG1sBZYGPGxpPjxhIGhyZWY9J2h0dHBzOi8vZGFsbGFzY2l0eWhhbGwuY29tL1BhZ2VzL0Nvcm9uYS1WaXJ1cy5hc3B4JyB0YXJnZXQ9J19zZWxmJyBkYXRhLWdhLWFjdGlvbj0nQ2xpY2snIGRhdGEtZ2EtY2F0ZWdvcnk9J0ZlYXR1cmVkIE5ld3MnIGRhdGEtZ2EtbGFiZWw9J0ltcG9ydGFudCBJbmZvcm1hdGlvbiBSZWdhcmRpbmcgQ29yb25hdmlydXMgKENPVklELTE5KSc+SW1wb3J0YW50IEluZm9ybWF0aW9uIFJlZ2FyZGluZyBDb3JvbmF2aXJ1cyAoQ09WSUQtMTkpPC9hPjwvbGk+PGxpPjxhIGhyZWY9J2h0dHBzOi8vd3d3LmRhbGxhc2NpdHluZXdzLm5ldC9uZXctZGFsbGFzLWdvdi1kb21haW4tbmFtZScgdGFyZ2V0PSdfQmxhbmsnIGRhdGEtZ2EtYWN0aW9uPSdDbGljaycgZGF0YS1nYS1jYXRlZ29yeT0nRmVhdHVyZWQgTmV3cycgZGF0YS1nYS1sYWJlbD0nTmV3IERhbGxhcy5HT1YgRG9tYWluIE5hbWUnPk5ldyBEYWxsYXMuR09WIERvbWFpbiBOYW1lPC9hPjwvbGk+PGxpPjxhIGhyZWY9J2h0dHA6Ly93d3cuZGFsbGFzY2l0eW5ld3MubmV0L2NpdHktZGFsbGFzLWFkb3B0cy1uZXctZWNvbm9taWMtZGV2ZWxvcG1lbnQtcG9saWN5JyB0YXJnZXQ9J19zZWxmJyBkYXRhLWdhLWFjdGlvbj0nQ2xpY2snIGRhdGEtZ2EtY2F0ZWdvcnk9J0ZlYXR1cmVkIE5ld3MnIGRhdGEtZ2EtbGFiZWw9J0NpdHkgb2YgRGFsbGFzIGFkb3B0cyBuZXcgRWNvbm9taWMgRGV2ZWxvcG1lbnQgUG9saWN5Jz5DaXR5IG9mIERhbGxhcyBhZG9wdHMgbmV3IEVjb25vbWljIERldmVsb3BtZW50IFBvbGljeTwvYT48L2xpPmQFJmdfZWZiODMzMThfZTQyMF80NDU1X2FjOGZfZmUzOTRkOGMzYTMwD2QWAmYPFgQeBWNsYXNzBR9tcy1ydGUtZW1iZWRjb2RlIG1zLXJ0ZS1lbWJlZHdwHwEF1QI8aDMgc3R5bGU9ImJvcmRlci1ib3R0b206bm9uZTsgY29sb3I6IHJnYig2OCwgNjgsIDY4KSI+RkVBVFVSRUQgTkVXUzwvaDM+DQo8YSBocmVmPSJodHRwOi8vZGFsbGFzY2l0eW5ld3MubmV0IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbWQiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyBib3JkZXI6IDFweCBzb2xpZCAjMDE2NmNlOyBjb2xvcjogIzAxNjZjZTsiIGRhdGEtZ2EtYWN0aW9uPSJFeHRlcm5hbCBMaW5rIiBkYXRhLWdhLWNhdGVnb3J5PSJGZWF0dXJlZCBOZXdzIiBkYXRhLWdhLWxhYmVsPSJSZWFkIE1vcmUiPlZpZXcgTW9yZSBOZXdzPC9hPmQFJmdfYzRmYTc3MGFfNjg4OF80ZmJiX2I2MDFfNDRhMTFmNDJjNzNmD2QWAmYPFgQfAgUfbXMtcnRlLWVtYmVkY29kZSBtcy1ydGUtZW1iZWR3cB8BBZCcATxzdHlsZT4NCi5zcG90bGlnaHQtdGl0bGV7DQogICAgZm9udC13ZWlnaHQ6Ym9sZDsNCiAgICBwYWRkaW5nOjVweDsNCn0NCjwvc3R5bGU+DQoNCjxkaXYgY2xhc3M9InNwb3RsaWdodC10aXRsZSI+DQogICAgICAgICAgICAgICAgICAgIDxoMiBzdHlsZT0iY29sb3I6IHJnYig2OCwgNjgsIDY4KSI+U1BPVExJR0hUPC9oMj4NCjwvZGl2Pg0KDQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgICAgICAoZnVuY3Rpb24gKCQpIHsNCg0KICAgICAgICAgICAgJC5mbi5zY3JvbGxib3ggPSBmdW5jdGlvbiAoY29uZmlnKSB7DQogICAgICAgICAgICAgICAgLy9kZWZhdWx0IGNvbmZpZw0KICAgICAgICAgICAgICAgIHZhciBkZWZDb25maWcgPSB7DQogICAgICAgICAgICAgICAgICAgIGxpbmVhcjogdHJ1ZSwgICAgICAgICAgLy8gU2Nyb2xsIG1ldGhvZA0KICAgICAgICAgICAgICAgICAgICBzdGFydERlbGF5OiAxMCwgICAgICAgICAgLy8gU3RhcnQgZGVsYXkgKGluIHNlY29uZHMpDQogICAgICAgICAgICAgICAgICAgIGRlbGF5OiAxMCwgICAgICAgICAgICAgICAvLyBEZWxheSBhZnRlciBlYWNoIHNjcm9sbCBldmVudCAoaW4gc2Vjb25kcykNCiAgICAgICAgICAgICAgICAgICAgc3RlcDogMjUsICAgICAgICAgICAgICAgIC8vIERpc3RhbmNlIG9mIGVhY2ggc2luZ2xlIHN0ZXAgKGluIHBpeGVscykNCiAgICAgICAgICAgICAgICAgICAgc3BlZWQ6IDI1LCAgICAgICAgICAgICAgLy8gRGVsYXkgYWZ0ZXIgZWFjaCBzaW5nbGUgc3RlcCAoaW4gbWlsbGlzZWNvbmRzKQ0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2hJdGVtczogMSwgICAgICAgICAvLyBJdGVtcyB0byBzd2l0Y2ggYWZ0ZXIgZWFjaCBzY3JvbGwgZXZlbnQNCiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAndmVydGljYWwnLA0KICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogJ2F1dG8nLA0KICAgICAgICAgICAgICAgICAgICBhdXRvUGxheTogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyUGF1c2U6IHRydWUsDQogICAgICAgICAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIHF1ZXVlOiBudWxsLA0KICAgICAgICAgICAgICAgICAgICBsaXN0RWxlbWVudDogJ3VsJywNCiAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1FbGVtZW50OiAnbGknLA0KICAgICAgICAgICAgICAgICAgICBpbmZpbml0ZUxvb3A6IHRydWUsICAgICAvLyBJbmZpbml0ZSBsb29wIG9yIG5vdA0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2hBbW91bnQ6IDAsICAgICAgICAvLyBHaXZlIGEgbnVtYmVyIGlmIHlvdSBkb24ndCB3YW50IHRvIGhhdmUgaW5maW5pdGUgbG9vcA0KICAgICAgICAgICAgICAgICAgICBhZnRlckZvcndhcmQ6IG51bGwsICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiBhZnRlciBlYWNoIGZvcndhcmQgYWN0aW9uDQogICAgICAgICAgICAgICAgICAgIGFmdGVyQmFja3dhcmQ6IG51bGwsICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIGFmdGVyIGVhY2ggYmFja3dhcmQgYWN0aW9uDQogICAgICAgICAgICAgICAgICAgIHRyaWdnZXJTdGFja2FibGU6IGZhbHNlIC8vIEFsbG93IHRyaWdnZXJzIHdoZW4gYWN0aW9uIGlzIG5vdCBmaW5pc2ggeWV0DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICBjb25maWcgPSAkLmV4dGVuZChkZWZDb25maWcsIGNvbmZpZyk7DQogICAgICAgICAgICAgICAgY29uZmlnLnNjcm9sbE9mZnNldCA9IGNvbmZpZy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAnc2Nyb2xsVG9wJyA6ICdzY3JvbGxMZWZ0JzsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnF1ZXVlKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbmZpZy5xdWV1ZSA9ICQoJyMnICsgY29uZmlnLnF1ZXVlKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9ICQodGhpcyksDQogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJVTCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ0lkID0gbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTY3JvbGxJZCA9IG51bGwsDQogICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQgPSBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VTdGFjaywNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkLA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q2xvY2ssDQogICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxGb3J3YXJkLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQmFja3dhcmQsDQogICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkSG92ZXIsDQogICAgICAgICAgICAgICAgICAgICAgICBwYXVzZUhvdmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoQ291bnQgPSAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tlZFRyaWdnZXJJbmRleCA9IDA7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5vbk1vdXNlT3ZlclBhdXNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYmluZCgnbW91c2VvdmVyJywgZnVuY3Rpb24gKCkgeyBwYXVzZWQgPSB0cnVlOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5iaW5kKCdtb3VzZW91dCcsIGZ1bmN0aW9uICgpIHsgcGF1c2VkID0gZmFsc2U7IH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclVMID0gY29udGFpbmVyLmNoaWxkcmVuKGNvbmZpZy5saXN0RWxlbWVudCArICc6Zmlyc3QtY2hpbGQnKTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBpbml0IGRlZmF1bHQgc3dpdGNoQW1vdW50DQogICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuaW5maW5pdGVMb29wID09PSBmYWxzZSAmJiBjb25maWcuc3dpdGNoQW1vdW50ID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc3dpdGNoQW1vdW50ID0gY29udGFpbmVyVUwuY2hpbGRyZW4oKS5sZW5ndGg7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBzY3JvbGxGb3J3YXJkID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdXNlZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJMaSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Njcm9sbE9mZnNldCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxEaXN0YW5jZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVTdGVwOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBjdXJMaSA9IGNvbnRhaW5lclVMLmNoaWxkcmVuKGNvbmZpZy5saXN0SXRlbUVsZW1lbnQgKyAnOmZpcnN0LWNoaWxkJyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbERpc3RhbmNlID0gY29uZmlnLmRpc3RhbmNlICE9PSAnYXV0bycgPyBjb25maWcuZGlzdGFuY2UgOg0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gY3VyTGkub3V0ZXJIZWlnaHQodHJ1ZSkgOiBjdXJMaS5vdXRlcldpZHRoKHRydWUpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlnLmxpbmVhcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVN0ZXAgPSBNYXRoLm1heCgzLCBwYXJzZUludCgoc2Nyb2xsRGlzdGFuY2UgLSBjb250YWluZXJbMF1bY29uZmlnLnNjcm9sbE9mZnNldF0pICogMC4zLCAxMCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Njcm9sbE9mZnNldCA9IE1hdGgubWluKGNvbnRhaW5lclswXVtjb25maWcuc2Nyb2xsT2Zmc2V0XSArIHRoZVN0ZXAsIDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTY3JvbGxPZmZzZXQgPSBNYXRoLm1pbihjb250YWluZXJbMF1bY29uZmlnLnNjcm9sbE9mZnNldF0gKyBjb25maWcuc3RlcCwgMCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJbMF1bY29uZmlnLnNjcm9sbE9mZnNldF0gPSBuZXdTY3JvbGxPZmZzZXQ7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgPj0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWcuc3dpdGNoSXRlbXM7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnF1ZXVlICYmIGNvbmZpZy5xdWV1ZS5maW5kKGNvbmZpZy5saXN0SXRlbUVsZW1lbnQpLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclVMLmFwcGVuZChjb25maWcucXVldWUuZmluZChjb25maWcubGlzdEl0ZW1FbGVtZW50KVswXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJVTC5jaGlsZHJlbihjb25maWcubGlzdEl0ZW1FbGVtZW50ICsgJzpmaXJzdC1jaGlsZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVUwuYXBwZW5kKGNvbnRhaW5lclVMLmNoaWxkcmVuKGNvbmZpZy5saXN0SXRlbUVsZW1lbnQgKyAnOmZpcnN0LWNoaWxkJykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc3dpdGNoQ291bnQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclswXVtjb25maWcuc2Nyb2xsT2Zmc2V0XSA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChzY3JvbGxpbmdJZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nSWQgPSBudWxsOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihjb25maWcuYWZ0ZXJGb3J3YXJkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuYWZ0ZXJGb3J3YXJkLmNhbGwoY29udGFpbmVyLCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hDb3VudDogc3dpdGNoQ291bnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZDogY29udGFpbmVyVUwuY2hpbGRyZW4oY29uZmlnLmxpc3RJdGVtRWxlbWVudCArICc6Zmlyc3QtY2hpbGQnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy50cmlnZ2VyU3RhY2thYmxlICYmIHN0YWNrZWRUcmlnZ2VySW5kZXggIT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVN0YWNrKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5pbmZpbml0ZUxvb3AgPT09IGZhbHNlICYmIHN3aXRjaENvdW50ID49IGNvbmZpZy5zd2l0Y2hBbW91bnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmF1dG9QbGF5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTY3JvbGxJZCA9IHNldFRpbWVvdXQoZm9yd2FyZCwgY29uZmlnLmRlbGF5ICogMTAwMCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkDQogICAgICAgICAgICAgICAgICAgIC8vIDEuIElmIGZvcndhcmRpbmcsIHRoZW4gcmV2ZXJzZQ0KICAgICAgICAgICAgICAgICAgICAvLyAyLiBJZiBzdG9waW5nLCB0aGVuIGJhY2t3YXJkIG9uY2UNCiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQmFja3dhcmQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF1c2VkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1ckxpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2Nyb2xsT2Zmc2V0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbERpc3RhbmNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVN0ZXA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXQNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJbMF1bY29uZmlnLnNjcm9sbE9mZnNldF0gPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnLnN3aXRjaEl0ZW1zOyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVUwuY2hpbGRyZW4oY29uZmlnLmxpc3RJdGVtRWxlbWVudCArICc6bGFzdC1jaGlsZCcpLmluc2VydEJlZm9yZShjb250YWluZXJVTC5jaGlsZHJlbihjb25maWcubGlzdEl0ZW1FbGVtZW50ICsgJzpmaXJzdC1jaGlsZCcpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMaSA9IGNvbnRhaW5lclVMLmNoaWxkcmVuKGNvbmZpZy5saXN0SXRlbUVsZW1lbnQgKyAnOmZpcnN0LWNoaWxkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsRGlzdGFuY2UgPSBjb25maWcuZGlzdGFuY2UgIT09ICdhdXRvJyA/DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kaXN0YW5jZSA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyBjdXJMaS5oZWlnaHQoKSA6IGN1ckxpLndpZHRoKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyWzBdW2NvbmZpZy5zY3JvbGxPZmZzZXRdID0gc2Nyb2xsRGlzdGFuY2U7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5ldyBvZmZzZXQNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlnLmxpbmVhcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVN0ZXAgPSBNYXRoLm1heCgzLCBwYXJzZUludChjb250YWluZXJbMF1bY29uZmlnLnNjcm9sbE9mZnNldF0gKiAwLjMsIDEwKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoY29udGFpbmVyWzBdW2NvbmZpZy5zY3JvbGxPZmZzZXRdIC0gdGhlU3RlcCwgMCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Njcm9sbE9mZnNldCA9IE1hdGgubWF4KGNvbnRhaW5lclswXVtjb25maWcuc2Nyb2xsT2Zmc2V0XSAtIGNvbmZpZy5zdGVwLCAwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclswXVtjb25maWcuc2Nyb2xsT2Zmc2V0XSA9IG5ld1Njcm9sbE9mZnNldDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1Njcm9sbE9mZnNldCA9PT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tc3dpdGNoQ291bnQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChzY3JvbGxpbmdJZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nSWQgPSBudWxsOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihjb25maWcuYWZ0ZXJCYWNrd2FyZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFmdGVyQmFja3dhcmQuY2FsbChjb250YWluZXIsIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaENvdW50OiBzd2l0Y2hDb3VudCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkOiBjb250YWluZXJVTC5jaGlsZHJlbihjb25maWcubGlzdEl0ZW1FbGVtZW50ICsgJzpmaXJzdC1jaGlsZCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnRyaWdnZXJTdGFja2FibGUgJiYgc3RhY2tlZFRyaWdnZXJJbmRleCAhPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlU3RhY2soKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmF1dG9QbGF5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTY3JvbGxJZCA9IHNldFRpbWVvdXQoZm9yd2FyZCwgY29uZmlnLmRlbGF5ICogMTAwMCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgICAgIHJlbGVhc2VTdGFjayA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja2VkVHJpZ2dlckluZGV4ID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrZWRUcmlnZ2VySW5kZXggPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tlZFRyaWdnZXJJbmRleC0tOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTY3JvbGxJZCA9IHNldFRpbWVvdXQoZm9yd2FyZCwgMCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrZWRUcmlnZ2VySW5kZXgrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U2Nyb2xsSWQgPSBzZXRUaW1lb3V0KGJhY2t3YXJkLCAwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgICAgICBmb3J3YXJkID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChzY3JvbGxpbmdJZCk7DQogICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdJZCA9IHNldEludGVydmFsKHNjcm9sbEZvcndhcmQsIGNvbmZpZy5zcGVlZCk7DQogICAgICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHNjcm9sbGluZ0lkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ0lkID0gc2V0SW50ZXJ2YWwoc2Nyb2xsQmFja3dhcmQsIGNvbmZpZy5zcGVlZCk7DQogICAgICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICAgICAgLy8gSW1wbGVtZW50cyBtb3VzZW92ZXIgZnVuY3Rpb24uDQogICAgICAgICAgICAgICAgICAgIGZvcndhcmRIb3ZlciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hdXRvUGxheSA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoc2Nyb2xsaW5nSWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nSWQgPSBzZXRJbnRlcnZhbChzY3JvbGxGb3J3YXJkLCBjb25maWcuc3BlZWQpOw0KICAgICAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgICAgICBwYXVzZUhvdmVyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VkID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgICAgICByZXNldENsb2NrID0gZnVuY3Rpb24gKGRlbGF5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZGVsYXkgPSBkZWxheSB8fCBjb25maWcuZGVsYXk7DQogICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQobmV4dFNjcm9sbElkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXV0b1BsYXkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U2Nyb2xsSWQgPSBzZXRUaW1lb3V0KGZvcndhcmQsIGNvbmZpZy5kZWxheSAqIDEwMDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXV0b1BsYXkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTY3JvbGxJZCA9IHNldFRpbWVvdXQoZm9yd2FyZCwgY29uZmlnLnN0YXJ0RGVsYXkgKiAxMDAwKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIC8vIGJpbmQgZXZlbnRzIGZvciBjb250YWluZXINCiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmJpbmQoJ3Jlc2V0Q2xvY2snLCBmdW5jdGlvbiAoZGVsYXkpIHsgcmVzZXRDbG9jayhkZWxheSk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYmluZCgnZm9yd2FyZCcsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcudHJpZ2dlclN0YWNrYWJsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxpbmdJZCAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja2VkVHJpZ2dlckluZGV4Kys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KG5leHRTY3JvbGxJZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmJpbmQoJ2JhY2t3YXJkJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy50cmlnZ2VyU3RhY2thYmxlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGluZ0lkICE9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrZWRUcmlnZ2VySW5kZXgtLTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KG5leHRTY3JvbGxJZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5iaW5kKCdwYXVzZUhvdmVyJywgZnVuY3Rpb24gKCkgeyBwYXVzZUhvdmVyKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYmluZCgnZm9yd2FyZEhvdmVyJywgZnVuY3Rpb24gKCkgeyBmb3J3YXJkSG92ZXIoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5iaW5kKCdzcGVlZFVwJywgZnVuY3Rpb24gKHNwZWVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlZWQgPT09ICd1bmRlZmluZWQnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSBNYXRoLm1heCgxLCBwYXJzZUludChjb25maWcuc3BlZWQgLyAyLCAxMCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNwZWVkID0gc3BlZWQ7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5iaW5kKCdzcGVlZERvd24nLCBmdW5jdGlvbiAoc3BlZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGVlZCA9PT0gJ3VuZGVmaW5lZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IGNvbmZpZy5zcGVlZCAqIDI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc3BlZWQgPSBzcGVlZDsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmJpbmQoJ3VwZGF0ZUNvbmZpZycsIGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSAkLmV4dGVuZChjb25maWcsIG9wdGlvbnMpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfTsNCg0KICAgICAgICB9KGpRdWVyeSkpOw0KICAgIDwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgICAgICAgJChmdW5jdGlvbiAoKSB7DQoNCiAgICAgICAgICAgICQoJyNwaS10aWxlcycpLnNjcm9sbGJveCh7DQogICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnaCcsDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICQoJyNwaS10aWxlcy1iYWNrd2FyZCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAkKCcjcGktdGlsZXMnKS50cmlnZ2VyKCdiYWNrd2FyZCcpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkKCcjcGktdGlsZXMtZm9yd2FyZCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAkKCcjcGktdGlsZXMnKS50cmlnZ2VyKCdmb3J3YXJkJyk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgPC9zY3JpcHQ+DQoNCg0KPHNjcmlwdCBzcmM9Ii9TdHlsZSUyMExpYnJhcnkvanMvYW5ndWxhci5taW4uanMiPjwvc2NyaXB0Pg0KDQo8c2NyaXB0Pg0KICAgIA0KICAgICAgIHZhciBteUFuZ0FwcCA9IGFuZ3VsYXIubW9kdWxlKCdBbmdBcHBTcG90TGlnaHQnLCBbXSk7DQogICAgICAgbXlBbmdBcHAuY29udHJvbGxlcignYW5nU3BvdExpZ2h0Q29udHJvbGxlcicsIGZ1bmN0aW9uICgkc2NvcGUsICRodHRwKSB7DQogICAgICAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICRodHRwKHsNCiAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsDQogICAgICAgICAgICAgICB1cmw6IHJlbW92ZUhUVFBmcm9tVVJMKF9zcFBhZ2VDb250ZXh0SW5mby53ZWJBYnNvbHV0ZVVybCkgKyAiL19hcGkvd2ViL2xpc3RzL2dldEJ5VGl0bGUoJ1Nwb3RMaWdodCcpL2l0ZW1zPyRzZWxlY3Q9U3RhcnREYXRlLEVuZERhdGUsT3JkZXIsU3BvdGxpZ2h0VGl0bGUsT3BlbkluVGhlTmV4dFRhYixMaW5rLEVuY29kZWRBYnNVcmwiICsNCiAgICAgICAgICAgICAgICAgICAiJiRvcmRlcmJ5PU9yZGVyMCBhc2MmJGZpbHRlcj1TdGFydERhdGUgbGUgZGF0ZXRpbWUnIiArIHRvZGF5LnRvSVNPU3RyaW5nKCkgKyAiJyBhbmQgRW5kRGF0ZSBnZSBkYXRldGltZSciICsgdG9kYXkudG9JU09TdHJpbmcoKSArICInIiwNCiAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgIkFjY2VwdCI6ICJhcHBsaWNhdGlvbi9qc29uO29kYXRhPXZlcmJvc2UiIH0NCiAgICAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbiAoZCwgcywgaCwgYykgew0KICAgICAgICAgICAgICAgJHNjb3BlLnNwb3RsaWdodHMgPSBkLmQucmVzdWx0czsNCiAgICAgICAgICAgICAgIHZhciBiYWNrdXBDb3VudCA9IDMgLSAkc2NvcGUuc3BvdGxpZ2h0cy5sZW5ndGg7DQogICAgICAgICAgICAgICBpZiAoYmFja3VwQ291bnQgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgJGh0dHAoew0KICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLA0KICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHJlbW92ZUhUVFBmcm9tVVJMKF9zcFBhZ2VDb250ZXh0SW5mby53ZWJBYnNvbHV0ZVVybCkrICIvX2FwaS93ZWIvbGlzdHMvZ2V0QnlUaXRsZSgnU3BvdExpZ2h0JykvaXRlbXM/JHNlbGVjdD1PcmRlcixTcG90bGlnaHRUaXRsZSxPcGVuSW5UaGVOZXh0VGFiLExpbmssRW5jb2RlZEFic1VybCYkb3JkZXJieT1PcmRlcjAgZGVzYyIsDQogICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgIkFjY2VwdCI6ICJhcHBsaWNhdGlvbi9qc29uO29kYXRhPXZlcmJvc2UiIH0NCiAgICAgICAgICAgICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uIChkLCBzLCBoLCBjKSB7DQogICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zcG90bGlnaHRzLnB1c2guYXBwbHkoJHNjb3BlLnNwb3RsaWdodHMsICBkLmQucmVzdWx0cyk7DQogICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgfSk7DQogICAgICAgICANCg0KICAgICAgICAgICAvLyRzY29wZS5waWN0dXJlcyA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgLy8gICAgcmV0dXJuICRzY29wZS5zcG90bGlnaHRzLmNvbmNhdCgkc2NvcGUuc3BvdGxpZ2h0QmFja3Vwcyk7DQogICAgICAgICAgIC8vfQ0KDQoNCiAgICAgICAgICAgJHNjb3BlLmdldFRhcmdldCA9IGZ1bmN0aW9uKHRhcmdldFN0cmluZykgew0KICAgICAgICAgICAgICAgaWYgKHRhcmdldFN0cmluZykNCiAgICAgICAgICAgICAgICAgICByZXR1cm4gIl9ibGFuayI7DQogICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgcmV0dXJuICJfc2VsZiI7DQogICAgICAgICAgIH0NCg0KICAgICAkc2NvcGUuZ2V0U3Jjd2l0aG91dEhUVFAgPSBmdW5jdGlvbih1cmxTdHJpbmcpIHsNCiAgICAgICAgICAgICB2YXIgaHR0cEluZGV4ID0gdXJsU3RyaW5nLmluZGV4T2YoIjovLyIpOw0KICAgICAgICAgICAgaWYoaHR0cEluZGV4ID4gMCkNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFN0cmluZy5zbGljZShodHRwSW5kZXgrMSk7DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsU3RyaW5nOw0KDQogICAgICAgICAgIH0NCg0KICAgICAgIH0pICAgICAgDQogICAgICAgICAgDQo8L3NjcmlwdD4NCg0KPGRpdiBuZy1hcHA9IkFuZ0FwcFNwb3RMaWdodCIgY2xhc3M9InNwLXJvdyI+DQogICAgPGRpdiBpZD0icGktc2Nyb2xsLXRpbGVzIiBuZy1jb250cm9sbGVyPSJhbmdTcG90TGlnaHRDb250cm9sbGVyIj4NCiAgICAgICAgPGRpdiBpZD0icGktdGlsZXMtYnRuIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIgaWQ9InBpLXRpbGVzLWJhY2t3YXJkIj48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiBpZD0icGktdGlsZXMtZm9yd2FyZCI+PC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBpZD0icGktdGlsZXMiIGNsYXNzPSJzY3JvbGwtaW1nIj4NCiAgICAgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQiIGlkPSJ0aWxlc1VsIj4NCiAgICAgICAgICAgICAgICA8bGkgbmctcmVwZWF0PSJwaWN0dXJlIGluIHNwb3RsaWdodHMiPg0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7e3BpY3R1cmUuTGluay5Vcmx9fSIgdGFyZ2V0PSJ7e2dldFRhcmdldChwaWN0dXJlLk9wZW5JblRoZU5leHRUYWIpfX0iICBkYXRhLWdhLWFjdGlvbj0iTGluayIgZGF0YS1nYS1jYXRlZ29yeT0iSG9tZSIgZGF0YS1nYS1sYWJlbD0ie3twaWN0dXJlLlNwb3RsaWdodFRpdGxlfX0iPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UtdGh1bWJzIiBuZy1zcmM9Int7cGljdHVyZS5FbmNvZGVkQWJzVXJsfX0iIGFsdD0iIiBhcmlhLWhpZGRlbj0idHJ1ZSIgLz48c3BhbiBjbGFzcz0ibm9wYWQgc3BvdGxpZ2h0LXRpdGxlIj57e3BpY3R1cmUuU3BvdGxpZ2h0VGl0bGV9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KPGJyIC8+DQoNCjxzdHlsZT4NCgkjY291bnRkb3duew0KCQl0ZXh0LWFsaWduOiBjZW50ZXI7DQoJCXBhZGRpbmc6IDIwcHggMDsNCgkJYm9yZGVyLXRvcDogc29saWQgMXB4ICM5OTk7DQoJfQ0KCSNjb3VudGRvd24gaDN7DQoJCWZvbnQtZmFtaWx5OiAnUm9ib3RvJzsNCgkJZm9udC13ZWlnaHQ6IDYwMDsNCgkJZm9udC1zaXplOiAyOHB4Ow0KCQljb2xvcjogcmdiKDMsNjMsMTM2KTsNCgkJYm9yZGVyLWJvdHRvbTpub25lOw0KCX0NCg0KCSNjb3VudGRvd24tMXsNCgkJcGFkZGluZzoyNXB4IDA7DQoJfQ0KCSNjb3VudGRvd24tZGlzcGxheXsNCgkJZGlzcGxheTogYmxvY2s7DQoJCWJvcmRlci1yYWRpdXM6IDEwcHg7DQoJCS8qaGVpZ2h0OiAxNDBweDsqLw0KCSAgICBtYXgtd2lkdGg6IDcwMHB4Ow0KCSAgICBtYXJnaW46IDAgYXV0bzsNCgl9DQoJI2NvdW50ZG93bi0yew0KCQlwYWRkaW5nOiAwcHggMDsNCgkJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgDQoJCXBhZGRpbmc6IDEwcHggNTBweCAxMHB4IDMwcHg7DQoJICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA2NXB4Ow0KCSAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNjVweDsNCgkgICAgaGVpZ2h0OiAxMDVweDsNCgkgICANCgl9DQoJLyojY291bnRkb3duLTIgYXsNCgkJZGlzcGxheTogYmxvY2s7DQoJCSBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIi9TdHlsZSUyMExpYnJhcnkvSW1hZ2VzL05leHQlMjBBcnJvdy5zdmciKTsNCgkJYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQ7DQoJCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQogICAgYmFja2dyb3VuZC1zaXplOiAyMHB4Ow0KICAgIHBhZGRpbmc6IDAgMzAlIDAgMDsNCgl9Ki8NCgkjY291bnRkb3duLTIgYSBpbWd7DQoJCWhlaWdodDogMTAwJTsNCgl9DQoJI2NvdW50ZG93bi0yIGgzew0KCQlmb250LWZhbWlseTogJ1JvYm90byc7DQoJCXBhZGRpbmc6MHB4Ow0KCQlmb250LXNpemU6IDMycHg7DQoJCWxpbmUtaGVpZ2h0OiAxOw0KCQlib3JkZXI6IG5vbmU7DQoJCWNvbG9yOiByZ2IoMyw2MywxMzYpOw0KCQlmb250LXdlaWdodDogNjAwOw0KCX0NCgkjY291bnRkb3duLTIgaDV7DQoJCWZvbnQtZmFtaWx5OiAnUm9ib3RvJzsNCgkJZm9udC1zaXplOiAxOHB4Ow0KCQljb2xvcjpyZ2IoMzgsMTE1LDIwOSk7DQoJCWZvbnQtd2VpZ2h0OiA1MDA7DQoJCXBhZGRpbmc6MHB4Ow0KCQlsaW5lLWhlaWdodDogMTsNCgkJYm9yZGVyOiBub25lOw0KDQoJfQ0KCSNjb3VudGRvd24tM3sNCgkJZGlzcGxheTogaW5saW5lLWJsb2NrOw0KCQliYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMyw2MywxMzYpOw0KCQlwYWRkaW5nOjE1cHggMCAxNXB4IDQwcHg7DQoJCWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDY1cHg7DQoJCWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDY1cHg7DQoJCWhlaWdodDogMTA1cHg7DQoJfQ0KDQoJI2NvdW50ZG93bi0zIGgzew0KCQlmb250LWZhbWlseTogJ1JvYm90byc7DQoJCWZvbnQtc2l6ZTogNDRweDsNCgkJZm9udC13ZWlnaHQ6IDUwMDsNCgkJY29sb3I6ICNmZmY7DQoJCXBhZGRpbmc6MDsNCgkJYm9yZGVyOiBub25lOw0KCX0NCg0KICAgICNjb3VudGRvd24tMyAubWV0cmljew0KICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byc7DQogICAgICAgIGZvbnQtc2l6ZTogNDRweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgICAgICAgY29sb3I6ICNmZmY7DQogICAgICAgIHBhZGRpbmc6MDsNCiAgICAgICAgYm9yZGVyOiBub25lOw0KICAgIH0NCg0KCSNjb3VudGRvd24tMyAuY29sLXhzLTN7DQoJCWJvcmRlci1yaWdodDogc29saWQgMXB4ICNjNWQzZmM7DQoJCXBhZGRpbmc6IDA7DQoJfQ0KCSNjb3VudGRvd24tMyAuY29sLXhzLTM6bGFzdC1vZi10eXBlew0KCQlib3JkZXItcmlnaHQ6IG5vbmU7DQoJfQ0KCQ0KCSNjb3VudGRvd24tMyBwew0KCQlmb250LWZhbWlseTogJ1JvYm90byc7DQoJCWNvbG9yOiNjNWQzZmM7DQoJCWZvbnQtd2VpZ2h0OiA2MDA7DQoJCWZvbnQtc2l6ZToxMnB4Ow0KCQlwYWRkaW5nOiAwOw0KCQltYXJnaW46IDA7DQoJfQ0KCQ0KIAkueHhzLWhpZGV7DQogCQlkaXNwbGF5OiBibG9jazsNCiAJfQ0KIAkueHhzLXNob3d7DQogCQlkaXNwbGF5Om5vbmU7DQogCX0NCiAJI2NvdW50ZG93bi0zIC5jb2wteHMtMzpudGgtb2YtdHlwZSgyKXsNCgkJYm9yZGVyLXJpZ2h0OiB2aXNpYmxlOw0KCX0NCiNzcG90bGlnaHQtaG9tZSB7DQogICAgcGFkZGluZzogNTBweCAwcHggMzBweCAwOw0KfQ0KDQogQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjQwcHgpew0KICAgICNjb3VudGRvd24tZGlzcGxheSAuY29sLXhzLTcsDQogICAgI2NvdW50ZG93bi1kaXNwbGF5IC5jb2wteHMtNXsNCiAgICAJd2lkdGg6IDEwMCU7DQogICAgfQ0KIAkjY291bnRkb3duLTMgLmNvbC14cy0zew0KCQl3aWR0aDogNTAlOw0KCX0NCiAJLnh4cy1oaWRlew0KIAkJZGlzcGxheTogbm9uZTsNCiAJfQ0KIAkueHhzLXNob3d7DQogCQlkaXNwbGF5OmJsb2NrOw0KIAl9DQogCSNjb3VudGRvd24tMyAuY29sLXhzLTM6bnRoLW9mLXR5cGUoMil7DQoJCWJvcmRlci1yaWdodDogbm9uZTsNCgl9DQogCSNjb3VudGRvd24tM3sJDQogCQlib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0NXB4Ow0KCSAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNDVweDsNCgkgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsNCgkgICAgcGFkZGluZzogMTBweCAyMHB4Ow0KCSAgICBoZWlnaHQ6IDk1cHg7DQoJfQ0KCSNjb3VudGRvd24tMnsNCgkJZGlzcGxheTogYmxvY2s7CQkNCgkJYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDQ1cHg7DQoJCWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDQ1cHg7DQoJCWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7DQoJICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOw0KCSAgICAgcGFkZGluZzogMTVweCAyMHB4Ow0KCQloZWlnaHQ6IDk1cHg7DQoJfQ0KCSNjb3VudGRvd24tZGlzcGxheXsNCgkJZGlzcGxheTogYmxvY2s7DQoJCXBhZGRpbmc6IDAgMTBweDsNCgl9DQojc3BvdGxpZ2h0LWhvbWUgew0KICAgIHBhZGRpbmc6IDUwcHggMHB4Ow0KfQ0KIH0NCg0KPC9zdHlsZT5kBSZnXzRiNGVhNzY0XzA5MWVfNGY2MV85MGM0X2VjODQxZjlkNTc2ZQ9kFgJmDxYEHwIFH21zLXJ0ZS1lbWJlZGNvZGUgbXMtcnRlLWVtYmVkd3AfAQXR/wE8ZGl2IGlkPSJob21lcGFnZSI+DQoNCjwhLS0NCjxkaXYgY2xhc3M9InRleHQtY2VudGVyIiBzdHlsZT0icGFkZGluZzoyMHB4O2JhY2tncm91bmQtY29sb3I6I0ZGQjMzMzsiPjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+PGEgaHJlZj0iL1BhZ2VzL0Nvcm9uYS1WaXJ1cy5hc3B4IiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Y29sb3I6IzAwMUIzQjtiYWNrZ3JvdW5kLWltYWdlOnVybCgnL1B1Ymxpc2hpbmdJbWFnZXMvY29yb25hdmlydXMvYmx1ZS1hbGVydC1pY29uLnBuZycpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsgYmFja2dyb3VuZC1zaXplOjIwcHggMjBweDsgYmFja2dyb3VuZC1wb3NpdGlvbjoxMHB4OyBwYWRkaW5nLWxlZnQ6NDBweDtmb250LXNpemU6MjJweCI+SW1wb3J0YW50IEluZm9ybWF0aW9uIFJlZ2FyZGluZyBDb3JvbmF2aXJ1cyAoQ09WSUQmIzgyMTE7MTkpPC9hPjwvZGl2PjwvZGl2Pg0KLS0+DQoNCjxkaXYgc3R5bGU9ImNsZWFyOmJvdGg7IGJhY2tncm91bmQtY29sb3I6IzdFQzZGRjsiPg0KPGRpdiBjbGFzcz0iY29sLXhzLTEyIHRleHQtY2VudGVyIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojRkZCMzMzOyBwYWRkaW5nOjIwcHgiPjxhIGhyZWY9Ii9QYWdlcy9Db3JvbmEtVmlydXMuYXNweCIgc3R5bGU9ImZvbnQtc2l6ZToyMnB4OyBjb2xvcjojMDAxQjNCOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgcGFkZGluZzoyMHB4OyI+PGltZyBzcmM9Ii9QdWJsaXNoaW5nSW1hZ2VzL2Nvcm9uYXZpcnVzL2JsdWUtYWxlcnQtaWNvbi5wbmciIHN0eWxlPSJoZWlnaHQ6IDIwcHg7IG1hcmdpbi1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDJweDsgIiBhbHQ9IiIvPkltcG9ydGFudCBDT1ZJRC0xOSBJbmZvcm1hdGlvbjwvYT48L2Rpdj4NCjxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyBoZWlnaHQ6IDBweDsgd2lkdGg6MTAwJSI+PC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29sLXhzLTEyIHRleHQtY2VudGVyIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PGgyIHN0eWxlPSJjb2xvcjojNjY2OyBmb250LXN0eWxlOml0YWxpYzsgZm9udC1mYW1pbHk6J0xhdG8nO2ZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtwYWRkaW5nOjE1cHggMDttYXJnaW4tYm90dG9tOjMwcHg7Ij5PdXIgY29yZSB2YWx1ZXMgYXJlIEVtcGF0aHksIEV0aGljcywgRXhjZWxsZW5jZSwgRXF1aXR5PC9oMj48L2Rpdj4NCg0KDQo8ZGl2IGlkPSJwb3B1bGFybGlua3MiPg0KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCg0KDQo8IS0tY29sdW1uIG9uZS0tPg0KPGRpdiBjbGFzcz0iY29sLTMiPg0KPGRpdiBpZD0idG9kYXlpd2FudHRvIj4NCjx1bCBpZD0idG9kYXlpd2FudHRvLXVsIj4NCjxsaSBjbGFzcz0icGF5Ij48YSBjbGFzcz0iaXdhbnR0b21vZGFsIGJ0biBidG4tbWQiIGhyZWY9IiNwYXkiPlBheTwvYT48L2xpPg0KPGxpIGNsYXNzPSJmaW5kIj48YSBjbGFzcz0iaXdhbnR0b21vZGFsIGJ0biBidG4tbWQiIGhyZWY9IiNmaW5kIj5GaW5kPC9hPjwvbGk+DQo8bGkgY2xhc3M9InJlcXVlc3QiPjxhIGNsYXNzPSJpd2FudHRvbW9kYWwgYnRuIGJ0bi1tZCIgaHJlZj0iI3JlcXVlc3QiPlJlcXVlc3Q8L2E+PC9saT4NCjxsaSBjbGFzcz0ib3Blbi1kYXRhIj48YSAgaHJlZj0iL1BhZ2VzL0RhbGxhcy1EYXRhaHViLmFzcHgiIGNsYXNzPSJidG4gYnRuLW1kIj5EYWxsYXMgRGF0YSBIdWI8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vZmluYW5jaWFsdHJhbnNwYXJlbmN5LmRhbGxhc2NpdHloYWxsLmNvbS8iIHRhcmdldD0iX2JsYW5rIiBpZD0iZmluYW50aWFsLXRyYW5zcGFyZW5jeSIgY2xhc3M9ImJ0biBidG4tbWQiPkZpbmFuY2lhbCBUcmFuc3BhcmVuY3k8L2E+PC9saT4NCjwhLS08bGkgY2xhc3M9Im9wZW4tZGF0YSI+PGEgY2xhc3M9Iml3YW50dG9tb2RhbCBidG4gYnRuLW1kIiBocmVmPSIjb3BlbmRhdGEiPk9wZW4gRGF0YTwvYT48L2xpPg0KLS0+DQo8IS0tPGxpPjxhIGhyZWY9Ii9kZXBhcnRtZW50cy9wdWJsaWMtYWZmYWlycy1vdXRyZWFjaC9vcGVucmVjb3Jkcy9QYWdlcy9kZWZhdWx0LmFzcHgiIGlkPSJvcGVuLXJlY29yZHMiIGNsYXNzPSJidG4gYnRuLW1kIj5PcGVuIFJlY29yZHMgUmVxdWVzdDwvYT48L2xpPi0tPg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vZGFsbGFzdHguZ292cWEudXMvV0VCQVBQL19ycy8oUyhhdmZpdjRobjFycnJxbWxqNTR0bWF6ZnApKS9TdXBwb3J0SG9tZS5hc3B4P3NTZXNzaW9uSUQ9IiB0YXJnZXQ9Il9ibGFuayIgaWQ9Im9wZW4tcmVjb3JkcyIgY2xhc3M9ImJ0biBidG4tbWQiPk9wZW4gUmVjb3JkcyBSZXF1ZXN0PC9hPjwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8L2Rpdj4NCjwhLS1jb2x1bW4gb25lLS0+DQoNCjxkaXYgY2xhc3M9ImNvbC0zIj4NCjxkaXYgaWQ9Im9mZmljaWFscG9zdGluZ3MiIGNsYXNzPSJvZmZpY2lhbC1wb3N0aW5ncyBsaXN0LWl0ZW1zIiBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuOyI+DQo8aDMgc3R5bGU9ImNvbG9yOiByZ2IoNjgsIDY4LCA2OCkiPk9mZmljaWFsIFBvc3RpbmdzPC9oMz4NCjx1bCBjbGFzcz0iaG0tYm94LWxpbmtzIj4NCjxsaT48YSBocmVmPSIvZGVwYXJ0bWVudHMvYnVkZ2V0L2ZpbmFuY2lhbHRyYW5zcGFyZW5jeS9QYWdlcy9DdXJyZW50LUJ1ZGdldC5hc3B4IiBpZD0iYnVkZ2V0Ij5GWSAyMDIxLTIyIEFkb3B0ZWQgQnVkZ2V0PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly9jaXR5b2ZkYWxsYXMubGVnaXN0YXIuY29tLyIgaWQ9ImNvdW5jaWwtbWVldGluZ3MiIHRhcmdldD0iX2JsYW5rIj5Db3VuY2lsIE1lZXRpbmdzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL2dvdmVybm1lbnQvY2l0eWNvdW5jaWwvUGFnZXMvY291bmNpbC1hdHRlbmRhbmNlLmFzcHgiIGlkPSJjb3VuY2lsLWF0dGVuZGFuY2UiPkNvdW5jaWwgQXR0ZW5kYW5jZTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9jYWxlbmRhci8iIGlkPSJjaXR5LWNhbGVuZGFyIj5DaXR5IENhbGVuZGFyPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL1BhZ2VzL3B1YmxpYy1ub3RpY2VzLmFzcHgiIGlkPSJwdWJsaWMtbm90aWNlcyI+UHVibGljIE5vdGljZXM8L2E+PC9saT4NCjxsaT48YSBocmVmPSIvZ292ZXJubWVudC9jaXR5c2VjcmV0YXJ5L1BhZ2VzL1B1YmxpYy1NZWV0aW5ncy5hc3B4IiBpZD0ib3Blbi1tZWV0aW5ncyI+T3BlbiBNZWV0aW5nczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9nb3Zlcm5tZW50L2NpdHltYW5hZ2VyL1BhZ2VzL2NvdW5jaWwtbWVtb3MuYXNweCIgaWQ9ImNvdW5jaWwtbWVtb3MiPkNvdW5jaWwgTWVtb3M8L2E+PC9saT4NCjxsaT48YSBocmVmPSIvUGFnZXMvd2F0Y2gtY2l0eS1tZWV0aW5ncy1vbmxpbmUuYXNweCIgY2xhc3M9InN3YWdpdCBidG4iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigzLDYzLDEzNik7IHBhZGRpbmc6MTFweCAxMHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgY29sb3I6d2hpdGU7bWFyZ2luOjA7IiBpZD0iY2l0eS1tZWV0aW5nLXZpZGVvIj5XYXRjaCBDaXR5IE1lZXRpbmdzIE9ubGluZTwvYT48L2xpPg0KPC91bD4NCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNvbC0zIGNvbC1lbmQiPg0KPGRpdiBpZD0ib2ZmaWNpYWxwb3N0aW5nczIiIGNsYXNzPSJvZmZpY2lhbC1wb3N0aW5ncyBsaXN0LWl0ZW1zIj4NCjxoMyBzdHlsZT0iY29sb3I6IHJnYig2OCwgNjgsIDY4KSI+UXVpY2sgTGlua3M8L2gzPg0KDQo8dWwgY2xhc3M9ImhtLWJveC1saW5rcyI+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL3dhdGVydXRpbGl0aWVzIiBpZD0icXVpY2stbGlua3Mtd2F0ZXIiPldhdGVyIFV0aWxpdGllczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9kZXBhcnRtZW50cy9zYW5pdGF0aW9uIiBpZD0icXVpY2stbGlua3Mtc2FuaXRhdGlvbiI+VHJhc2ggUGlja3VwPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL3N1c3RhaW5hYmxlZGV2ZWxvcG1lbnQvYnVpbGRpbmdpbnNwZWN0aW9uL1BhZ2VzL2luZGV4LmFzcHgiIGlkPSJxdWljay1saW5rcy1idWlsZGluZy1wZXJtaXRzLWluc3BlY3Rpb25zIj5CdWlsZGluZyBQZXJtaXRzICZhbXA7IEluc3BlY3Rpb25zPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL2h1bWFucmVzb3VyY2VzL2VtcGxveW1lbnQvUGFnZXMvZGVmYXVsdC5hc3B4IiBpZD0icXVpY2stbGlua3Mtam9icyI+Sm9iczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9kZXBhcnRtZW50cy9jb3VydGRldGVudGlvbnNlcnZpY2VzL1BhZ2VzL2RlZmF1bHQuYXNweCIgaWQ9InF1aWNrLWxpbmtzLXRyYWZmaWMtdGlja2V0cyI+VHJhZmZpYyAmYW1wOyBDaXZpbCBUaWNrZXRzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL2NvdXJ0ZGV0ZW50aW9uc2VydmljZXMvUGFnZXMvV2FycmFudC1JbmZvLmFzcHgiIGlkPSJxdWljay1saW5rcy1jb3VydHMiPkNvdXJ0IFdhcnJhbnRzICZhbXA7IEJvbmRzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL2RhbGxhcy1hbmltYWwtc2VydmljZXMvUGFnZXMvZGVmYXVsdC5hc3B4IiBpZD0icXVpY2stbGlua3MtYW5pbWFsLXNlcnZpY2VzIj5BbmltYWwgU2VydmljZXM8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy4yMTF0ZXhhcy5vcmcvIiBpZD0icXVpY2stbGlua3MtMjExIiB0YXJnZXQ9Il9ibGFuayI+Mi0xLTEgVGV4YXMgKFN0YXRlIEFzc2lzdGFuY2UpPC9hPjwvbGk+DQoNCjwvdWw+DQo8L2Rpdj4NCjwvZGl2Pg0KDQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4NCjwvZGl2Pg0KDQoNCg0KICA8c2VjdGlvbiBjbGFzcz0ic2VydmljZXMtYmFubmVyIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ic2VydmljZTMxMSBjb2wtbWQtMTIgY29sLXhzLTEyIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy02IGNvbC1tZC02IGNvbC14cy0xMiIgaWQ9InBpY3R1cmUzMTFhcHAiPiAgIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW4tbWlkZGxlIj4NCiAgICAgICAgICAgICAgPGgzID48c3Bhbj5Eb3dubG9hZCB0aGUgTmV3IDwvc3Bhbj48YnIvPk91ckRhbGxhcyBNb2JpbGUgQXBwPC9oMz4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vaXR1bmVzLmFwcGxlLmNvbS91cy9hcHAvZGFsbGFzLTMxMS9pZDY5MjkwMjA4OD9tdD04IyIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJhcHBpY29uIj48aW1nIHNyYz0iL1B1Ymxpc2hpbmdJbWFnZXMvc3RhdGljL2FwcC1zdG9yZS1iYWRnZS5wbmciIGNsYXNzPSJhcHAtYmFkZ2UgYXBwbGVhcHAiIGFsdD0iQXBwbGUgQXBwIFN0b3JlIEJhZGdlIi8+PC9hPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vcGxheS5nb29nbGUuY29tL3N0b3JlL2FwcHMvZGV0YWlscz9pZD1jb20uZGFsbGFzY2l0eWhhbGwuZGFsbGFzMzExJmhsPWVuIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImFwcGljb24iPjxpbWcgc3JjPSIvUHVibGlzaGluZ0ltYWdlcy9zdGF0aWMvZ29vZ2xlLXBsYXktYmFkZ2UucG5nIiBjbGFzcz0iYXBwLWJhZGdlIGdvb2dsZWFwcCIgYWx0PSJHb29nbGUgUGxheSBTdG9yZSBCYWRnZSIgLz48L2E+DQogICAgICAgICAgICAgIDwvZGl2PiAgICAgIA0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVjayB2aXNpYmxlLXh4cyBjb2wteHMtMTIiPg0KICAgICAgICAgICAgICAgIDxpbWcgaWQ9ImRhbGxhczMxMW1vYmlsZSIgc3JjPSIvUHVibGlzaGluZ0ltYWdlcy9zdGF0aWMvMzExLW1vYmlsZS1hcHAtbmV3LmpwZyIgYWx0PSJEYWxsYXMgMzExIE1vYmlsZSBhcHAiIHRpdGxlPSJEYWxsYXMtMzExLU1vYmlsZS1BcHAiIG1lZGlhLXNpbXBsZT0idHJ1ZSI+DQogICAgICAgICAgICAgICAgIDwhLS0gIDxoMz5DaGVjayBTZXJ2aWNlIFJlcXVlc3QgU3RhdHVzPC9oMz4NCiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VydmljZSBSZXF1ZXN0ICMgKGkuZS4gMTktMDAwMDAwMDEpIiBjbGFzcz0idGV4dEZpZWxkIHNlYXJjaGlucHV0IiBvbmtleWRvd249InNlYXJjaDMxMShldmVudCkiICAvPiAtLT4NCiAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICANCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTYgY29sLW1kLTYgY29sLXhzLTEyIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5uZXItMzExIj4NCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbm5lci0zMTEtdGl0bGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+MzExIEZyZXF1ZW50bHkgUmVxdWVzdGVkIFNlcnZpY2VzPC9oMz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idW5saXN0ZWQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZGFsbGFzY3JtLmZvcmNlLmNvbS9wdWJsaWMvcmVxdWVzdC9DT0RFR0VORVJBTC9sb2NhdGlvbiIgdGFyZ2V0PSJfYmxhbmsiPkNvZGUgQ29uY2VybnM8L2E+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2RhbGxhc2NybS5mb3JjZS5jb20vcHVibGljL3JlcXVlc3QvU1BTVlNOT1QvbG9jYXRpb24iIHRhcmdldD0iX2JsYW5rIj5TYW5pdGF0aW9uIFJvbGwgQ2FydDwvYT48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZGFsbGFzY3JtLmZvcmNlLmNvbS9wdWJsaWMvcmVxdWVzdC9TQU5NSVNHQS9sb2NhdGlvbiIgdGFyZ2V0PSJfYmxhbmsiPk1pc3NlZCBHYXJiYWdlPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9kYWxsYXNjcm0uZm9yY2UuY29tL3B1YmxpYy9yZXF1ZXN0L1NUU1JPVVNUL2xvY2F0aW9uIiB0YXJnZXQ9Il9ibGFuayI+U3RyZWV0IFJlcGFpcjwvYT48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZGFsbGFzY3JtLmZvcmNlLmNvbS9wdWJsaWMvcmVxdWVzdC9QV1RST1YvbG9jYXRpb24iIHRhcmdldD0iX2JsYW5rIj5QYXJraW5nIOKAkyBSZXBvcnQgYSBWaW9sYXRpb248L2E+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2RhbGxhc2NybS5mb3JjZS5jb20vcHVibGljL3JlcXVlc3QvQU5JTE9TREMvbG9jYXRpb24iIHRhcmdldD0iX2JsYW5rIj5BbmltYWwgTG9vc2U8L2E+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2RhbGxhc2NybS5mb3JjZS5jb20vcHVibGljL3JlcXVlc3QvREVBREFOUFUvbG9jYXRpb24iIHRhcmdldD0iX2JsYW5rIj5EZWFkIEFuaW1hbCBQaWNrIFVwPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9kYWxsYXNjcm0uZm9yY2UuY29tL3B1YmxpYy9yZXF1ZXN0L0RQRDI0SFIvbG9jYXRpb24iIHRhcmdldD0iX2JsYW5rIj4yNCBIb3VyIFBhcmtpbmc8L2E+PC9saT4gICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaG9tZS0zMTEtYnV0dG9ucyI+DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZGFsbGFzY3JtLmZvcmNlLmNvbS9wdWJsaWMvc2VydmljZXR5cGVzIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zaWRlIGJ0bi1tZCIgc3R5bGU9ImZvbnQtc2l6ZTogMWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiM4RUM5MDA7Y29sb3I6IzIyMjIyMjsiPlJlcXVlc3QgYSBTZXJ2aWNlPC9hPg0KICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9zZXJ2aWNlcy8zMTEiIGNsYXNzPSJidG4gYnRuLW1pbmltYWwtcmV2ZXJzZSBidG4tc2lkZSBidG4tbWQiIHN0eWxlPSJmb250LXNpemU6IDFlbSI+QWJvdXQgMzExPC9hPg0KICAgICAgICAgICAgICAgICAgICAgIDwhLS08YSBocmVmPSJodHRwczovL2RhbGxhc2NybS5mb3JjZS5jb20vRGFsbGFzMzExS25vd2xlZGdlL3MvIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImJ0biBidG4tbWluaW1hbC1yZXZlcnNlIGJ0bi1zaWRlIGJ0bi1tZCIgc3R5bGU9ImZvbnQtc2l6ZTogMWVtIj4zMTEgS25vd2xlZGdlYmFzZTwvYT4tLT4NCiAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJzZXJ2aWNlMzExIGNoZWNrIGhpZGRlbi14cyI+DQogICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImNoZWNrLXNlcnZpY2UtcmVxdWVzdCIgc3R5bGU9ImZvbnQtc2l6ZTogMS40ZW07cGFkZGluZzogNXB4IDIwcHg7bWF4LXdpZHRoOiAzNTBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Y29sb3I6ICNmZmY7Ym9yZGVyLWJvdHRvbTogbm9uZTsiPkNoZWNrIFNlcnZpY2UgUmVxdWVzdCBTdGF0dXM8L2xhYmVsPg0KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlcnZpY2UgUmVxdWVzdCAjIChpLmUuIDE5LTAwMDAwMDAxKSIgY2xhc3M9InRleHRGaWVsZCIgb25rZXlkb3duPSJzZWFyY2gzMTEoZXZlbnQpIiBpZD0iY2hlY2stc2VydmljZS1yZXF1ZXN0IiAgLz4NCiAgICAgICAgPC9kaXY+DQo8L3NlY3Rpb24+DQoNCjxzdHlsZT4NCi5pbi1taWRkbGV7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCggcmdiYSgwLCAwLCAwLCAwLjIpLCByZ2JhKDAsIDAsIDAsIDAuNykgKSwgdXJsKCcvUHVibGlzaGluZ0ltYWdlcy9zdGF0aWMvMzExLW1vYmlsZS1hcHAtbmV3LmpwZycpOw0KICAvKmJhY2tncm91bmQtaW1hZ2U6IHVybCgiL1B1Ymxpc2hpbmdJbWFnZXMvc3RhdGljLzMxMS1tb2JpbGUtYXBwLW5ldy5qcGciKTsqLw0KYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsNCmJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQpsZWZ0OiA0MHB4Ow0KcGFkZGluZy1ib3R0b206IDMwcHg7DQpoZWlnaHQ6IDEwMCU7DQpwYWRkaW5nOiAyMzBweCAwIDAgNDBweDsNCn0NCi5pbi1taWRkbGUgaDN7DQogIGZvbnQtc2l6ZTogMjhweDsNCiAgZm9udC13ZWlnaHQ6ICA1MDA7DQp9DQouaW4tbWlkZGxlIGgzIHNwYW57DQogIGZvbnQtc2l6ZTogMjJweDsNCiAgYm9yZGVyOiBub25lOw0KICBmb250LXN0eWxlOiBpdGFsaWM7ICANCiAgcGFkZGluZy1ib3R0b206ICAgMHB4Ow0KfQ0KDQoNCi5zZXJ2aWNlMzExew0KICBwYWRkaW5nIDogMHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDE2NmNlOw0KICANCn0NCi5zZXJ2aWNlMzExIHVsew0KICBwYWRkaW5nLWxlZnQ6ICAgMHB4Ow0KICBwYWRkaW5nLWJvdHRvbTogICAxNXB4Ow0KfQ0KLnNlcnZpY2UzMTEgaDN7DQogIGZvbnQtd2VpZ2h0OiA1MDA7DQp9DQoNCi5zZXJ2aWNlMzExIGgyLA0KLnNlcnZpY2UzMTEgaDN7DQogY29sb3I6ICNmZmY7DQogYm9yZGVyLWJvdHRvbTogICBub25lOw0KfQ0KLnNlcnZpY2UzMTEgdWwgbGkgYXsNCiBjb2xvcjogI2U5ZWJmMDsNCiBib3JkZXItYm90dG9tOiAgIG5vbmU7DQp9DQouc2VydmljZTMxMSB1bCBsaXsgDQogICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyMDUsMjA1LDIwNSwwLjIpOw0KICAgcGFkZGluZy10b3A6IDhweDsNCiAgIHBhZGRpbmctYm90dG9tOiA2cHg7DQp9DQojcGljdHVyZTMxMWFwcHsgIA0KICBoZWlnaHQ6IDM3MHB4Ow0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBwYWRkaW5nOiAwOw0KfQ0KDQojZGFsbGFzMzExbW9iaWxlew0KICB3aWR0aDogMTAwJTsNCiAgb3BhY2l0eTogMC44OyANCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCn0NCi5hcHBpY29uew0KICB3aWR0aDogMTUwcHg7DQogIHBhZGRpbmctcmlnaHQ6IDEwcHg7DQp9DQouYXBwaWNvbiBpbWd7DQogIHdpZHRoOiAxMjBweCAhaW1wb3J0YW50Ow0KICBwYWRkaW5nLXJpZ2h0OiAxMHB4Ow0KICBoZWlnaHQ6IDM1cHg7DQp9DQouY2hlY2t7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMzNkNzk7DQogIHBhZGRpbmc6IDIwcHggMCAgOyAgIA0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIHdpZHRoOiAxMDAlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7IA0KfQ0KLmNoZWNrIGgzew0KICBwYWRkaW5nOiA1cHggMjBweDsNCiAgbWF4LXdpZHRoOiAzNTBweDsgDQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCn0NCi5jaGVjayBpbnB1dHsgIA0KICBtYXgtd2lkdGg6IDkwJTsNCnBhZGRpbmctbGVmdDogMjBweDsNCnBhZGRpbmc6IDEwcHg7DQpoZWlnaHQ6IDQ1cHg7DQp3aWR0aDogNzAwcHg7DQp9DQouaGlkZGVuLXh4c3sNCiAgdmlzaWJpbGl0eTogdmlzaWJsZTsNCn0NCi52aXNpYmxlLXh4c3sNCiAgZGlzcGxheTogbm9uZTsNCn0NCi5pbm5lci0zMTEgdWx7DQogICAgY29sdW1uLWNvdW50OiAyOw0KfQ0KLmlubmVyLTMxMS10aXRsZSBoM3sNCiAgICBwYWRkaW5nLWJvdHRvbTogICAwOw0KfQ0KDQpzZWN0aW9uLnNlcnZpY2VzLWJhbm5lciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMTY2Y2U7IH0NCg0Kc2VjdGlvbi5zZXJ2aWNlcy1iYW5uZXIgew0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOyB9DQoNCi5tYnItei1pbmRleDIwIHsNCiAgei1pbmRleDogMjA7IH0NCg0KDQovKiEgTWVkaWEgICovDQoubWVkaWEtc2l6ZS1pdGVtIHsNCiAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsNCiAgLW1vei1mbGV4OiAxIDEgYXV0bzsNCiAgLW1zLWZsZXg6IDEgMSBhdXRvOw0KICAtby1mbGV4OiAxIDEgYXV0bzsNCiAgZmxleDogMSAxIGF1dG87IH0NCg0KLm1lZGlhLWNvbnRlbnQgew0KICAtd2Via2l0LWZsZXgtYmFzaXM6IDEwMCU7DQogIGZsZXgtYmFzaXM6IDEwMCU7IH0NCg0KLm1lZGlhLWNvbnRhaW5lci1yb3cgew0KICBkaXNwbGF5OiAtbXMtZmxleGJveDsNCiAgZGlzcGxheTogLXdlYmtpdC1mbGV4Ow0KICBkaXNwbGF5OiBmbGV4Ow0KICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7DQogIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93Ow0KICBmbGV4LWRpcmVjdGlvbjogcm93Ow0KICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsNCiAgLW1zLWZsZXgtd3JhcDogd3JhcDsNCiAgZmxleC13cmFwOiB3cmFwOw0KICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7DQogIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsNCiAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7DQogIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsNCiAgLXdlYmtpdC1hbGlnbi1pdGVtczogc3RhcnQ7DQogIC1tcy1mbGV4LWFsaWduOiBzdGFydDsNCiAgYWxpZ24taXRlbXM6IHN0YXJ0OyB9DQogIC5tZWRpYS1jb250YWluZXItcm93IC5tZWRpYS1zaXplLWl0ZW0gew0KICAgIHdpZHRoOiAzNzVweDsgfQ0KDQoubWVkaWEtY29udGFpbmVyLWNvbHVtbiB7DQogIGRpc3BsYXk6IC1tcy1mbGV4Ym94Ow0KICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7DQogIGRpc3BsYXk6IGZsZXg7DQogIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogIC13ZWJraXQtZmxleC13cmFwOiB3cmFwOw0KICAtbXMtZmxleC13cmFwOiB3cmFwOw0KICBmbGV4LXdyYXA6IHdyYXA7DQogIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsNCiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOw0KICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsNCiAgYWxpZ24tY29udGVudDogY2VudGVyOw0KICAtd2Via2l0LWFsaWduLWl0ZW1zOiBzdHJldGNoOw0KICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaDsNCiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7IH0NCiAgLm1lZGlhLWNvbnRhaW5lci1jb2x1bW4gPiAqIHsNCiAgICB3aWR0aDogMTAwJTsgfQ0KDQpAbWVkaWEgKG1pbi13aWR0aDogNTgycHgpIHsNCi5zZXJ2aWNlMzExIHVsIGxpOm50aC1jaGlsZCg0bis0KSB7DQogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsNCn0NCiAgLm1lZGlhLWNvbnRhaW5lci1yb3cgew0KICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7DQogICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOw0KICAgIGZsZXgtd3JhcDogbm93cmFwOyB9IH0NCg0KLm1ici1maWd1cmUgaW1nLCAubWJyLWZpZ3VyZSBpZnJhbWUgew0KICBkaXNwbGF5OiBibG9jazsNCiAgd2lkdGg6IDEwMCU7IH0NCg0KLm1ici1maWd1cmUgew0KICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7DQogIC1tcy1ncmlkLXJvdy1hbGlnbjogY2VudGVyOw0KICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsNCiAgYWxpZ24tc2VsZjogY2VudGVyOyB9DQoNCi5tZWRpYS1jb250YWluZXIgPiBkaXYgew0KICBtYXgtd2lkdGg6IDEwMCU7IH0NCg0KLm1ici1maWd1cmUgaW1nLCAuY2FyZC1pbWcgaW1nIHsNCiAgd2lkdGg6IDEwMCU7IH0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDU4MXB4KSB7DQogIC5tZWRpYS1zaXplLWl0ZW0gew0KICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7IH0NCg0KICAubWJyLWZpZ3VyZSB7DQogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICB9DQogICAjZGFsbGFzMzExbW9iaWxlew0KICBvcGFjaXR5OiAxOyANCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KLmluLW1pZGRsZXsgICANCiAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsNCiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsNCiAgICBoZWlnaHQ6IDE3MHB4Ow0KICAgIHBhZGRpbmc6IDMwcHggMCAwIDMwcHg7DQogIA0KfQ0KLmlubmVyLTMxMS10aXRsZSB7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQoNCi5pbm5lci0zMTEgew0KICAgIHBhZGRpbmc6IDEuNXJlbTsNCn0NCi5ob21lLTMxMS1idXR0b25zew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQouaG9tZS0zMTEtYnV0dG9ucyAuYnRueyAgDQogIC8qd2lkdGg6IDE2MHB4OyovDQp9DQouaW4tbWlkZGxlIGgzLCAuaW4tbWlkZGxlIGgyew0KICBjb2xvcjogIzMzMzsNCn0NCg0KI3BpY3R1cmUzMTFhcHB7DQogIHdpZHRoOiAxMDAlOw0KICBoZWlnaHQ6IGF1dG87ICANCiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCn0NCi5jaGVjayB7ICAgDQogICAgcGFkZGluZzogMDsNCn0NCi5jaGVjayBoM3sNCiAgcGFkZGluZzogMTVweCAwIDVweCAwOw0KfQ0KLmhpZGRlbi14eHN7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoudmlzaWJsZS14eHN7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KLmlubmVyLTMxMSB1bHsNCiAgICBjb2x1bW4tY291bnQ6IDE7DQp9DQoNCiB9DQoNCi8qIDMxMSBpbmZvcm1hdGlvbiAqLw0KLmFsaWduLXNlbGYtY2VudGVyIHsNCiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsNCiAgICBhbGlnbi1zZWxmOiBjZW50ZXIgIWltcG9ydGFudDsNCn0NCi5weC0zIHsNCiAgICBwYWRkaW5nLWxlZnQ6IDFyZW0gIWltcG9ydGFudDsNCn0NCi5weS0yIHsNCiAgICBwYWRkaW5nLXRvcDogLjVyZW0gIWltcG9ydGFudDsNCiAgICBwYWRkaW5nLWJvdHRvbTogLjVyZW0gIWltcG9ydGFudDsNCn0NCi5hbGlnbi1zZWxmLWNlbnRlciB7DQogICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7DQogICAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7DQp9DQouaW5uZXItMzExIHsgDQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogYXV0bzsNCn0NCi8qIEN1c3RvbSwgaVBob25lIFJldGluYSAqLyANCiAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiAzMjBweCkgew0KICAgIC5tZWRpYS1jb250YWluZXItcm93IHsNCiAgICAgICAgaGVpZ2h0OiBhdXRvOw0KICAgICAgICBvdmVyZmxvdzogYXV0bzsgfQ0KICAgIC5weC0zIHsNCiAgICAgICAgcGFkZGluZy1yaWdodDogMDsgfQ0KICAgDQp9DQovKiBFeHRyYSBTbWFsbCBEZXZpY2VzLCBQaG9uZXMgKi8gDQogICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoIDogNDgwcHgpIHsNCiAgICAgICAgLnB4LTMgew0KICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMXJlbSAhaW1wb3J0YW50OyB9DQogICAgICAgIC5pbm5lci0zMTEgew0KICAgICAgICAgICAgcGFkZGluZzogNjBweCAzMHB4IDEwcHggMzBweDsNCiAgICAgICAgICAgIHdpZHRoOiAgMTAwJTsgfQ0KICAgIH0NCi8qIExhcmdlIERldmljZXMsIFdpZGUgU2NyZWVucyAqLw0KICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDE0MDBweCkgew0KICAgIC5tZWRpYS1jb250YWluZXItcm93IHsNCiAgICAgICAgaGVpZ2h0OiBhdXRvOw0KICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyB9DQp9DQo8L3N0eWxlPg0KDQoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjbGVhcmZpeCI+PC9kaXY+DQoNCjxkaXYgaWQ9ImZpbmQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IGJhY2drZ3JvdW5kLWNvbG9yOmdyZXk7Ij4NCjxoMz5GaW5kPC9oMz48YnIvPg0KDQo8ZGl2Pg0KPGlucHV0IHN0eWxlPSJ3aWR0aDo3MCU7Ym9yZGVyLXJhZGl1czoxMDBweDtib3JkZXI6c29saWQgMXB4ICNkZGQ7cGFkZGluZzo2cHggMTBweDsiIGlkPSJmaW5kc2VhcmNoaW5wdXQiLz4NCjxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MTBweDtib3JkZXItcmFkaXVzOjAuM2VtO3BhZGRpbmc6NnB4O2NvbG9yOndoaXRlO2JhY2tncm91bmQtY29sb3I6IzY5MDsiIGNsYXNzPSJzZWFyY2hCdG4iIGlkPSJmaW5kc2VhcmNoYnV0dG9uIiBvbmNsaWNrPSJmaW5kc2VhcmNoKCkiPlNlYXJjaDwvYnV0dG9uPg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9Iml3YW50dG9pY29ucyI+DQo8dWw+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL2h1bWFucmVzb3VyY2VzL2VtcGxveW1lbnQvUGFnZXMvZGVmYXVsdC5hc3B4IiBpZD0iZmluZC1saWdodGJveC1qb2IiPjxpbWcgY2xhc3M9InNlcnZpY2VpbWciIHNyYz0iL1B1Ymxpc2hpbmdJbWFnZXMvc3RhdGljL2VtcGxveW1lbnRpY29uLnBuZyIgYWx0PSJKb2JzIEljb24iIC8+PGJyIC8+Sm9iPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL2RhbGxhc2xpYnJhcnkyLm9yZy8iIHRhcmdldD0iX2JsYW5rIiBpZD0iZmluZC1saWdodGJveC1saWJyYXJ5Ij48aW1nIGNsYXNzPSJzZXJ2aWNlaW1nIiBzcmM9Ii9QdWJsaXNoaW5nSW1hZ2VzL3N0YXRpYy9saWJyYXJ5aWNvbi5wbmciIGFsdD0iTGlicmFyeSBJY29uIiAvPjxiciAvPkxpYnJhcnk8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmRhbGxhc2FuaW1hbHNlcnZpY2VzLm9yZy8iIHRhcmdldD0iX2JsYW5rIiBpZD0iZmluZC1saWdodGJveC1wZXRzIj48aW1nIGNsYXNzPSJzZXJ2aWNlaW1nIiBzcmM9Ii9QdWJsaXNoaW5nSW1hZ2VzL3N0YXRpYy9wZXRpY29uLnBuZyIgYWx0PSJEYWxsYXMgQW5pbWFsIFNlcnZpY2VzIEljb24iIC8+PGJyIC8+UGV0czwvYT48L2xpPg0KPGxpIHN0eWxlPSJtYXJnaW4tcmlnaHQ6MHB4OyI+PGEgaHJlZj0iaHR0cDovL3d3dy5kYWxsYXNwYXJrcy5vcmcvIiB0YXJnZXQ9Il9ibGFuayIgaWQ9ImZpbmQtbGlnaHRib3gtcGFya3MtcmVjcmVhdGlvbiI+PGltZyBjbGFzcz0ic2VydmljZWltZyIgc3JjPSIvUHVibGlzaGluZ0ltYWdlcy9zdGF0aWMvcGFya3NpY29uLnBuZyIgYWx0PSJQYXJrcyAmIFJlY3JlYXRpb24gSWNvbiIgLz48YnIgLz5QYXJrczwvYT48L2xpPg0KPC91bD4NCjxkaXYgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wteHMtMTIgbGlzdC1pdGVtcyI+DQo8dWw+DQo8bGk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cuZGFsbGFzY3VsdHVyZS5vcmcvY3VsdHVyYWxGYWNpbGl0aWVzLmFzcCIgaWQ9ImZpbmQtbGlnaHRib3gtY3VsdHVyYWwtY2VudGVyIj5hIEN1bHR1cmFsIENlbnRlcjwvYT48L2xpPg0KPCEtLTxsaT48YSBocmVmPSIvZGVwYXJ0bWVudHMvaHVtYW5yZXNvdXJjZXMvZW1wbG95bWVudC9QYWdlcy9kZWZhdWx0LmFzcHgiPmEgSm9iPC9hPjwvbGk+DQo8bGk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly9kYWxsYXNsaWJyYXJ5Lm9yZy8iPmEgTGlicmFyeTwvYT48L2xpPi0tPg0KPGxpPjxhIGhyZWY9Ii9kZXBhcnRtZW50cy9jaXNlcnZpY2VzL1BhZ2VzL2VudGVycHJpc2UtZ2lzLmFzcHgiIGlkPSJmaW5kLWxpZ2h0Ym94LW1hcCI+YSBNYXA8L2E+PC9saT4NCjxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5kYWxsYXNwYXJrcy5vcmciIGlkPSJmaW5kLWxpZ2h0Ym94LWRhbGxhcy1wYXJrIj5hIFBhcms8L2E+PC9saT4NCjwvdWw+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29sLW1kLTYgY29sLXhzLTEyIGxpc3QtaXRlbXMgY29sLWVuZCI+DQo8dWw+DQo8IS0tPGxpPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LmRhbGxhc3BhcmtzLm9yZy8iPmEgUGFyayBSZWMgQ2VudGVyPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL2RhbGxhcy1hbmltYWwtc2VydmljZXMvUGFnZXMvYWRvcHRpb24uYXNweCI+YSBQZXQ8L2E+PC9saT4tLT4NCjxsaT48YSBocmVmPSIvZGVwYXJ0bWVudHMvcG52L1BhZ2VzL3pvbmluZy5hc3B4IiBpZD0iZmluZC1saWdodGJveC1wcm9wZXJ0eS16b25pbmciPlByb3BlcnR5IFpvbmluZzwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9kZXBhcnRtZW50cy9jb2RlY29tcGxpYW5jZS9QYWdlcy9Gb29kU2FmZXR5LmFzcHgiIGlkPSJmaW5kLWxpZ2h0Ym94LXJlc3RhdXJhbnQtc2NvcmVzIj5SZXN0YXVyYW50IFNjb3JlczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9kZXBhcnRtZW50cy9zYW5pdGF0aW9uIiBpZD0iZmluZC1saWdodGJveC10cmFzaC1waWNrdXAiPlRyYXNoIFBpY2t1cDwvYT48L2xpPg0KPC91bD4NCjwvZGl2Pg0KDQo8L2Rpdj4NCg0KPGRpdiBpZD0icGF5IiBzdHlsZT0iZGlzcGxheTpub25lOyBiYWNna2dyb3VuZC1jb2xvcjpncmV5OyI+DQo8aDM+UGF5PC9oMz48YnIvPg0KDQo8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wteHMtMTIgbGlzdC1pdGVtcyI+DQo8dWw+DQo8bGk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ii9kZXBhcnRtZW50cy93YXRlcnV0aWxpdGllcy9QYWdlcy9wYXktd2F0ZXItYmlsbC5hc3B4IiBpZD0icGF5LWxpZ2h0Ym94LXdhdGVyIj5XYXRlciBCaWxsPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL2NvdXJ0ZGV0ZW50aW9uc2VydmljZXMvUGFnZXMvZGVmYXVsdC5hc3B4IiBpZD0icGF5LWxpZ2h0Ym94LXRyYWZmaWMtdGlja2V0Ij5UcmFmZmljICZhbXA7IENpdmlsIFRpY2tldHM8L2E+PC9saT4NCjxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly93bXEuZXRpbXNwYXltZW50cy5jb20vcGJ3L2luY2x1ZGUvZGFsbGFzL2lucHV0LmpzcCIgaWQ9InBheS1saWdodGJveC1wYXJraW5nLXRpY2tldCI+UGFya2luZyBUaWNrZXQ8L2E+PC9saT4NCjxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly93d3cudmVsb2NpdHlwYXltZW50LmNvbS9jbGllbnQvYmFua29mYW1lcmljYS9jaXR5b2ZkYWxsYXMvZnJhYi9pbmRleC5odG1sIiBpZD0icGF5LWxpZ2h0Ym94LWFtYnVsYW5jZS10aWNrZXQiPkFtYnVsYW5jZSBCaWxsPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL3dhdGVydXRpbGl0aWVzL3NwZWNpYWxfY29sbGVjdGlvbnMvUGFnZXMvc3BlY2lhbF9jb2xsZWN0aW9uc19yZWdpc3RyYXRpb25zLmFzcHgiIGlkPSJwYXktbGlnaHRib3gtYWxhcm1zLXBlcm1pdHMiPkFsYXJtcyBQZXJtaXRzPC9hPjwvbGk+DQo8bGk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vd21xLmV0aW1zcGF5bWVudHMuY29tL3Bidy9pbmNsdWRlL2RhbGxhcy9pbnB1dC5qc3AiIGlkPSJwYXktbGlnaHRib3gtc2Nob29sLWJ1cy1zdG9wLWFybS10aWNrZXQiPlNjaG9vbCBCdXMgU3RvcCBBcm0gVGlja2V0PC9hPjwvbGk+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29sLW1kLTYgY29sLXhzLTEyIGxpc3QtaXRlbXMgY29sLWVuZCI+DQo8dWw+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL2NvdXJ0ZGV0ZW50aW9uc2VydmljZXMvUGFnZXMvV2FycmFudC1JbmZvLmFzcHgiIGlkPSJwYXktbGlnaHRib3gtY291cnQtd2FycmFudHMtYm9uZCI+Q291cnQgV2FycmFudHMgJmFtcDsgQm9uZHM8L2E+PC9saT4NCg0KPGxpPjxhIGhyZWY9Ii9QYWdlcy9wYXlieWFwcC5hc3B4IiBpZD0icGF5LWxpZ2h0Ym94LXBhcmtpbmctbWV0ZXJzIj5Gb3IgUGFya2luZyBNZXRlcnM8L2E+PC9saT4NCjxsaT48YSBocmVmPSIvZGVwYXJ0bWVudHMvY29kZWNvbXBsaWFuY2UvUGFnZXMvZ2FyYWdlLXNhbGVzLmFzcHgiIGlkPSJwYXktbGlnaHRib3gtZ2FyYWdlLXNhbGVzLXBlcm1pdCI+R2FyYWdlIFNhbGVzIFBlcm1pdDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9kZXBhcnRtZW50cy9jb250cm9sbGVyc29mZmljZS9QYWdlcy9ob3RlbC10YXhlcy5hc3B4IiBpZD0icGF5LWxpZ2h0Ym94LWhvdGVsLW9jY3VwYW5jeS10YXgiPkhvdGVsIE9jY3VwYW5jeSBUYXggKEhPVCk8L2E+PC9saT4NCjxsaT48YSBocmVmPSIvZGVwYXJ0bWVudHMvY29udHJvbGxlcnNvZmZpY2UvUGFnZXMvaG90ZWwtdGF4ZXMuYXNweCIgaWQ9InBheS1saWdodGJveC1zaG9ydC10ZXJtLXJlbnRhbHMiPlNob3J0LVRlcm0gUmVudGFscyAoSE9UKTwvYT48L2xpPg0KPCEtLTxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iL2RlcGFydG1lbnRzL2NvZGVjb21wbGlhbmNlL1BhZ2VzL0NhcnJ5b3V0LUJhZy1Qcm9ncmFtLmFzcHgiPlNpbmdsZS1Vc2UgQ2FycnlvdXQgQmFnIFJlbWl0dGFuY2U8L2E+PC9saT4tLT4NCjwvdWw+DQo8L2Rpdj4NCg0KPC9kaXY+DQoNCjxkaXYgaWQ9InJlcXVlc3QiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IGJhY2drZ3JvdW5kLWNvbG9yOmdyZXk7Ij4NCjxoMz5SZXF1ZXN0PC9oMz48YnIvPg0KDQo8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wteHMtMTIgbGlzdC1pdGVtcyI+DQo8dWw+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL3N1c3RhaW5hYmxlZGV2ZWxvcG1lbnQvYnVpbGRpbmdpbnNwZWN0aW9uIiBpZD0icmVxdWVzdC1saWdodGJveC1idWlsZGluZy1wZXJtaXRzLWluc3BlY3Rpb25zIj5CdWlsZGluZyBQZXJtaXRzICZhbXA7IEluc3BlY3Rpb25zPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL3NlcnZpY2VzLzMxMSIgaWQ9InJlcXVlc3QtbGlnaHRib3gtbm9uLWVtZXJnZW5jeS1zZXJ2aWNlcyI+MzExIFNlcnZpY2VzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL2RlcGFydG1lbnRzL2NvbW11bml0eS1jYXJlL1BhZ2VzL3ZpdGFsX3N0YXRpc3RpY3MuYXNweCIgaWQ9InJlcXVlc3QtbGlnaHRib3gtYmlydGgtZGVhdGgtY2VydGlmaWNhdGVzIj5CaXJ0aCAvIERlYXRoIENlcnRpZmljYXRlczwvYT48L2xpPg0KPGxpPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL3d3dy5kYWxsYXNzcGVjaWFsZXZlbnRzLmNvbS9zcGVjaWFsLWV2ZW50LyIgaWQ9InJlcXVlc3QtbGlnaHRib3gtZXZlbnQtcGVybWl0cyI+RXZlbnQgUGVybWl0czwvYT48L2xpPg0KPGxpPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL3d3dy5kYWxsYXNzcGVjaWFsZXZlbnRzLmNvbS9maWxtLyIgaWQ9InJlcXVlc3QtbGlnaHRib3gtZmlsbWluZy1wZXJtaXRzIj5GaWxtaW5nIFBlcm1pdHM8L2E+PC9saT4NCjwvdWw+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29sLW1kLTYgY29sLXhzLTEyIGxpc3QtaXRlbXMiPg0KPGgzPk5ldyBVdGlsaXR5IFNlcnZpY2VzPC9oMz4NCjx1bD4NCjxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5wb3dlcnRvY2hvb3NlLm9yZy8iIGlkPSJyZXF1ZXN0LWxpZ2h0Ym94LWVsZWN0cmljaXR5LXByb3ZpZGVycyI+RWxlY3RyaWNpdHkgUHJvdmlkZXJzPC9hPjwvbGk+DQo8bGk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vd3d3LmFsbGNvbm5lY3QuY29tL2xvY2FsL3R4L2RhbGxhcyIgaWQ9InJlcXVlc3QtbGlnaHRib3gtdHYiPkNhYmxlLVRWLVNhdGVsbGl0ZTwvYT48L2xpPg0KPGxpPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL3d3dy4ydHVybml0b24uY29tLyIgaWQ9InJlcXVlc3QtbGlnaHRib3gtdXRpbGl0aWVzIj5BY3RpdmF0ZSBVdGlsaXRpZXM8L2E+PC9saT4NCjwvdWw+DQo8L2Rpdj4NCg0KPC9kaXY+DQoNCjwhLS08ZGl2IGlkPSJvcGVuZGF0YSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsgYmFjZ2tncm91bmQtY29sb3I6Z3JleTsiPg0KPGgzPk9wZW4gRGF0YTwvaDM+PGJyLz4NCg0KPGRpdiBjbGFzcz0iaXdhbnR0b2ljb25zIj4NCjx1bD4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYWxsYXNvcGVuZGF0YS5jb20vIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBjbGFzcz0ic2VydmljZWltZyIgc3JjPSIvUHVibGlzaGluZ0ltYWdlcy9zdGF0aWMvb3BlbmRhdGFpY29uLnBuZyIgYWx0PSJPcGVuIERhdGEgSWNvbiIgLz48YnIgLz5PcGVuIERhdGE8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYWxsYXNvcGVuZGF0YS5jb20vYnJvd3NlP2NhdGVnb3J5PVBvbGljZSZsaW1pdFRvPWRhdGFzZXRzJnV0Zjg9JUUyJTlDJTkzIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBjbGFzcz0ic2VydmljZWltZyIgc3JjPSIvUHVibGlzaGluZ0ltYWdlcy9zdGF0aWMvcG9saWNlaWNvbi5wbmciIGFsdD0iUG9saWNlIEljb24iIC8+PGJyIC8+UG9saWNlPC9hPjwvbGk+DQo8bGkgc3R5bGU9Im1hcmdpbi1yaWdodDowcHg7Ij48YSBocmVmPSJodHRwczovL3d3dy5kYWxsYXNvcGVuZGF0YS5jb20vYnJvd3NlP2NhdGVnb3J5PUZpbmFuY2lhbCZxPUZpbmFuY2lhbCZzb3J0Qnk9cmVsZXZhbmNlJnV0Zjg9JUUyJTlDJTkzIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBjbGFzcz0ic2VydmljZWltZyIgc3JjPSIvUHVibGlzaGluZ0ltYWdlcy9zdGF0aWMvZmluYW5jaWFsaWNvbi5wbmciIGFsdD0iRmluYW5jZSBJY29uIiAvPjxiciAvPkZpbmFuY2lhbDwvYT48L2xpPg0KPC91bD4NCjxkaXYgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjb2wtMyBsaXN0LWl0ZW1zIGNvbC1lbmQiIHN0eWxlPSJ3aWR0aDoxMDAlIj4NCjx1bD4NCjxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9naXMuZGFsbGFzY2l0eWhhbGwuY29tL3NoYXBlZmlsZURvd25sb2FkLmFzcHgiPkRvd25sb2FkIEdJUyBEYXRhPC9hPjwvbGk+DQo8bGk+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vZ2lzLmRhbGxhc2NpdHloYWxsLmNvbS9jaXR5aW5mby8iPkludGVyYWN0aXZlIEdJUyBNYXA8L2E+PC9saT4NCjxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9naXMuZGFsbGFzY2l0eWhhbGwuY29tL3N0YXRpY01hcEdhbC5hc3B4Ij5TdGF0aWMgR0lTIE1hcHM8L2E+PC9saT4NCjxsaT48YSBocmVmPSIvZGVwYXJ0bWVudHMvY29kZWNvbXBsaWFuY2UvUGFnZXMvRm9vZFNhZmV0eS5hc3B4Ij5SZXN0YXVyYW50IFNjb3JlczwvYT48L2xpPg0KPC91bD4NCjwvZGl2Pg0KDQo8L2Rpdj4tLT4NCg0KPHNjcmlwdD4NCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCg0KICAgICQoIi5pd2FudHRvbW9kYWwiKS5mYW5jeWJveCh7DQogICAgICAgICd0aXRsZVBvc2l0aW9uJyAgICAgOiAnaW5zaWRlJywNCiAgICAgICAgJ3RyYW5zaXRpb25JbicgICAgICA6ICdub25lJywNCiAgICAgICAgJ3RyYW5zaXRpb25PdXQnICAgICA6ICdub25lJw0KICAgIH0pOw0KDQogICAgJCgiLnN3YWdpdCIpLmZhbmN5Ym94KHsNCiAgICAgICAgJ3RpdGxlUG9zaXRpb24nICAgICA6ICdpbnNpZGUnLA0KICAgICAgICAndHJhbnNpdGlvbkluJyAgICAgIDogJ25vbmUnLA0KICAgICAgICAndHJhbnNpdGlvbk91dCcgICAgIDogJ25vbmUnLA0KICAgICAgICAndHlwZScgICAgICAgICAgOiAnaWZyYW1lJywNCiAgICAgICAgJ3dpZHRoJyAgICAgICAgIDogNTcwLA0KICAgICAgICAnaGVpZ2h0JyAgICAgICAgOiA0ODAsDQogICAgICAgICdzY3JvbGxpbmcnICAgICAgICAgOiAnbm8nDQogICAgfSk7DQoNCn0pOw0KDQpmdW5jdGlvbiBmaW5kc2VhcmNoKCl7DQp2YXIgZmluZHNlYXJjaGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpbmRzZWFyY2hpbnB1dCIpLnZhbHVlOw0KcGFyZW50LmxvY2F0aW9uPSIvcGFnZXMvc2VhcmNocmVzdWx0cy5hc3B4I2s9IiArIGZpbmRzZWFyY2hpbnB1dDsNCn0NCiQoJy5wYXknKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1BheSBMaWdodGJveCBCdXR0b24nLCAnUGF5Jyk7DQp9KTsNCiQoJy5maW5kJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IEJ1dHRvbicsICdGaW5kJyk7DQp9KTsNCiQoJy5yZXF1ZXN0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdSZXF1ZXN0IExpZ2h0Ym94IEJ1dHRvbicsICdSZXF1ZXN0Jyk7DQp9KTsNCiQoJy5vcGVuLWRhdGEnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ0RhdGEgVHJhbnNwYXJlbmN5IExpZ2h0Ym94IEJ1dHRvbicsICdEYXRhIFRyYW5zcGFyZW5jeScpOw0KfSk7DQokKCcjZmluYW50aWFsLXRyYW5zcGFyZW5jeScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnRXh0ZXJuYWwgTGluayBCdXR0b24nLCAnRmluYW5jaWFsIFRyYW5zcGFyZW5jeScpOw0KfSk7DQokKCcjb3Blbi1yZWNvcmRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdQSU8gQnV0dG9uJywgJ09wZW4gUmVjb3JkcyBSZXF1ZXN0Jyk7DQp9KTsNCg0KJCgnI3BheS1saWdodGJveC13YXRlcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnUGF5IExpZ2h0Ym94IExpbmsnLCAnV2F0ZXIgQmlsbCcpOw0KfSk7DQokKCcjcGF5LWxpZ2h0Ym94LXRyYWZmaWMtdGlja2V0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdQYXkgTGlnaHRib3ggTGluaycsICdUcmFmZmljIFRpY2tldCcpOw0KfSk7DQokKCcjcGF5LWxpZ2h0Ym94LXBhcmtpbmctdGlja2V0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdQYXkgTGlnaHRib3ggTGluaycsICdQYXJraW5nIFRpY2tldCcpOw0KfSk7DQokKCcjcGF5LWxpZ2h0Ym94LXJlZC1saWdodC10aWNrZXQnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1BheSBMaWdodGJveCBMaW5rJywgJ1JlZCBMaWdodCBUaWNrZXQnKTsNCn0pOw0KJCgnI3BheS1saWdodGJveC1hbWJ1bGFuY2UtdGlja2V0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdQYXkgTGlnaHRib3ggTGluaycsICdBbWJ1bGFuY2UgQmlsbCcpOw0KfSk7DQokKCcjcGF5LWxpZ2h0Ym94LWFsYXJtcy1wZXJtaXRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdQYXkgTGlnaHRib3ggTGluaycsICdBbGFybXMgUGVybWl0cycpOw0KfSk7DQokKCcjcGF5LWxpZ2h0Ym94LWNvdXJ0LXdhcnJhbnRzLWJvbmQnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1BheSBMaWdodGJveCBMaW5rJywgJ0NvdXJ0IFdhcnJhbnRzIGFuZCBCb25kcycpOw0KfSk7DQokKCcjcGF5LWxpZ2h0Ym94LXNjaG9vbC1idXMtc3RvcC1hcm0tdGlja2V0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdQYXkgTGlnaHRib3ggTGluaycsICdTY2hvb2wgQnVzIFN0b3AgQXJtIFRpY2tldCcpOw0KfSk7DQokKCcjcGF5LWxpZ2h0Ym94LXBhcmtpbmctbWV0ZXJzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdQYXkgTGlnaHRib3ggTGluaycsICdGb3IgUGFya2luZyBNZXRlcnMnKTsNCn0pOw0KJCgnI3BheS1saWdodGJveC1nYXJhZ2Utc2FsZXMtcGVybWknKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1BheSBMaWdodGJveCBMaW5rJywgJ0dhcmFnZSBTYWxlcyBQZXJtaXQnKTsNCn0pOw0KDQoNCg0KDQoNCiQoJyNwYXktbGlnaHRib3gtaG90ZWwtb2NjdXBhbmN5LXRheCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnUGF5IExpZ2h0Ym94IExpbmsnLCAnSG90ZWwgT2NjdXBhbmN5IFRheCAoSE9UKScpOw0KfSk7DQoNCiQoJyNwYXktbGlnaHRib3gtc2hvcnQtdGVybS1yZW50YWxzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdQYXkgTGlnaHRib3ggTGluaycsICdTaG9ydC1UZXJtIFJlbnRhbHMgKEhPVCknKTsNCn0pOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiQoJyNmaW5kc2VhcmNoYnV0dG9uJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IExpbmsnLCAnU2VhcmNoJyk7DQp9KTsNCiQoJyNmaW5kLWxpZ2h0Ym94LWpvYicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnRmluZCBMaWdodGJveCBMaW5rJywgJ0pvYicpOw0KfSk7DQokKCcjZmluZC1saWdodGJveC1saWJyYXJ5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IExpbmsnLCAnTGlicmFyeScpOw0KfSk7DQokKCcjZmluZC1saWdodGJveC1wZXRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IExpbmsnLCAnUGV0cycpOw0KfSk7DQokKCcjZmluZC1saWdodGJveC1wYXJrcy1yZWNyZWF0aW9uJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IExpbmsnLCAnUGFya3MnKTsNCn0pOw0KJCgnI2ZpbmQtbGlnaHRib3gtY3VsdHVyYWwtY2VudGVyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IExpbmsnLCAnYSBDdWx0dXJhbCBDZW50ZXInKTsNCn0pOw0KJCgnI2ZpbmQtbGlnaHRib3gtbWFwJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IExpbmsnLCAnYSBNYXAnKTsNCn0pOw0KJCgnI2ZpbmQtbGlnaHRib3gtZGFsbGFzLXBhcmsnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ0ZpbmQgTGlnaHRib3ggTGluaycsICdhIFBhcmsnKTsNCn0pOw0KJCgnI2ZpbmQtbGlnaHRib3gtcHJvcGVydHktem9uaW5nJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IExpbmsnLCAnUHJvcGVydHkgWm9uaW5nJyk7DQp9KTsNCiQoJyNmaW5kLWxpZ2h0Ym94LXJlc3RhdXJhbnQtc2NvcmVzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IExpbmsnLCAnUmVzdGF1cmFudCBTY29yZXMnKTsNCn0pOw0KJCgnI2ZpbmQtbGlnaHRib3gtdHJhc2gtcGlja3VwJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdGaW5kIExpZ2h0Ym94IExpbmsnLCAnVHJhc2ggUGlja3VwJyk7DQp9KTsNCg0KJCgnI3JlcXVlc3QtbGlnaHRib3gtYnVpbGRpbmctcGVybWl0cy1pbnNwZWN0aW9ucycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnUmVxdWVzdCBMaWdodGJveCBMaW5rJywgJ0J1aWxkaW5nIFBlcm1pdHMgYW5kIEluc3BlY3Rpb25zJyk7DQp9KTsNCiQoJyNyZXF1ZXN0LWxpZ2h0Ym94LW5vbi1lbWVyZ2VuY3ktc2VydmljZXMnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1JlcXVlc3QgTGlnaHRib3ggTGluaycsICczMTEgU2VydmljZXMnKTsNCn0pOw0KJCgnI3JlcXVlc3QtbGlnaHRib3gtYmlydGgtZGVhdGgtY2VydGlmaWNhdGVzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdSZXF1ZXN0IExpZ2h0Ym94IExpbmsnLCAnQmlydGggRGVhdGggQ2VydGlmaWNhdGVzcycpOw0KfSk7DQokKCcjcmVxdWVzdC1saWdodGJveC1ldmVudC1wZXJtaXRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdSZXF1ZXN0IExpZ2h0Ym94IExpbmsnLCAnRXZlbnQgUGVybWl0cycpOw0KfSk7DQokKCcjcmVxdWVzdC1saWdodGJveC1maWxtaW5nLXBlcm1pdHMnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1JlcXVlc3QgTGlnaHRib3ggTGluaycsICdGaWxtaW5nIFBlcm1pdHMnKTsNCn0pOw0KJCgnI3JlcXVlc3QtbGlnaHRib3gtZWxlY3RyaWNpdHktcHJvdmlkZXJzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdSZXF1ZXN0IExpZ2h0Ym94IExpbmsnLCAnRWxlY3RyaWNpdHkgUHJvdmlkZXJzJyk7DQp9KTsNCiQoJyNyZXF1ZXN0LWxpZ2h0Ym94LXR2Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdSZXF1ZXN0IExpZ2h0Ym94IExpbmsnLCAnQ2FibGUtVFYtU2F0ZWxsaXRlJyk7DQp9KTsNCiQoJyNyZXF1ZXN0LWxpZ2h0Ym94LXV0aWxpdGllcycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnUmVxdWVzdCBMaWdodGJveCBMaW5rJywgJ0FjdGl2YXRlIFV0aWxpdGllcycpOw0KfSk7DQoNCg0KJCgnI29wZW4tbWVldGluZ3MnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ09mZmljaWFsIFBvc3RpbmdzJywgJ09wZW4gTWVldGluZ3MnKTsNCn0pOw0KJCgnI2NvdW5jaWwtbWVldGluZ3MnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ09mZmljaWFsIFBvc3RpbmdzJywgJ0NvdW5jaWwgTWVldGluZ3MnKTsNCn0pOw0KJCgnI2NvdW5jaWwtYXR0ZW5kYW5jZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnT2ZmaWNpYWwgUG9zdGluZ3MnLCAnQ291bmNpbCBBdHRlbmFuY2UnKTsNCn0pOw0KJCgnI3B1YmxpYy1ub3RpY2VzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdPZmZpY2lhbCBQb3N0aW5ncycsICdQdWJsaWMgTm90aWNlcycpOw0KfSk7DQokKCcjY2l0eS1jYWxlbmRhcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnT2ZmaWNpYWwgUG9zdGluZ3MnLCAnQ2l0eSBDYWxlbmRhcicpOw0KfSk7DQokKCcjY291bmNpbC1tZW1vcycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnT2ZmaWNpYWwgUG9zdGluZ3MnLCAnQ291bmNpbCBNZW1vcycpOw0KfSk7DQokKCcjYnVkZ2V0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdPZmZpY2lhbCBQb3N0aW5ncycsICdCdWRnZXQnKTsNCn0pOw0KJCgnI2NpdHktbWVldGluZy12aWRlbycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnT2ZmaWNpYWwgUG9zdGluZ3MnLCAnV2F0Y2ggQ2l0eSBNZWV0aW5ncyBPbmxpbmUnKTsNCn0pOw0KDQokKCcjcXVpY2stbGlua3Mtam9icycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnUXVpY2sgTGlua3MnLCAnSm9icycpOw0KfSk7DQokKCcjcXVpY2stbGlua3Mtd2F0ZXInKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1F1aWNrIExpbmtzJywgJ1dhdGVyIFV0aWxpdGllcycpOw0KfSk7DQokKCcjcXVpY2stbGlua3MtYnVpbGRpbmctcGVybWl0cy1pbnNwZWN0aW9ucycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnUXVpY2sgTGlua3MnLCAnQnVpbGRpbmcgUGVybWl0cyBhbmQgSW5zcGVjdGlvbnMnKTsNCn0pOw0KJCgnI3F1aWNrLWxpbmtzLXRyYWZmaWMtdGlja2V0cycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnUXVpY2sgTGlua3MnLCAnVHJhZmZpYyBUaWNrZXRzJyk7DQp9KTsNCiQoJyNxdWljay1saW5rcy1jb3VydHMnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1F1aWNrIExpbmtzJywgJ0NvdXJ0IFdhcnJhbnRzIGFuZCBCb25kcycpOw0KfSk7DQokKCcjcXVpY2stbGlua3Mtc2FuaXRhdGlvbicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnUXVpY2sgTGlua3MnLCAnVHJhc2ggUGlja3VwJyk7DQp9KTsNCiQoJyNxdWljay1saW5rcy0zMTEnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1F1aWNrIExpbmtzJywgJzMxMSBTZXJ2aWNlcycpOw0KfSk7DQokKCcjcXVpY2stbGlua3MtdHJhbnNwb3J0YXRpb24nKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1F1aWNrIExpbmtzJywgJ1RyYW5zcG9ydGF0aW9uIGZvciBIaXJlJyk7DQp9KTsNCiQoJyNxdWljay1saW5rcy0yMTEnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJ1F1aWNrIExpbmtzJywgJzIxMSBMaW5rcycpOw0KfSk7DQokKCcjcXVpY2stbGlua3MtYW5pbWFsLXNlcnZpY2VzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICdRdWljayBMaW5rcycsICdBbmltYWwgU2VydmljZXMnKTsNCn0pOw0KDQoNCiQoJy5idG4tc2Vjb25kYXJ5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSG9tZSBMaW5rcycsICczMTEnLCAnUmVxdWVzdCBhIFNlcnZpY2UnKTsNCn0pOw0KJCgnLmJ0bi1taW5pbWFsLXJldmVyc2UnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICBnYSgnc2VuZCcsICdldmVudCcsICdIb21lIExpbmtzJywgJzMxMScsICdDaGVjayBTdGF0dXMnKTsNCn0pOw0KJCgnLmdvb2dsZWFwcCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnMzExJywgJ0dvb2dsZSBQbGF5IFN0b3JlJyk7DQp9KTsNCiQoJy5hcHBsZWFwcCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgJ0hvbWUgTGlua3MnLCAnMzExJywgJ0FwcGxlIFN0b3JlJyk7DQp9KTsNCiQoJy5idG4uc2Vjb25kYXJ5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCAnSGVybycsICc3LzdFdmVudCcsICdMZWFybiBNb3JlJyk7DQp9KTsNCjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICAvL2FkZCBhIGN1c3RvbSBjbGljayBldmVudCB0byBhbnkgbGluayBvciBidXR0b24gd2l0aCBjdXN0b20gR29vZ2xlIEFuYWx5aWNzIHRyYWNraW5nIGRhdGENCiAgICAkKCdhW2RhdGEtZ2EtY2F0ZWdvcnldLGJ1dHRvbltkYXRhLWdhLWNhdGVnb3J5XSxpbnB1dFtkYXRhLWdhLWNhdGVnb3J5XVt0eXBlPSJzdWJtaXQiXSxpbnB1dFtkYXRhLWdhLWNhdGVnb3J5XVt0eXBlPSJidXR0b24iXScpLmVhY2goZnVuY3Rpb24gKGksIGVsZW1lbnQpIHsNCiAgICAgICAgJChlbGVtZW50KS5jbGljayhmdW5jdGlvbiAoKSB7IHJlY29yZEdvb2dsZUV2ZW50cyhlbGVtZW50KSB9KTsNCiAgICB9KTsNCiAgICAvL2FkZCBhIGN1c3RvbSBjaGFuZ2UgZXZlbnQgdG8gY2VydGFpbiB0eXBlcyBvZiBmb3JtIGVsZW1lbnQgd2l0aCBjdXN0b20gR29vZ2xlIEFuYWx5aWNzIHRyYWNraW5nIGRhdGENCiAgICAkKCdzZWxlY3RbZGF0YS1nYS1jYXRlZ29yeV0scmFkaW9bZGF0YS1nYS1jYXRlZ29yeV0sdGV4dGFyZWFbZGF0YS1nYS1jYXRlZ29yeV0saW5wdXRbZGF0YS1nYS1jYXRlZ29yeV1bdHlwZT0idGV4dCJdLGlucHV0W2RhdGEtZ2EtY2F0ZWdvcnldW3R5cGU9ImNoZWNrYm94Il0saW5wdXRbZGF0YS1nYS1jYXRlZ29yeV1bdHlwZT0iZmlsZSJdLGlucHV0W2RhdGEtZ2EtY2F0ZWdvcnldW3R5cGU9ImltYWdlIl0saW5wdXRbZGF0YS1nYS1jYXRlZ29yeV1bdHlwZT0icGFzc3dvcmQiXScpLmVhY2goZnVuY3Rpb24gKGksIGVsZW1lbnQpIHsNCiAgICAgICAgJChlbGVtZW50KS5jaGFuZ2UoZnVuY3Rpb24gKCkgeyByZWNvcmRHb29nbGVFdmVudHMoZWxlbWVudCkgfSk7DQogICAgfSk7DQogICAgZnVuY3Rpb24gcmVjb3JkR29vZ2xlRXZlbnRzKGVsZW1lbnQpIHsNCiAgICAgICAgY29uc29sZS5sb2coImJlZ2luIHJlY29yZEdvb2dsZUV2ZW50cyIpOw0KICAgICAgICB2YXIgY2F0ZWdvcnkgPSAkKGVsZW1lbnQpLmRhdGEoImdhLWNhdGVnb3J5Iik7DQogICAgICAgIHZhciBhY3Rpb24gPSAkKGVsZW1lbnQpLmRhdGEoImdhLWFjdGlvbiIpOw0KICAgICAgICB2YXIgbGFiZWwgPSAkKGVsZW1lbnQpLmRhdGEoImdhLWxhYmVsIik7DQogICAgICAgIHZhciB2YWx1ZSA9ICQoZWxlbWVudCkuZGF0YSgiZ2EtdmFsdWUiKTsNCiAgICAgICAgLy9kZWZhdWx0IHZhbHVlcw0KICAgICAgICBpZiAodHlwZW9mIChhY3Rpb24pID09ICJ1bmRlZmluZWQiKSB7DQogICAgICAgICAgICBhY3Rpb24gPSAiIjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodHlwZW9mIChsYWJlbCkgPT0gInVuZGVmaW5lZCIpIHsNCiAgICAgICAgICAgIGxhYmVsID0gIiI7DQogICAgICAgIH0NCiAgICAgICAgLy9zZW5kIGV2ZW50IHdpdGggYSB2YWx1ZSBwYXJhbWV0ZXIgb25seSBpZiBvbmUgaXMgcHJvdmlkZWQNCiAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09ICJ1bmRlZmluZWQiIHx8IHZhbHVlID09PSAiIiB8fCBpc05hTih2YWx1ZSkpIHsNCiAgICAgICAgICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwpOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCBjYXRlZ29yeSwgYWN0aW9uLCBsYWJlbCwgdmFsdWUpOw0KICAgICAgICB9DQogICAgfQ0KfSk7DQo8L3NjcmlwdD5kBSZnXzI3ZDQ1ODI3XzIyOTRfNGVlMF9iYTIyXzE1MDkzNWY4NjJjMw9kFgJmDxYEHwIFH21zLXJ0ZS1lbWJlZGNvZGUgbXMtcnRlLWVtYmVkd3AfAQXzETxkaXYgaWQ9Imhlcm8iPg0KICAgICAgPGRpdiBpZD0iaGVyby1jdGEiPg0KPGRpdiAgY2xhc3M9Imhlcm8tY3RhLXBvc2l0aW9uIj4NCjxoMSBjbGFzcz0iY3RhLXdlbGNvbWUiPldlbGNvbWUgdG8gRGFsbGFzPC9oMT48aDIgY2xhc3M9ImN0YS1zdWJ0aXRsZSI+Q29tbWl0dGVkIFRvICJTZXJ2aWNlIEZpcnN0IiBFeGNlbGxlbmNlPC9oMj48YSBpZD0iZXhwbG9yZSIgaHJlZj0iI3BvcHVsYXJsaW5rcyIgYXJpYS1sYWJlbD0iSnVtcCBUbyBNYWluIENvbnRlbnQiPjxzcGFuIGNsYXNzPSJzY3JvbGwtZG93biI+PC9zcGFuPjwvYT4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCg0KPCEtLXNjcm9sbC0tPg0KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdhW2lkJD0iZXhwbG9yZSJdJywgZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgICAgICAgICBzZXRQb3NpdGlvbigiI3BvcHVsYXJsaW5rcyIsIGUpOw0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0UG9zaXRpb24oc2VjdGlvbiwgZSkgew0KICAgICAgICAgICAgICAgICAgICAkKCIjczQtd29ya3NwYWNlIikuYW5pbWF0ZSh7DQogICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6ICQoc2VjdGlvbikub2Zmc2V0KCkudG9wDQogICAgICAgICAgICAgICAgICAgIH0sIDgwMCk7DQogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICAgICB9DQo8L3NjcmlwdD4NCg0KPHNjcmlwdCBzcmM9Imh0dHBzOi8vdXNlLnR5cGVraXQubmV0L2RzajRybXkuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD50cnl7VHlwZWtpdC5sb2FkKHsgYXN5bmM6IHRydWUgfSk7fWNhdGNoKGUpe308L3NjcmlwdD4NCg0KPHN0eWxlPg0KLmN0YS13ZWxjb21lIHsNCmZvbnQtZmFtaWx5OiBQcm94aW1hTm92YS1Cb2xkLCBzYW5zLXNlcmlmOw0KZm9udC1zaXplOiA2OHB4Ow0KY29sb3I6ICNGRkZGRkY7DQpsZXR0ZXItc3BhY2luZzogNHB4Ow0KbGluZS1oZWlnaHQ6IDk2cHg7DQp0ZXh0LXNoYWRvdzogLTNweCAtMXB4IDVweCByZ2JhKDAsMCwwKTsNCmZvbnQtc3R5bGU6IG5vcm1hbCAhaW1wb3J0YW50Ow0KdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCn0NCi5jdGEtc3VidGl0bGUgew0KZm9udC1mYW1pbHk6IFByb3hpbWFOb3ZhLVNlbWlib2xkLCAnTGF0bycsIHNhbnMtc2VyaWY7DQpmb250LXNpemU6IDIycHg7DQpjb2xvcjogI0ZGRkZGRjsNCmxldHRlci1zcGFjaW5nOiAzcHg7DQpsaW5lLWhlaWdodDogMzFweDsNCnRleHQtc2hhZG93OiAtMnB4IC0ycHggM3B4IHJnYigwIDAgMCk7DQp0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KfQ0KI2hlcm8tY3RhIGgxIHsNCnBhZGRpbmctdG9wOiA1MHB4Ow0KfQ0KI2hlcm8tY3RhIC5zY3JvbGwtZG93biB7DQogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7DQp9DQojaGVyby1jdGEgew0KICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsNCnBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCiNoZXJvIHsNCiAgICBoZWlnaHQ6IDMwMHB4Ow0KfQ0KLmhlcm8tY3RhLXBvc2l0aW9uIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBsZWZ0OiA1MCU7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsgDQp3aWR0aDogMTAwJTt9DQoNCi8qIEN1c3RvbSwgaVBob25lIFJldGluYSAqLyANCiAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGggOiAzMjBweCkgew0KLmhlcm8tY3RhLXBvc2l0aW9uIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgYm90dG9tOiAyNXB4Ow0Kd2lkdGg6IDkwJTt9DQogICAgfQ0KLyogRXh0cmEgU21hbGwgRGV2aWNlcywgUGhvbmVzICovIA0KICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDQ4MHB4KSB7DQouaGVyby1jdGEtcG9zaXRpb24gew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBib3R0b206IDcwcHg7fQ0KICAgIH0NCi8qIE1lZGl1bSBEZXZpY2VzLCBEZXNrdG9wcyAqLw0KICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aCA6IDk5MnB4KSB7DQouaGVyby1jdGEtcG9zaXRpb24gew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBib3R0b206IDM1cHg7fQ0KICAgIH0NCjwvc3R5bGU+ZAIFD2QWAgICD2QWAgICD2QWAgIFD2QWAgIDDxYCHgdWaXNpYmxlaBYCZg9kFgQCAg9kFgYCAQ8WAh8DaGQCAw8WAh8DaGQCBQ8WAh8DaGQCAw8PFgIeCUFjY2Vzc0tleQUBL2RkZPh/o7Z4anuIjKQ4ZwAovBIbBEl+d7NJ3FkmEqDB8ITl">
  <script type="text/javascript">
    //<![CDATA[
    var MSOWebPartPageFormName = 'aspnetForm';
    var g_presenceEnabled = true;
    var g_wsaEnabled = false;
    var g_wsaQoSEnabled = false;
    var g_wsaQoSDataPoints = [];
    var g_wsaLCID = 1033;
    var g_wsaListTemplateId = 850;
    var g_wsaSiteTemplateId = 'BLANKINTERNET#0';
    var _fV4UI = true;
    var _spPageContextInfo = {
      webServerRelativeUrl: "\u002f",
      webAbsoluteUrl: "https:\u002f\u002fdallascityhall.com",
      siteAbsoluteUrl: "https:\u002f\u002fdallascityhall.com",
      serverRequestPath: "\u002fPages\u002fdefault.aspx",
      layoutsUrl: "_layouts\u002f15",
      webTitle: "Dallas City Hall",
      webTemplate: "53",
      tenantAppVersion: "0",
      isAppWeb: false,
      Has2019Era: true,
      webLogoUrl: "\u002fSiteAssets\u002fcod-site-icon.jpg",
      webLanguage: 1033,
      currentLanguage: 1033,
      currentUICultureName: "en-US",
      currentCultureName: "en-US",
      clientServerTimeDelta: new Date("2022-03-31T08:41:44.4368487Z") - new Date(),
      siteClientTag: "7793$$15.0.5223.1000",
      crossDomainPhotosEnabled: false,
      webUIVersion: 15,
      webPermMasks: {
        High: 16,
        Low: 196705
      },
      pageListId: "{4a35db85-1d01-4ce0-9804-6a1072e5021e}",
      pageItemId: 533,
      pagePersonalizationScope: 1,
      alertsEnabled: true,
      siteServerRelativeUrl: "\u002f",
      allowSilverlightPrompt: 'True'
    };
    document.onreadystatechange = fnRemoveAllStatus;

    function fnRemoveAllStatus() {
      removeAllStatus(true)
    };
    var _spWebPartComponents = new Object(); //]]>
  </script>
  <script src="../_layouts/15/blank%EF%B9%96rev=ZaOXZEobVwykPO9g8hq%EA%A4%B78A==.js" type="text/javascript"></script>
  <script type="text/javascript">
    //<![CDATA[
    (function() {
      if (typeof(_spBodyOnLoadFunctions) === 'undefined' || _spBodyOnLoadFunctions === null) {
        return;
      }
      _spBodyOnLoadFunctions.push(function() {
        ExecuteOrDelayUntilScriptLoaded(function() {
          var pairs = SP.ScriptHelpers.getDocumentQueryPairs();
          var followDoc, itemId, listId, docName;
          for (var key in pairs) {
            if (key.toLowerCase() == 'followdocument') followDoc = pairs[key];
            else if (key.toLowerCase() == 'itemid') itemId = pairs[key];
            else if (key.toLowerCase() == 'listid') listId = pairs[key];
            else if (key.toLowerCase() == 'docname') docName = decodeURI(pairs[key]);
          }
          if (followDoc != null && followDoc == '1' && listId != null && itemId != null && docName != null) {
            SP.SOD.executeFunc('followingcommon.js', 'FollowDocumentFromEmail', function() {
              FollowDocumentFromEmail(itemId, listId, docName);
            });
          }
        }, 'SP.init.js');
      });
    })();
    (function() {
      if (typeof(_spBodyOnLoadFunctions) === 'undefined' || _spBodyOnLoadFunctions === null) {
        return;
      }
      _spBodyOnLoadFunctions.push(function() {
        if (typeof(SPClientTemplates) === 'undefined' || SPClientTemplates === null || (typeof(APD_InAssetPicker) === 'function' && APD_InAssetPicker())) {
          return;
        }
        var renderFollowFooter = function(renderCtx, calloutActionMenu) {
          if (renderCtx.ListTemplateType == 700) myDocsActionsMenuPopulator(renderCtx, calloutActionMenu);
          else CalloutOnPostRenderTemplate(renderCtx, calloutActionMenu);
          var listItem = renderCtx.CurrentItem;
          if (typeof(listItem) === 'undefined' || listItem === null) {
            return;
          }
          if (listItem.FSObjType == 0) {
            calloutActionMenu.addAction(new CalloutAction({
              text: Strings.STS.L_CalloutFollowAction,
              tooltip: Strings.STS.L_CalloutFollowAction_Tooltip,
              onClickCallback: function(calloutActionClickEvent, calloutAction) {
                var callout = GetCalloutFromRenderCtx(renderCtx);
                if (!(typeof(callout) === 'undefined' || callout === null)) callout.close();
                SP.SOD.executeFunc('followingcommon.js', 'FollowSelectedDocument', function() {
                  FollowSelectedDocument(renderCtx);
                });
              }
            }));
          }
        };
        var registerOverride = function(id) {
          var followingOverridePostRenderCtx = {};
          followingOverridePostRenderCtx.BaseViewID = 'Callout';
          followingOverridePostRenderCtx.ListTemplateType = id;
          followingOverridePostRenderCtx.Templates = {};
          followingOverridePostRenderCtx.Templates.Footer = function(renderCtx) {
            var renderECB;
            if (typeof(isSharedWithMeView) === 'undefined' || isSharedWithMeView === null) {
              renderECB = true;
            } else {
              var viewCtx = getViewCtxFromCalloutCtx(renderCtx);
              renderECB = !isSharedWithMeView(viewCtx);
            }
            return CalloutRenderFooterTemplate(renderCtx, renderFollowFooter, renderECB);
          };
          SPClientTemplates.TemplateManager.RegisterTemplateOverrides(followingOverridePostRenderCtx);
        }
        registerOverride(101);
        registerOverride(700);
      });
    })();
    if (typeof(DeferWebFormInitCallback) == 'function') DeferWebFormInitCallback(); //]]>
  </script>
  <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="BAB98CB3">
  <!-- Google Tag Manager -->
  <noscript>
    <iframe src="https://googletagmanager.com/ns.html?id=GTM-P2GHZW" height="0" width="0" style="display:none;visibility:hidden">
    </iframe>
  </noscript>
  <script>
    //<![CDATA[
    (function(w, d, s, l, i) {
      w[l] = w[l] || [];
      w[l].push({
        'gtm.start': new Date().getTime(),
        event: 'gtm.js'
      });
      var f = d.getElementsByTagName(s)[0],
        j = d.createElement(s),
        dl = l != 'dataLayer' ? '&l=' + l : '';
      j.async = true;
      j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl;
      f.parentNode.insertBefore(j, f);
    })(window, document, 'script', 'dataLayer', 'GTM-P2GHZW');
    //]]>
  </script>
  <!-- End Google Tag Manager -->
  <div id="ms-designer-ribbon">
    <div>
      <div id="s4-ribbonrow" style="visibility: hidden; display: none; height: 0px;"></div>
    </div>
  </div>
  <div id="ctl00_g_c06763ce_4062_40f5_928c_2ae65f7854cc" __markuptype="vsattributemarkup" __webpartid="{c06763ce-4062-40f5-928c-2ae65f7854cc}" webpart="true" isclosed="false">
  </div>
  <div id="s4-workspace" style="height: 1200px; width: 1600px;">
    <div class="s4-notdlg top-row">
      <!-- start s4 top row-->
      <div id="outerWrapper" unselectable="on">
        <!-- start outerWrapper-->
        <nav id="mainNav" unselectable="on" class="noindex">
        </nav>
      </div>
    </div>
    <div id="s4-bodyContainer" role="main">
      <!--start s4bodycontainer -->
      <div id="mainBodyStart">
        <!--placeholdermain-->
        <span id="DeltaPlaceHolderMain">
          <div class="full-width">
            <div data-name="WebPartZone">
              <div>
                <div class="ms-webpart-zone ms-fullWidth">
                  <div id="MSOZoneCell_WebPartctl00_ctl48_g_9639c52b_9fed_44d5_8184_d5493328b5c5" class="s4-wpcell-plain ms-webpartzone-cell ms-webpart-cell-vertical ms-fullWidth ">
                    <div class="ms-webpart-chrome ms-webpart-chrome-vertical ms-webpart-chrome-fullWidth ">
                      <div webpartid="9639c52b-9fed-44d5-8184-d5493328b5c5" haspers="false" id="WebPartctl00_ctl48_g_9639c52b_9fed_44d5_8184_d5493328b5c5" width="100%" class="ms-WPBody noindex " allowdelete="false" allowexport="false" style="">
                        <div id="ctl00_ctl48_g_9639c52b_9fed_44d5_8184_d5493328b5c5">
                          <script type="text/javascript">
                            $(document).ready(function() {
                              // Hide the "view" div.
                              var count = $("#alertsul").children().length;
                              if (count != 0) {
                                $('.content').css({
                                  'display': 'block'
                                });
                                $('.alertdiv').css({
                                  'display': 'block'
                                });
                                if ($('.sa').css('display') == 'block') // if alertdisplayval=1 none
                                {
                                  if ($('#sa-btn').hasClass('close')) $('#sa-btn').toggleClass('open');
                                }
                                $('div.slide').click(function() {
                                  // When clicked, toggle the "view" div.
                                  $('.sa').slideToggle(400);
                                  return false;
                                });
                              }
                            });

                            function changeClass() {
                              if ($('#sa-btn').hasClass('close')) {
                                $('#sa-btn').toggleClass('open');
                              } else {
                                $('#sa-btn').toggleClass('close');
                              }
                            }
                          </script>
                          <div class="service-alert-bar content">
                            <div id="ctl00_ctl48_g_9639c52b_9fed_44d5_8184_d5493328b5c5_sa" class="service-alert-content container sa" style="display:none;">
                            </div>
                          </div>
                          <div class="alertdiv">
                            <div class="slide sa-btn">
                              <a href="#" id="sa-btn" class="btn btn-service-alert close slide" onclick="changeClass()">Public Alerts</a>
                            </div>
                          </div>
                        </div>
                        <div class="ms-clear"></div>
                      </div>
                    </div>
                    <div class="ms-PartSpacingVertical"></div>
                  </div>
                  <div id="MSOZoneCell_WebPartctl00_ctl48_g_27d45827_2294_4ee0_ba22_150935f862c3" class="s4-wpcell-plain ms-webpartzone-cell ms-webpart-cell-vertical ms-fullWidth ">
                    <div class="ms-webpart-chrome ms-webpart-chrome-vertical ms-webpart-chrome-fullWidth ">
                      <div webpartid="27d45827-2294-4ee0-ba22-150935f862c3" haspers="false" id="WebPartctl00_ctl48_g_27d45827_2294_4ee0_ba22_150935f862c3" width="100%" class="ms-WPBody noindex " allowdelete="false" allowexport="false" style="">
                        <div id="ctl00_ctl48_g_27d45827_2294_4ee0_ba22_150935f862c3">
                          <div class="ms-rte-embedcode ms-rte-embedwp">
                            <div id="hero">
                              <div id="hero-cta">
                                <div class="hero-cta-position">
                                  <h1 class="cta-welcome">Welcome to Dallas</h1>
                                  <h2 class="cta-subtitle">Committed To "Service First" Excellence</h2><a id="explore" href="#popularlinks" aria-label="Jump To Main Content"><span class="scroll-down"></span></a>
                                </div>
                              </div>
                            </div>
                            <!--scroll-->
                            <script type="text/javascript">
                              //<![CDATA[
                              $(document).on('click', 'a[id$="explore"]', function(e) {
                                setPosition("#popularlinks", e);
                              });

                              function setPosition(section, e) {
                                $("#s4-workspace").animate({
                                  scrollTop: $(section).offset().top
                                }, 800);
                                e.preventDefault();
                              }
                            </script>
                            <script src="https://use.typekit.net/dsj4rmy.js"></script>
                            <script>
                              try {
                                Typekit.load({
                                  async: true
                                });
                              } catch (e) {}
                            </script>
                            <style>
                              .cta-welcome {
                                font-family: ProximaNova-Bold, sans-serif;
                                font-size: 68px;
                                color: #FFFFFF;
                                letter-spacing: 4px;
                                line-height: 96px;
                                text-shadow: -3px -1px 5px rgba(0, 0, 0);
                                font-style: normal !important;
                                text-transform: uppercase;
                              }

                              .cta-subtitle {
                                font-family: ProximaNova-Semibold, 'Lato', sans-serif;
                                font-size: 22px;
                                color: #FFFFFF;
                                letter-spacing: 3px;
                                line-height: 31px;
                                text-shadow: -2px -2px 3px rgb(0 0 0);
                                text-transform: uppercase;
                              }

                              #hero-cta h1 {
                                padding-top: 50px;
                              }

                              #hero-cta .scroll-down {
                                margin: 0 !important;
                              }

                              #hero-cta {
                                padding: 0 !important;
                                position: relative;
                              }

                              #hero {
                                height: 300px;
                              }

                              .hero-cta-position {
                                position: absolute;
                                left: 50%;
                                border-radius: 50%;
                                -webkit-transform: translateX(-50%);
                                transform: translateX(-50%);
                                width: 100%;
                              }

                              /* Custom, iPhone Retina */
                              @media only screen and (min-width : 320px) {
                                .hero-cta-position {
                                  position: absolute;
                                  bottom: 25px;
                                  width: 90%;
                                }
                              }

                              /* Extra Small Devices, Phones */
                              @media only screen and (min-width : 480px) {
                                .hero-cta-position {
                                  position: absolute;
                                  bottom: 70px;
                                }
                              }

                              /* Medium Devices, Desktops */
                              @media only screen and (min-width : 992px) {
                                .hero-cta-position {
                                  position: absolute;
                                  bottom: 35px;
                                }
                              }
                            </style>
                          </div>
                        </div>
                        <div class="ms-clear"></div>
                      </div>
                    </div>
                    <div class="ms-PartSpacingVertical"></div>
                  </div>
                  <div id="MSOZoneCell_WebPartctl00_ctl48_g_4b4ea764_091e_4f61_90c4_ec841f9d576e" class="s4-wpcell-plain ms-webpartzone-cell ms-webpart-cell-vertical ms-fullWidth ">
                    <div class="ms-webpart-chrome ms-webpart-chrome-vertical ms-webpart-chrome-fullWidth ">
                      <div webpartid="4b4ea764-091e-4f61-90c4-ec841f9d576e" haspers="false" id="WebPartctl00_ctl48_g_4b4ea764_091e_4f61_90c4_ec841f9d576e" width="100%" class="ms-WPBody noindex " allowdelete="false" allowexport="false" style="">
                        <div id="ctl00_ctl48_g_4b4ea764_091e_4f61_90c4_ec841f9d576e">
                          <div class="ms-rte-embedcode ms-rte-embedwp">
                            <div id="homepage">
                              <!--
<div class="text-center" style="padding:20px;background-color:#FFB333;"><div class="container"><a href="/Pages/Corona-Virus.aspx" style="text-decoration: underline;color:#001B3B;background-image:url('/PublishingImages/coronavirus/blue-alert-icon.png');background-repeat:no-repeat; background-size:20px 20px; background-position:10px; padding-left:40px;font-size:22px">Important Information Regarding Coronavirus (COVID&#8211;19)</a></div></div>
-->
                              <div style="clear:both; background-color:#7EC6FF;">
                                <div class="col-xs-12 text-center" style="background-color:#FFB333; padding:20px">
                                  <a href="Corona-Virus.aspx.html" style="font-size:22px; color:#001B3B; text-decoration: underline; padding:20px;"><img src="../PublishingImages/coronavirus/blue-alert-icon.png" style="height: 20px; margin-right: 10px; padding-bottom: 2px; " alt="">Important COVID-19 Information</a>
                                </div>
                                <div style="clear: both; height: 0px; width:100%"></div>
                              </div>
                              <div class="col-xs-12 text-center" style="display:none;">
                                <h2 style="color:#666; font-style:italic; font-family:'Lato';font-size:22px;font-weight:normal;padding:15px 0;margin-bottom:30px;">Our core values are Empathy, Ethics, Excellence, Equity</h2>
                              </div>
                              <div>
                                <br>
                                <br>
                                <div class="spotlight-title">
                                  <h2 style="color: rgb(68 68 68); text-align: center; font-size: 2em;">VIRTUAL CONSULTING</h2>
                                </div>
                                <div>
                                  <script src="https://dallas.citizenservice-digital.com/api/iframe.js"></script>
                                  <script>
                                    iFrameResize({
                                      log: false,
                                      scrolling: false
                                    }, '#sws_iframe');
                                  </script>
                                  <div>
                                    <iframe id="sws_iframe" src="https://dallas.citizenservice-digital.com/?footer=false&amp;iframe=true&amp;fontColor=#002664&amp;bgColor=#FFFFFF&amp;appointBtnBgColor=#033F88&amp;detach=true&amp;iframeid=sws_iframe"
                                      style="border: none; width: 1500px; margin-top: 10px; margin-left: 20px; height: 400px;"></iframe>
                                  </div>
                                </div>
                              </div>
                            </div>
                            <div id="popularlinks">
                              <div class="container">
                                <!--column one-->
                                <div class="col-3">
                                  <div id="todayiwantto">
                                    <ul id="todayiwantto-ul">
                                      <li class="pay"><a class="iwanttomodal btn btn-md" href="#pay">Pay</a></li>
                                      <li class="find"><a class="iwanttomodal btn btn-md" href="#find">Find</a></li>
                                      <li class="request"><a class="iwanttomodal btn btn-md" href="#request">Request</a></li>
                                      <li class="open-data"><a href="Dallas-Datahub.aspx.html" class="btn btn-md">Dallas Data Hub</a></li>
                                      <li><a href="http://financialtransparency.dallascityhall.com/" target="_blank" id="finantial-transparency" class="btn btn-md">Financial Transparency</a></li>
                                      <!--<li class="open-data"><a class="iwanttomodal btn btn-md" href="#opendata">Open Data</a></li>
-->
                                      <!--<li><a href="/departments/public-affairs-outreach/openrecords/Pages/default.aspx" id="open-records" class="btn btn-md">Open Records Request</a></li>-->
                                      <li><a href="https://dallastx.govqa.us/WEBAPP/_rs/(S(avfiv4hn1rrrqmlj54tmazfp))/SupportHome.aspx?sSessionID=" target="_blank" id="open-records" class="btn btn-md">Open Records Request</a></li>
                                    </ul>
                                  </div>
                                </div>
                                <!--column one-->
                                <div class="col-3">
                                  <div id="officialpostings" class="official-postings list-items" style="overflow:hidden;">
                                    <h3 style="color: rgb(68, 68, 68)">Official Postings</h3>
                                    <ul class="hm-box-links">
                                      <li><a href="../departments/budget/financialtransparency/Pages/Current-Budget.aspx.html" id="budget">FY 2021-22 Adopted Budget</a></li>
                                      <li><a href="https://cityofdallas.legistar.com/" id="council-meetings" target="_blank">Council Meetings</a></li>
                                      <li><a href="../government/citycouncil/Pages/council-attendance.aspx.html" id="council-attendance">Council Attendance</a></li>
                                      <li><a href="../calendar/Pages/default.aspx.html" id="city-calendar">City Calendar</a></li>
                                      <li><a href="public-notices.aspx.html" id="public-notices">Public Notices</a></li>
                                      <li><a href="../government/citysecretary/Pages/Public-Meetings.aspx.html" id="open-meetings">Open Meetings</a></li>
                                      <li><a href="../government/citymanager/Pages/council-memos.aspx.html" id="council-memos">Council Memos</a></li>
                                      <li>
                                        <a href="watch-city-meetings-online.aspx.html" class="swagit btn" style="background-color:rgb(3,63,136); padding:11px 10px; text-align:center; color:white;margin:0;" id="city-meeting-video">Watch City Meetings Online</a>
                                      </li>
                                    </ul>
                                  </div>
                                </div>
                                <div class="col-3 col-end">
                                  <div id="officialpostings2" class="official-postings list-items">
                                    <h3 style="color: rgb(68, 68, 68)">Quick Links</h3>
                                    <ul class="hm-box-links">
                                      <li><a href="../departments/waterutilities/Pages/default.aspx.html" id="quick-links-water">Water Utilities</a></li>
                                      <li><a href="../departments/sanitation/Pages/default.aspx.html" id="quick-links-sanitation">Trash Pickup</a></li>
                                      <li><a href="../departments/sustainabledevelopment/buildinginspection/Pages/index.aspx.html" id="quick-links-building-permits-inspections">Building Permits &amp; Inspections</a></li>
                                      <li><a href="../departments/humanresources/employment/Pages/default.aspx.html" id="quick-links-jobs">Jobs</a></li>
                                      <li><a href="../departments/courtdetentionservices/Pages/default.aspx.html" id="quick-links-traffic-tickets">Traffic &amp; Civil Tickets</a></li>
                                      <li><a href="../departments/courtdetentionservices/Pages/Warrant-Info.aspx.html" id="quick-links-courts">Court Warrants &amp; Bonds</a></li>
                                      <li><a href="../departments/dallas-animal-services/Pages/default.aspx.html" id="quick-links-animal-services">Animal Services</a></li>
                                      <li><a href="https://www.211texas.org/" id="quick-links-211" target="_blank">2-1-1 Texas (State Assistance)</a></li>
                                    </ul>
                                  </div>
                                </div>
                              </div>
                              <div class="clearfix"></div>
                            </div>
                            <section class="services-banner">
                              <div class="service311 col-md-12 col-xs-12">
                                <div class="col-lg-6 col-md-6 col-xs-12" id="picture311app">
                                  <div class="in-middle">
                                    <h3><span>Download the New </span><br>OurDallas Mobile App</h3>
                                    <a href="https://itunes.apple.com/us/app/dallas-311/id692902088?mt=8#" target="_blank" class="appicon"><img src="../PublishingImages/static/app-store-badge.png" class="app-badge appleapp" alt="Apple App Store Badge"></a>
                                    <a href="https://play.google.com/store/apps/details?id=com.dallascityhall.dallas311&amp;hl=en" target="_blank" class="appicon"><img src="../PublishingImages/static/google-play-badge.png" class="app-badge googleapp" alt="Google Play Store Badge"></a>
                                  </div>
                                  <div class="check visible-xxs col-xs-12">
                                    <img id="dallas311mobile" src="../PublishingImages/static/311-mobile-app-new.jpg" alt="Dallas 311 Mobile app" title="Dallas-311-Mobile-App" media-simple="true">
                                    <!--  <h3>Check Service Request Status</h3>
                  <input type="text" placeholder="Service Request # (i.e. 19-00000001)" class="textField searchinput" onkeydown="search311(event)"  /> -->
                                  </div>
                                </div>
                                <div class="col-lg-6 col-md-6 col-xs-12">
                                  <div class="inner-311">
                                    <div class="inner-311-title">
                                      <h3>311 Frequently Requested Services</h3>
                                    </div>
                                    <ul class="unlisted">
                                      <li><a href="https://dallascrm.force.com/public/request/CODEGENERAL/location" target="_blank">Code Concerns</a></li>
                                      <li><a href="https://dallascrm.force.com/public/request/SPSVSNOT/location" target="_blank">Sanitation Roll Cart</a></li>
                                      <li><a href="https://dallascrm.force.com/public/request/SANMISGA/location" target="_blank">Missed Garbage</a></li>
                                      <li><a href="https://dallascrm.force.com/public/request/STSROUST/location" target="_blank">Street Repair</a></li>
                                      <li><a href="https://dallascrm.force.com/public/request/PWTROV/location" target="_blank">Parking – Report a Violation</a></li>
                                      <li><a href="https://dallascrm.force.com/public/request/ANILOSDC/location" target="_blank">Animal Loose</a></li>
                                      <li><a href="https://dallascrm.force.com/public/request/DEADANPU/location" target="_blank">Dead Animal Pick Up</a></li>
                                      <li><a href="https://dallascrm.force.com/public/request/DPD24HR/location" target="_blank">24 Hour Parking</a></li>
                                    </ul>
                                    <div class="home-311-buttons">
                                      <a href="https://dallascrm.force.com/public/servicetypes" target="_blank" class="btn btn-secondary btn-side btn-md" style="font-size: 1em; background-color:#8EC900;color:#222222;">Request a Service</a>
                                      <a href="../services/311/Pages/default.aspx.html" class="btn btn-minimal-reverse btn-side btn-md" style="font-size: 1em">About 311</a>
                                      <!--<a href="https://dallascrm.force.com/Dallas311Knowledge/s/" target="_blank" class="btn btn-minimal-reverse btn-side btn-md" style="font-size: 1em">311 Knowledgebase</a>-->
                                    </div>
                                  </div>
                                </div>
                                <div class="service311 check hidden-xs">
                                  <label for="check-service-request" style="font-size: 1.4em;padding: 5px 20px;max-width: 350px;display: inline-block;color: #fff;border-bottom: none;">Check Service Request Status</label>
                                  <input type="text" placeholder="Service Request # (i.e. 19-00000001)" class="textField" onkeydown="search311(event)" id="check-service-request">
                                </div>
                              </div>
                            </section>
                            <style>
                              .in-middle {
                                background: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.7)), url('../PublishingImages/static/311-mobile-app-new.jpg');
                                /*background-image: url("../PublishingImages/static/311-mobile-app-new.jpg");*/
                                background-size: cover;
                                background-repeat: no-repeat;
                                left: 40px;
                                padding-bottom: 30px;
                                height: 100%;
                                padding: 230px 0 0 40px;
                              }

                              .in-middle h3 {
                                font-size: 28px;
                                font-weight: 500;
                              }

                              .in-middle h3 span {
                                font-size: 22px;
                                border: none;
                                font-style: italic;
                                padding-bottom: 0px;
                              }

                              .service311 {
                                padding: 0px;
                                background-color: #0166ce;
                              }

                              .service311 ul {
                                padding-left: 0px;
                                padding-bottom: 15px;
                              }

                              .service311 h3 {
                                font-weight: 500;
                              }

                              .service311 h2,
                              .service311 h3 {
                                color: #fff;
                                border-bottom: none;
                              }

                              .service311 ul li a {
                                color: #e9ebf0;
                                border-bottom: none;
                              }

                              .service311 ul li {
                                border-bottom: 1px solid rgba(205, 205, 205, 0.2);
                                padding-top: 8px;
                                padding-bottom: 6px;
                              }

                              #picture311app {
                                height: 370px;
                                overflow: hidden;
                                padding: 0;
                              }

                              #dallas311mobile {
                                width: 100%;
                                opacity: 0.8;
                                background-color: #000;
                              }

                              .appicon {
                                width: 150px;
                                padding-right: 10px;
                              }

                              .appicon img {
                                width: 120px !important;
                                padding-right: 10px;
                                height: 35px;
                              }

                              .check {
                                background-color: #033d79;
                                padding: 20px 0;
                                display: inline-block;
                                width: 100%;
                                text-align: center;
                              }

                              .check h3 {
                                padding: 5px 20px;
                                max-width: 350px;
                                display: inline-block;
                              }

                              .check input {
                                max-width: 90%;
                                padding-left: 20px;
                                padding: 10px;
                                height: 45px;
                                width: 700px;
                              }

                              .hidden-xxs {
                                visibility: visible;
                              }

                              .visible-xxs {
                                display: none;
                              }

                              .inner-311 ul {
                                column-count: 2;
                              }

                              .inner-311-title h3 {
                                padding-bottom: 0;
                              }

                              section.services-banner {
                                background-color: #0166ce;
                              }

                              section.services-banner {
                                background-position: 50% 50%;
                                background-repeat: no-repeat;
                                background-size: cover;
                              }

                              .mbr-z-index20 {
                                z-index: 20;
                              }

                              /*! Media  */
                              .media-size-item {
                                -webkit-flex: 1 1 auto;
                                -moz-flex: 1 1 auto;
                                -ms-flex: 1 1 auto;
                                -o-flex: 1 1 auto;
                                flex: 1 1 auto;
                              }

                              .media-content {
                                -webkit-flex-basis: 100%;
                                flex-basis: 100%;
                              }

                              .media-container-row {
                                display: -ms-flexbox;
                                display: -webkit-flex;
                                display: flex;
                                -webkit-flex-direction: row;
                                -ms-flex-direction: row;
                                flex-direction: row;
                                -webkit-flex-wrap: wrap;
                                -ms-flex-wrap: wrap;
                                flex-wrap: wrap;
                                -webkit-justify-content: center;
                                -ms-flex-pack: center;
                                justify-content: center;
                                -webkit-align-content: center;
                                -ms-flex-line-pack: center;
                                align-content: center;
                                -webkit-align-items: start;
                                -ms-flex-align: start;
                                align-items: start;
                              }

                              .media-container-row .media-size-item {
                                width: 375px;
                              }

                              .media-container-column {
                                display: -ms-flexbox;
                                display: -webkit-flex;
                                display: flex;
                                -webkit-flex-direction: column;
                                -ms-flex-direction: column;
                                flex-direction: column;
                                -webkit-flex-wrap: wrap;
                                -ms-flex-wrap: wrap;
                                flex-wrap: wrap;
                                -webkit-justify-content: center;
                                -ms-flex-pack: center;
                                justify-content: center;
                                -webkit-align-content: center;
                                -ms-flex-line-pack: center;
                                align-content: center;
                                -webkit-align-items: stretch;
                                -ms-flex-align: stretch;
                                align-items: stretch;
                              }

                              .media-container-column>* {
                                width: 100%;
                              }

                              @media (min-width: 582px) {
                                .service311 ul li:nth-child(4n+4) {
                                  border-bottom: none;
                                }

                                .media-container-row {
                                  -webkit-flex-wrap: nowrap;
                                  -ms-flex-wrap: nowrap;
                                  flex-wrap: nowrap;
                                }
                              }

                              .mbr-figure img,
                              .mbr-figure iframe {
                                display: block;
                                width: 100%;
                              }

                              .mbr-figure {
                                -ms-flex-item-align: center;
                                -ms-grid-row-align: center;
                                -webkit-align-self: center;
                                align-self: center;
                              }

                              .media-container>div {
                                max-width: 100%;
                              }

                              .mbr-figure img,
                              .card-img img {
                                width: 100%;
                              }

                              @media (max-width: 581px) {
                                .media-size-item {
                                  width: auto !important;
                                }

                                .mbr-figure {
                                  width: 100% !important;
                                }

                                #dallas311mobile {
                                  opacity: 1;
                                  position: relative;
                                }

                                .in-middle {
                                  background-image: none;
                                  padding-bottom: 30px;
                                  height: 170px;
                                  padding: 30px 0 0 30px;
                                }

                                .inner-311-title {
                                  text-align: center;
                                }

                                .inner-311 {
                                  padding: 1.5rem;
                                }

                                .home-311-buttons {
                                  text-align: center;
                                }

                                .home-311-buttons .btn {
                                  /*width: 160px;*/
                                }

                                .in-middle h3,
                                .in-middle h2 {
                                  color: #333;
                                }

                                #picture311app {
                                  width: 100%;
                                  height: auto;
                                  background-color: #fff;
                                }

                                .check {
                                  padding: 0;
                                }

                                .check h3 {
                                  padding: 15px 0 5px 0;
                                }

                                .hidden-xxs {
                                  display: none;
                                }

                                .visible-xxs {
                                  display: block;
                                }

                                .inner-311 ul {
                                  column-count: 1;
                                }
                              }

                              /* 311 information */
                              .align-self-center {
                                -ms-flex-item-align: center !important;
                                align-self: center !important;
                              }

                              .px-3 {
                                padding-left: 1rem !important;
                              }

                              .py-2 {
                                padding-top: .5rem !important;
                                padding-bottom: .5rem !important;
                              }

                              .align-self-center {
                                -ms-flex-item-align: center !important;
                                align-self: center !important;
                              }

                              .inner-311 {
                                position: relative;
                                top: auto;
                              }

                              /* Custom, iPhone Retina */
                              @media only screen and (min-width : 320px) {
                                .media-container-row {
                                  height: auto;
                                  overflow: auto;
                                }

                                .px-3 {
                                  padding-right: 0;
                                }
                              }

                              /* Extra Small Devices, Phones */
                              @media only screen and (min-width : 480px) {
                                .px-3 {
                                  padding-right: 1rem !important;
                                }

                                .inner-311 {
                                  padding: 60px 30px 10px 30px;
                                  width: 100%;
                                }
                              }

                              /* Large Devices, Wide Screens */
                              @media only screen and (min-width : 1400px) {
                                .media-container-row {
                                  height: auto;
                                  overflow: hidden;
                                }
                              }
                            </style>
                          </div>
                          <div class="clearfix"></div>
                          <div id="find" style="display:none; bacgkground-color:grey;">
                            <h3>Find</h3><br>
                            <div>
                              <input style="width:70%;border-radius:100px;border:solid 1px #ddd;padding:6px 10px;" id="findsearchinput">
                              <button type="button" style="margin-left:10px;border-radius:0.3em;padding:6px;color:white;background-color:#690;" class="searchBtn" id="findsearchbutton" onclick="findsearch()">Search</button>
                            </div>
                            <div class="iwanttoicons">
                              <ul>
                                <li><a href="../departments/humanresources/employment/Pages/default.aspx.html" id="find-lightbox-job"><img class="serviceimg" src="../PublishingImages/static/employmenticon.png" alt="Jobs Icon"><br>Job</a></li>
                                <li><a href="http://dallaslibrary2.org/" target="_blank" id="find-lightbox-library"><img class="serviceimg" src="../PublishingImages/static/libraryicon.png" alt="Library Icon"><br>Library</a></li>
                                <li><a href="http://www.dallasanimalservices.org/" target="_blank" id="find-lightbox-pets"><img class="serviceimg" src="../PublishingImages/static/peticon.png" alt="Dallas Animal Services Icon"><br>Pets</a></li>
                                <li style="margin-right:0px;">
                                  <a href="http://www.dallasparks.org/" target="_blank" id="find-lightbox-parks-recreation"><img class="serviceimg" src="../PublishingImages/static/parksicon.png" alt="Parks &amp; Recreation Icon"><br>Parks</a></li>
                              </ul>
                              <div class="clearfix"></div>
                            </div>
                            <div class="col-md-6 col-xs-12 list-items">
                              <ul>
                                <li><a target="_blank" href="http://www.dallasculture.org/culturalFacilities.asp" id="find-lightbox-cultural-center">a Cultural Center</a></li>
                                <!--<li><a href="/departments/humanresources/employment/Pages/default.aspx">a Job</a></li>
<li><a target="_blank" href="http://dallaslibrary.org/">a Library</a></li>-->
                                <li><a href="../departments/ciservices/Pages/enterprise-gis.aspx.html" id="find-lightbox-map">a Map</a></li>
                                <li><a target="_blank" href="http://www.dallasparks.org" id="find-lightbox-dallas-park">a Park</a></li>
                              </ul>
                            </div>
                            <div class="col-md-6 col-xs-12 list-items col-end">
                              <ul>
                                <!--<li><a target="_blank" href="http://www.dallasparks.org/">a Park Rec Center</a></li>
<li><a href="/departments/dallas-animal-services/Pages/adoption.aspx">a Pet</a></li>-->
                                <li><a href="../departments/pnv/Pages/zoning.aspx.html" id="find-lightbox-property-zoning">Property Zoning</a></li>
                                <li><a href="../departments/codecompliance/Pages/FoodSafety.aspx.html" id="find-lightbox-restaurant-scores">Restaurant Scores</a></li>
                                <li><a href="../departments/sanitation/Pages/default.aspx.html" id="find-lightbox-trash-pickup">Trash Pickup</a></li>
                              </ul>
                            </div>
                          </div>
                          <div id="pay" style="display:none; bacgkground-color:grey;">
                            <h3>Pay</h3><br>
                            <div class="col-md-6 col-xs-12 list-items">
                              <ul>
                                <li><a target="_blank" href="../departments/waterutilities/Pages/pay-water-bill.aspx.html" id="pay-lightbox-water">Water Bill</a></li>
                                <li><a href="../departments/courtdetentionservices/Pages/default.aspx.html" id="pay-lightbox-traffic-ticket">Traffic &amp; Civil Tickets</a></li>
                                <li><a target="_blank" href="https://wmq.etimspayments.com/pbw/include/dallas/input.jsp" id="pay-lightbox-parking-ticket">Parking Ticket</a></li>
                                <li><a target="_blank" href="https://www.velocitypayment.com/client/bankofamerica/cityofdallas/frab/index.html" id="pay-lightbox-ambulance-ticket">Ambulance Bill</a></li>
                                <li><a href="../departments/waterutilities/special_collections/Pages/special_collections_registrations.aspx.html" id="pay-lightbox-alarms-permits">Alarms Permits</a></li>
                                <li><a target="_blank" href="https://wmq.etimspayments.com/pbw/include/dallas/input.jsp" id="pay-lightbox-school-bus-stop-arm-ticket">School Bus Stop Arm Ticket</a></li>
                              </ul>
                            </div>
                            <div class="col-md-6 col-xs-12 list-items col-end">
                              <ul>
                                <li><a href="../departments/courtdetentionservices/Pages/Warrant-Info.aspx.html" id="pay-lightbox-court-warrants-bond">Court Warrants &amp; Bonds</a></li>
                                <li><a href="paybyapp.aspx.html" id="pay-lightbox-parking-meters">For Parking Meters</a></li>
                                <li><a href="../departments/codecompliance/Pages/garage-sales.aspx.html" id="pay-lightbox-garage-sales-permit">Garage Sales Permit</a></li>
                                <li><a href="../departments/controllersoffice/Pages/hotel-taxes.aspx.html" id="pay-lightbox-hotel-occupancy-tax">Hotel Occupancy Tax (HOT)</a></li>
                                <li><a href="../departments/controllersoffice/Pages/hotel-taxes.aspx.html" id="pay-lightbox-short-term-rentals">Short-Term Rentals (HOT)</a></li>
                                <!--<li><a target="_blank" href="/departments/codecompliance/Pages/Carryout-Bag-Program.aspx">Single-Use Carryout Bag Remittance</a></li>-->
                              </ul>
                            </div>
                          </div>
                          <div id="request" style="display:none; bacgkground-color:grey;">
                            <h3>Request</h3><br>
                            <div class="col-md-6 col-xs-12 list-items">
                              <ul>
                                <li><a href="../departments/sustainabledevelopment/buildinginspection/Pages/index.aspx.html" id="request-lightbox-building-permits-inspections">Building Permits &amp; Inspections</a></li>
                                <li><a href="../services/311/Pages/default.aspx.html" id="request-lightbox-non-emergency-services">311 Services</a></li>
                                <li><a href="../departments/community-care/Pages/vital_statistics.aspx.html" id="request-lightbox-birth-death-certificates">Birth / Death Certificates</a></li>
                                <li><a target="_blank" href="https://www.dallasspecialevents.com/special-event/" id="request-lightbox-event-permits">Event Permits</a></li>
                                <li><a target="_blank" href="https://www.dallasspecialevents.com/film/" id="request-lightbox-filming-permits">Filming Permits</a></li>
                              </ul>
                            </div>
                            <div class="col-md-6 col-xs-12 list-items">
                              <h3>New Utility Services</h3>
                              <ul>
                                <li><a target="_blank" href="http://www.powertochoose.org/" id="request-lightbox-electricity-providers">Electricity Providers</a></li>
                                <li><a target="_blank" href="https://www.allconnect.com/local/tx/dallas" id="request-lightbox-tv">Cable-TV-Satellite</a></li>
                                <li><a target="_blank" href="https://www.2turniton.com/" id="request-lightbox-utilities">Activate Utilities</a></li>
                              </ul>
                            </div>
                          </div>
                          <!--<div id="opendata" style="display:none; bacgkground-color:grey;">
<h3>Open Data</h3><br/>

<div class="iwanttoicons">
<ul>
<li><a href="https://www.dallasopendata.com/" target="_blank"><img class="serviceimg" src="/PublishingImages/static/opendataicon.png" alt="Open Data Icon" /><br />Open Data</a></li>
<li><a href="https://www.dallasopendata.com/browse?category=Police&limitTo=datasets&utf8=%E2%9C%93" target="_blank"><img class="serviceimg" src="/PublishingImages/static/policeicon.png" alt="Police Icon" /><br />Police</a></li>
<li style="margin-right:0px;"><a href="https://www.dallasopendata.com/browse?category=Financial&q=Financial&sortBy=relevance&utf8=%E2%9C%93" target="_blank"><img class="serviceimg" src="/PublishingImages/static/financialicon.png" alt="Finance Icon" /><br />Financial</a></li>
</ul>
<div class="clearfix"></div>
</div>

<div class="col-3 list-items col-end" style="width:100%">
<ul>
<li><a target="_blank" href="https://gis.dallascityhall.com/shapefileDownload.aspx">Download GIS Data</a></li>
<li><a target="_blank" href="https://gis.dallascityhall.com/cityinfo/">Interactive GIS Map</a></li>
<li><a target="_blank" href="https://gis.dallascityhall.com/staticMapGal.aspx">Static GIS Maps</a></li>
<li><a href="/departments/codecompliance/Pages/FoodSafety.aspx">Restaurant Scores</a></li>
</ul>
</div>

</div>-->
                          <script>
                            $(document).ready(function() {
                              $(".iwanttomodal").fancybox({
                                'titlePosition': 'inside',
                                'transitionIn': 'none',
                                'transitionOut': 'none'
                              });
                              $(".swagit").fancybox({
                                'titlePosition': 'inside',
                                'transitionIn': 'none',
                                'transitionOut': 'none',
                                'type': 'iframe',
                                'width': 570,
                                'height': 480,
                                'scrolling': 'no'
                              });
                            });

                            function findsearch() {
                              var findsearchinput = document.getElementById("findsearchinput").value;
                              parent.location = "/pages/searchresults.aspx#k=" + findsearchinput;
                            }
                            $('.pay').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Button', 'Pay');
                            });
                            $('.find').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Button', 'Find');
                            });
                            $('.request').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Request Lightbox Button', 'Request');
                            });
                            $('.open-data').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Data Transparency Lightbox Button', 'Data Transparency');
                            });
                            $('#finantial-transparency').on('click', function() {
                              ga('send', 'event', 'Home Links', 'External Link Button', 'Financial Transparency');
                            });
                            $('#open-records').on('click', function() {
                              ga('send', 'event', 'Home Links', 'PIO Button', 'Open Records Request');
                            });
                            $('#pay-lightbox-water').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Water Bill');
                            });
                            $('#pay-lightbox-traffic-ticket').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Traffic Ticket');
                            });
                            $('#pay-lightbox-parking-ticket').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Parking Ticket');
                            });
                            $('#pay-lightbox-red-light-ticket').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Red Light Ticket');
                            });
                            $('#pay-lightbox-ambulance-ticket').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Ambulance Bill');
                            });
                            $('#pay-lightbox-alarms-permits').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Alarms Permits');
                            });
                            $('#pay-lightbox-court-warrants-bond').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Court Warrants and Bonds');
                            });
                            $('#pay-lightbox-school-bus-stop-arm-ticket').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'School Bus Stop Arm Ticket');
                            });
                            $('#pay-lightbox-parking-meters').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'For Parking Meters');
                            });
                            $('#pay-lightbox-garage-sales-permi').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Garage Sales Permit');
                            });
                            $('#pay-lightbox-hotel-occupancy-tax').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Hotel Occupancy Tax (HOT)');
                            });
                            $('#pay-lightbox-short-term-rentals').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Pay Lightbox Link', 'Short-Term Rentals (HOT)');
                            });
                            $('#findsearchbutton').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'Search');
                            });
                            $('#find-lightbox-job').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'Job');
                            });
                            $('#find-lightbox-library').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'Library');
                            });
                            $('#find-lightbox-pets').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'Pets');
                            });
                            $('#find-lightbox-parks-recreation').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'Parks');
                            });
                            $('#find-lightbox-cultural-center').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'a Cultural Center');
                            });
                            $('#find-lightbox-map').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'a Map');
                            });
                            $('#find-lightbox-dallas-park').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'a Park');
                            });
                            $('#find-lightbox-property-zoning').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'Property Zoning');
                            });
                            $('#find-lightbox-restaurant-scores').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'Restaurant Scores');
                            });
                            $('#find-lightbox-trash-pickup').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Find Lightbox Link', 'Trash Pickup');
                            });
                            $('#request-lightbox-building-permits-inspections').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Request Lightbox Link', 'Building Permits and Inspections');
                            });
                            $('#request-lightbox-non-emergency-services').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Request Lightbox Link', '311 Services');
                            });
                            $('#request-lightbox-birth-death-certificates').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Request Lightbox Link', 'Birth Death Certificatess');
                            });
                            $('#request-lightbox-event-permits').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Request Lightbox Link', 'Event Permits');
                            });
                            $('#request-lightbox-filming-permits').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Request Lightbox Link', 'Filming Permits');
                            });
                            $('#request-lightbox-electricity-providers').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Request Lightbox Link', 'Electricity Providers');
                            });
                            $('#request-lightbox-tv').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Request Lightbox Link', 'Cable-TV-Satellite');
                            });
                            $('#request-lightbox-utilities').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Request Lightbox Link', 'Activate Utilities');
                            });
                            $('#open-meetings').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Official Postings', 'Open Meetings');
                            });
                            $('#council-meetings').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Official Postings', 'Council Meetings');
                            });
                            $('#council-attendance').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Official Postings', 'Council Attenance');
                            });
                            $('#public-notices').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Official Postings', 'Public Notices');
                            });
                            $('#city-calendar').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Official Postings', 'City Calendar');
                            });
                            $('#council-memos').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Official Postings', 'Council Memos');
                            });
                            $('#budget').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Official Postings', 'Budget');
                            });
                            $('#city-meeting-video').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Official Postings', 'Watch City Meetings Online');
                            });
                            $('#quick-links-jobs').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', 'Jobs');
                            });
                            $('#quick-links-water').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', 'Water Utilities');
                            });
                            $('#quick-links-building-permits-inspections').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', 'Building Permits and Inspections');
                            });
                            $('#quick-links-traffic-tickets').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', 'Traffic Tickets');
                            });
                            $('#quick-links-courts').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', 'Court Warrants and Bonds');
                            });
                            $('#quick-links-sanitation').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', 'Trash Pickup');
                            });
                            $('#quick-links-311').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', '311 Services');
                            });
                            $('#quick-links-transportation').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', 'Transportation for Hire');
                            });
                            $('#quick-links-211').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', '211 Links');
                            });
                            $('#quick-links-animal-services').on('click', function() {
                              ga('send', 'event', 'Home Links', 'Quick Links', 'Animal Services');
                            });
                            $('.btn-secondary').on('click', function() {
                              ga('send', 'event', 'Home Links', '311', 'Request a Service');
                            });
                            $('.btn-minimal-reverse').on('click', function() {
                              ga('send', 'event', 'Home Links', '311', 'Check Status');
                            });
                            $('.googleapp').on('click', function() {
                              ga('send', 'event', 'Home Links', '311', 'Google Play Store');
                            });
                            $('.appleapp').on('click', function() {
                              ga('send', 'event', 'Home Links', '311', 'Apple Store');
                            });
                            $('.btn.secondary').on('click', function() {
                              ga('send', 'event', 'Hero', '7/7Event', 'Learn More');
                            });
                          </script>
                          <script>
                            $(document).ready(function() {
                              //add a custom click event to any link or button with custom Google Analyics tracking data
                              $('a[data-ga-category],button[data-ga-category],input[data-ga-category][type="submit"],input[data-ga-category][type="button"]').each(function(i, element) {
                                $(element).click(function() {
                                  recordGoogleEvents(element)
                                });
                              });
                              //add a custom change event to certain types of form element with custom Google Analyics tracking data
                              $('select[data-ga-category],radio[data-ga-category],textarea[data-ga-category],input[data-ga-category][type="text"],input[data-ga-category][type="checkbox"],input[data-ga-category][type="file"],input[data-ga-category][type="image"],input[data-ga-category][type="password"]')
                                .each(function(i, element) {
                                  $(element).change(function() {
                                    recordGoogleEvents(element)
                                  });
                                });

                              function recordGoogleEvents(element) {
                                console.log("begin recordGoogleEvents");
                                var category = $(element).data("ga-category");
                                var action = $(element).data("ga-action");
                                var label = $(element).data("ga-label");
                                var value = $(element).data("ga-value");
                                //default values
                                if (typeof(action) == "undefined") {
                                  action = "";
                                }
                                if (typeof(label) == "undefined") {
                                  label = "";
                                }
                                //send event with a value parameter only if one is provided
                                if (typeof(value) == "undefined" || value === "" || isNaN(value)) {
                                  ga('send', 'event', category, action, label);
                                } else {
                                  ga('send', 'event', category, action, label, value);
                                }
                              }
                            });
                          </script>
                        </div>
                      </div>
                      <div class="ms-clear"></div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </span>
      </div>
      <!-- Spotlight Webpart Zone -->
      <div id="spotlight-home">
        <div data-name="WebPartZone">
          <div>
            <div class="ms-webpart-zone ms-fullWidth">
              <div id="MSOZoneCell_WebPartctl00_ctl48_g_c4fa770a_6888_4fbb_b601_44a11f42c73f" class="s4-wpcell-plain ms-webpartzone-cell ms-webpart-cell-vertical ms-fullWidth ">
                <div class="ms-webpart-chrome ms-webpart-chrome-vertical ms-webpart-chrome-fullWidth ">
                  <div webpartid="c4fa770a-6888-4fbb-b601-44a11f42c73f" haspers="false" id="WebPartctl00_ctl48_g_c4fa770a_6888_4fbb_b601_44a11f42c73f" width="100%" class="ms-WPBody noindex " allowdelete="false" allowexport="false" style="">
                    <div id="ctl00_ctl48_g_c4fa770a_6888_4fbb_b601_44a11f42c73f">
                      <div class="ms-rte-embedcode ms-rte-embedwp">
                        <style>
                          .spotlight-title {
                            font-weight: bold;
                            padding: 5px;
                          }
                        </style>
                        <div class="spotlight-title">
                          <h2 style="color: rgb(68, 68, 68)">SPOTLIGHT</h2>
                        </div>
                        <script type="text/javascript">
                          (function($) {
                            $.fn.scrollbox = function(config) {
                              //default config
                              var defConfig = {
                                linear: true, // Scroll method
                                startDelay: 10, // Start delay (in seconds)
                                delay: 10, // Delay after each scroll event (in seconds)
                                step: 25, // Distance of each single step (in pixels)
                                speed: 25, // Delay after each single step (in milliseconds)
                                switchItems: 1, // Items to switch after each scroll event
                                direction: 'vertical',
                                distance: 'auto',
                                autoPlay: false,
                                onMouseOverPause: true,
                                paused: false,
                                queue: null,
                                listElement: 'ul',
                                listItemElement: 'li',
                                infiniteLoop: true, // Infinite loop or not
                                switchAmount: 0, // Give a number if you don't want to have infinite loop
                                afterForward: null, // Callback function after each forward action
                                afterBackward: null, // Callback function after each backward action
                                triggerStackable: false // Allow triggers when action is not finish yet
                              };
                              config = $.extend(defConfig, config);
                              config.scrollOffset = config.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
                              if (config.queue) {
                                config.queue = $('#' + config.queue);
                              }
                              return this.each(function() {
                                var container = $(this),
                                  containerUL,
                                  scrollingId = null,
                                  nextScrollId = null,
                                  paused = false,
                                  releaseStack,
                                  backward,
                                  forward,
                                  resetClock,
                                  scrollForward,
                                  scrollBackward,
                                  forwardHover,
                                  pauseHover,
                                  switchCount = 0,
                                  stackedTriggerIndex = 0;
                                if (config.onMouseOverPause) {
                                  container.bind('mouseover', function() {
                                    paused = true;
                                  });
                                  container.bind('mouseout', function() {
                                    paused = false;
                                  });
                                }
                                containerUL = container.children(config.listElement + ':first-child');
                                // init default switchAmount
                                if (config.infiniteLoop === false && config.switchAmount === 0) {
                                  config.switchAmount = containerUL.children().length;
                                }
                                scrollForward = function() {
                                  if (paused) {
                                    return;
                                  }
                                  var curLi,
                                    i,
                                    newScrollOffset,
                                    scrollDistance,
                                    theStep;
                                  curLi = containerUL.children(config.listItemElement + ':first-child');
                                  scrollDistance = config.distance !== 'auto' ? config.distance : config.direction === 'vertical' ? curLi.outerHeight(true) : curLi.outerWidth(true);
                                  // offset
                                  if (!config.linear) {
                                    theStep = Math.max(3, parseInt((scrollDistance - container[0][config.scrollOffset]) * 0.3, 10));
                                    newScrollOffset = Math.min(container[0][config.scrollOffset] + theStep, 0);
                                  } else {
                                    newScrollOffset = Math.min(container[0][config.scrollOffset] + config.step, 0);
                                  }
                                  container[0][config.scrollOffset] = newScrollOffset;
                                  if (newScrollOffset >= 0) {
                                    for (i = 0; i < config.switchItems; i++) {
                                      if (config.queue && config.queue.find(config.listItemElement).length > 0) {
                                        containerUL.append(config.queue.find(config.listItemElement)[0]);
                                        containerUL.children(config.listItemElement + ':first-child').remove();
                                      } else {
                                        containerUL.append(containerUL.children(config.listItemElement + ':first-child'));
                                      }
                                      ++switchCount;
                                    }
                                    container[0][config.scrollOffset] = 0;
                                    clearInterval(scrollingId);
                                    scrollingId = null;
                                    if ($.isFunction(config.afterForward)) {
                                      config.afterForward.call(container, {
                                        switchCount: switchCount,
                                        currentFirstChild: containerUL.children(config.listItemElement + ':first-child')
                                      });
                                    }
                                    if (config.triggerStackable && stackedTriggerIndex !== 0) {
                                      releaseStack();
                                      return;
                                    }
                                    if (config.infiniteLoop === false && switchCount >= config.switchAmount) {
                                      return;
                                    }
                                    if (config.autoPlay) {
                                      nextScrollId = setTimeout(forward, config.delay * 1000);
                                    }
                                  }
                                };
                                // Backward
                                // 1. If forwarding, then reverse
                                // 2. If stoping, then backward once
                                scrollBackward = function() {
                                  if (paused) {
                                    return;
                                  }
                                  var curLi,
                                    i,
                                    newScrollOffset,
                                    scrollDistance,
                                    theStep;
                                  // init
                                  if (container[0][config.scrollOffset] === 0) {
                                    for (i = 0; i < config.switchItems; i++) {
                                      containerUL.children(config.listItemElement + ':last-child').insertBefore(containerUL.children(config.listItemElement + ':first-child'));
                                    }
                                    curLi = containerUL.children(config.listItemElement + ':first-child');
                                    scrollDistance = config.distance !== 'auto' ? config.distance : config.direction === 'vertical' ? curLi.height() : curLi.width();
                                    container[0][config.scrollOffset] = scrollDistance;
                                  }
                                  // new offset
                                  if (!config.linear) {
                                    theStep = Math.max(3, parseInt(container[0][config.scrollOffset] * 0.3, 10));
                                    newScrollOffset = Math.max(container[0][config.scrollOffset] - theStep, 0);
                                  } else {
                                    newScrollOffset = Math.max(container[0][config.scrollOffset] - config.step, 0);
                                  }
                                  container[0][config.scrollOffset] = newScrollOffset;
                                  if (newScrollOffset === 0) {
                                    --switchCount;
                                    clearInterval(scrollingId);
                                    scrollingId = null;
                                    if ($.isFunction(config.afterBackward)) {
                                      config.afterBackward.call(container, {
                                        switchCount: switchCount,
                                        currentFirstChild: containerUL.children(config.listItemElement + ':first-child')
                                      });
                                    }
                                    if (config.triggerStackable && stackedTriggerIndex !== 0) {
                                      releaseStack();
                                      return;
                                    }
                                    if (config.autoPlay) {
                                      nextScrollId = setTimeout(forward, config.delay * 1000);
                                    }
                                  }
                                };
                                releaseStack = function() {
                                  if (stackedTriggerIndex === 0) {
                                    return;
                                  }
                                  if (stackedTriggerIndex > 0) {
                                    stackedTriggerIndex--;
                                    nextScrollId = setTimeout(forward, 0);
                                  } else {
                                    stackedTriggerIndex++;
                                    nextScrollId = setTimeout(backward, 0);
                                  }
                                };
                                forward = function() {
                                  clearInterval(scrollingId);
                                  scrollingId = setInterval(scrollForward, config.speed);
                                };
                                backward = function() {
                                  clearInterval(scrollingId);
                                  scrollingId = setInterval(scrollBackward, config.speed);
                                };
                                // Implements mouseover function.
                                forwardHover = function() {
                                  config.autoPlay = true;
                                  paused = false;
                                  clearInterval(scrollingId);
                                  scrollingId = setInterval(scrollForward, config.speed);
                                };
                                pauseHover = function() {
                                  paused = true;
                                };
                                resetClock = function(delay) {
                                  config.delay = delay || config.delay;
                                  clearTimeout(nextScrollId);
                                  if (config.autoPlay) {
                                    nextScrollId = setTimeout(forward, config.delay * 1000);
                                  }
                                };
                                if (config.autoPlay) {
                                  nextScrollId = setTimeout(forward, config.startDelay * 1000);
                                }
                                // bind events for container
                                container.bind('resetClock', function(delay) {
                                  resetClock(delay);
                                });
                                container.bind('forward', function() {
                                  if (config.triggerStackable) {
                                    if (scrollingId !== null) {
                                      stackedTriggerIndex++;
                                    } else {
                                      forward();
                                    }
                                  } else {
                                    clearTimeout(nextScrollId);
                                    forward();
                                  }
                                });
                                container.bind('backward', function() {
                                  if (config.triggerStackable) {
                                    if (scrollingId !== null) {
                                      stackedTriggerIndex--;
                                    } else {
                                      backward();
                                    }
                                  } else {
                                    clearTimeout(nextScrollId);
                                    backward();
                                  }
                                });
                                container.bind('pauseHover', function() {
                                  pauseHover();
                                });
                                container.bind('forwardHover', function() {
                                  forwardHover();
                                });
                                container.bind('speedUp', function(speed) {
                                  if (speed === 'undefined') {
                                    speed = Math.max(1, parseInt(config.speed / 2, 10));
                                  }
                                  config.speed = speed;
                                });
                                container.bind('speedDown', function(speed) {
                                  if (speed === 'undefined') {
                                    speed = config.speed * 2;
                                  }
                                  config.speed = speed;
                                });
                                container.bind('updateConfig', function(options) {
                                  config = $.extend(config, options);
                                });
                              });
                            };
                          }(jQuery));
                        </script>
                        <script type="text/javascript">
                          $(function() {
                            $('#pi-tiles').scrollbox({
                              direction: 'h',
                            });
                            $('#pi-tiles-backward').click(function() {
                              $('#pi-tiles').trigger('backward');
                            });
                            $('#pi-tiles-forward').click(function() {
                              $('#pi-tiles').trigger('forward');
                            });
                          });
                        </script>
                        <script src="../Style%20Library/js/angular.min.js"></script>
                        <script>
                          var myAngApp = angular.module('AngAppSpotLight', []);
                          myAngApp.controller('angSpotLightController', function($scope, $http) {
                            var today = new Date();
                            $http({
                              method: 'GET',
                              url: removeHTTPfromURL(_spPageContextInfo.webAbsoluteUrl) + "/_api/web/lists/getByTitle('SpotLight')/items?$select=StartDate,EndDate,Order,SpotlightTitle,OpenInTheNextTab,Link,EncodedAbsUrl" +
                                "&$orderby=Order0 asc&$filter=StartDate le datetime'" + today.toISOString() + "' and EndDate ge datetime'" + today.toISOString() + "'",
                              headers: {
                                "Accept": "application/json;odata=verbose"
                              }
                            }).success(function(d, s, h, c) {
                              $scope.spotlights = d.d.results;
                              var backupCount = 3 - $scope.spotlights.length;
                              if (backupCount > 0) {
                                $http({
                                  method: 'GET',
                                  url: removeHTTPfromURL(_spPageContextInfo.webAbsoluteUrl) + "/_api/web/lists/getByTitle('SpotLight')/items?$select=Order,SpotlightTitle,OpenInTheNextTab,Link,EncodedAbsUrl&$orderby=Order0 desc",
                                  headers: {
                                    "Accept": "application/json;odata=verbose"
                                  }
                                }).success(function(d, s, h, c) {
                                  $scope.spotlights.push.apply($scope.spotlights, d.d.results);
                                });
                              }
                            });
                            //$scope.pictures = function () {
                            //    return $scope.spotlights.concat($scope.spotlightBackups);
                            //}
                            $scope.getTarget = function(targetString) {
                              if (targetString) return "_blank";
                              else return "_self";
                            }
                            $scope.getSrcwithoutHTTP = function(urlString) {
                              var httpIndex = urlString.indexOf("://");
                              if (httpIndex > 0) return urlString.slice(httpIndex + 1);
                              else return urlString;
                            }
                          })
                        </script>
                        <div ng-app="AngAppSpotLight" class="sp-row ng-scope">
                          <div id="pi-scroll-tiles" ng-controller="angSpotLightController" class="ng-scope">
                            <div id="pi-tiles-btn" class="text-center">
                              <a class="btn" id="pi-tiles-backward"></a>
                              <a class="btn" id="pi-tiles-forward"></a>
                            </div>
                            <div id="pi-tiles" class="scroll-img">
                              <ul class="unstyled" id="tilesUl">
                                <!-- ngRepeat: picture in spotlights -->
                              </ul>
                            </div>
                          </div>
                        </div>
                        <br>
                        <style>
                          #countdown {
                            text-align: center;
                            padding: 20px 0;
                            border-top: solid 1px #999;
                          }

                          #countdown h3 {
                            font-family: 'Roboto';
                            font-weight: 600;
                            font-size: 28px;
                            color: rgb(3, 63, 136);
                            border-bottom: none;
                          }

                          #countdown-1 {
                            padding: 25px 0;
                          }

                          #countdown-display {
                            display: block;
                            border-radius: 10px;
                            /*height: 140px;*/
                            max-width: 700px;
                            margin: 0 auto;
                          }

                          #countdown-2 {
                            padding: 0px 0;
                            background-color: #fff;
                            padding: 10px 50px 10px 30px;
                            border-top-right-radius: 65px;
                            border-bottom-right-radius: 65px;
                            height: 105px;
                          }

                          /*#countdown-2 a{
		display: block;
		 background-image: url("https://dallascityhall.com/Style%20Library/Images/Next%20Arrow.svg");
		background-position: right;
		background-repeat: no-repeat;
    background-size: 20px;
    padding: 0 30% 0 0;
	}*/
                          #countdown-2 a img {
                            height: 100%;
                          }

                          #countdown-2 h3 {
                            font-family: 'Roboto';
                            padding: 0px;
                            font-size: 32px;
                            line-height: 1;
                            border: none;
                            color: rgb(3, 63, 136);
                            font-weight: 600;
                          }

                          #countdown-2 h5 {
                            font-family: 'Roboto';
                            font-size: 18px;
                            color: rgb(38, 115, 209);
                            font-weight: 500;
                            padding: 0px;
                            line-height: 1;
                            border: none;
                          }

                          #countdown-3 {
                            display: inline-block;
                            background-color: rgb(3, 63, 136);
                            padding: 15px 0 15px 40px;
                            border-top-left-radius: 65px;
                            border-bottom-left-radius: 65px;
                            height: 105px;
                          }

                          #countdown-3 h3 {
                            font-family: 'Roboto';
                            font-size: 44px;
                            font-weight: 500;
                            color: #fff;
                            padding: 0;
                            border: none;
                          }

                          #countdown-3 .metric {
                            font-family: 'Roboto';
                            font-size: 44px;
                            font-weight: 500;
                            color: #fff;
                            padding: 0;
                            border: none;
                          }

                          #countdown-3 .col-xs-3 {
                            border-right: solid 1px #c5d3fc;
                            padding: 0;
                          }

                          #countdown-3 .col-xs-3:last-of-type {
                            border-right: none;
                          }

                          #countdown-3 p {
                            font-family: 'Roboto';
                            color: #c5d3fc;
                            font-weight: 600;
                            font-size: 12px;
                            padding: 0;
                            margin: 0;
                          }

                          .xxs-hide {
                            display: block;
                          }

                          .xxs-show {
                            display: none;
                          }

                          #countdown-3 .col-xs-3:nth-of-type(2) {
                            border-right: visible;
                          }

                          #spotlight-home {
                            padding: 50px 0px 30px 0;
                          }

                          @media screen and (max-width: 640px) {

                            #countdown-display .col-xs-7,
                            #countdown-display .col-xs-5 {
                              width: 100%;
                            }

                            #countdown-3 .col-xs-3 {
                              width: 50%;
                            }

                            .xxs-hide {
                              display: none;
                            }

                            .xxs-show {
                              display: block;
                            }

                            #countdown-3 .col-xs-3:nth-of-type(2) {
                              border-right: none;
                            }

                            #countdown-3 {
                              border-top-left-radius: 45px;
                              border-top-right-radius: 45px;
                              border-bottom-left-radius: 0;
                              padding: 10px 20px;
                              height: 95px;
                            }

                            #countdown-2 {
                              display: block;
                              border-bottom-right-radius: 45px;
                              border-bottom-left-radius: 45px;
                              border-top-left-radius: 0;
                              border-top-right-radius: 0;
                              padding: 15px 20px;
                              height: 95px;
                            }

                            #countdown-display {
                              display: block;
                              padding: 0 10px;
                            }

                            #spotlight-home {
                              padding: 50px 0px;
                            }
                          }
                        </style>
                      </div>
                    </div>
                    <div class="ms-clear"></div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div id="newsroom" class="dch-row">
        <div class="column-1 text-center">
          <div data-name="WebPartZone">
            <div>
              <div class="ms-webpart-zone ms-fullWidth">
                <div id="MSOZoneCell_WebPartctl00_ctl48_g_efb83318_e420_4455_ac8f_fe394d8c3a30" class="s4-wpcell-plain ms-webpartzone-cell ms-webpart-cell-vertical ms-fullWidth ">
                  <div class="ms-webpart-chrome ms-webpart-chrome-vertical ms-webpart-chrome-fullWidth ">
                    <div webpartid="efb83318-e420-4455-ac8f-fe394d8c3a30" haspers="false" id="WebPartctl00_ctl48_g_efb83318_e420_4455_ac8f_fe394d8c3a30" width="100%" class="ms-WPBody noindex " allowdelete="false" allowexport="false" style="">
                      <div id="ctl00_ctl48_g_efb83318_e420_4455_ac8f_fe394d8c3a30">
                        <div class="ms-rte-embedcode ms-rte-embedwp">
                          <h3 style="border-bottom:none; color: rgb(68, 68, 68)">FEATURED NEWS</h3>
                          <a href="http://dallascitynews.net" target="_blank" class="btn btn-primary btn-md" style="background-color:white; border: 1px solid #0166ce; color: #0166ce;" data-ga-action="External Link" data-ga-category="Featured News" data-ga-label="Read More">View More News</a>
                        </div>
                      </div>
                      <div class="ms-clear"></div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="column-2">
          <div data-name="WebPartZone">
            <div>
              <div class="ms-webpart-zone ms-fullWidth">
                <div id="MSOZoneCell_WebPartctl00_ctl48_g_8d75d7aa_6a08_4bc9_84cf_b61854a0c426" class="s4-wpcell-plain ms-webpartzone-cell ms-webpart-cell-vertical ms-fullWidth ">
                  <div class="ms-webpart-chrome ms-webpart-chrome-vertical ms-webpart-chrome-fullWidth ">
                    <div webpartid="8d75d7aa-6a08-4bc9-84cf-b61854a0c426" haspers="false" id="WebPartctl00_ctl48_g_8d75d7aa_6a08_4bc9_84cf_b61854a0c426" width="100%" class="ms-WPBody noindex " allowdelete="false" allowexport="false" style="">
                      <div id="ctl00_ctl48_g_8d75d7aa_6a08_4bc9_84cf_b61854a0c426">
                        <ul id="ctl00_ctl48_g_8d75d7aa_6a08_4bc9_84cf_b61854a0c426_fNews">
                          <li>
                            <a href="Corona-Virus.aspx.html" target="_self" data-ga-action="Click" data-ga-category="Featured News" data-ga-label="Important Information Regarding Coronavirus (COVID-19)">Important Information Regarding Coronavirus (COVID-19)</a>
                          </li>
                          <li><a href="https://www.dallascitynews.net/new-dallas-gov-domain-name" target="_Blank" data-ga-action="Click" data-ga-category="Featured News" data-ga-label="New Dallas.GOV Domain Name">New Dallas.GOV Domain Name</a></li>
                          <li>
                            <a href="http://www.dallascitynews.net/city-dallas-adopts-new-economic-development-policy" target="_self" data-ga-action="Click" data-ga-category="Featured News" data-ga-label="City of Dallas adopts new Economic Development Policy">City of Dallas adopts new Economic Development Policy</a>
                          </li>
                        </ul>
                      </div>
                      <div class="ms-clear"></div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="full-width">
        <div data-name="WebPartZone">
          <div>
            <menu class="ms-hide">
              <ie:menuitem id="MSOMenu_Help" iconsrc="/_layouts/15/images/HelpIcon.gif" onmenuclick="MSOWebPartPage_SetNewWindowLocation(MenuWebPart.getAttribute('helpLink'), MenuWebPart.getAttribute('helpMode'))" text="Help" type="option"
                style="display:none">
              </ie:menuitem>
            </menu>
          </div>
        </div>
      </div>
      <div style="display:none" id="hidZone"></div>
    </div>
  </div>
  <!--end s4bodycontainer -->
  <br clear="all">
  <!-- start footer -->
  <!--scroll-->
  <script type="text/javascript">
    //<![CDATA[
    $(document).on('click', 'a[id$="BackToTop"]', function(e) {
      setPosition("#mainNav", e);
    });

    function setPosition(section, e) {
      $("#s4-workspace").animate({
        scrollTop: $(section).offset().top
      }, 800);
      e.preventDefault();
    }
    //]]>
  </script>
  <div class="full-row mp-footer" id="dch-footer" role="contentinfo">
  </div>
  <script type="text/javascript">
    //<![CDATA[
    $(function() {
      $("#mainNav").load("/SiteAssets/DCH-Main-Navigation.txt");
      $("#dch-footer").load("/SiteAssets/DCH-Footer.txt");
    });
    //]]>
  </script>
  <!--end footer -->
  <script src="../Style%20Library/js/dch-responsive.js" type="text/javascript">
    //<![CDATA[
    //]]>
  </script>
  <!-- end outerWrapper-->
  <style>
    //<![CDATA[.fancybox-close { position : absolute;top:-18px;right:-18px;width:36px;height:36px;cursor:pointer;z-index:8040; background:url('../Style%20Library/fancybox_sprite.png') }.fancybox-overlay { background:url('../Style%20Library/fancybox_overlay.png') }
    //]]>
  </style>
  <script type="text/javascript">
    //<![CDATA[  
    $(document).ready(function() {
      $('a.fancybox').attr("href", "/Pages/dallasfeedback.aspx?pageurl=" + window.location);
    });
    $('a.fancybox').fancybox({
      helpers: {
        overlay: {
          closeClick: false
        }
      },
      'overlayOpacity': 0.6,
      autoSize: true,
      autoDimensions: true,
      'transitionIn': 'elastic',
      'transitionOut': 'elastic'
    });
    //]]>
  </script>
  <script src="../Style%20Library/js/jquery.dlmenu.js" type="text/javascript">
    //<![CDATA[
    //]]>
  </script>
  <script type="text/javascript">
    //<![CDATA[
    $(function() {
      $('#dl-menu').dlmenu({
        animationClasses: {
          in: 'dl-animate-in-2',
          out: 'dl-animate-out-2'
        }
      });
    });
    jQuery(function($) {
      $("#seconMainNav .hover-dropdown-toggle").on({
        mouseenter: function(event) {
          var overlaybody = $('#overlay');
          if (!overlaybody.length) {
            $('body').append('<div id="overlay"> </div>');
          }
          $("div.second-static-dropdown", this).removeClass('hide-dropdown');
          $("div.second-static-dropdown", this).addClass('show-dropdown');
        },
        mouseleave: function(event) {
          event.preventDefault();
          $('#overlay').remove();
          $("div.second-static-dropdown", this).removeClass('show-dropdown');
          $("div.second-static-dropdown", this).addClass('hide-dropdown');
          $(this).trigger('hover');
          $(this).unbind('hover');
        }
      });
    });
    //]]>
  </script>
  <script>
    //<![CDATA[
    var emailPlaceHolder = document.getElementById("govdeliveryemail");
    if (emailPlaceHolder) {
      if (emailPlaceHolder.addEventListener) {
        emailPlaceHolder.addEventListener("focus", focusEmailSignup);
        emailPlaceHolder.addEventListener("blur", blurEmailSignup);
      } else if (emailPlaceHolder.attachEvent) {
        emailPlaceHolder.attachEvent("focus", focusEmailSignup);
        emailPlaceHolder.attachEvent("blur", blurEmailSignup);
      }
    }

    function focusEmailSignup() {
      emailPlaceHolder.style.color = "#FFF";
      if (emailPlaceHolder.value == "Email") {
        emailPlaceHolder.value = "";
      }
    }

    function blurEmailSignup() {
      if (emailPlaceHolder.value == "") {
        emailPlaceHolder.value = "Email";
        emailPlaceHolder.style.color = "#888";
      }
    }
    //]]>
  </script>
  <div role="dialog" aria-label="dallas chatbot">
    <script src="../SiteAssets/dalbot/uuidv4.min.js">
      //<![CDATA[
      //]]>
    </script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js" integrity="sha512-rCjfoab9CVKOH/w/T6GbBxnAH5Azhy4+q1EXW5XEURefHbIkRbQ++ZR+GBClo3/d3q583X/gO4FKmOFuhkKrdA==" crossorigin="anonymous">
      //<![CDATA[
      //]]>
    </script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.min.js" integrity="sha512-AIOTidJAcHBH2G/oZv9viEGXRqDNmfdPVPYOYKGy3fti0xIplnlgMHUGfuNRzC6FkzIo0iIxgFnr9RikFxK+sw=="
      crossorigin="anonymous">
      //<![CDATA[
      //]]>
    </script>
    <shadow-demo id="shadow" chat-title-color="#0166CE" user-message-bg-color="#8EC900" bot-message-bg-color="#001B3B" chat-user-font-color="#001B3B" chat-bot-font-color="#FFFFFF" chat-title="DalBot">
    </shadow-demo>
    <script src="../SiteAssets/dalbot/shadow-12-12%EF%B9%96version=4.js" type="text/javascript">
      //<![CDATA[
      //]]>
    </script>
  </div>
  <div id="DeltaFormDigest">
    <script type="text/javascript">
      //<![CDATA[
      var formDigestElement = document.getElementsByName('__REQUESTDIGEST')[0];
      if (!((formDigestElement == null) || (formDigestElement.tagName.toLowerCase() != 'input') || (formDigestElement.type.toLowerCase() != 'hidden') || (formDigestElement.value == null) || (formDigestElement.value.length <= 0))) {
        formDigestElement.value = '0xBB96C03BDA283E57F778DCE8349C2D6B2636DB86085F7864571F9C6CA53B28D23F3D1E3546484AC8FF2B4E47C51FEECBECE9E1CB26AE56019B3552E4237E9B5B,31 Mar 2022 08:41:44 -0000';
        g_updateFormDigestPageLoaded = new Date();
      }
      //]]>
    </script>
  </div>
  <script type="text/javascript">
    //<![CDATA[
    var _fV4UI = true;

    function _RegisterWebPartPageCUI() {
      var initInfo = {
        editable: false,
        isEditMode: false,
        allowWebPartAdder: false,
        listId: "{4a35db85-1d01-4ce0-9804-6a1072e5021e}",
        itemId: 533,
        recycleBinEnabled: true,
        enableMinorVersioning: true,
        enableModeration: false,
        forceCheckout: true,
        rootFolderUrl: "\u002fPages",
        itemPermissions: {
          High: 16,
          Low: 196705
        }
      };
      SP.Ribbon.WebPartComponent.registerWithPageManager(initInfo);
      var wpcomp = SP.Ribbon.WebPartComponent.get_instance();
      var hid;
      hid = document.getElementById("_wpSelected");
      if (hid != null) {
        var wpid = hid.value;
        if (wpid.length > 0) {
          var zc = document.getElementById(wpid);
          if (zc != null) wpcomp.selectWebPart(zc, false);
        }
      }
      hid = document.getElementById("_wzSelected");
      if (hid != null) {
        var wzid = hid.value;
        if (wzid.length > 0) {
          wpcomp.selectWebPartZone(null, wzid);
        }
      }
    };

    function __RegisterWebPartPageCUI() {
      ExecuteOrDelayUntilScriptLoaded(_RegisterWebPartPageCUI, "sp.ribbon.js");
    }
    _spBodyOnLoadFunctionNames.push("__RegisterWebPartPageCUI");
    var __wpmExportWarning =
      'This Web Part Page has been personalized. As a result, one or more Web Part properties may contain confidential information. Make sure the properties contain information that is safe for others to read. After exporting this Web Part, view properties in the Web Part description file (.WebPart) by using a text editor such as Microsoft Notepad.';
    var __wpmCloseProviderWarning =
      'You are about to close this Web Part.  It is currently providing data to other Web Parts, and these connections will be deleted if this Web Part is closed.  To close this Web Part, click OK.  To keep this Web Part, click Cancel.';
    var __wpmDeleteWarning = 'You are about to permanently delete this Web Part.  Are you sure you want to do this?  To delete this Web Part, click OK.  To keep this Web Part, click Cancel.';
    var g_clientIdDeltaPlaceHolderMain = "DeltaPlaceHolderMain";
    var g_clientIdDeltaPlaceHolderUtilityContent = "DeltaPlaceHolderUtilityContent";
    //]]>
  </script>
</form>

Text Content

Public Alerts




WELCOME TO DALLAS


COMMITTED TO "SERVICE FIRST" EXCELLENCE



Important COVID-19 Information



OUR CORE VALUES ARE EMPATHY, ETHICS, EXCELLENCE, EQUITY






VIRTUAL CONSULTING


 * Pay
 * Find
 * Request
 * Dallas Data Hub
 * Financial Transparency
   
   
 * Open Records Request


OFFICIAL POSTINGS

 * FY 2021-22 Adopted Budget
 * Council Meetings
 * Council Attendance
 * City Calendar
 * Public Notices
 * Open Meetings
 * Council Memos
 * Watch City Meetings Online


QUICK LINKS

 * Water Utilities
 * Trash Pickup
 * Building Permits & Inspections
 * Jobs
 * Traffic & Civil Tickets
 * Court Warrants & Bonds
 * Animal Services
 * 2-1-1 Texas (State Assistance)




DOWNLOAD THE NEW
OURDALLAS MOBILE APP




311 FREQUENTLY REQUESTED SERVICES

 * Code Concerns
 * Sanitation Roll Cart
 * Missed Garbage
 * Street Repair
 * Parking – Report a Violation
 * Animal Loose
 * Dead Animal Pick Up
 * 24 Hour Parking

Request a Service About 311
Check Service Request Status



FIND


Search
 * 
   Job
 * 
   Library
 * 
   Pets
 * 
   Parks


 * a Cultural Center
   
 * a Map
 * a Park

   
 * Property Zoning
 * Restaurant Scores
 * Trash Pickup


PAY


 * Water Bill
 * Traffic & Civil Tickets
 * Parking Ticket
 * Ambulance Bill
 * Alarms Permits
 * School Bus Stop Arm Ticket

 * Court Warrants & Bonds
 * For Parking Meters
 * Garage Sales Permit
 * Hotel Occupancy Tax (HOT)
 * Short-Term Rentals (HOT)
   


REQUEST


 * Building Permits & Inspections
 * 311 Services
 * Birth / Death Certificates
 * Event Permits
 * Filming Permits


NEW UTILITY SERVICES

 * Electricity Providers
 * Cable-TV-Satellite
 * Activate Utilities




SPOTLIGHT






FEATURED NEWS

View More News

 * Important Information Regarding Coronavirus (COVID-19)
 * New Dallas.GOV Domain Name
 * City of Dallas adopts new Economic Development Policy