www.meo.pt Open in urlscan Pro
194.65.61.30  Public Scan

URL: https://www.meo.pt/fatura-interativa
Submission: On May 17 via manual from ES — Scanned from ES

Form analysis 1 forms found in the DOM

POST /fatura-interativa?TermStoreId=6530ff20-a0c0-45dd-8345-6e4bbe325044&TermSetId=ef320081-ab8f-4707-b5b3-eb82d079d381&TermId=9b961b32-2675-4bab-86bb-88f4e3e03c94

<form method="post" action="/fatura-interativa?TermStoreId=6530ff20-a0c0-45dd-8345-6e4bbe325044&amp;TermSetId=ef320081-ab8f-4707-b5b3-eb82d079d381&amp;TermId=9b961b32-2675-4bab-86bb-88f4e3e03c94" onsubmit="javascript:return WebForm_OnSubmit();"
  id="aspnetForm">
  <div class="aspNetHidden">
    <input type="hidden" name="__SPSCEditMenu" id="__SPSCEditMenu" value="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="__EVENTTARGET" id="__EVENTTARGET" value="">
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
    <input type="hidden" name="__REQUESTDIGEST" id="__REQUESTDIGEST" value="0x65BD1A3A5AD2B309615A7B970C35524F863A5238DF7FC1E755D7EE29EC928EBBBE789094DD95B0E00537E09B027D1974F7CF845D432228A9D43F1EF671E71DD7,17 May 2023 15:33:37 -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="/wEPDwUBMA9kFgJmD2QWAgIBD2QWBAIBD2QWBgIQD2QWAmYPZBYCAgEPFgIeE1ByZXZpb3VzQ29udHJvbE1vZGULKYgBTWljcm9zb2Z0LlNoYXJlUG9pbnQuV2ViQ29udHJvbHMuU1BDb250cm9sTW9kZSwgTWljcm9zb2Z0LlNoYXJlUG9pbnQsIFZlcnNpb249MTYuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49NzFlOWJjZTExMWU5NDI5YwFkAh8PZBYIAgEPFgIeB1Zpc2libGVoZAIDDxYCHwFoZAIFDxYCHwFoZAIHDxYCHwFoZAIpD2QWAgIDD2QWAmYPZBYCZg88KwAGAGQCBQ9kFgwCAQ9kFgICAQ9kFgIFJmdfZDA3OWM4NDVfY2NmNF80ZjVjX2I2NzVfOTMyOWZiZWY2YTk1D2QWAmYPFgQeBWNsYXNzBR9tcy1ydGUtZW1iZWRjb2RlIG1zLXJ0ZS1lbWJlZHdwHglpbm5lcmh0bWwF56wIPCEtLSBJTklDSU8gRE8gQkxPQ08gREUgSFRNTCBMSVZSRSAtLT4NCiAgICA8IS0tIElOSUNJTyBETyBCTE9DTyBERSBIVE1MIExJVlJFIC0tPg0KICAgIDwhLS0gSU5JQ0lPIERPIEJMT0NPIERFIEhUTUwgTElWUkUgLS0+DQoNCiAgICA8c2VjdGlvbiBjbGFzcz0icHJlbG9hZCBoaWRkZW4iPg0KICAgICAgPGltZw0KICAgICAgICBjbGFzcz0iaGlkZGVuIg0KICAgICAgICBzcmM9Imh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3BhZ2luYXMvX2ZhdHVyYV9pbnRlcmF0aXZhLzFGYXR1cmFfRml4b19QYWdlXzEucG5nIg0KICAgICAgLz4NCiAgICAgIDxpbWcNCiAgICAgICAgY2xhc3M9ImhpZGRlbiINCiAgICAgICAgc3JjPSJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS8xRmF0dXJhX0ZpeG9fUGFnZV8yLnBuZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvMUZhdHVyYV9GaXhvX1BhZ2VfMy5wbmciDQogICAgICAvPg0KICAgICAgPGltZw0KICAgICAgICBjbGFzcz0iaGlkZGVuIg0KICAgICAgICBzcmM9Imh0dHBzOi8vY29udGV1ZG9zLm1lby5wdC9TdHlsZSUyMExpYnJhcnkvY29uc3Vtby9pbWFnZXMvZmF0dXJhaW50ZXJhdGl2YS8xRmF0dXJhVGVsZW1vdmVsX3AxLmpwZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly9jb250ZXVkb3MubWVvLnB0L1N0eWxlJTIwTGlicmFyeS9jb25zdW1vL2ltYWdlcy9mYXR1cmFpbnRlcmF0aXZhLzFGYXR1cmFUZWxlbW92ZWxfcDIuanBnIg0KICAgICAgLz4NCiAgICAgIDxpbWcNCiAgICAgICAgY2xhc3M9ImhpZGRlbiINCiAgICAgICAgc3JjPSJodHRwczovL2NvbnRldWRvcy5tZW8ucHQvU3R5bGUlMjBMaWJyYXJ5L2NvbnN1bW8vaW1hZ2VzL2ZhdHVyYWludGVyYXRpdmEvMkZhdHVyYVRlbGVtb3ZlbF9wMS5qcGciDQogICAgICAvPg0KICAgICAgPGltZw0KICAgICAgICBjbGFzcz0iaGlkZGVuIg0KICAgICAgICBzcmM9Imh0dHBzOi8vY29udGV1ZG9zLm1lby5wdC9TdHlsZSUyMExpYnJhcnkvY29uc3Vtby9pbWFnZXMvZmF0dXJhaW50ZXJhdGl2YS8yRmF0dXJhVGVsZW1vdmVsX3AyLmpwZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8xLnBuZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8yLnBuZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8zLnBuZyINCiAgICAgIC8+DQogICAgPC9zZWN0aW9uPg0KDQogICAgPHN0eWxlPg0KICAgICAgI0xvYWRpZnkgew0KICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgICAgICBoZWlnaHQ6IDMwMHB4Ow0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICAgICAgICBsaW5lLWhlaWdodDogMzAwcHg7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDUwcHg7DQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgIH0NCg0KICAgICAgI0xvYWRpZnkgaW1nIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICAgICAgfQ0KDQogICAgICAuaXMtbG9hZGluZyAjTG9hZGlmeSB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgfQ0KDQogICAgICAuaXMtbG9hZGluZyAjVGFiaWZ5LA0KICAgICAgLmlzLWxvYWRpbmcgI0NvbnRlbnRpZnkgew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgICB9DQoNCiAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSB7DQogICAgICAgIC8qYmFja2dyb3VuZDojRkZGOyovDQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgfQ0KDQogICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgaDIgew0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsNCiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4Ow0KICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4Ow0KICAgICAgICBwYWRkaW5nLXRvcDogMTBweDsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgIH0NCg0KICAgICAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIGgzIHsNCiAgICAgICAgbWFyZ2luLXRvcDogMDsNCiAgICAgICAgZm9udC1zaXplOiAyNHB4Ow0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogMHB4Ow0KICAgICAgfQ0KDQogICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgLmJveC10aXRsZSB7DQogICAgICAgIG1hcmdpbjogMjBweCBhdXRvIDMwcHg7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIG1heC13aWR0aDogMTAwJTsNCiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNjVweDsNCiAgICAgIH0NCg0KICAgICAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIC5ib3gtdGl0bGUgcCB7DQogICAgICAgIGZvbnQtc2l6ZTogMTBweDsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICB9DQoNCiAgICAgIC8qLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIC5mZC1uYXYtdGFic3ttYXJnaW4tdG9wOjQwcHg7fSovDQogICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgdWwsDQogICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgbGkgew0KICAgICAgICBsaXN0LXN0eWxlOiBub25lOw0KICAgICAgICBtYXJnaW46IDA7DQogICAgICAgIHBhZGRpbmc6IDA7DQogICAgICB9DQoNCiAgICAgIC50b3AtaW50cm8gew0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDsNCiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4Ow0KICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4Ow0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICB9DQoNCiAgICAgIC5ibC10YWJzIC50YWItY29udGVudCB7DQogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgICAgfQ0KDQogICAgICAuYmwtdGFicyAudGFiLWNvbnRlbnQgLnRhYi1wYW5lIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICB3aWR0aDogYXV0bzsNCiAgICAgICAgZmxvYXQ6IG5vbmU7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgICAgICAgbWF4LXdpZHRoOiAxMTcwcHg7DQogICAgICAgIG1heC13aWR0aDogbm9uZTsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgIHBhZGRpbmctbGVmdDogMjY1cHg7DQogICAgICB9DQoNCiAgICAgIC8qLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnN7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMzMzMzMzM7b3ZlcmZsb3c6IGhpZGRlbjtiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O3BhZGRpbmctdG9wOiA2cHg7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OiAxNXB4O30NCiAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnMgbGk6bGFzdC1vZi10eXBle21hcmdpbi1yaWdodDoxNXB4O30NCiAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnMgbGk6bm90KC5hY3RpdmUpe2JhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaXtmb250LXNpemU6IDE0cHg7Y29sb3I6ICMwMDAwMDA7dmVydGljYWwtYWxpZ246IG1pZGRsZTtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luLWJvdHRvbTogLTEycHg7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpO30NCiAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnMgbGkgYXtmb250LWZhbWlseTogJ01vbnRzZXJyYXQnLEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6IDMwMDtwYWRkaW5nOjMwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDpub25lO2NvbG9yOiNGRkY7Ym9yZGVyOjA7d2hpdGUtc3BhY2U6IG5vd3JhcDtwb3NpdGlvbjogcmVsYXRpdmU7bWluLWhlaWdodDoxMDRweDtkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjt0cmFuc2l0aW9uOm5vbmU7bWFyZ2luOjA7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaSBhOmhvdmVye2NvbG9yOiAjMDA5OWFiO3RleHQtZGVjb3JhdGlvbjpub25lO30NCiAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnMgbGk6bm90KC5hY3RpdmUpIGE6YWZ0ZXJ7Y29udGVudDogJyc7YmFja2dyb3VuZDogIzAwMDAwMDtwb3NpdGlvbjogYWJzb2x1dGU7b3BhY2l0eTogMDt0b3A6IDZweDtoZWlnaHQ6IDEwMCU7bGVmdDogMDt3aWR0aDogMTAwJTt6LWluZGV4OiAtMTt9DQogIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YS5ibC10YWJzIHVsLm5hdi10YWJzIGxpOm5vdCguYWN0aXZlKSBhOmhvdmVyOmFmdGVye29wYWNpdHk6MTt9DQogIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YS5ibC10YWJzIHVsLm5hdi10YWJzIGxpOmhvdmVyIGE6YmVmb3JlLA0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaTpob3ZlciArIGxpIGE6YmVmb3JlLA0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaS5hY3RpdmUgYTpiZWZvcmUsDQogIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YS5ibC10YWJzIHVsLm5hdi10YWJzIGxpLmFjdGl2ZSArIGxpIGE6YmVmb3Jle2JhY2tncm91bmQ6bm9uZTt9DQogIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YS5ibC10YWJzIHVsLm5hdi10YWJzIGxpLmFjdGl2ZXtiYWNrZ3JvdW5kOiNGRkY7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaS5hY3RpdmUgYXtib3JkZXI6MDtwYWRkaW5nOjMwcHg7bWFyZ2luOjA7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMwMDA7Y3Vyc29yOnBvaW50ZXI7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaSArIGxpIGE6YmVmb3Jle2NvbnRlbnQ6ICcnO3dpZHRoOiAxcHg7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDA7dG9wOiAzMHB4O2hlaWdodDogY2FsYygxMDAlIC0gNjBweCk7YmFja2dyb3VuZDogIzgwODA4MDt9Ki8NCg0KICAgICAgLmxlZnQtc2lkZSB7DQogICAgICAgIC8qZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wOyovDQogICAgICAgIHBhZGRpbmc6IDcwcHggMjBweCAyMHB4IDA7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgbGVmdDogMDsNCiAgICAgICAgdG9wOiBhdXRvOw0KICAgICAgfQ0KDQogICAgICAubGVmdC1zaWRlIC5jb2wtbmF2LWxlZnQgew0KICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICBwYWRkaW5nLXRvcDogMDsNCiAgICAgICAgZmxvYXQ6IHJpZ2h0Ow0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtaGVscCB7DQogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOw0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IHsNCiAgICAgICAgLypiYWNrZ3JvdW5kOiNmZmY7Ki8NCiAgICAgICAgd2lkdGg6IDI0NXB4Ow0KICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IGgzIHsNCiAgICAgICAgZm9udC1zaXplOiAxMnB4Ow0KICAgICAgICBsaW5lLWhlaWdodDogMjBweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgY29sb3I6ICMwMDAwMDA7DQogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgcCB7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDE1cHg7DQogICAgICAgIGNvbG9yOiAjMDAwMDAwOw0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtbmF2IHsNCiAgICAgICAgcGFkZGluZzogMjBweCAwOw0KICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsNCiAgICAgIH0NCg0KICAgICAgLmNvbC1uYXYtbGVmdCBoNCB7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7DQogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgaDUgew0KICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4Ow0KICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICBtYXJnaW4tdG9wOiAxOHB4Ow0KICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgaDUuYWN0aXZlLA0KICAgICAgLmNvbC1uYXYtbGVmdCBoNTpob3ZlciB7DQogICAgICAgIGNvbG9yOiAjMDA5OWFiOw0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtbmF2IGxpLA0KICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLWhlbHAgbGkgew0KICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgIGNvbG9yOiAjMDAwOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgLnNlYy1uYXYgLmxpc3RhSXRlbXMgbGk6aG92ZXIgew0KICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgIGNvbG9yOiAjNjY2Ow0KICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCiAgICAgIH0NCg0KICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLW5hdiAubGlzdGFJdGVtcyBsaS5hY3RpdmUgew0KICAgICAgICBjb2xvcjogIzAwOTlhYjsNCiAgICAgIH0NCg0KICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLWhlbHAgew0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweDsNCiAgICAgIH0NCg0KICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLWhlbHAgLmJ0biB7DQogICAgICAgIG1hcmdpbi10b3A6IDI1cHg7DQogICAgICB9DQoNCiAgICAgIC5zZWMtaGVscC5saW5rcyB7DQogICAgICAgIGJvcmRlcjogbm9uZTsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDsNCiAgICAgIH0NCg0KICAgICAgLnNlYy1oZWxwLmxpbmtzIGgzIHsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICB9DQoNCiAgICAgIC5zZWMtaGVscC5saW5rcy5hY3RpdmUgaDMgew0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgfQ0KDQogICAgICAuc2VjLWhlbHAubGlua3MuYWN0aXZlIGgzOmFmdGVyIHsNCiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZyk7DQogICAgICAgIHRyYW5zaXRpb246IDAuMTVzIGFsbCBlYXNlOw0KICAgICAgICB0b3A6IDEwcHg7DQogICAgICB9DQoNCg0KICAgICAgLnNlYy1oZWxwLmxpbmtzIGgzOmFmdGVyLA0KICAgICAgLmZhdHVyYXMtaW4tdGFicyBoNDphZnRlciB7DQogICAgICAgIG1hcmdpbi10b3A6IDA7DQogICAgICAgIC8qY29udGVudDp1cmwoaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvaWNvX3NldGFfb3Blbi5zdmcpOyovDQogICAgICAgIHdpZHRoOiAyMHB4Ow0KICAgICAgICBoZWlnaHQ6IDEycHg7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgcmlnaHQ6IDA7DQogICAgICAgIHRvcDogMDsNCiAgICAgICAgdHJhbnNpdGlvbjogMC4xNXMgYWxsIGVhc2U7DQogICAgICAgIGNvbnRlbnQ6ICJcZTAzZiI7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiaWNvbnMtbWVvIiAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXN0eWxlOiBub3JtYWwgIWltcG9ydGFudDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXZhcmlhbnQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICBzcGVhazogbm9uZTsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDE7DQogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOw0KICAgICAgICBmb250LXNpemU6IDJlbTsNCiAgICAgIH0NCg0KICAgICAgLmZhdHVyYXMtaW4tdGFicyBoNC5hY3RpdmU6YWZ0ZXIgew0KICAgICAgICB0cmFuc2l0aW9uOiAwLjE1cyBhbGwgZWFzZTsNCiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZyk7DQogICAgICAgIHRyYW5zaXRpb246IDAuMTVzIGFsbCBlYXNlOw0KICAgICAgICB0b3A6IDEwcHg7DQogICAgICB9DQoNCiAgICAgIC5mYXR1cmFzLWluLXRhYnMgaDQuYWN0aXZlICsgdWwjbGlzdGFQYWdpbmFzIHsNCiAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICAgIH0NCg0KICAgICAgLmZhdHVyYXMtaW4tdGFicyBoNCB7DQogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICAgIH0NCg0KICAgICAgLnNlYy1oZWxwLmxpbmtzIGgzOmhvdmVyLA0KICAgICAgLmZhdHVyYXMtaW4tdGFicyBoNDpob3ZlciB7DQogICAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICAgICAgY29sb3I6ICMwMDk5YWI7DQogICAgICB9DQoNCiAgICAgIC5zZWMtaGVscC5saW5rcyB1bCB7DQogICAgICAgIHRyYW5zaXRpb246IDAuMTVzIGFsbCBlYXNlOw0KICAgICAgfQ0KDQogICAgICAuc2VjLWhlbHAubGlua3MgbGkgYSB7DQogICAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4Ow0KICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTFweDsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgfQ0KDQogICAgICAuc2VjLWhlbHAubGlua3MuYWN0aXZlIHVsIHsNCiAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICAgIH0NCg0KICAgICAgLmRlc2t0b3Auc2VjLWhlbHAubGlua3Mgew0KICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgIH0NCg0KICAgICAgLm1vYmlsZS5zZWMtaGVscC5saW5rcyB7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgICB9DQoNCiAgICAgICNyaWdodC1zaWRlIHsNCiAgICAgICAgLyp3aWR0aDogY2FsYygxMDAlIC0gMjg5cHgpO2Rpc3BsYXk6aW5saW5lLWJsb2NrOyovDQogICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgICAvKnBhZGRpbmc6MCAyMHB4IDMwcHg7Ki8NCiAgICAgIH0NCg0KICAgICAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIC5tZW51LWZhdHVyYSB7DQogICAgICB9DQoNCiAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSAubWVudS1mYXR1cmEgLnNlYy1uYXYgew0KICAgICAgICBwYWRkaW5nOiAxMHB4IDA7DQogICAgICB9DQoNCiAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSAubWVudS1mYXR1cmEgLnNlYy1oZWxwIHsNCiAgICAgICAgcGFkZGluZzogMjBweCAwIDVweDsNCiAgICAgIH0NCg0KICAgICAgI2NvbC1jb250LXJpZ2h0IHsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgfQ0KDQogICAgICAjY29sLWNvbnQtcmlnaHQgLmFyZWEtY29udGV1ZG8gew0KICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOw0KICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIHBhZGRpbmc6IDAgNTBweDsNCiAgICAgIH0NCg0KICAgICAgZGl2I3ZpZGVvLWxpbmstYm94OmVtcHR5IHsNCiAgICAgICAgYm9yZGVyOiBub25lOw0KICAgICAgfQ0KDQogICAgICAjY29sLWNvbnQtcmlnaHQgLm5hdi1wYWcgew0KICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsNCiAgICAgICAgaGVpZ2h0OiA3MHB4Ow0KICAgICAgICBwYWRkaW5nLXRvcDogMTVweDsNCiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsNCiAgICAgICAgbWF4LXdpZHRoOiA5OTFweDsNCiAgICAgICAgbWFyZ2luOiAwIGF1dG87DQogICAgICB9DQoNCiAgICAgICNjb2wtY29udC1yaWdodCAubmF2LXBhZyBsaSB7DQogICAgICAgIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS9wZGZfaWNvX2dyZXlfbmV3LnN2ZykNCiAgICAgICAgICBuby1yZXBlYXQgMCAwOw0KICAgICAgICB3aWR0aDogMzhweDsNCiAgICAgICAgaGVpZ2h0OiA0MHB4Ow0KICAgICAgICBsaW5lLWhlaWdodDogNDBweDsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICBwYWRkaW5nOiAwcHg7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgICBjb2xvcjogIzZlNmU2ZTsNCiAgICAgICAgLypvcGFjaXR5OjAuNTsqLw0KICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgICAgICBwYWRkaW5nLWxlZnQ6IDEzcHg7DQogICAgICB9DQoNCiAgICAgICNjb2wtY29udC1yaWdodCAubmF2LXBhZyBsaTpob3ZlciB7DQogICAgICAgIGNvbG9yOiAjMDA5OWFiOw0KICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvcGRmX2ljb19uZXdfaG92ZXIuc3ZnKQ0KICAgICAgICAgIG5vLXJlcGVhdCAwIDA7DQogICAgICB9DQoNCiAgICAgICNjb2wtY29udC1yaWdodCAubmF2LXBhZyBsaS5hY3RpdmUgew0KICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvcGRmX2ljb19uZXcuc3ZnKQ0KICAgICAgICAgIG5vLXJlcGVhdCAwIDA7DQogICAgICAgIGNvbG9yOiAjMDAwOw0KICAgICAgfQ0KDQogICAgICAjY29sLWNvbnQtcmlnaHQgLm5hdi1wYWcgbGkuYWN0aXZlIHsNCiAgICAgICAgb3BhY2l0eTogMTsNCiAgICAgIH0NCg0KICAgICAgI2NvbC1jb250LXJpZ2h0IC5uYXYtcGFnIGxpOmhvdmVyIHsNCiAgICAgIH0NCg0KICAgICAgLmFyZWEtY29udGV1ZG8gLmFyZWEtaW1nIHsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIC8qbWF4LXdpZHRoOjEyMjBweDsqLw0KICAgICAgICBtYXgtd2lkdGg6IDg4MHB4Ow0KICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgIH0NCg0KICAgICAgLmFyZWEtY29udGV1ZG8gLmFyZWEtaW1nIGltZyB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICBoZWlnaHQ6IGF1dG87DQogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICAgIH0NCg0KICAgICAgLmFyZWEtY29udGV1ZG8gLmFyZWEtaW1nIHsNCiAgICAgICAgYmFja2dyb3VuZDogIzIyMjIyMjsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgfQ0KDQogICAgICAvKiNhcmVhLWJvbGFzLXJlY3RzLmJvbGFzT24gKyAjaW1nLWZhdHVyYXtvcGFjaXR5Oi43fSovDQogICAgICAuYXJlYS1jb250ZXVkby5hZGQtbW9kYWwgLm1vZGFsLWZhdHVyYSB7DQogICAgICAgIGNvbnRlbnQ6ICIgIjsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICB0b3A6IDA7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgIGJhY2tncm91bmQ6ICMwMDA7DQogICAgICAgIG9wYWNpdHk6IDAuNzsNCiAgICAgIH0NCg0KICAgICAgLmFyZWEtY29udGV1ZG8uYWRkLW1vZGFsIC5yaWdodC1idCwNCiAgICAgIC5hcmVhLWNvbnRldWRvLmFkZC1tb2RhbCAubGVmdC1idCB7DQogICAgICAgIG9wYWNpdHk6IDAuMTsNCiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICB9DQoNCiAgICAgIC5hcmVhLWNvbnRldWRvIC5hcmVhLWltZyBpbWcgew0KICAgICAgICBvcGFjaXR5OiAxOw0KICAgICAgICBtaW4td2lkdGg6IDMyMHB4Ow0KICAgICAgICBtaW4taGVpZ2h0OiA1MDBweDsNCiAgICAgIH0NCg0KICAgICAgI2luZm8tYmFsbG9vbiB7DQogICAgICAgIHBhZGRpbmc6IDIwcHg7DQogICAgICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICBtYXgtd2lkdGg6IDY1JTsNCiAgICAgICAgd2lkdGg6IDUwMHB4Ow0KICAgICAgICBoZWlnaHQ6IGF1dG87DQogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7DQogICAgICAgIHotaW5kZXg6IDU1Ow0KICAgICAgICAvKnBhZGRpbmctYm90dG9tOiAyMHB4OyovDQogICAgICAgIG1hcmdpbi1ib3R0b206IDIycHg7DQogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb246YWZ0ZXIgew0KICAgICAgICBjb250ZW50OiAiIjsNCiAgICAgICAgd2lkdGg6IDA7DQogICAgICAgIGhlaWdodDogMDsNCiAgICAgICAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgICAgIGJvcmRlci1yaWdodDogMTBweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICAgICAgYm9yZGVyLXRvcDogMThweCBzb2xpZCAjZmZmOw0KICAgICAgICBib3R0b206IC0xOHB4Ow0KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb24gYS5jbG9zZSB7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb24gLnRpdHVsbyB7DQogICAgICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgbWFyZ2luLXRvcDowOw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uIC5kZXNjcmljYW8gew0KICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgIGNvbG9yOiAjMDAwOw0KICAgICAgICBsaW5lLWhlaWdodDogMTdweDsNCiAgICAgIH0NCg0KICAgICAgI2luZm8tYmFsbG9vbiB1bCB7DQogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICAgICAgcGFkZGluZy10b3A6IDBweDsNCiAgICAgIH0NCg0KICAgICAgI2luZm8tYmFsbG9vbiB1bCBsaSBhIHsNCiAgICAgICAgZm9udC1zaXplOiAxM3B4Ow0KICAgICAgICBsaW5lLWhlaWdodDogMThweDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDE1cHg7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb24gdWwgbGkgYTpob3ZlciB7DQogICAgICAgIGNvbG9yOiAjMDA5OWFiOw0KICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb24gew0KICAgICAgICAvKmJvdHRvbTpjYWxjKDEwMCUgLSAyNyUpO2xlZnQ6IGNhbGMoMTAwJSAtIDklLzIgLSA4OCUvMiAtIDE1MHB4KTsqLw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLmJvdHRvbV9sZWZ0OmFmdGVyIHsNCiAgICAgICAgdG9wOiAwOw0KICAgICAgICBtYXJnaW4tdG9wOiAtMThweDsNCiAgICAgICAgbGVmdDogNTAlOw0KICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLmJvdHRvbV9jZW50ZXI6YWZ0ZXIgew0KICAgICAgICB0b3A6IDA7DQogICAgICAgIG1hcmdpbi10b3A6IC0xOHB4Ow0KICAgICAgICBsZWZ0OiA1MCU7DQogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAtNXB4Ow0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLmJvdHRvbV9yaWdodDphZnRlciB7DQogICAgICAgIG1hcmdpbi10b3A6IC0xOHB4Ow0KICAgICAgICB0b3A6IDA7DQogICAgICAgIHJpZ2h0OiAxMHB4Ow0KICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLnRvcF9jZW50ZXI6YWZ0ZXIgew0KICAgICAgICBsZWZ0OiA1MCU7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAtNHB4Ow0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLnRvcF9yaWdodDphZnRlciB7DQogICAgICAgIHJpZ2h0OiAxMHB4Ow0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLm1pZGRsZV9sZWZ0OmFmdGVyIHsNCiAgICAgICAgcmlnaHQ6IDA7DQogICAgICAgIHRvcDogNTAlOw0KICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xOHB4Ow0KICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpOw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLm1pZGRsZV9yaWdodDphZnRlciB7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAtMThweDsNCiAgICAgICAgdG9wOiA1MCU7DQogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsNCiAgICAgIH0NCg0KICAgICAgLmNsb3NlYmFsbG9vbiB7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgcmlnaHQ6IDBweDsNCiAgICAgICAgLyogdG9wOiAtMjZweDsgKi8NCiAgICAgICAgdG9wOi0yOXB4Ow0KICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgIC8qIHBhZGRpbmc6IDNweCA4cHggMHB4OyAqLw0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgLyogZm9udC1zaXplOiA5cHg7ICovDQogICAgICAgIGZvbnQtc2l6ZToxOHB4Ow0KICAgICAgICBsaW5lLWhlaWdodDoyMnB4Ow0KICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjsNCiAgICAgICAgd2lkdGg6MjRweDsNCiAgICAgICAgaGVpZ2h0OjI0cHg7DQogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0Ow0KICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgICB9DQoNCiAgICAgIC5jbG9zZWJhbGxvb246aG92ZXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5OWFiOw0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgLypib3JkZXItcmFkaXVzOiA1cHg7Ki8NCiAgICAgIH0NCg0KICAgICAgLmNsb3NlYmFsbG9vbjpiZWZvcmUgew0KICAgICAgICB6LWluZGV4OiA2MjsNCiAgICAgICAgY29udGVudDogIlw3OCI7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiaWNvbnMtbWVvIiAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXN0eWxlOiBub3JtYWwgIWltcG9ydGFudDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXZhcmlhbnQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICBzcGVhazogbm9uZTsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDE7DQogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICAgICAgICBtYXJnaW4tbGVmdDoxcHg7DQogICAgICB9DQoNCiAgICAgICNhcmVhLWJvbGFzLXJlY3RzIHsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICBib3R0b206IDA7DQogICAgICAgIHRvcDogMDsNCiAgICAgICAgbGVmdDogMDsNCiAgICAgICAgcmlnaHQ6IDA7DQoNCiAgICAgIH0NCg0KICAgICAgLmJvbGFzIHsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICB6LWluZGV4OiAxOw0KICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgfQ0KDQogICAgICAuYm9sYXMgYSB7DQogICAgICAgIGhlaWdodDogMzZweDsNCiAgICAgICAgd2lkdGg6IDM2cHg7DQogICAgICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7DQogICAgICAgIC8qYmFja2dyb3VuZDojMzMzMzMzOyovDQogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KTsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICBjb2xvcjogIzAwMDsNCiAgICAgICAgLyp0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpOyovDQogICAgICAgIGZvbnQtc2l6ZTogMjhweDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDM0cHg7DQogICAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICB9DQoNCiAgICAgIC5ib2xhcyBhOmJlZm9yZSwNCiAgICAgIC5ib2xhcyBhOmFmdGVyIHsNCiAgICAgICAgY29udGVudDogIiI7DQogICAgICAgIHdpZHRoOiAyNnB4Ow0KICAgICAgICBoZWlnaHQ6IDI2cHg7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgICAgIHotaW5kZXg6IC0yOw0KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgIGxlZnQ6IDVweDsNCiAgICAgICAgdG9wOiA1cHg7DQogICAgICAgIGFuaW1hdGlvbjogc29uYXJFZmZlY3QgMnMgZWFzZS1vdXQgaW5maW5pdGU7DQogICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IGluaGVyaXQ7DQogICAgICB9DQoNCiAgICAgIEBrZXlmcmFtZXMgc29uYXJFZmZlY3Qgew0KICAgICAgICAwJSB7DQogICAgICAgICAgb3BhY2l0eTogMC4xOw0KICAgICAgICB9DQoNCiAgICAgICAgNTAlIHsNCiAgICAgICAgICBvcGFjaXR5OiAwLjU7DQogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICMzMzMzMzM1MCwgMCAwIDBweCA1cHggIzMzMzMzMzUwLA0KICAgICAgICAgICAgMCAwIDAgNXB4ICMzMzMzMzM1MDsNCiAgICAgICAgfQ0KDQogICAgICAgIDEwMCUgew0KICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAjMzMzMzMzNTAsIDAgMCAwcHggMTBweCAjMzMzMzMzNTAsDQogICAgICAgICAgICAwIDAgMCA1cHggIzMzMzMzMzUwOw0KICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4zKTsNCiAgICAgICAgICBvcGFjaXR5OiAwLjE7DQogICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsNCiAgICAgICAgICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNEOw0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIC5ib2xhcyBhOmhvdmVyIHsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgICBiYWNrZ3JvdW5kOiAjMDA5OWFiOw0KICAgICAgfQ0KDQogICAgICAucmVjdGFuZ3VsbyB7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgb3V0bGluZTogM3B4IHNvbGlkICNmZmY7DQogICAgICAgIHotaW5kZXg6IDU1Ow0KICAgICAgICB3aWR0aDogODglOw0KICAgICAgICB0b3A6IDI3JTsNCiAgICAgICAgaGVpZ2h0OiA3JTsNCiAgICAgICAgbGVmdDogOSU7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgLnNlYy1oZWxwOmVtcHR5IHsNCiAgICAgICAgcGFkZGluZzogMDsNCiAgICAgIH0NCg0KICAgICAgLnNlYy1oZWxwLmxpbmtzIGxpIGE6aG92ZXIgew0KICAgICAgICBjb2xvcjogIzAwOTlhYjsNCiAgICAgIH0NCg0KICAgICAgLyoubGVmdC1idCwgLnJpZ2h0LWJ0IHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA1MCU7ei1pbmRleDogMTtoZWlnaHQ6IDMwcHg7IHdpZHRoOiAyMHB4O2NvbnRlbnQ6IHVybCgiaHR0cDovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS9pY29fc2V0YV9yX2xfbGlnaHQuc3ZnIik7dHJhbnNpdGlvbjogMC4xNXMgYWxsIGVhc2U7cGFkZGluZzogNXB4IDt9Ki8NCg0KICAgICAgLmxlZnQtYnQsDQogICAgICAucmlnaHQtYnQgew0KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgIHRvcDogNTAlOw0KICAgICAgICB6LWluZGV4OiA1Ow0KICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KTsNCiAgICAgICAgd2lkdGg6IDUwcHg7DQogICAgICAgIHBhZGRpbmc6IDE1cHggMDsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgfQ0KDQogICAgICAubGVmdC1idDpiZWZvcmUsDQogICAgICAucmlnaHQtYnQ6YmVmb3JlIHsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7DQogICAgICAgIGNvbnRlbnQ6ICJcZTAzZCI7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiaWNvbnMtbWVvIiAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXN0eWxlOiBub3JtYWwgIWltcG9ydGFudDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXZhcmlhbnQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICBzcGVhazogbm9uZTsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDJlbTsNCiAgICAgICAgZm9udC1zaXplOiAyZW07DQogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOw0KICAgICAgfQ0KDQogICAgICAucmlnaHQtYnQgew0KICAgICAgICByaWdodDogLTUwcHg7DQogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7DQogICAgICB9DQoNCiAgICAgIC5sZWZ0LWJ0IHsNCiAgICAgICAgbGVmdDogLTUwcHg7DQogICAgICB9DQoNCiAgICAgIC5yaWdodC1idDpob3ZlciwNCiAgICAgIC5sZWZ0LWJ0OmhvdmVyIHsNCiAgICAgICAgYmFja2dyb3VuZDogIzAwOTlhYjsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICB9DQoNCiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSB7DQogICAgICAgIGRpdiN3cmFwZmxvYXRpbmdtZW51LmFmZml4ZWQgew0KICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsNCiAgICAgICAgICB3aWR0aDogMjA1cHg7DQogICAgICAgICAgei1pbmRleDogNTsNCiAgICAgICAgICB0b3A6IDgwcHggIWltcG9ydGFudDsNCiAgICAgICAgfQ0KDQogICAgICAgIGRpdiN3cmFwZmxvYXRpbmdtZW51LmFmZml4ZWQtdG9wIHsNCiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIH0NCg0KICAgICAgICBkaXYjd3JhcGZsb2F0aW5nbWVudS5hZmZpeGVkLWJvdHRvbSB7DQogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgIHRvcDogYXV0bzsNCiAgICAgICAgICB3aWR0aDogMjA1cHg7DQogICAgICAgICAgYm90dG9tOiAwOw0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7DQogICAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSB7DQogICAgICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7DQogICAgICAgICAgcGFkZGluZy1yaWdodDogMHB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJvbGFzIGEgew0KICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KSB0cmFuc2xhdGVZKC03MCUpIHRyYW5zbGF0ZVgoLTcwJSk7DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHsNCiAgICAgICAgLmJsLXRhYnMgLnRhYi1jb250ZW50IC50YWItcGFuZSwNCiAgICAgICAgI2NvbC1jb250LXJpZ2h0IC5hcmVhLWNvbnRldWRvIHsNCiAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLnJpZ2h0LWJ0LA0KICAgICAgICAubGVmdC1idCB7DQogICAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5jbG9zZWJhbGxvb24gew0KICAgICAgICAgIHJpZ2h0OiAxNXB4Ow0KICAgICAgICAgIHRvcDogNXB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJvbGFzIHsNCiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCg0KICAgICAgICAuY29sLW5hdi1sZWZ0IHsNCiAgICAgICAgICBtYXJnaW4tdG9wOiAzMHB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmNvbC1uYXYtbGVmdCwNCiAgICAgICAgI3JpZ2h0LXNpZGUgew0KICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICB9DQoNCiAgICAgICAgI2NvbC1jb250LXJpZ2h0IC5uYXYtcGFnIHsNCiAgICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgICAgICB9DQoNCiAgICAgICAgLmxlZnQtc2lkZSB7DQogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICB9DQoNCiAgICAgICAgLmxlZnQtc2lkZSAuY29sLW5hdi1sZWZ0IHsNCiAgICAgICAgICAvKnBhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDt0ZXh0LWFsaWduOiBjZW50ZXI7Ki8NCiAgICAgICAgfQ0KDQogICAgICAgIC5sZWZ0LXNpZGUgew0KICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuc2VjLWhlbHAgew0KICAgICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtbmF2IHsNCiAgICAgICAgICBib3JkZXI6IG5vbmU7DQogICAgICAgICAgcGFkZGluZy10b3A6IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuYXJlYS1jb250ZXVkbyAuYXJlYS1pbWcgaW1nIHsNCiAgICAgICAgICBtaW4td2lkdGg6IGluaGVyaXQ7DQogICAgICAgICAgbWluLWhlaWdodDogaW5oZXJpdDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSB7DQogICAgICAgICAgcGFkZGluZy1sZWZ0OiAwOw0KICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuc2VjLWhlbHAubGlua3Mgew0KICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgICB9DQoNCiAgICAgICAgLmNvbC1uYXYtbGVmdCB7DQogICAgICAgICAgbWFyZ2luLXRvcDogMjVweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5sZWZ0LXNpZGUgLmNvbC1uYXYtbGVmdCB7DQogICAgICAgICAgcGFkZGluZy1sZWZ0OiAwOw0KICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgLm1lbnUtZmF0dXJhIHsNCiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7DQogICAgICAgICAgcGFkZGluZy1yaWdodDogMjBweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5sZWZ0LXNpZGUgLmNvbC1uYXYtbGVmdCwNCiAgICAgICAgLmJsLXRhYnMgLnRhYi1jb250ZW50ID4gYS5hY3RpdmUsDQogICAgICAgIC5ibC10YWJzIC50YWItY29udGVudCBhOmFjdGl2ZSB7DQogICAgICAgICAgYmFja2dyb3VuZDogI2Y0ZjRmNDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibC10YWJzIC50YWItY29udGVudCAudGFiLXBhbmUuYWN0aXZlIHsNCiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOw0KICAgICAgICAgIGJvcmRlci10b3A6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAuYmwtdGFicyAubmF2LXRhYnMgew0KICAgICAgICAgIHBhZGRpbmc6IDAgMHB4Ow0KICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7DQogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJsLXRhYnMgLm5hdi10YWJzIGxpIHsNCiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlICFpbXBvcnRhbnQ7DQogICAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibC10YWJzIC5uYXYtdGFicyBsaSB7DQogICAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7DQogICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibC10YWJzIC5uYXYtdGFicyBsaTpsYXN0LWNoaWxkIHsNCiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJsLXRhYnMgLm5hdi10YWJzIGxpIGEgew0KICAgICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJsLXRhYnMgLm5hdi10YWJzIGxpIHsNCiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgZmxvYXQ6IG5vbmU7DQogICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgb3V0bGluZTogMXB4IHNvbGlkICNlZWUgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibC10YWJzIC5uYXYtdGFicyBsaS5hY3RpdmUsDQogICAgICAgIC5ibC10YWJzIC5uYXYtdGFicyBsaSBhLA0KICAgICAgICAuYmwtdGFicyAubmF2LXRhYnMgbGkgYTpob3ZlciwNCiAgICAgICAgLmJsLXRhYnMgLm5hdi10YWJzIGxpIGE6Zm9jdXMgew0KICAgICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7DQogICAgICAgICAgbWFyZ2luOiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLWhlbHAsDQogICAgICAgIC5jb2wtbmF2LWxlZnQgLnNlYy1uYXYgew0KICAgICAgICAgIHBhZGRpbmc6IDMwcHggMjBweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSAuYm94LXRpdGxlIHsNCiAgICAgICAgICBwYWRkaW5nOiAwIDIwcHg7DQogICAgICAgIH0NCg0KICAgICAgICAjaW5mby1iYWxsb29uIHsNCiAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgICAgICAgIGxlZnQ6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICByaWdodDogMCAhaW1wb3J0YW50Ow0KICAgICAgICAgIC8qcG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50OyovDQogICAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgLyp0b3A6MCFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50OyovDQogICAgICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgICAgLyoqLw0KICAgICAgICB9DQoNCiAgICAgICAgI2luZm8tYmFsbG9vbi5ib3R0b21fbGVmdDphZnRlciwNCiAgICAgICAgI2luZm8tYmFsbG9vbi5ib3R0b21fY2VudGVyOmFmdGVyLA0KICAgICAgICAjaW5mby1iYWxsb29uLmJvdHRvbV9yaWdodDphZnRlciwNCiAgICAgICAgI2luZm8tYmFsbG9vbi50b3BfY2VudGVyOmFmdGVyLA0KICAgICAgICAjaW5mby1iYWxsb29uLnRvcF9yaWdodDphZnRlciwNCiAgICAgICAgI2luZm8tYmFsbG9vbi5taWRkbGVfbGVmdDphZnRlciwNCiAgICAgICAgI2luZm8tYmFsbG9vbi5taWRkbGVfcmlnaHQ6YWZ0ZXIsDQogICAgICAgICNpbmZvLWJhbGxvb246YWZ0ZXIgew0KICAgICAgICAgIHRvcDogLTE1cHggIWltcG9ydGFudDsNCiAgICAgICAgICBsZWZ0OiA1MCUgIWltcG9ydGFudDsNCiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpICFpbXBvcnRhbnQ7DQogICAgICAgICAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxMHB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KICAgICAgICAgIGJvcmRlci10b3A6IDE1cHggc29saWQgI2ZmZjsNCiAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7DQogICAgICAgIH0NCg0KICAgICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgaDIgew0KICAgICAgICAgIHBhZGRpbmctdG9wOiAwOw0KICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSBoMyB7DQogICAgICAgICAgcGFkZGluZy1ib3R0b206IDBweDsNCiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLyojVGFiaWZ5e3BhZGRpbmctdG9wOjMwcHg7fSovDQogICAgICAgIC5zZWMtaGVscC5saW5rcyBoMyB7DQogICAgICAgICAgcGFkZGluZy1ib3R0b206IDBweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5sZWZ0LXNpZGUgLmNvbC1uYXYtbGVmdCB7DQogICAgICAgICAgbWFyZ2luLXRvcDogMDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5oZWFkZXItYm90IHsNCiAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2Y0ZjRmNCAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgI3JpZ2h0LXNpZGUgew0KICAgICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAjQ29udGVudGlmeSB7DQogICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtaGVscCB7DQogICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuYm94LXRpdGxlLnRleHQtbGVmdC5jb250YWluZXIgew0KICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7DQogICAgICAgIH0NCg0KICAgICAgICAuZGVza3RvcC5zZWMtaGVscC5saW5rcyB7DQogICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgLm1vYmlsZS5zZWMtaGVscC5saW5rcyB7DQogICAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5tb2JpbGUuc2VjLWhlbHAubGlua3MgaDM6YWZ0ZXIgew0KICAgICAgICAgIGNvbnRlbnQ6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAubW9iaWxlLnNlYy1oZWxwLmxpbmtzIGgzIHsNCiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweDsNCiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5tb2JpbGUuc2VjLWhlbHAubGlua3MgdWwgew0KICAgICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCg0KICAgICAgICAuZmF0dXJhcy1pbi10YWJzIGg0LA0KICAgICAgICAuZmF0dXJhcy1pbi10YWJzIGg0OmhvdmVyIHsNCiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5mYXR1cmFzLWluLXRhYnMgaDQ6YWZ0ZXIgew0KICAgICAgICAgIGNvbnRlbnQ6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAuZmF0dXJhcy1pbi10YWJzIHVsIHsNCiAgICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgZGl2I3dyYXBmbG9hdGluZ21lbnUuYWZmaXhlZCB7DQogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICB9DQogICAgICB9DQogICAgPC9zdHlsZT4NCg0KICAgIDxzZWN0aW9uIGNsYXNzPSJibG9jby1mYXR1cmEtaW50ZXJhdGl2YSBibC10YWJzIGlzLWxvYWRpbmciIHN0eWxlPSIiPg0KICAgICAgPGRpdiBjbGFzcz0idG9wLWludHJvIj4NCiAgICAgICAgPGgyPkNvbXByZWVuZGVyIGEgc3VhIGZhdHVyYTwvaDI+DQogICAgICAgIDxoND5Db25oZcOnYSBlbSBkZXRhbGhlIG8gY29udGXDumRvIGRhcyB2w6FyaWFzIHNlY8Onw7VlcyBkYSBzdWEgZmF0dXJhPC9oND4NCiAgICAgIDwvZGl2Pg0KDQogICAgICA8ZGl2IGlkPSJMb2FkaWZ5Ij4NCiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3BhZ2luYXMvX2ZhdHVyYV9pbnRlcmF0aXZhL2xvYWRpbmcuZ2lmIiBoZWlnaHQ9IjY0IiB3aWR0aD0iNjQiIGFsdD0ibG9hZGluZyIvPg0KICAgICAgPC9kaXY+DQoNCiAgICAgIDwhLS08ZGl2IGNsYXNzPSJmZC1uYXYtdGFicyI+PHVsIGNsYXNzPSJuYXYgbmF2LXRhYnMiIGlkPSJUYWJpZnkiPjwvdWw+PC9kaXY+LS0+DQogICAgICA8ZGl2IGNsYXNzPSJibG9jay10YWJzIGZha2UtdGFicyI+DQogICAgICAgIDxkaXYgY2xhc3M9InBhcnQiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1tZW51Ij4NCiAgICAgICAgICAgIDx1bCBpZD0iVGFiaWZ5Ij48L3VsPg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KDQogICAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCIgaWQ9IkNvbnRlbnRpZnkiPg0KICAgICAgICA8IS0tIE1FTyA8YSBocmVmPSIjdGFiMTEiIGNsYXNzPSJhY3RpdmUiPk1FTzwvYT4tLT4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiPg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoaWRkZW4gYW5jb3JhcyI+PC9zcGFuPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZnQtc2lkZSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmF2LWxlZnQiPg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWMtaGVscCIgaWQ9InZpZGVvLWxpbmstYm94Ij48L2Rpdj4NCg0KICAgICAgICAgICAgICA8ZGl2IGlkPSJ3cmFwZmxvYXRpbmdtZW51IiBjbGFzcz0ibWVudS1mYXR1cmEiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlYy1uYXYiIGlkPSJuYXYtZmF0dXJhcyI+PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVza3RvcCBzZWMtaGVscCBsaW5rcyBhY3RpdmUiPg0KICAgICAgICAgICAgICAgICAgPGgzPkFqdWRhIGUgU3Vwb3J0ZTwvaDM+DQogICAgICAgICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9nZXJpci1wcm9kdXRvcy9hcmVhLWRlLWNsaWVudGUiPsOBcmVhIGRlIENsaWVudGU8L2E+DQogICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb25zdWx0YXItYS1zdWEtZmF0dXJhIj5Db25zdWx0YXIgYSBzdWEgZmF0dXJhPC9hPg0KICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvYWx0ZXJhci1kYWRvcy1kZS1mYXR1cmEjZGV0YWxoZWRlY29tdW5pY2Fjb2VzIj5Db25zdWx0YXIgZGV0YWxoZSBkZSBjb211bmljYcOnw7VlczwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgPGxpPg0KICAgICAgICAgICAgICAgICAgICAgIDxhDQogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyI+Q29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvPC9hPg0KICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhIj5QYWdhciBmYXR1cmE8L2E+DQogICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICA8L3VsPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgPGRpdiBpZD0ibGVmdC1zaWRlLWZhdC1tb2JpbGUiPjwvZGl2Pg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2JpbGUgc2VjLWhlbHAgbGlua3MgYWN0aXZlIj4NCiAgICAgICAgICAgICAgICA8aDM+QWp1ZGEgZSBTdXBvcnRlPC9oMz4NCiAgICAgICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSI+w4FyZWEgZGUgQ2xpZW50ZTwvYT4NCiAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgIDxhDQogICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29uc3VsdGFyLWEtc3VhLWZhdHVyYSI+Q29uc3VsdGFyIGEgc3VhIGZhdHVyYTwvYT4NCiAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2FsdGVyYXItZGFkb3MtZGUtZmF0dXJhI2RldGFsaGVkZWNvbXVuaWNhY29lcyI+Q29uc3VsdGFyIGRldGFsaGUgZGUgY29tdW5pY2HDp8O1ZXM8L2E+DQogICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgPGxpPg0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyI+Q29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvPC9hPg0KICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhIj5QYWdhciBmYXR1cmE8L2E+DQogICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPGRpdiBpZD0icmlnaHQtc2lkZSI+DQogICAgICAgICAgICA8ZGl2IGlkPSJjb2wtY29udC1yaWdodCI+DQogICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2LXBhZyIgaWQ9Im5hdi1wYWciPjwvdWw+DQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFyZWEtY29udGV1ZG8iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZhdHVyYSI+PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXJlYS1pbWciPg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmlnaHQtYnQiPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVmdC1idCI+PC9kaXY+DQogICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJhcmVhLWJvbGFzLXJlY3RzIj4NCiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJib2xhcyI+PC91bD4NCiAgICAgICAgICAgICAgICAgICAgPGRpdg0KICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWN0LWJvcmRlciINCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icmVjdGFuZ3VsbyINCiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZSINCiAgICAgICAgICAgICAgICAgICAgPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8IS0tIGJvbGluaGFzIGUgcmV0YW5ndWxvcy0tPg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICAgIDxpbWcgaWQ9ImltZy1mYXR1cmEiIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvMUZhdHVyYV9GaXhvX1BhZ2VfMS5wbmciIGFsdD0iZmF0dXJhIi8+DQoNCiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImluZm8tYmFsbG9vbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2xvc2ViYWxsb29uIj48L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0idGl0dWxvIj48L2g1Pg0KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpY2FvIj48L3A+DQogICAgICAgICAgICAgICAgICAgIDx1bD48L3VsPg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQoNCiAgICAgIDxkaXYgY2xhc3M9ImJveC10aXRsZSB0ZXh0LWxlZnQgY29udGFpbmVyIG5vdGFzIj4NCiAgICAgICAgPHA+DQogICAgICAgICAgPHN0cm9uZz5Ob3RhOiA8L3N0cm9uZz5BIGZhdHVyYSBhcHJlc2VudGFkYSDDqSBhcGVuYXMgdW0gZXhlbXBsby4gT3MgdmFsb3JlcyBhcHJlc2VudGFkb3Mgc8OjbyBleGVtcGxpZmljYXRpdm9zLg0KICAgICAgICA8L3A+DQogICAgICA8L2Rpdj4NCg0KICAgICAgPHNjcmlwdD4NCiAgICAgICAgLyogREFET1MgIERBIEZBVFVSQSAqLw0KDQogICAgICAgIHZhciBvYmpzID0gW107DQoNCiAgICAgICAgLyogVEFCUyAqLw0KICAgICAgICBmdW5jdGlvbiBBcmVhc1RhYnModGl0dWxvLCBmYXR1cmFzLCB0aXRWaWRlbywgbGlua1ZpZGVvLCBkZXNjVmlkZW8pIHsNCiAgICAgICAgICB0aGlzLmluaXQodGl0dWxvLCBmYXR1cmFzLCB0aXRWaWRlbywgbGlua1ZpZGVvLCBkZXNjVmlkZW8pOw0KICAgICAgICB9DQogICAgICAgIEFyZWFzVGFicy5wcm90b3R5cGUgPSB7DQogICAgICAgICAgaW5pdDogZnVuY3Rpb24gKHRpdHVsbywgZmF0dXJhcywgdGl0VmlkZW8sIGxpbmtWaWRlbywgZGVzY1ZpZGVvKSB7DQogICAgICAgICAgICB0aGlzLnRpdHVsbyA9IHRpdHVsbzsNCiAgICAgICAgICAgIHRoaXMuZmF0dXJhcyA9IGZhdHVyYXM7DQogICAgICAgICAgICB0aGlzLnRpdFZpZGVvID0gdGl0VmlkZW87DQogICAgICAgICAgICB0aGlzLmxpbmtWaWRlbyA9IGxpbmtWaWRlbzsNCiAgICAgICAgICAgIHRoaXMuZGVzY1ZpZGVvID0gZGVzY1ZpZGVvOw0KICAgICAgICAgIH0sDQogICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7fSwNCiAgICAgICAgfTsNCg0KICAgICAgICAvKiBGQVRVUkFTICovDQogICAgICAgIGZ1bmN0aW9uIEZhdHVyYSh0aXR1bG8sIHBhZ3MpIHsNCiAgICAgICAgICB0aGlzLmluaXQodGl0dWxvLCBwYWdzKTsNCiAgICAgICAgfQ0KICAgICAgICBGYXR1cmEucHJvdG90eXBlID0gew0KICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh0aXR1bG8sIHBhZ3MpIHsNCiAgICAgICAgICAgIHRoaXMudGl0dWxvID0gdGl0dWxvOw0KICAgICAgICAgICAgdGhpcy5wYWdzID0gcGFnczsNCiAgICAgICAgICB9LA0KICAgICAgICB9Ow0KDQogICAgICAgIC8qIFBBR0lOQVMgZGEgRkFUVVJBICovDQogICAgICAgIGZ1bmN0aW9uIFBhZyh0aXR1bG8sIGl0ZW5zLCBpbWFnZW0pIHsNCiAgICAgICAgICB0aGlzLmluaXQodGl0dWxvLCBpdGVucywgaW1hZ2VtKTsNCiAgICAgICAgfQ0KICAgICAgICBQYWcucHJvdG90eXBlID0gew0KICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh0aXR1bG8sIGl0ZW5zLCBpbWFnZW0pIHsNCiAgICAgICAgICAgIHRoaXMudGl0dWxvID0gdGl0dWxvOw0KICAgICAgICAgICAgdGhpcy5pdGVucyA9IGl0ZW5zOw0KICAgICAgICAgICAgdGhpcy5pbWFnZW0gPSBpbWFnZW07DQogICAgICAgICAgfSwNCiAgICAgICAgfTsNCg0KICAgICAgICAvKiBwcm9wcmllZGFkZXMgYm9sYSAvIHJlY3QgKi8NCiAgICAgICAgZnVuY3Rpb24gQXJlYVByb3BzKA0KICAgICAgICAgIHhCb2xhLA0KICAgICAgICAgIHlCb2xhLA0KICAgICAgICAgIHhSZWN0LA0KICAgICAgICAgIHlSZWN0LA0KICAgICAgICAgIHdSZWN0LA0KICAgICAgICAgIGhSZWN0LA0KICAgICAgICAgIHhQb3AsDQogICAgICAgICAgeVBvcA0KICAgICAgICApIHsNCiAgICAgICAgICB0aGlzLmluaXQoeEJvbGEsIHlCb2xhLCB4UmVjdCwgeVJlY3QsIHdSZWN0LCBoUmVjdCwgeFBvcCwgeVBvcCk7DQogICAgICAgIH0NCiAgICAgICAgQXJlYVByb3BzLnByb3RvdHlwZSA9IHsNCiAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoDQogICAgICAgICAgICB4Qm9sYSwNCiAgICAgICAgICAgIHlCb2xhLA0KICAgICAgICAgICAgeFJlY3QsDQogICAgICAgICAgICB5UmVjdCwNCiAgICAgICAgICAgIHdSZWN0LA0KICAgICAgICAgICAgaFJlY3QsDQogICAgICAgICAgICB4UG9wLA0KICAgICAgICAgICAgeVBvcA0KICAgICAgICAgICkgew0KICAgICAgICAgICAgdGhpcy54Qm9sYSA9IHhCb2xhOw0KICAgICAgICAgICAgdGhpcy55Qm9sYSA9IHlCb2xhOw0KICAgICAgICAgICAgdGhpcy54UmVjdCA9IHhSZWN0Ow0KICAgICAgICAgICAgdGhpcy55UmVjdCA9IHlSZWN0Ow0KICAgICAgICAgICAgdGhpcy53UmVjdCA9IHdSZWN0Ow0KICAgICAgICAgICAgdGhpcy5oUmVjdCA9IGhSZWN0Ow0KICAgICAgICAgICAgdGhpcy54UG9wID0geFBvcDsNCiAgICAgICAgICAgIHRoaXMueVBvcCA9IHlQb3A7DQogICAgICAgICAgfSwNCiAgICAgICAgfTsNCg0KICAgICAgICAvKiBJVEVNUyAqLw0KICAgICAgICBmdW5jdGlvbiBJdGVtcyh0aXR1bG8sIHRpdHVsb0JhbGFvLCBkZXNjcmljYW8sIGFyZWFQcm9wcywgbGlua3MpIHsNCiAgICAgICAgICB0aGlzLmluaXQodGl0dWxvLCB0aXR1bG9CYWxhbywgZGVzY3JpY2FvLCBhcmVhUHJvcHMsIGxpbmtzKTsNCiAgICAgICAgfQ0KICAgICAgICBJdGVtcy5wcm90b3R5cGUgPSB7DQogICAgICAgICAgaW5pdDogZnVuY3Rpb24gKHRpdHVsbywgdGl0dWxvQmFsYW8sIGRlc2NyaWNhbywgYXJlYVByb3BzLCBsaW5rcykgew0KICAgICAgICAgICAgdGhpcy50aXR1bG8gPSB0aXR1bG87DQogICAgICAgICAgICB0aGlzLnRpdHVsb0JhbGFvID0gdGl0dWxvQmFsYW87DQogICAgICAgICAgICB0aGlzLmRlc2NyaWNhbyA9IGRlc2NyaWNhbzsNCiAgICAgICAgICAgIHRoaXMuYXJlYVByb3BzID0gYXJlYVByb3BzOw0KICAgICAgICAgICAgdGhpcy5saW5rcyA9IGxpbmtzOw0KICAgICAgICAgIH0sDQogICAgICAgIH07DQoNCiAgICAgICAgLyogTElOS1MgKi8NCiAgICAgICAgZnVuY3Rpb24gTGlua2UodHlwZSwgdGV4dG8sIGhyZWYpIHsNCiAgICAgICAgICB0aGlzLmluaXQodHlwZSwgdGV4dG8sIGhyZWYpOw0KICAgICAgICB9DQogICAgICAgIExpbmtlLnByb3RvdHlwZSA9IHsNCiAgICAgICAgICBpbml0OiBmdW5jdGlvbiAodHlwZSwgdGV4dG8sIGhyZWYpIHsNCiAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7DQogICAgICAgICAgICB0aGlzLnRleHRvID0gdGV4dG87DQogICAgICAgICAgICB0aGlzLmhyZWYgPSBocmVmOw0KICAgICAgICAgIH0sDQogICAgICAgIH07DQoNCiAgICAgICAgLyogbGlua3MgKi8NCiAgICAgICAgdmFyIGl0ZW5zID0gW107DQogICAgICAgIHZhciBsaW5rZXMgPSBbXTsNCiAgICAgICAgdmFyIHBhZ3MgPSBbXTsNCiAgICAgICAgdmFyIGZhdHMgPSBbXTsNCiAgICAgICAgdmFyIHRhYnMgPSBbXTsNCiAgICAgICAgdmFyIHByb3BzOw0KDQogICAgICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCiAgICAgICAgLyogSU5JQ0lPIERPUyAgREFET1MgKi8NCiAgICAgICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMjIyBGQVRVUkEgMcK6IEZBVFVSQSBQQUNPVEUgIyMjIyMjIyMjIyMjIyMjKi8NCiAgICAgICAgLyogIyMjIyMjIyMjIyMjIyMjIEZBVFVSQSAxwrogRkFUVVJBIFBBQ09URSAjIyMjIyMjIyMjIyMjIyMqLw0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIyMgRkFUVVJBIDHCuiBGQVRVUkEgUEFDT1RFICMjIyMjIyMjIyMjIyMjIyovDQoNCiAgICAgICAgLy9odHRwczovL3JkMy52aWRlb3Muc2Fwby5wdC9wbGF5aHRtbD9maWxlPWh0dHBzOi8vcmQzLnZpZGVvcy5zYXBvLnB0L2tHak5UcnBPTE1ZcnpGeThDeVlaL21vdi8xJmFtcDtxdWFsaXR5PXNkDQoNCiAgICAgICAgLy8gMSDDgXJlYSBkZSBDbGllbnRlDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bHRhciBmYXR1cmEgbm8gUEMiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbnN1bHRhci1hLXN1YS1mYXR1cmEjY29uc3VsdGFyZmF0dXJhYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bHRhciBmYXR1cmEgbmEgVFYiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbnN1bHRhci1hLXN1YS1mYXR1cmEjY29uc3VsdGFyZmF0dXJhdHYiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJWYW50YWdlbnMgZGUgYWRlcmlyIMOgIMOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSN2YW50YWdlbnNkZWFkZXJpcmFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNDguNDYsDQogICAgICAgICAgNi44OCwNCiAgICAgICAgICA1Mi45LA0KICAgICAgICAgIDQuOTUsDQogICAgICAgICAgMjIuNywNCiAgICAgICAgICA3LjUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAnQ29uc3VsdGUgbyBkZXRhbGhlIGRhIHN1YSBmYXR1cmEsIGF0aXZlIHNlcnZpw6dvcyBlIG11aXRvIG1haXMgZW0gPGEgaHJlZj0iaHR0cDovL3d3dy5tZW8ucHQiPm1lby5wdDwvYT4gb3Ugbm8gbWVudSBkYSBzdWEgdGVsZXZpc8OjbycsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyAyIGRhZG9zIGRvIGNsaWVudGUNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uc3VsdGFyIGRhZG9zIGRlIGNsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2RhZG9zLWRlLWFjZXNzby1hLXNpdGVzLWUtYXBwcyN2ZXJucmRlY2xpZW50ZWVucmRlY29udGFuYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJSZWdpc3RvIG5hIMOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSNyZWdpc3RvbmFhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKDkuMTksIDEyLjUsIDExLCAxMSwgMzAsIDExLCAicmlnaHQiLCAibWlkZGxlIik7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkRhZG9zIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgIkRhZG9zIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgIlRlbmhhIG9zIHNldXMgPHN0cm9uZz5kYWRvcyBkZSBjbGllbnRlPC9zdHJvbmc+IMOgIG3Do28sIHNlbXByZSBxdWUgbm9zIGNvbnRhY3RhciIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyAzIHJlc3VtbyBkYSBmYXR1cmENCiAgICAgICAgLy9saW5rZXMucHVzaChuZXcgTGlua2UoJ3VybCcsJ0NvbXByZWVuZGVyIGEgc3VhIDHCqiBmYXR1cmEgKHBhY290ZSBjb20gdGVsZW3Ds3ZlbCkgLSB2w61kZW8nLCdodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSN2aWRlb19jb21wcmVlbmRlcjFhZmF0dXJhcGFjb3RlY29tdGVsZW1vdmVsJykpOw0KICAgICAgICAvLyBFTSBNT0RBTCBuZXcgTGlua2UoJ3ZpZGVvJw0KICAgICAgICAvL2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCcpKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIEVNIE1PREFMDQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvJykpOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAzMS4zNiwNCiAgICAgICAgICAxMC4wNywNCiAgICAgICAgICAyNy45OSwNCiAgICAgICAgICA4Ni4wMSwNCiAgICAgICAgICAyNC40NiwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJSZXN1bW8gZGEgRmF0dXJhIiwNCiAgICAgICAgICAgICJSZXN1bW8gZGEgRmF0dXJhIiwNCiAgICAgICAgICAgICJBcXVpIHBvZGUgdmVyIG8gcmVzdW1vIGRhIHN1YSBmYXR1cmEsIG8gbcOqcyBhIHF1ZSBjb3JyZXNwb25kZSwgZGF0YSBsaW1pdGUgcGFyYSBwYWdhbWVudG8gZSB2YWxvciBhIHBhZ2FyIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8qIG5ldyBpdGVtICovDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvL2xpbmtlcy5wdXNoKG5ldyBMaW5rZSgndXJsJywnQ29tcHJlZW5kZXIgYSBzdWEgMcKqIGZhdHVyYSAocGFjb3RlIGNvbSB0ZWxlbcOzdmVsKSAtIHbDrWRlbycsJ2h0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvJykpOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIHBhZ2FyIGEgc3VhIGZhdHVyYT8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIEVNIE1PREFMDQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCcpKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNTAuMiwNCiAgICAgICAgICAxMC4wNywNCiAgICAgICAgICA0OCwNCiAgICAgICAgICA4Ni4wMSwNCiAgICAgICAgICA0LjEsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiVmFsb3IgYSBQYWdhciIsDQogICAgICAgICAgICAiVmFsb3IgYSBQYWdhciIsDQogICAgICAgICAgICAiQSBzdWEgMcKqIGZhdHVyYSBwb2RlIG7Do28gY29ycmVzcG9uZGVyIGEgdW0gbcOqcyBjb21wbGV0byBwb2lzIGNvbWXDp2Egbm8gZGlhIGRhIGluc3RhbGHDp8OjbyBlIHRlcm1pbmEgbm8gZmluYWwgZG8gcGVyw61vZG8gZGUgZmF0dXJhw6fDo28uIE5hcyBwcsOzeGltYXMgZmF0dXJhcyBpc3NvIGrDoSBuw6NvIGFjb250ZWNlcsOhISIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLy8gbmV3IGl0ZW0gIChyZW1vdmlkbyBwb2lzIG5hbyBhcGFyZWNlIG5vIHBkZi9pbWFnZW0gZGEgZmF0dXJhDQogICAgICAgIC8qCWxpbmtlcyA9IFtdOyAvLyBFU1RFIElURU0gTkFPIFRFTSBMSU5LUw0KICAgICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcyg2LjMxLCA3MC44MSwgMTAuMDcsIDY4LjY0LCA4Ni4wMSwgNS41NSwgJ2NlbnRlcicsJ3RvcCcpOw0KICAgICAgICAgIGl0ZW5zLnB1c2gobmV3IEl0ZW1zKCdQcm9tb8Onw7VlcyBlIE5vdmlkYWRlcycsJ1Byb21vw6fDtWVzIGUgTm92aWRhZGVzJywnRmlxdWUgYXRlbnRvIMOgcyBwcm9tb8Onw7VlcyBlIG5vdmlkYWRlcyBxdWUgdGVtb3MgcGFyYSBzaScscHJvcHMsbGlua2VzKSk7DQogICAgICAgICAgbGlua2VzID0gW107DQogICAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgKi8NCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJQYWdhciBGYXR1cmFzIG5hIMOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSNwYWdhcmZhdHVyYXNhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiUGFnYXIgRmF0dXJhcyBwb3IgRMOpYml0byBEaXJldG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSNwYWdhcmZhdHVyYXNwb3JkZWJpdG9kaXJldG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJWYW50YWdlbnMgZG8gRMOpYml0byBEaXJldG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL2RlYml0by1kaXJldG8jdmFudGFnZW5zZGViaXRvZGlyZXRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiUGFnYXIgRmF0dXJhcyBwb3IgTXVsdGliYW5jbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhI3BhZ2FyZmF0dXJhc25vbXVsdGliYW5jbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkZhdHVyYSBlbGV0csOzbmljYSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYS1lbGV0cm9uaWNhL3ZhbnRhZ2Vucy1lLWFkZXNhbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDc2Ljc3LA0KICAgICAgICAgIDExLjUsDQogICAgICAgICAgNzQuNDMsDQogICAgICAgICAgODQsDQogICAgICAgICAgMTkuOSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJNb2RhbGlkYWRlcyBkZSBQYWdhbWVudG8iLA0KICAgICAgICAgICAgIk1vZGFsaWRhZGVzIGRlIFBhZ2FtZW50byIsDQogICAgICAgICAgICAiVHVkbyBvIHF1ZSBwcmVjaXNhIHBhcmEgcGFnYXIgYSBzdWEgZmF0dXJhIGVzdMOhIGFxdWkhIFBhcmEgc3VhIGNvbnZlbmnDqm5jaWEsIDxzdHJvbmc+YXRpdmUgbyBEw6liaXRvIERpcmV0byBkZSBmb3JtYSBncmF0dWl0YTwvc3Ryb25nPiBuYSBzdWEgw4FyZWEgZGUgQ2xpZW50ZS4gU2UgcGFnYXIgcG9yIE1CLCA8c3Ryb25nPnNhaWJhIHF1ZSBhIGVudGlkYWRlIGUgcmVmZXLDqm5jaWEgc8OjbyBzZW1wcmUgaWd1YWlzPC9zdHJvbmc+IGVtIHRvZGFzIGFzIGZhdHVyYXMuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICAvLyBmaW5hbG1lbnRlIGFkaWNpb25hciB0dWRvIGEgZXN0YSBww6FnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMSIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS8xRmF0dXJhX0ZpeG9fUGFnZV8xLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQoNCiAgICAgICAgLy8gYWdvcmEgY3JpYXIgYSBvdXRyYSBww6FnaW5hLi4uOg0KICAgICAgICAvLyBhZ29yYSBjcmlhciBhIG91dHJhIHDDoWdpbmEuLi46DQogICAgICAgIC8vIGFnb3JhIGNyaWFyIGEgb3V0cmEgcMOhZ2luYS4uLjoNCiAgICAgICAgLy8gYWdvcmEgY3JpYXIgYSBvdXRyYSBww6FnaW5hLi4uOg0KDQogICAgICAgIC8qIG5ldyBpdGVtICovDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbmhlY2VyIG9zIHBhY290ZXMgTUVPIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9wYWNvdGVzL3BhY290ZXMtbWVvI2NvbmhlY2Vyb3NwYWNvdGVzbWVvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIk9mZXJ0YXMgZGUgYWRlc8OjbyBhb3MgcGFjb3RlcyBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3BhY290ZXMvcGFjb3Rlcy1tZW8jb2ZlcnRhc2FkZXNhb3BhY290ZXNtZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAyMC4zOSwNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDE4LjU4LA0KICAgICAgICAgIDg0LjY0LA0KICAgICAgICAgIDE0LjM1LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJib3R0b20iDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkFkZXPDtWVzIiwNCiAgICAgICAgICAgICJBZGVzw7VlcyIsDQogICAgICAgICAgICAiSW5zdGFsYcOnw6NvIGUgYXRpdmHDp8OjbyBkbyBzZXJ2acOnbywgYmVtIGNvbW8gb3MgcmVzdGFudGVzIHNlcnZpw6dvcyBhdGl2YWRvcyBlIGV2ZW50dWFpcyBvZmVydGFzIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25oZWNlciBvcyBwYWNvdGVzIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9wYWNvdGVzLW1lbyNjb25oZWNlcm9zcGFjb3Rlc21lbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAzNy42NCwNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDMzLjMsDQogICAgICAgICAgODQuNjQsDQogICAgICAgICAgMTIuMywNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJNZW5zYWxpZGFkZXMgZG8gU2VydmnDp28iLA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyBkbyBTZXJ2acOnbyIsDQogICAgICAgICAgICAiTWVuc2FsaWRhZGUgZG8gc2V1IHBhY290ZSBlIGRlc2NvbnRvcyBxdWUgcG9zc2EgdGVyIGF0cmlidcOtZG9zIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25oZWNlciBvcyBwYWNvdGVzIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9wYWNvdGVzLW1lbyNjb25oZWNlcm9zcGFjb3Rlc21lbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICA0Ni41NiwNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDQ1LjM2LA0KICAgICAgICAgIDg0LjY0LA0KICAgICAgICAgIDguNTUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIFRlbGV2aXPDo28iLA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyBUZWxldmlzw6NvIiwNCiAgICAgICAgICAgICJNZW5zYWxpZGFkZSBkZSBjYW5haXMgYWRpY2lvbmFpcyBxdWUgdGVuaGEgc3Vic2NyaXRvIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25oZWNlciBvcyBwYWNvdGVzIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9wYWNvdGVzLW1lbyNjb25oZWNlcm9zcGFjb3Rlc21lbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICA1NS45NywNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDU0LjA0LA0KICAgICAgICAgIDg0LjY0LA0KICAgICAgICAgIDUuODUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIFRlbGVtw7N2ZWwiLA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyBUZWxlbcOzdmVsIiwNCiAgICAgICAgICAgICJBcGVuYXMgcGFyYSBzZXJ2acOnb3MgY29tIHRlbGVtw7N2ZWlzOiBtZW5zYWxpZGFkZXMgZG8gM8K6IGUvb3UgNMK6IGNhcnTDtWVzIGUgZXZlbnR1YWlzIGRlc2NvbnRvcyIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLyogbmV3IGl0ZW0gKi8NCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uaGVjZXIgb3MgcGFjb3RlcyBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3BhY290ZXMvcGFjb3Rlcy1tZW8jY29uaGVjZXJvc3BhY290ZXNtZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21wcmEgb3UgYWx1Z3VlciBkZSBlcXVpcGFtZW50b3MiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3BhY290ZXMvYWRlc2FvLWUtaW5zdGFsYWNhbyNjb21wcmFvdWFsdWd1ZXJkZWVxdWlwYW1lbnRvc25vc3BhY290ZXNtZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJNRU9Cb3hlcyBGaWJyYSwgQURTTCBlIFNhdMOpbGl0ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9hZGVzYW8tZS1pbnN0YWxhY2FvI21lb2JveGVzZmlicmFhZHNsZXNhdGVsaXRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLypsaW5rZXMucHVzaChuZXcgTGlua2UoJ3VybCcsJ0NvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbycsJ2h0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvJykpOyovDQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDYxLjI4LA0KICAgICAgICAgIDExLjUsDQogICAgICAgICAgNTkuOTUsDQogICAgICAgICAgODQuNjQsDQogICAgICAgICAgMTAuMjUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIEVxdWlwYW1lbnRvcyIsDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIEVxdWlwYW1lbnRvcyIsDQogICAgICAgICAgICAiQWx1Z3VlciBtZW5zYWwgZGUgTUVPYm94IGUgZGVzY29udG9zIGFzc29jaWFkb3MiLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlZhbnRhZ2VucyBkYSBmYXR1cmEgZWxldHLDs25pY2EiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmEtZWxldHJvbmljYS92YW50YWdlbnMtZS1hZGVzYW8jdmFudGFnZW5zZGFmYXR1cmFlbGV0cm9uaWNhIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQWRlcmlyIMOgIGZhdHVyYSBlbGV0csOzbmljYSBuYSDDgXJlYSBkZSBDbGllbnRlIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhLWVsZXRyb25pY2EvdmFudGFnZW5zLWUtYWRlc2FvI2FkZXJpcmZhdHVyYWVsZXRyb25pY2FuYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJBZGVyaXIgw6AgZmF0dXJhIGVsZXRyw7NuaWNhIG5hIFRWIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhLWVsZXRyb25pY2EvdmFudGFnZW5zLWUtYWRlc2FvI2FkZXJpcmZhdHVyYWVsZXRyb25pY2FuYXR2Ig0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiVmFudGFnZW5zIGRvIGTDqWJpdG8gZGlyZXRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvcGFnYW1lbnRvcy9kZWJpdG8tZGlyZXRvI3ZhbnRhZ2Vuc2RlYml0b2RpcmV0byINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDc2Ljk5LA0KICAgICAgICAgIDkuNDksDQogICAgICAgICAgNzQuOTEsDQogICAgICAgICAgNjEuMjEsDQogICAgICAgICAgMTEuMSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJGYXR1cmEgRWxlY3Ryw7NuaWNhIiwNCiAgICAgICAgICAgICJGYXR1cmEgRWxldHLDs25pY2EiLA0KICAgICAgICAgICAgIlNlIGFpbmRhIG7Do28gdGVtIGZhdHVyYSBlbGV0csOzbmljYSBlIGTDqWJpdG8gZGlyZXRvLCBhZGlyYSBqw6EgbmEgw4FyZWEgZGUgQ2xpZW50ZSBlbSBtZW8ucHQgb3UgbmEgc3VhIFRWLiBTaW1wbGlmaXF1ZSBhIHN1YSB2aWRhLCBhanVkZSBvIGFtYmllbnRlIGUgdXN1ZnJ1YSBkZSBvZmVydGFzIGVzcGVjaWFpcy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8qIG5ldyBpdGVtICovDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInZpZGVvIiwNCiAgICAgICAgICAgICJWZXIgdmlkZW8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA2OS4wNiwNCiAgICAgICAgICA3Ni44NCwNCiAgICAgICAgICA2OS4yOCwNCiAgICAgICAgICA3NC42NywNCiAgICAgICAgICAyNi40NSwNCiAgICAgICAgICAxMS43LA0KICAgICAgICAgICJsZWZ0IiwNCiAgICAgICAgICAibWlkZGxlIg0KICAgICAgICApOw0KICAgICAgICAvL2l0ZW5zLnB1c2gobmV3IEl0ZW1zKCdRUiBDb2RlJywnUVIgQ29kZScsJ1NhaWJhIG1haXMgc29icmUgYSBzdWEgZmF0dXJhIGF0cmF2w6lzIGRlc3RlIFFSIENvZGUuJyxwcm9wcyxsaW5rZXMpKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiUVIgQ29kZSIsDQogICAgICAgICAgICAiUVIgQ29kZSIsDQogICAgICAgICAgICAiU2FpYmEgbWFpcyBzb2JyZSBhIHN1YSBmYXR1cmEgYXRyYXbDqXMgZGVzdGUgUVIgQ29kZS4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICAiIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLyogKi8NCiAgICAgICAgLy8gREVQT0lTIERPIFVMVElNQSBJVEVNIERBIGZhdHVyYQ0KICAgICAgICAvLyBmaW5hbG1lbnRlIGFkaWNpb25hciB0dWRvIGEgZXN0YSBww6FnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMiIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS8xRmF0dXJhX0ZpeG9fUGFnZV8yLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQoNCiAgICAgICAgLy8gYWdvcmEgY3JpYXIgYSBvdXRyYSBww6FnaW5hLi4uOg0KICAgICAgICAvLyBhZ29yYSBjcmlhciBhIG91dHJhIHDDoWdpbmEuLi46DQogICAgICAgIC8vIGFnb3JhIGNyaWFyIGEgb3V0cmEgcMOhZ2luYS4uLjoNCiAgICAgICAgLy8gYWdvcmEgY3JpYXIgYSBvdXRyYSBww6FnaW5hLi4uOg0KDQogICAgICAgIC8qIG5ldyBpdGVtICovDQogICAgICAgIC8vbGlua2VzLnB1c2gobmV3IExpbmtlKCd1cmwnLCdDb250cm9sbyBkZSBjdXN0b3MgZGUgcGFjb3RlcyBNRU8nLCdodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9wYWNvdGVzL3BhY290ZXMtbWVvI2NvbnRyb2xvZGVjdXN0b3NwYWNvdGVzbWVvJykpOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgZGV0YWxoZSBkZSBjb211bmljYcOnw7VlcyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvYWx0ZXJhci1kYWRvcy1kZS1mYXR1cmEjZGV0YWxoZWRlY29tdW5pY2Fjb2VzIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uc3VsdGFyIGNvbnN1bW9zIG1hcmNhbmRvICojMTIzIyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2NvbnN1bHRhci1jb25zdW1vcyNjb25zdWx0YXJjb25zdW1vc3VzZCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bW9zIGRlIGV4dHJhbWVuc2FsaWRhZGUgZSBzYWxkbyByZWNhcmdhIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvY29uc3Vtb3MtZS1jb250cm9sby1kZS1jdXN0b3MvZXh0cmFtZW5zYWxpZGFkZSNjb25zdWx0YXJleHRyYW1lbnNhbGlkYWRlc2FsZG9yZWNhcmdhIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8naHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvdmlkZW9zL2FqdWRhL1VubGltaXRlZC1Db250cm9sby1kZS1jdXN0b3MvVW5saW1pdGVkLUNvbnRyb2xvLWRlLWN1c3Rvcy5tcDQnKSk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkRldGFsaGUgZSBkYWRvcyBkZSBmYXR1cmEiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2FsdGVyYXItZGFkb3MtZGUtZmF0dXJhIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQWxlcnRhcyBkZSBjb25zdW1vIG5vIHRlbGVtw7N2ZWwiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9jb25zdW1vcy1lLWNvbnRyb2xvLWRlLWN1c3Rvcy9hbGVydGFzI2FsZXJ0YXNkZWNvbnN1bW9zZG90ZWxlbW92ZWwiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNC4xOSwNCiAgICAgICAgICAxMy41LA0KICAgICAgICAgIDYuMzksDQogICAgICAgICAgMTIuNDIsDQogICAgICAgICAgODIuNzEsDQogICAgICAgICAgMzYuOSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAiYm90dG9tIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJDb25zdW1vcyIsDQogICAgICAgICAgICAiQ29uc3Vtb3MiLA0KICAgICAgICAgICAgIk5hIHJ1YnJpY2EgY29uc3Vtb3MgcG9kZSBjb25zdWx0YXIgb3MgY29uc3Vtb3MgZXh0cmFtZW5zYWxpZGFkZSwgbm9tZWFkYW1lbnRlIGNoYW1hZGFzIHRlbGVmw7NuaWNhcyAoZml4YXMgZSBtw7N2ZWlzKSBwb3Igc2VydmnDp28gZSB0aXBvIGRlIGNvbXVuaWNhw6fDo28sIGJlbSBjb21vIGFsdWd1ZXJlcyBkbyBNRU8gVmlkZW9DbHViZS4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIGFkaWNpb25hIHR1ZG8gw6AgcGFnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMyIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS8xRmF0dXJhX0ZpeG9fUGFnZV8zLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQogICAgICAgIC8vIGUgYWRpY2lvbmFyIMOhcyBmYXR1cmFzDQogICAgICAgIGZhdHMucHVzaChuZXcgRmF0dXJhKCIxwqogRmF0dXJhIC0gUGFjb3RlcyIsIHBhZ3MpKTsNCg0KICAgICAgICAvLyBlcmEgYSB1bHRpbWEgcGFnaW5hDQoNCiAgICAgICAgLy8gYWRpY2lvbmEgYSBmYXR1cmEgw6EgdGFiIGF0dWFsLS0tICAoNCB2YWxvciDDqSBvIGxpbmsgZG8gYm90w6NvKQ0KICAgICAgICAvLyBleGVtcGxvIGNvbSBib3TDo28gLS0tLSB0YWJzLnB1c2gobmV3IEFyZWFzVGFicygiMcKqIEZhdHVyYSAtIFBhY290ZXMiLGZhdHMsIkTDunZpZGFzIGNvbSBhIHN1YSBmYXR1cmE/IiwgImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCIsICJTYWliYSBjb21vIGludGVycHJldGFyIGEgc3VhIGZhdHVyYSBlIGNvbXByZWVuZGEgZmFjaWxtZW50ZSB0b2RhIGEgaW5mb3JtYcOnw6NvIHF1ZSBsaGUgZW52aWFtb3MuIikpDQoNCiAgICAgICAgdGFicy5wdXNoKA0KICAgICAgICAgIG5ldyBBcmVhc1RhYnMoDQogICAgICAgICAgICAiMcKqIEZhdHVyYSAtIFBhY290ZXMiLA0KICAgICAgICAgICAgZmF0cywNCiAgICAgICAgICAgICJEw7p2aWRhcyBuYSBmYXR1cmE/IiwNCiAgICAgICAgICAgICIiLA0KICAgICAgICAgICAgIlNhaWJhIGNvbW8gZXN0w6Egb3JnYW5pemFkYSBlIHZlamEgYXMgZXhwbGljYcOnw7VlcyBwYXNzbyBhIHBhc3NvLiINCiAgICAgICAgICApDQogICAgICAgICk7DQoNCiAgICAgICAgLy8gbGltcGFyIGZhdHVyYSBkZXBvaXMgZGUgYWRpY2lvbmFyIGEgdWx0aW1hIHDDoWdpbmEgZSBhZGljaW9uYXIgYSBmYXR1cmEgw6EgdGFiDQogICAgICAgIGZhdHMgPSBbXTsNCiAgICAgICAgLy8gYXBlbmFzIHBvcnF1ZSBzw7MgaMOhIHVtYSBmYXR1cmEgcG9yIHRhYiwgc2VuYW8gY29udGludWF2YSBhIGFkaWNpb25hciBwcm9wcyBlIGZhdHMgw6EgdGFiLg0KDQogICAgICAgIC8vIGxpbXBhICBhcyBwYWdpbmFzDQogICAgICAgIHBhZ3MgPSBbXTsNCg0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIyMgRkFUVVJBIFBBQ09URVMgICMjIyMjIyMjIyMjIyMjIyovDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMjIyBGQVRVUkEgUEFDT1RFUyAgIyMjIyMjIyMjIyMjIyMjKi8NCiAgICAgICAgLyogIyMjIyMjIyMjIyMjIyMjIEZBVFVSQSBQQUNPVEVTICAjIyMjIyMjIyMjIyMjIyMqLw0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bHRhciBmYXR1cmEgbm8gUEMgIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb25zdWx0YXItYS1zdWEtZmF0dXJhI2NvbnN1bHRhcmZhdHVyYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgZmF0dXJhIG5hIFRWIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb25zdWx0YXItYS1zdWEtZmF0dXJhI2NvbnN1bHRhcmZhdHVyYXR2ICINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlZhbnRhZ2VucyBkZSBhZGVyaXIgw6Agw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI3ZhbnRhZ2Vuc2RlYWRlcmlyYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA0OC40NiwNCiAgICAgICAgICA2Ljg4LA0KICAgICAgICAgIDUyLjksDQogICAgICAgICAgNC45NSwNCiAgICAgICAgICAyMi43LA0KICAgICAgICAgIDcuNSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAiYm90dG9tIg0KICAgICAgICApOw0KDQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgIkNvbnN1bHRlIG8gZGV0YWxoZSBkYSBzdWEgZmF0dXJhLCBhdGl2ZSBzZXJ2acOnb3MgZSBtdWl0byBtYWlzIGVtIG1lby5wdCBvdSBubyBtZW51IGRhIHN1YSB0ZWxldmlzw6NvIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgZGFkb3MgZGUgY2xpZW50ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvZGFkb3MtZGUtYWNlc3NvLWEtc2l0ZXMtZS1hcHBzI3Zlcm5yZGVjbGllbnRlZW5yZGVjb250YW5hYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlJlZ2lzdG8gbmEgw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI3JlZ2lzdG9uYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoOS4xOSwgMTIuNSwgMTEsIDExLCAzMCwgMTEsICJyaWdodCIsICJtaWRkbGUiKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiVGVuaGEgb3Mgc2V1cyA8c3Ryb25nPmRhZG9zIGRlIGNsaWVudGU8L3N0cm9uZz4gw6AgbcOjbywgc2VtcHJlIHF1ZSBub3MgY29udGFjdGFyIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvL2xpbmtlcy5wdXNoKG5ldyBMaW5rZSgndXJsJywnQ29tcHJlZW5kZXIgYSBzdWEgMcKqIGZhdHVyYSAocGFjb3RlIGNvbSB0ZWxlbcOzdmVsKSAtIHbDrWRlbycsJ2h0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI3ZpZGVvX3ZpZGVvZmF0dXJhJykpOw0KICAgICAgICAvLydodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy92aWRlb3MvYWp1ZGEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhL0NvbmhlY2EtbWVsaG9yLWEtc3VhLTFhLWZhdHVyYS5tcDQnKSk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAzMS4zNiwNCiAgICAgICAgICAxMC4wNywNCiAgICAgICAgICAyNy45OSwNCiAgICAgICAgICA4Ni4wMSwNCiAgICAgICAgICAyNy40NiwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJSZXN1bW8gZGEgRmF0dXJhIiwNCiAgICAgICAgICAgICJSZXN1bW8gZGEgRmF0dXJhIiwNCiAgICAgICAgICAgICJBcXVpIHBvZGUgdmVyIG8gcmVzdW1vIGRhIHN1YSBmYXR1cmEsIG8gbcOqcyBhIHF1ZSBjb3JyZXNwb25kZSwgZGF0YSBsaW1pdGUgcGFyYSBwYWdhbWVudG8gZSB2YWxvciBhIHBhZ2FyIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgLy9saW5rZXMucHVzaChuZXcgTGlua2UoJ3VybCcsJ1NhaWJhIG1haXMgc29icmUgYSBzdWEgZmF0dXJhIC0gdsOtZGVvJywnaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjdmlkZW9fdmlkZW9mYXR1cmEnKSk7DQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9mYXR1cmEtZWxldHJvbmljYS1tZW8vZmF0dXJhLWVsZXRyb25pY2EtbWVvLm1wNCcpKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNTYuNiwNCiAgICAgICAgICAxMC44LA0KICAgICAgICAgIDU1LjY3LA0KICAgICAgICAgIDg0LjEyLA0KICAgICAgICAgIDEwLjk4LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkV4dHJhdG8gZGUgQ29udGEiLA0KICAgICAgICAgICAgIkV4dHJhdG8gZGUgQ29udGEiLA0KICAgICAgICAgICAgJ05vIEV4dHJhdG8gZGUgQ29udGEgZW5jb250cmFtLXNlIHRvZG9zIG9zIG1vdmltZW50b3MgZGEgc3VhIGNvbnRhIGRlc2RlIGEgw7psdGltYSBmYXR1cmEuIENhc28gZXhpc3RhbSB2YWxvcmVzIGRlIGZhdHVyYXMgYW50ZXJpb3JlcyBxdWUgZXN0ZWphbSBwb3IgcGFnYXIgb3MgbWVzbW9zIGlyw6NvIHN1cmdpciBuZXN0YSBzZWPDp8OjbywgasOhIGVuZ2xvYmFkb3MgbmEgcnVicmljYSAiVmFsb3IgYSBQYWdhciInLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlBhZ2FyIEZhdHVyYXMgbmEgw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhI3BhZ2FyZmF0dXJhc2FyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJQYWdhciBGYXR1cmFzIHBvciBEw6liaXRvIERpcmV0byIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhI3BhZ2FyZmF0dXJhc3BvcmRlYml0b2RpcmV0byINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlZhbnRhZ2VucyBkbyBEw6liaXRvIERpcmV0byIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvZGViaXRvLWRpcmV0byN2YW50YWdlbnNkZWJpdG9kaXJldG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJQYWdhciBGYXR1cmFzIHBvciBNdWx0aWJhbmNvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvcGFnYW1lbnRvcy9wYWdhci1mYXR1cmEjcGFnYXJmYXR1cmFzbm9tdWx0aWJhbmNvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiRmF0dXJhIGVsZXRyw7NuaWNhIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhLWVsZXRyb25pY2EvdmFudGFnZW5zLWUtYWRlc2FvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzIuNDksDQogICAgICAgICAgMTAuOCwNCiAgICAgICAgICA3MC45OCwNCiAgICAgICAgICA4NC4xMiwNCiAgICAgICAgICAyNC41MSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJNb2RhbGlkYWRlcyBkZSBQYWdhbWVudG8iLA0KICAgICAgICAgICAgIk1vZGFsaWRhZGVzIGRlIFBhZ2FtZW50byIsDQogICAgICAgICAgICAiVHVkbyBvIHF1ZSBwcmVjaXNhIHBhcmEgcGFnYXIgYSBzdWEgZmF0dXJhIGVzdMOhIGFxdWkhIFBhcmEgc3VhIGNvbnZlbmnDqm5jaWEsIDxzdHJvbmc+YXRpdmUgbyBEw6liaXRvIERpcmV0byBkZSBmb3JtYSBncmF0dWl0YTwvc3Ryb25nPiBuYSBzdWEgw4FyZWEgZGUgQ2xpZW50ZS4gU2UgcGFnYXIgcG9yIE1CLCA8c3Ryb25nPnNhaWJhIHF1ZSBhIGVudGlkYWRlIGUgcmVmZXLDqm5jaWEgc8OjbyBzZW1wcmUgaWd1YWlzPC9zdHJvbmc+IGVtIHRvZGFzIGFzIGZhdHVyYXMuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyBhZGljaW9uYSB0dWRvIMOgIHBhZ2luYQ0KICAgICAgICBwYWdzLnB1c2goDQogICAgICAgICAgbmV3IFBhZygNCiAgICAgICAgICAgICJQw6FnaW5hIDEiLA0KICAgICAgICAgICAgaXRlbnMsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8xLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiT2ZlcnRhcyBkZSBhZGVzw6NvIGFvcyBwYWNvdGVzIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9wYWNvdGVzLW1lbyNvZmVydGFzYWRlc2FvcGFjb3Rlc21lbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbmhlY2VyIG9zIHBhY290ZXMgTUVPIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9wYWNvdGVzL3BhY290ZXMtbWVvI2NvbmhlY2Vyb3NwYWNvdGVzbWVvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCcpKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgMTkuOTcsDQogICAgICAgICAgMTEuMjksDQogICAgICAgICAgMTguOTUsDQogICAgICAgICAgODQuNDUsDQogICAgICAgICAgMTMuNSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAiYm90dG9tIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJBZGVzw7VlcyIsDQogICAgICAgICAgICAiQWRlc8O1ZXMiLA0KICAgICAgICAgICAgJ0Nhc28gdGVuaGEgYWRlcmlkbyBhIGFsZ3VtIHNlcnZpw6dvIE1FTywgbyB2YWxvciByZWZlcmVudGUgw6Agc3VhIGFkZXPDo28gZXN0YXLDoSBuYSBydWJyaWNhICJBZGVzw7VlcyIsIGNvbSBvIGRldGFsaGUgZG8gc2VydmnDp28gYSBxdWUgc2UgcmVmZXJlLicsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uaGVjZXIgb3MgcGFjb3RlcyBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3BhY290ZXMvcGFjb3Rlcy1tZW8jY29uaGVjZXJvc3BhY290ZXNtZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21wcmVlbmRlciB2YWxvciBkZSBmYXR1cmEgc3VwZXJpb3IgYW8gZXNwZXJhZG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgMzQuNTcsDQogICAgICAgICAgMTEuMjksDQogICAgICAgICAgMzIuNiwNCiAgICAgICAgICA4NC40NSwNCiAgICAgICAgICA0MC4zNSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJNZW5zYWxpZGFkZXMiLA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyIsDQogICAgICAgICAgICAnTmEgc2Vjw6fDo28gIk1lbnNhbGlkYWRlcyIgZW5jb250cmFtLXNlIG9zIHZhbG9yZXMgbWVuc2FpcyBkYXMgc3VhcyBzdWJjcmnDp8O1ZXM6IHBhY290ZSBjb250cmF0YWRvLCBjYW5haXMgcHJlbWl1bSBlL291IGNhcnTDtWVzIG3Ds3ZlaXMgYWRpY2lvbmFpcy4gVGVtIGFpbmRhIGFzIG1lbnNhbGlkYWRlcyBkZSBlcXVpcGFtZW50b3MgcXVlIHBvc3NhIHRlciAoZXhlbXBsbzogYWx1Z3VlciBNRU9ib3gpJywNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBBUVVJICovDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiVmFudGFnZW5zIGRhIGZhdHVyYSBlbGV0csOzbmljYSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYS1lbGV0cm9uaWNhL3ZhbnRhZ2Vucy1lLWFkZXNhbyN2YW50YWdlbnNkYWZhdHVyYWVsZXRyb25pY2EiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJBZGVyaXIgw6AgZmF0dXJhIGVsZXRyw7NuaWNhIG5hIMOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmEtZWxldHJvbmljYS92YW50YWdlbnMtZS1hZGVzYW8jYWRlcmlyZmF0dXJhZWxldHJvbmljYW5hYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkFkZXJpciDDoCBmYXR1cmEgZWxldHLDs25pY2EgbmEgVFYiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmEtZWxldHJvbmljYS92YW50YWdlbnMtZS1hZGVzYW8jYWRlcmlyZmF0dXJhZWxldHJvbmljYW5hdHYiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJWYW50YWdlbnMgZG8gZMOpYml0byBkaXJldG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL2RlYml0by1kaXJldG8jdmFudGFnZW5zZGViaXRvZGlyZXRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzYuOTksDQogICAgICAgICAgOS40OSwNCiAgICAgICAgICA3NC45MSwNCiAgICAgICAgICA2MS4yMSwNCiAgICAgICAgICAxMS4xLA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkZhdHVyYSBFbGVjdHLDs25pY2EiLA0KICAgICAgICAgICAgIkZhdHVyYSBFbGV0csOzbmljYSIsDQogICAgICAgICAgICAiU2UgYWluZGEgbsOjbyB0ZW0gZmF0dXJhIGVsZXRyw7NuaWNhIGUgZMOpYml0byBkaXJldG8sIGFkaXJhIGrDoSBuYSDDgXJlYSBkZSBDbGllbnRlIGVtIG1lby5wdCBvdSBuYSBzdWEgVFYuIFNpbXBsaWZpcXVlIGEgc3VhIHZpZGEsIGFqdWRlIG8gYW1iaWVudGUgZSB1c3VmcnVhIGRlIG9mZXJ0YXMgZXNwZWNpYWlzLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInZpZGVvIiwNCiAgICAgICAgICAgICJWZXIgdmlkZW8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA2OS4wNiwNCiAgICAgICAgICA3Ni44NCwNCiAgICAgICAgICA2OS4yOCwNCiAgICAgICAgICA3NC42NywNCiAgICAgICAgICAyNi40NSwNCiAgICAgICAgICAxMS43LA0KICAgICAgICAgICJsZWZ0IiwNCiAgICAgICAgICAibWlkZGxlIg0KICAgICAgICApOw0KDQogICAgICAgIC8vaXRlbnMucHVzaChuZXcgSXRlbXMoJ1FSIENvZGUnLCdRUiBDb2RlJywnU2FpYmEgbWFpcyBzb2JyZSBhIHN1YSBmYXR1cmEgYXRyYXbDqXMgZGVzdGUgUVIgQ29kZS4nLHByb3BzLGxpbmtlcykpOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJRUiBDb2RlIiwNCiAgICAgICAgICAgICJRUiBDb2RlIiwNCiAgICAgICAgICAgICJTYWliYSBtYWlzIHNvYnJlIGEgc3VhIGZhdHVyYSBhdHJhdsOpcyBkZXN0ZSBRUiBDb2RlLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgICIiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyBhZGljaW9uYSB0dWRvIMOgIHBhZ2luYQ0KICAgICAgICBwYWdzLnB1c2goDQogICAgICAgICAgbmV3IFBhZygNCiAgICAgICAgICAgICJQw6FnaW5hIDIiLA0KICAgICAgICAgICAgaXRlbnMsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8yLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiRGV0YWxoZSBlIGRhZG9zIGRlIGZhdHVyYSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvYWx0ZXJhci1kYWRvcy1kZS1mYXR1cmEiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgZGV0YWxoZSBkZSBjb211bmljYcOnw7VlcyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvYWx0ZXJhci1kYWRvcy1kZS1mYXR1cmEjZGV0YWxoZWRlY29tdW5pY2Fjb2VzIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uc3VsdGFyIGNvbnN1bW9zIG1hcmNhbmRvICojMTIzIyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2NvbnN1bHRhci1jb25zdW1vcyNjb25zdWx0YXJjb25zdW1vc3VzZCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bHRhciBjb25zdW1vcyBkZSBleHRyYW1lbnNhbGlkYWRlIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvY29uc3Vtb3MtZS1jb250cm9sby1kZS1jdXN0b3MvZXh0cmFtZW5zYWxpZGFkZSNjb25zdWx0YXJleHRyYW1lbnNhbGlkYWRlc2FsZG9yZWNhcmdhIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQWxlcnRhcyBkZSBjb25zdW1vIG5vIHRlbGVtw7N2ZWwiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9jb25zdW1vcy1lLWNvbnRyb2xvLWRlLWN1c3Rvcy9hbGVydGFzI2FsZXJ0YXNkZWNvbnN1bW9zZG90ZWxlbW92ZWwiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9VbmxpbWl0ZWQtQ29udHJvbG8tZGUtY3VzdG9zL1VubGltaXRlZC1Db250cm9sby1kZS1jdXN0b3MubXA0JykpOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNC44MiwNCiAgICAgICAgICAxNC41MSwNCiAgICAgICAgICA1LjYyLA0KICAgICAgICAgIDEyLjAyLA0KICAgICAgICAgIDg0LjQzLA0KICAgICAgICAgIDQyLjQsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiQ29uc3Vtb3MiLA0KICAgICAgICAgICAgIkNvbnN1bW9zIiwNCiAgICAgICAgICAgICJOYSBydWJyaWNhIGNvbnN1bW9zIHBvZGUgY29uc3VsdGFyIG9zIGNvbnN1bW9zIGV4dHJhbWVuc2FsaWRhZGUsIG5vbWVhZGFtZW50ZSBjaGFtYWRhcyB0ZWxlZsOzbmljYXMgKGZpeGFzIGUgbcOzdmVpcykgcG9yIHNlcnZpw6dvIGUgdGlwbyBkZSBjb211bmljYcOnw6NvLCBiZW0gY29tbyBhbHVndWVyZXMgZG8gTUVPIFZpZGVvQ2x1YmUuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJQZW5hbGl6YcOnw6NvIG5vIGF0cmFzbyBubyBwYWdhbWVudG8gZGEgZmF0dXJhIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNhdHJhc29wYWdhbWVudG9mYXR1cmEiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJWYW50YWdlbnMgZG8gZMOpYml0byBkaXJldG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL2RlYml0by1kaXJldG8jdmFudGFnZW5zZGViaXRvZGlyZXRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ3VzdG8gZGUgcmVzdGFiZWxlY2ltZW50byBkbyBzZXJ2acOnbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjY3VzdG9yZXN0YWJlbGVjaW1lbnRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDQuODIsDQogICAgICAgICAgNTYuNTEsDQogICAgICAgICAgNS42MiwNCiAgICAgICAgICA1NC42NSwNCiAgICAgICAgICA4NC40MywNCiAgICAgICAgICAxMC4wOSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJTZXJ2acOnb3MgQWRtaW5pc3RyYXRpdm9zIiwNCiAgICAgICAgICAgICJTZXJ2acOnb3MgQWRtaW5pc3RyYXRpdm9zIiwNCiAgICAgICAgICAgICdOYSBzZWPDp8OjbyAiU2VydmnDp29zIEFkbWluaXN0cmF0aXZvcyIgcG9kZW0gY29uc3RhciBydWJyaWNhcyBjb21vLCBwb3IgZXhlbXBsbywgdGF4YXMgZGUgYXRyYXNvIGRlIHBhZ2FtZW50byBvdSBvdXRyb3MgaW1wb3N0b3MuIFBhcmEgbWFudGVyIG9zIHNldXMgcGFnYW1lbnRvcyBzZW1wcmUgZW0gZGlhIGUgZXZpdGFyIGV2ZW50dWFpcyB0YXhhcyBwb3IgYXRyYXNvIGRlIHBhZ2FtZW50bywgYXRpdmUgbyBEw6liaXRvIERpcmV0by4gUG9kZSBmYXrDqi1sbyBkZSBmb3JtYSBncmF0dWl0YSBuYSBzdWEgw6FyZWEgZGUgY2xpZW50ZSBubyBQQyBvdSBubyBUYWJsZXQgZW0gbWVvLnB0JywNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIGFkaWNpb25hIHR1ZG8gw6AgcGFnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMyIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS9GYXR1cmFfY29ycmVudGVfRml4b19QYWdlXzMucG5nIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMgPSBbXTsNCg0KICAgICAgICAvLyBlIGFkaWNpb25hciDDoXMgZmF0dXJhcw0KICAgICAgICBmYXRzLnB1c2gobmV3IEZhdHVyYSgiRmF0dXJhIFBhY290ZXMiLCBwYWdzKSk7DQoNCiAgICAgICAgLy8gYWRpY2lvbmEgYSBmYXR1cmEgw6EgdGFiIGF0dWFsDQogICAgICAgIC8vdGFicy5wdXNoKG5ldyBBcmVhc1RhYnMoIkZhdHVyYSBQYWNvdGVzIixmYXRzLCJEw7p2aWRhcyBjb20gYSBzdWEgZmF0dXJhPyIsICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy92aWRlb3MvYWp1ZGEvZmF0dXJhLWVsZXRyb25pY2EtbWVvL2ZhdHVyYS1lbGV0cm9uaWNhLW1lby5tcDQiLCAiU2FpYmEgY29tbyBpbnRlcnByZXRhciBhIHN1YSBmYXR1cmEgZSBjb21wcmVlbmRhIGZhY2lsbWVudGUgdG9kYSBhIGluZm9ybWHDp8OjbyBxdWUgbGhlIGVudmlhbW9zLiIpKQ0KDQogICAgICAgIHRhYnMucHVzaCgNCiAgICAgICAgICBuZXcgQXJlYXNUYWJzKA0KICAgICAgICAgICAgIkZhdHVyYSBQYWNvdGVzIiwNCiAgICAgICAgICAgIGZhdHMsDQogICAgICAgICAgICAiRMO6dmlkYXMgbmEgZmF0dXJhPyIsDQogICAgICAgICAgICAiIiwNCiAgICAgICAgICAgICJTYWliYSBjb21vIGVzdMOhIG9yZ2FuaXphZGEgZSB2ZWphIGFzIGV4cGxpY2HDp8O1ZXMgcGFzc28gYSBwYXNzby4iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vIGxpbXBhciBmYXR1cmEgZGVwb2lzIGRlIGFkaWNpb25hciBhIHVsdGltYSBww6FnaW5hIGUgYWRpY2lvbmFyIGEgZmF0dXJhIMOhIHRhYiwgdW1hIHZleiBxdWUgw6kgc28gdW1hIGZhdHVyYSBwb3IgdGFiDQogICAgICAgIGZhdHMgPSBbXTsNCiAgICAgICAgLy8gbGltcGEgIGFzIHBhZ2luYXMNCiAgICAgICAgcGFncyA9IFtdOw0KDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMgRklNIEZBVFVSQSAjIyMjIyMjIyMjIyMjIyovDQoNCiAgICAgICAgLyogIyMjIyMjIyMjIyMjIyMjIDHCuiBmYXR1cmEgdGVsZW1vdmVsICMjIyMjIyMjIyMjIyMjIyovDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMjIyAxwrogZmF0dXJhIHRlbGVtb3ZlbCAjIyMjIyMjIyMjIyMjIyMqLw0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIyMgMcK6IGZhdHVyYSB0ZWxlbW92ZWwgIyMjIyMjIyMjIyMjIyMjKi8NCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJTYWJlciBvIHF1ZSBwb2RlIGZhemVyIG5vIG15IE1FTy4iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSN2YW50YWdlbnNkZWFkZXJpcmFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIEluc3RhbGFyIGEgYXBwIG15IE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI2luc3RhbGFyYXBwbXltZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIHZlciBvcyBzZXJ2acOnb3Mgbm8gbXkgTUVPIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9nZXJpci1wcm9kdXRvcy9hcmVhLWRlLWNsaWVudGUjcmVnaXN0b25hYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkVudHJhciBubyBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vbXltZW8ucGFnZS5saW5rL2hvbWUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgYXMgbGluaGFzIGRlIGFwb2lvIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2xpbmhhcy1hcG9pbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA0Ni43LA0KICAgICAgICAgIDQuNDksDQogICAgICAgICAgNTEuNDEsDQogICAgICAgICAgNS4wLA0KICAgICAgICAgIDIzLjA0LA0KICAgICAgICAgIDUuNTUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiw4FyZWEgZGUgQ2xpZW50ZSBteSBNRU8iLA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUgPGEgaHJlZj0naHR0cHM6Ly93d3cubWVvLnB0L2NsaWVudGUnIHRhcmdldD0nX2JsYW5rJz5teSBNRU88L2E+IiwNCiAgICAgICAgICAgICJQZXJtaXRlIGdlcmlyIG9zIHNlcnZpw6dvcyBNRU8gc2VtIGN1c3RvcyAyNGgvZGlhLCBubyBjb21wdXRhZG9yLCB0YWJsZXQgb3UgdGVsZW3Ds3ZlbC4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcyA9IFtdOw0KDQogICAgICAgIHByb3BzID0gIiI7DQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiTyBxdWUgw6kgbyBDVlAiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3RlbGVmb25lL3BvcnRhYmlsaWRhZGUjb3F1ZWVvY3ZwcGFjb3RlcyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkFjZXNzbyBhbyBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSNyZWdpc3RvbmFhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAxMi41NSwNCiAgICAgICAgICAxMC44NCwNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDMwLjU3LA0KICAgICAgICAgIDE1Ljc3LA0KICAgICAgICAgICJyaWdodCIsDQogICAgICAgICAgIm1pZGRsZSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRXN0ZXMgc8OjbyBvcyBuw7ptZXJvcyBxdWUgbyBpZGVudGlmaWNhbSBubyBNRU8uPGJyPkFxdWkgdGVtIG8gbsK6IGRlIGNvbnRhIGUgbyB0YXJpZsOhcmlvIHN1YnNjcml0by48YnI+VGVuaGEgZXN0ZXMgZGFkb3Mgw6AgbcOjbyBxdWFuZG8gbm9zIGNvbnRhY3RhciBvdSBxdWFuZG8gYXNzb2NpYXIgb3Mgc2VydmnDp29zIG5vIG15IE1FTy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIEZBTFRBIFVNIElURU0gREUgQ09OVEVVRE8gIFZJREVPDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDMxLjA2LA0KICAgICAgICAgIDEwLjg0LA0KICAgICAgICAgIDI4LjA0LA0KICAgICAgICAgIDg2LjYsDQogICAgICAgICAgMTcuNzksDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiUmVzdW1vIGRhIEZhdHVyYSIsDQogICAgICAgICAgICAiUmVzdW1vIGRhIEZhdHVyYSIsDQogICAgICAgICAgICAiRXN0YSDDqSBhIMOhcmVhIGRhIGZhdHVyYSBvbmRlIHBvZGUgdmVyIG8gcmVzdW1vIGRhIGZhdHVyYSBkbyBtw6pzLCBhIGRhdGEgbGltaXRlIGRlIHBhZ2FtZW50byBlIG8gdmFsb3IgYSBwYWdhci48YnI+PGJyPkEgZmF0dXJhw6fDo28gZXN0w6Egb3JnYW5pemFkYSBlbSB0csOqcyDDoXJlYXM6PC9wPiIgKw0KICAgICAgICAgICAgICAiPHN0cm9uZz4tIEFkZXPDtWVzPC9zdHJvbmc+OiB2YWxvcmVzIHJlbGF0aXZvcyBhIGFkZXPDo28gYSBub3ZvcyBzZXJ2acOnb3M8YnI+IiArDQogICAgICAgICAgICAgICI8c3Ryb25nPi0gTWVuc2FsaWRhZGVzPC9zdHJvbmc+OiB2YWxvcmVzIHJlbGF0aXZvcyBhIG1lbnNhbGlkYWRlcyBkb3MgdGFyaWbDoXJpb3Mgc3Vic2NyaXRvczxicj4iICsNCiAgICAgICAgICAgICAgIjxzdHJvbmc+LSBDb25zdW1vczwvc3Ryb25nPjogdmFsb3JlcyBjb25zdW1pZG9zIG5vIG3DqnMgYW50ZXJpb3Igw6AgZmF0dXJhPGJyPjxicj4iICsNCiAgICAgICAgICAgICAgIjxwIGNsYXNzPSdkZXNjcmljYW8nPkEgMcKqIGZhdHVyYSBwb2RlIG7Do28gY29ycmVzcG9uZGVyIGEgdW0gbcOqcyBpbnRlaXJvIHBvcnF1ZSBhIGZhdHVyYcOnw6NvIHPDsyBpbmljaWEgbm8gZGlhIGRlIGFkZXPDo28iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIHJlbW92aWRvIGVzdGUgZGVzdGFxdWUgZG8gdmFsb3IgYSBwYWdhcg0KICAgICAgICAvKg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21wcmVlbmRlciB2YWxvciBkZSBmYXR1cmEgc3VwZXJpb3IgYW8gZXNwZXJhZG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNTYuNywNCiAgICAgICAgICAxMS4xNCwNCiAgICAgICAgICA1NS43NCwNCiAgICAgICAgICA4Ni42LA0KICAgICAgICAgIDMuNCwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJWYWxvciBhIFBhZ2FyIiwNCiAgICAgICAgICAgICJWYWxvciBhIFBhZ2FyIiwNCiAgICAgICAgICAgICJBIHN1YSAxwqogZmF0dXJhIHBvZGUgbsOjbyBjb3JyZXNwb25kZXIgYSB1bSBtw6pzIGNvbXBsZXRvLCBwb2lzIGNvbWXDp2Egbm8gZGlhIGVtIHF1ZSBhZGVyaXUuIEFzIG1lbnNhbGlkYWRlcyBlIGNvbnN1bW9zIHPDo28gcmVmZXJlbnRlcyBhbyBtw6pzIGFudGVyaW9yLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQogICAgICAgICovDQoNCiAgICAgICAgLy8gcmVtb3ZpZG8gZXN0ZSBkZXN0YXF1ZSBkYXMgcHJvbW/Dp29lcyBlIG5vdmlkYWRlcw0KICAgICAgICAvKg0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzAuMTEsDQogICAgICAgICAgMTEuMTQsDQogICAgICAgICAgNjcuOTgsDQogICAgICAgICAgODYuNiwNCiAgICAgICAgICA3LjM0LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIlByb21vw6fDtWVzIGUgTm92aWRhZGVzIiwNCiAgICAgICAgICAgICJQcm9tb8Onw7VlcyBlIE5vdmlkYWRlcyIsDQogICAgICAgICAgICAiRmlxdWUgYXRlbnRvIMOgcyBwcm9tb8Onw7VlcyBlIG5vdmlkYWRlcyBxdWUgdGVtb3MgcGFyYSBzaSIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQogICAgICAgICovDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBhdGl2YXIgbyBEw6liaXRvIERpcmV0byIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvZGViaXRvLWRpcmV0byNhZGVyaXJkZWJpdG9kaXJldG9wY3RhYmxldCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbW8gcGFnYXIgYSBmYXR1cmEgbmEgw6FyZWEgZGUgY2xpZW50ZSBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSNwYWdhcmZhdHVyYXNhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBwYWdhciBmYXR1cmFzIHBvciBNdWx0aWJhbmNvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvcGFnYW1lbnRvcy9wYWdhci1mYXR1cmEjcGFnYXJmYXR1cmFzbm9tdWx0aWJhbmNvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzYuNywNCiAgICAgICAgICAxMC41NCwNCiAgICAgICAgICA3NC4yMSwNCiAgICAgICAgICA4Ni42LA0KICAgICAgICAgIDIwLjkxLA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIk1laW9zIGRlIFBhZ2FtZW50byIsDQogICAgICAgICAgICAiTWVpb3MgZGUgUGFnYW1lbnRvIiwNCiAgICAgICAgICAgICJUb2RhIGEgaW5mb3JtYcOnw6NvIHF1ZSBwcmVjaXNhIHBhcmEgcGFnYXIgYSBmYXR1cmEgZXN0w6EgYXF1aS48L3A+PHAgY2xhc3M9J2Rlc2NyaWNhbyc+U2FpYmEgY29tbyA8c3Ryb25nPmF0aXZhciBvIETDqWJpdG8gRGlyZXRvPC9zdHJvbmc+LCB1bWEgZm9ybWEgZ3JhdHVpdGEgZSBjw7Ntb2RhIGRlIHBhZ2FyIGEgc3VhIGZhdHVyYS48L3A+PHAgY2xhc3M9J2Rlc2NyaWNhbyc+U2Ugb3B0YXIgcG9yIDxzdHJvbmc+cGFnYXIgcG9yIE1CPC9zdHJvbmc+LCBzYWliYSBxdWUgYSBlbnRpZGFkZSBlIGEgcmVmZXLDqm5jaWEgc8OjbyBzZW1wcmUgYXMgbWVzbWFzLiBTw7MgbXVkYSBvIHZhbG9yLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLy8gYWRpY2lvbmEgdHVkbyDDoCBwYWdpbmENCiAgICAgICAgcGFncy5wdXNoKA0KICAgICAgICAgIG5ldyBQYWcoDQogICAgICAgICAgICAiUMOhZ2luYSAxIiwNCiAgICAgICAgICAgIGl0ZW5zLA0KICAgICAgICAgICAgLy8iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvMUZhdHVyYV9VTkxfUGFnZV8xLnBuZyINCiAgICAgICAgICAgICJodHRwczovL2NvbnRldWRvcy5tZW8ucHQvU3R5bGUlMjBMaWJyYXJ5L2NvbnN1bW8vaW1hZ2VzL2ZhdHVyYWludGVyYXRpdmEvMUZhdHVyYVRlbGVtb3ZlbF9wMS5qcGciDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBpdGVucyA9IFtdOw0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlNhaWJhIG8gcXVlIMOpIG8gUHJvZ3JhbWEgTUVPUyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vbWVvcy9wcm9ncmFtYSNvcXVlZW9wcm9ncmFtYW1lb3MiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25oZcOnYSBhcyBzdWdlc3TDtWVzIGUgbyBjYXTDoWxvZ28iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9tZW9zIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNi4xOSwNCiAgICAgICAgICA2LjY2LA0KICAgICAgICAgIDUuNTQsDQogICAgICAgICAgNC44LA0KICAgICAgICAgIDg2LjYsDQogICAgICAgICAgOC41LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJib3R0b20iDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIlByb2dyYW1hIE1FT1MiLA0KICAgICAgICAgICAgIlByb2dyYW1hIE1FT1MiLA0KICAgICAgICAgICAgIk5lc3RhIMOhcmVhIHBvZGUgdmVyIG8gPHN0cm9uZz5zYWxkbyBNRU9TPC9zdHJvbmc+IGUgcHJpbmNpcGFpcyBtb3ZpbWVudG9zLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLy8gbmFvIHRlbSB1bCBkZSBsaW5rcw0KDQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA2LjE5LA0KICAgICAgICAgIDI2LjgzLA0KICAgICAgICAgIDcuNTQsDQogICAgICAgICAgMjcuMDYsDQogICAgICAgICAgODEuNiwNCiAgICAgICAgICA2LjUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiQWRlc8O1ZXMiLA0KICAgICAgICAgICAgIkFkZXPDtWVzIiwNCiAgICAgICAgICAgICJOZXN0YSDDoXJlYSwgcG9kZSB2ZXIgbm8gcGVyw61vZG8gaW5kaWNhZG8sIG8gdmFsb3IgZGUgYWRlc8OjbyBhbyB0YXJpZsOhcmlvIGUgcmVzcGV0aXZvcyBkZXNjb250b3MgY29tZXJjaWFpcy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIG5hbyB0ZW0gdWwgZGUgbGlua3MNCg0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNi4xOSwNCiAgICAgICAgICAzMi44MywNCiAgICAgICAgICA3LjU0LA0KICAgICAgICAgIDM0LjA2LA0KICAgICAgICAgIDgxLjYsDQogICAgICAgICAgOC41LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJib3R0b20iDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyIsDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIiwNCiAgICAgICAgICAgICJOZXN0YSDDoXJlYSBwb2RlIHZlciBubyBwZXLDrW9kbyBpbmRpY2FkbywgYSA8c3Ryb25nPm1lbnNhbGlkYWRlIGRvIHRhcmlmw6FyaW88L3N0cm9uZz4gZSBkb3MgPHN0cm9uZz5zZXJ2acOnb3MgYWRpY2lvbmFpczwvc3Ryb25nPiAoZXguIGV4dHJhIGRlIGludGVybmV0LCB3YWl0aW5nIHJpbmcpIGUgcmVzcGV0aXZvcyBkZXNjb250b3MsIGNvbW8gcG9yIGV4LiBvIGRlc2NvbnRvIG1lbnNhbCBkZSBhZGVzw6NvIMOgIEZhdHVyYSBFbGV0csOzbmljYS4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlNhYmVyIG1haXMgc29icmUgZXh0cmFtZW5zYWxpZGFkZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2V4dHJhbWVuc2FsaWRhZGUjZXh0cmFtZW5zYWxpZGFkZWVzYWxkb3JlY2FyZ2EiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLydodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy92aWRlb3MvYWp1ZGEvVW5saW1pdGVkLUNvbnRyb2xvLWRlLWN1c3Rvcy9VbmxpbWl0ZWQtQ29udHJvbG8tZGUtY3VzdG9zLm1wNCcpKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBjb250cm9sYXIgY29uc3Vtb3MiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9jb25zdW1vcy1lLWNvbnRyb2xvLWRlLWN1c3Rvcy9jb25zdWx0YXItY29uc3Vtb3MjY29uc3VsdGFyY29uc3Vtb3N1c2QiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIGNvbnN1bHRhciBkZXRhbGhlIGRlIGNvbXVuaWNhw6fDtWVzIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9hbHRlcmFyLWRhZG9zLWRlLWZhdHVyYSNkZXRhbGhlZGVjb211bmljYWNvZXMiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJBbGVydGFzIGRlIGNvbnN1bW8gbm8gdGVsZW3Ds3ZlbCIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2FsZXJ0YXMjYWxlcnRhc2RlY29uc3Vtb3Nkb3RlbGVtb3ZlbCINCiAgICAgICAgICApDQogICAgICAgICk7DQoNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDYuMTksDQogICAgICAgICAgNDIuODMsDQogICAgICAgICAgNi41NCwNCiAgICAgICAgICA0MywNCiAgICAgICAgICA4NC42LA0KICAgICAgICAgIDEzLjY4LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkNvbnN1bW9zIiwNCiAgICAgICAgICAgICJDb25zdW1vcyIsDQogICAgICAgICAgICAiQXF1aSBwb2RlIHZlciBhIDxzdHJvbmc+ZmF0dXJhw6fDo28gZG9zIGNvbnN1bW9zIHF1ZSByZWFsaXpvdSBubyBtw6pzIGFudGVyaW9yPC9zdHJvbmc+IGUgcXVlIHBvZGVtIHNlciBkZSB2b3osIGludGVybmV0IG91IHJvYW1pbmcuPC9wPjxwIGNsYXNzPSdkZXNjcmljYW8nPlBvZGUgY29uc3VsdGFyIG8gdmFsb3IgZGFzIGNvbXVuaWNhw6fDtWVzIHF1ZSBuw6NvIGVzdMOjbyBpbmNsdcOtZGFzIG5vIHRhcmlmw6FyaW8sIGFzc2ltIGNvbW8gbyBuwrogZGUgY29tdW5pY2HDp8O1ZXMgcXVlIGZvcmFtIHJlYWxpemFkYXMuPC9wPjxwIGNsYXNzPSdkZXNjcmljYW8nPkNhc28gbsOjbyBwcmV0ZW5kYSByZWFsaXphciBjaGFtYWRhcyBvdSBhY2Vzc29zIGNvbSBjdXN0bywgcG9kZSBhbHRlcmFyIG8gdmFsb3IgZGEgZXh0cmFtZW5zYWxpZGFkZSwgbWFzIGFsZXJ0YW1vcyBxdWUgw6kgaW1wb3J0YW50ZSB0ZXIgc2VtcHJlIGFsZ3VtIHZhbG9yIHBhcmEgY29tdW5pY2HDp8O1ZXMgdXJnZW50ZXMgZSBpbmVzcGVyYWRhcy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KDQogICAgICAgIC8vIGFkaWNpb25hIHR1ZG8gw6AgcGFnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMiIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgIC8vImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3BhZ2luYXMvX2ZhdHVyYV9pbnRlcmF0aXZhLzFGYXR1cmFfVU5MX1BhZ2VfMi5wbmciDQogICAgICAgICAgICAiaHR0cHM6Ly9jb250ZXVkb3MubWVvLnB0L1N0eWxlJTIwTGlicmFyeS9jb25zdW1vL2ltYWdlcy9mYXR1cmFpbnRlcmF0aXZhLzFGYXR1cmFUZWxlbW92ZWxfcDIuanBnIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMgPSBbXTsNCg0KICAgICAgICAvLyBlIGFkaWNpb25hciDDoXMgZmF0dXJhcw0KICAgICAgICBmYXRzLnB1c2gobmV3IEZhdHVyYSgiMcKqIEZhdHVyYSAtIFRlbGVtw7N2ZWwiLCBwYWdzKSk7DQoNCiAgICAgICAgLy8gYWRpY2lvbmEgYSBmYXR1cmEgw6EgdGFiIGF0dWFsDQogICAgICAgIC8vaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvdmlkZW9zL2FqdWRhL0NvbmhlY2EtbWVsaG9yLWEtc3VhLTFhLWZhdHVyYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEubXA0DQoNCiAgICAgICAgLy90YWJzLnB1c2gobmV3IEFyZWFzVGFicygiMcKqIEZhdHVyYSAtIFRlbGVtw7N2ZWwiLGZhdHMsIkTDunZpZGFzIGNvbSBhIHN1YSBmYXR1cmE/IiwgImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9GYXR1cmFfTW92ZWwubXA0IiwgIlNhaWJhIGNvbW8gaW50ZXJwcmV0YXIgYSBzdWEgZmF0dXJhIGUgY29tcHJlZW5kYSBmYWNpbG1lbnRlIHRvZGEgYSBpbmZvcm1hw6fDo28gcXVlIGxoZSBlbnZpYW1vcy4iKSkNCg0KICAgICAgICB0YWJzLnB1c2goDQogICAgICAgICAgbmV3IEFyZWFzVGFicygNCiAgICAgICAgICAgICIxwqogRmF0dXJhIC0gVGVsZW3Ds3ZlbCIsDQogICAgICAgICAgICBmYXRzLA0KICAgICAgICAgICAgIkTDunZpZGFzIG5hIGZhdHVyYT8iLA0KICAgICAgICAgICAgIiIsDQogICAgICAgICAgICAiU2FpYmEgY29tbyBlc3TDoSBvcmdhbml6YWRhIGUgdmVqYSBhcyBleHBsaWNhw6fDtWVzIHBhc3NvIGEgcGFzc28uIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBsaW1wYXIgZmF0dXJhIGRlcG9pcyBkZSBhZGljaW9uYXIgYSB1bHRpbWEgcMOhZ2luYSBlIGFkaWNpb25hciBhIGZhdHVyYSDDoSB0YWIsIHVtYSB2ZXogcXVlIMOpIHNvIHVtYSBmYXR1cmEgcG9yIHRhYg0KICAgICAgICBmYXRzID0gW107DQogICAgICAgIC8vIGxpbXBhICBhcyBwYWdpbmFzDQogICAgICAgIHBhZ3MgPSBbXTsNCg0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIEZJTSBGQVRVUkEgIyMjIyMjIyMjIyMjIyMqLw0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIyMgRkFUVVJBIFRFTEVNT1ZFTCAgIyMjIyMjIyMjIyMjIyMjKi8NCiAgICAgICAgLyogIyMjIyMjIyMjIyMjIyMjIEZBVFVSQSBURUxFTU9WRUwgICMjIyMjIyMjIyMjIyMjIyovDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMjIyBGQVRVUkEgVEVMRU1PVkVMICAjIyMjIyMjIyMjIyMjIyMqLw0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlNhYmVyIG8gcXVlIHBvZGUgZmF6ZXIgbm8gbXkgTUVPIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9nZXJpci1wcm9kdXRvcy9hcmVhLWRlLWNsaWVudGUjdmFudGFnZW5zZGVhZGVyaXJhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBpbnN0YWxhciBhIGFwcCBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSNpbnN0YWxhcmFwcG15bWVvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIHZlciBvcyBzZXJ2acOnb3Mgbm8gbXkgTUVPICIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI3JlZ2lzdG9uYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkVudHJhciBubyBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vbXltZW8ucGFnZS5saW5rL2hvbWUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgYXMgbGluaGFzIGRlIGFwb2lvIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2xpbmhhcy1hcG9pbyINCiAgICAgICAgICApDQogICAgICAgICk7DQoNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDUwLjAsDQogICAgICAgICAgNy4xMywNCiAgICAgICAgICA1Mi40MSwNCiAgICAgICAgICA1LjExLA0KICAgICAgICAgIDIyLjQ0LA0KICAgICAgICAgIDcuMjMsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCg0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICLDgXJlYSBkZSBDbGllbnRlIG15IE1FTyIsDQogICAgICAgICAgICAiw4FyZWEgZGUgQ2xpZW50ZSA8YSBocmVmPSdodHRwczovL3d3dy5tZW8ucHQvY2xpZW50ZScgdGFyZ2V0PSdfYmxhbmsnPm15IE1FTzwvYT4iLA0KICAgICAgICAgICAgIlBlcm1pdGUgZ2VyaXIgb3Mgc2VydmnDp29zIHNlbSBjdXN0b3MgMjRoL2RpYSwgZGlzcG9uw612ZWwgbm8gY29tcHV0YWRvciwgdGFibGV0IG91IHRlbGVtw7N2ZWwuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJPIHF1ZSDDqSBvIENWUCIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vdGVsZWZvbmUvcG9ydGFiaWxpZGFkZSNvcXVlZW9jdnBwYWNvdGVzIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQWNlc3NvIGFvIG15IE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI3JlZ2lzdG9uYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAxNC41NywNCiAgICAgICAgICAxMS4xNCwNCiAgICAgICAgICAxMy4zLA0KICAgICAgICAgIDMwLjU3LA0KICAgICAgICAgIDEwLjExLA0KICAgICAgICAgICJyaWdodCIsDQogICAgICAgICAgIm1pZGRsZSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRXN0ZXMgc8OjbyBvcyBuw7ptZXJvcyBxdWUgbyBpZGVudGlmaWNhbSBubyBNRU8uPC9wPjxwIGNsYXNzPSdkZXNjcmljYW8nPkFxdWkgdGVtIG8gbsK6IGRlIGNvbnRhIGUgbyB0YXJpZsOhcmlvIHN1YnNjcml0by48cCBjbGFzcz0nZGVzY3JpY2FvJz5UZW5oYSBlc3RlcyBkYWRvcyDDoCBtw6NvIHF1YW5kbyBub3MgY29udGFjdGFyIG91IHF1YW5kbyBhc3NvY2lhciBvcyBzZXJ2acOnb3Mgbm8gbXkgTUVPLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDMxLjE3LA0KICAgICAgICAgIDExLjE0LA0KICAgICAgICAgIDI4LjcyLA0KICAgICAgICAgIDg2Ljc1LA0KICAgICAgICAgIDE2LjUzLA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIlJlc3VtbyBkYSBGYXR1cmEiLA0KICAgICAgICAgICAgIlJlc3VtbyBkYSBGYXR1cmEiLA0KICAgICAgICAgICAgIkFxdWkgcG9kZSB2ZXIgbyByZXN1bW8gZGEgZmF0dXJhIGRvIG3DqnMsIGEgZGF0YSBsaW1pdGUgZGUgcGFnYW1lbnRvIGRhIGZhdHVyYSBlIG8gdmFsb3IgYSBwYWdhci48YnI+PGJyPkEgZmF0dXJhw6fDo28gZXN0w6Egb3JnYW5pemFkYSBlbSB0csOqcyDDoXJlYXM6PC9wPiIgKw0KICAgICAgICAgICAgICAiPHN0cm9uZz4tIEFkZXPDtWVzPC9zdHJvbmc+OiB2YWxvcmVzIHJlbGF0aXZvcyBhIGFkZXPDo28gYSBub3ZvcyBzZXJ2acOnb3M8YnI+IiArDQogICAgICAgICAgICAgICI8c3Ryb25nPi0gTWVuc2FsaWRhZGVzPC9zdHJvbmc+OiB2YWxvcmVzIHJlbGF0aXZvcyBhIG1lbnNhbGlkYWRlcyBkb3MgdGFyaWbDoXJpb3Mgc3Vic2NyaXRvczxicj4iICsNCiAgICAgICAgICAgICAgIjxzdHJvbmc+LSBDb25zdW1vczwvc3Ryb25nPjogdmFsb3JlcyBjb25zdW1pZG9zIG5vIG3DqnMgYW50ZXJpb3Igw6AgZmF0dXJhPGJyPjxicj4iICsNCiAgICAgICAgICAgICAgIjxwIGNsYXNzPSdkZXNjcmljYW8nPkEgMcKqIGZhdHVyYSBwb2RlIG7Do28gY29ycmVzcG9uZGVyIGEgdW0gbcOqcyBpbnRlaXJvIHBvcnF1ZSBhIGZhdHVyYcOnw6NvIHPDsyBpbmljaWEgbm8gZGlhIGRlIGFkZXPDo28iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIG5hbyB0ZW0gbGlua2VzDQoNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDQ2LjA2LA0KICAgICAgICAgIDExLjU0LA0KICAgICAgICAgIDQ5LjA0LA0KICAgICAgICAgIDg2LjYsDQogICAgICAgICAgMTAuMzIsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiRXh0cmF0byBkZSBDb250YSIsDQogICAgICAgICAgICAiRXh0cmF0byBkZSBDb250YSIsDQogICAgICAgICAgICAnQXF1aSBlbmNvbnRyYSB0b2RvcyBvcyBtb3ZpbWVudG9zIG5hIGNvbnRhLCBkZXNkZSBhIMO6bHRpbWEgZmF0dXJhIGF0w6kgw6AgZGF0YSBkZSBlbWlzc8OjbyBkYSBmYXR1cmEgZG8gbcOqcy4gQ2FzbyBleGlzdGFtIHZhbG9yZXMgZGUgZmF0dXJhcyBhbnRlcmlvcmVzIHBvciBwYWdhciwgb3MgdmFsb3JlcyBzZXLDo28gaW5jbHXDrWRvcyBubyA8c3Ryb25nPlZhbG9yIGEgcGFnYXI8L3N0cm9uZz4uPC9wPjxwIGNsYXNzPSJkZXNjcmljYW8iPlRvZG9zIG9zIHZhbG9yZXMgcGFnb3MgYXDDs3MgYSBkYXRhIGRlIGVtaXNzw6NvIGRhIGZhdHVyYSwgc8OzIHNlcsOjbyB2aXPDrXZlaXMgbmEgcHLDs3hpbWEgZmF0dXJhLicsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBhdGl2YXIgbyBEw6liaXRvIERpcmV0byIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvZGViaXRvLWRpcmV0byNhZGVyaXJkZWJpdG9kaXJldG9wY3RhYmxldCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbW8gcGFnYXIgYSBmYXR1cmEgbmEgw6FyZWEgZGUgY2xpZW50ZSBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSNwYWdhcmZhdHVyYXNhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBwYWdhciBGYXR1cmFzIHBvciBNdWx0aWJhbmNvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvcGFnYW1lbnRvcy9wYWdhci1mYXR1cmEjcGFnYXJmYXR1cmFzbm9tdWx0aWJhbmNvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzYuNDksDQogICAgICAgICAgMTAuNTQsDQogICAgICAgICAgNzQuMCwNCiAgICAgICAgICA4Ni42LA0KICAgICAgICAgIDIxLjcsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVpb3MgZGUgUGFnYW1lbnRvIiwNCiAgICAgICAgICAgICJNZWlvcyBkZSBQYWdhbWVudG8iLA0KICAgICAgICAgICAgIlRvZGEgYSBpbmZvcm1hw6fDo28gcXVlIHByZWNpc2EgcGFyYSBwYWdhciBhIGZhdHVyYSBlc3TDoSBhcXVpLjwvcD48cCBjbGFzcz0nZGVzY3JpY2FvJz5TYWliYSBjb21vIDxzdHJvbmc+YXRpdmFyIG8gRMOpYml0byBEaXJldG88L3N0cm9uZz4sIHVtYSBmb3JtYSBncmF0dWl0YSBlIGPDs21vZGEgZGUgcGFnYXIgYSBzdWEgZmF0dXJhLjwvcD48cCBjbGFzcz0nZGVzY3JpY2FvJz5TZSBvcHRhciBwb3IgPHN0cm9uZz5wYWdhciBwb3IgTUI8L3N0cm9uZz4sIHNhaWJhIHF1ZSBhIGVudGlkYWRlIGUgYSByZWZlcsOqbmNpYSBzw6NvIHNlbXByZSBhcyBtZXNtYXMuIFPDsyBtdWRhIG8gdmFsb3IuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyBhZGljaW9uYSB0dWRvIMOgIHBhZ2luYQ0KICAgICAgICBwYWdzLnB1c2goDQogICAgICAgICAgbmV3IFBhZygNCiAgICAgICAgICAgICJQw6FnaW5hIDEiLA0KICAgICAgICAgICAgaXRlbnMsDQogICAgICAgICAgICAiaHR0cHM6Ly9jb250ZXVkb3MubWVvLnB0L1N0eWxlJTIwTGlicmFyeS9jb25zdW1vL2ltYWdlcy9mYXR1cmFpbnRlcmF0aXZhLzJGYXR1cmFUZWxlbW92ZWxfcDEuanBnIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMgPSBbXTsNCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIGFjdW11bGFyIE1FT1MuIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9tZW9zL3Byb2dyYW1hI29xdWVlb3Byb2dyYW1hbWVvcyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbmhlY2VyIGFzIHN1Z2VzdMO1ZXMgZSBvIGNhdMOhbG9nbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L21lb3MiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIGNvbnN1bHRhciBvIHNhbGRvIE1FT1MiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL21lb3Mvc2FsZG8jY29tb2NvbnN1bHRhcnNhbGRvbWVvcyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIk9uZGUgcG9zc28gdHJvY2FyIE1FT1MiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL21lb3MvdHJvY2FyI29uZGVwb3Nzb3Ryb2Nhcm1lb3MiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICA2LjkxLA0KICAgICAgICAgIDUuMjQsDQogICAgICAgICAgNS41LA0KICAgICAgICAgIDg3LjY1LA0KICAgICAgICAgIDcuNSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAiYm90dG9tIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJQcm9ncmFtYSBNRU9TIiwNCiAgICAgICAgICAgICJQcm9ncmFtYSBNRU9TIiwNCiAgICAgICAgICAgICJOZXN0YSDDoXJlYSBwb2RlIHZlciBvIDxzdHJvbmc+c2FsZG8gTUVPUzwvc3Ryb25nPiBlIHByaW5jaXBhaXMgbW92aW1lbnRvcy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQoNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA0LjE5LA0KICAgICAgICAgIDI3LjIzLA0KICAgICAgICAgIDUuNTQsDQogICAgICAgICAgMjQuMDYsDQogICAgICAgICAgODcuNjUsDQogICAgICAgICAgMTEuMzYsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIiwNCiAgICAgICAgICAgICJNZW5zYWxpZGFkZXMiLA0KICAgICAgICAgICAgIk5lc3RhIMOhcmVhIHBvZGUgdmVyIG5vIHBlcsOtb2RvIGRlIGZhdHVyYcOnw6NvIGluZGljYWRvLCBvIHZhbG9yIGRhIG1lbnNhbGlkYWRlIGRvIHRhcmlmw6FyaW8gZSBkb3Mgc2VydmnDp29zIGFkaWNpb25haXMgKGV4LiBleHRyYSBkZSBpbnRlcm5ldCkgZSByZXNwZXRpdm9zIGRlc2NvbnRvcyBjb21lcmNpYWlzLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiU2FiZXIgbWFpcyBzb2JyZSBleHRyYW1lbnNhbGlkYWRlIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvY29uc3Vtb3MtZS1jb250cm9sby1kZS1jdXN0b3MvZXh0cmFtZW5zYWxpZGFkZSNleHRyYW1lbnNhbGlkYWRlZXNhbGRvcmVjYXJnYSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9VbmxpbWl0ZWQtQ29udHJvbG8tZGUtY3VzdG9zL1VubGltaXRlZC1Db250cm9sby1kZS1jdXN0b3MubXA0JykpOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIGNvbnRyb2xhciBjb25zdW1vcyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2NvbnN1bHRhci1jb25zdW1vcyNjb25zdWx0YXJjb25zdW1vc3VzZCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbW8gY29uc3VsdGFyIGRldGFsaGUgZGUgY29tdW5pY2HDp8O1ZXMiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2FsdGVyYXItZGFkb3MtZGUtZmF0dXJhI2RldGFsaGVkZWNvbXVuaWNhY29lcyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkFsZXJ0YXMgZGUgY29uc3VtbyBubyB0ZWxlbcOzdmVsIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvY29uc3Vtb3MtZS1jb250cm9sby1kZS1jdXN0b3MvYWxlcnRhcyNhbGVydGFzZGVjb25zdW1vc2RvdGVsZW1vdmVsIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNC4xOSwNCiAgICAgICAgICAzNy4xMywNCiAgICAgICAgICA0LjU0LA0KICAgICAgICAgIDM0Ljc0LA0KICAgICAgICAgIDg3LjY1LA0KICAgICAgICAgIDExLjcsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiQ29uc3Vtb3MiLA0KICAgICAgICAgICAgIkNvbnN1bW9zIiwNCiAgICAgICAgICAgICJBcXVpIHBvZGUgdmVyIGEgPHN0cm9uZz5mYXR1cmHDp8OjbyBkb3MgY29uc3Vtb3MgcXVlIHJlYWxpem91IG5vIG3DqnMgYW50ZXJpb3I8L3N0cm9uZz4gZSBxdWUgcG9kZW0gc2VyIGRlIHZveiwgaW50ZXJuZXQgb3Ugcm9hbWluZy48L3A+PHAgY2xhc3M9J2Rlc2NyaWNhbyc+UG9kZSBjb25zdWx0YXIgbyB2YWxvciBkYXMgY29tdW5pY2HDp8O1ZXMgcXVlIG7Do28gZXN0w6NvIGluY2x1w61kYXMgbm8gdGFyaWbDoXJpbywgYXNzaW0gY29tbyBvIG7CuiBkZSBjb211bmljYcOnw7VlcyBxdWUgZm9yYW0gcmVhbGl6YWRhcy48L3A+PHAgY2xhc3M9J2Rlc2NyaWNhbyc+Q2FzbyBuw6NvIHByZXRlbmRhIHJlYWxpemFyIGNoYW1hZGFzIG91IGFjZXNzb3MgY29tIGN1c3RvLCBwb2RlIGFsdGVyYXIgbyB2YWxvciBkYSBleHRyYW1lbnNhbGlkYWRlLCBtYXMgYWxlcnRhbW9zIHF1ZSDDqSBpbXBvcnRhbnRlIHRlciBzZW1wcmUgYWxndW0gdmFsb3IgcGFyYSBjb211bmljYcOnw7VlcyB1cmdlbnRlcyBlIGluZXNwZXJhZGFzLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyBhZGljaW9uYSB0dWRvIMOgIHBhZ2luYQ0KICAgICAgICBwYWdzLnB1c2goDQogICAgICAgICAgbmV3IFBhZygNCiAgICAgICAgICAgICJQw6FnaW5hIDIiLA0KICAgICAgICAgICAgaXRlbnMsDQogICAgICAgICAgICAiaHR0cHM6Ly9jb250ZXVkb3MubWVvLnB0L1N0eWxlJTIwTGlicmFyeS9jb25zdW1vL2ltYWdlcy9mYXR1cmFpbnRlcmF0aXZhLzJGYXR1cmFUZWxlbW92ZWxfcDIuanBnIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMgPSBbXTsNCg0KICAgICAgICAvLyBlIGFkaWNpb25hciDDoXMgZmF0dXJhcw0KICAgICAgICBmYXRzLnB1c2gobmV3IEZhdHVyYSgiRmF0dXJhIC0gVGVsZW3Ds3ZlbCIsIHBhZ3MpKTsNCg0KICAgICAgICAvLyBhZGljaW9uYSBhIGZhdHVyYSDDoSB0YWIgYXR1YWwNCiAgICAgICAgLy90YWJzLnB1c2gobmV3IEFyZWFzVGFicygiRmF0dXJhIC0gVGVsZW3Ds3ZlbCIsZmF0cywiRMO6dmlkYXMgY29tIGEgc3VhIGZhdHVyYT8iLCAiaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvdmlkZW9zL2FqdWRhL0ZhdHVyYV9Db3JyZW50ZV9Nb3ZlbC9GYXR1cmFfQ29ycmVudGVfTW92ZWwubXA0IiwgIlNhaWJhIGNvbW8gaW50ZXJwcmV0YXIgYSBzdWEgZmF0dXJhIGUgY29tcHJlZW5kYSBmYWNpbG1lbnRlIHRvZGEgYSBpbmZvcm1hw6fDo28gcXVlIGxoZSBlbnZpYW1vcy4iKSkNCiAgICAgICAgdGFicy5wdXNoKA0KICAgICAgICAgIG5ldyBBcmVhc1RhYnMoDQogICAgICAgICAgICAiRmF0dXJhIC0gVGVsZW3Ds3ZlbCIsDQogICAgICAgICAgICBmYXRzLA0KICAgICAgICAgICAgIkTDunZpZGFzIG5hIGZhdHVyYT8iLA0KICAgICAgICAgICAgIiIsDQogICAgICAgICAgICAiU2FpYmEgY29tbyBlc3TDoSBvcmdhbml6YWRhIGUgdmVqYSBhcyBleHBsaWNhw6fDtWVzIHBhc3NvIGEgcGFzc28uIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBsaW1wYXIgZmF0dXJhIGRlcG9pcyBkZSBhZGljaW9uYXIgYSB1bHRpbWEgcMOhZ2luYSBlIGFkaWNpb25hciBhIGZhdHVyYSDDoSB0YWIsIHVtYSB2ZXogcXVlIMOpIHNvIHVtYSBmYXR1cmEgcG9yIHRhYg0KICAgICAgICBmYXRzID0gW107DQogICAgICAgIC8vIGxpbXBhICBhcyBwYWdpbmFzDQogICAgICAgIHBhZ3MgPSBbXTsNCg0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIEZJTSBGQVRVUkEgIyMjIyMjIyMjIyMjIyMqLw0KDQogICAgICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCg0KICAgICAgICAvKiBGSU0gRE9TIERBRE9TICovDQoNCiAgICAgICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgICAgIC8qIGN1cnJlbnQgaW5kZXhlcyAqLw0KDQogICAgICAgIHZhciBmaXJzdGltZSA9IHRydWU7DQogICAgICAgIHZhciBvcGVuVGFiID0gZmFsc2U7DQoNCiAgICAgICAgZnVuY3Rpb24gY3JlYXRlVGFicyhpVGFiLCBpRmF0LCBpUGFnLCBpVGVtLCBib3R0b21MZXZlbHNPbmx5KSB7DQogICAgICAgICAgdGFicy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkgew0KICAgICAgICAgICAgaWYgKGZpcnN0aW1lKSB7DQogICAgICAgICAgICAgICQoIiNUYWJpZnkiKS5hcHBlbmQoDQogICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0iJyArDQogICAgICAgICAgICAgICAgICAoaVRhYiA9PSBpbmRleCA/ICJhY3RpdmUiIDogIiIpICsNCiAgICAgICAgICAgICAgICAgICciPjxhIHRpdGxlPSInICsNCiAgICAgICAgICAgICAgICAgIGVsZW1lbnQudGl0dWxvICsNCiAgICAgICAgICAgICAgICAgICciIGhyZWY9IiN0YWIxJyArDQogICAgICAgICAgICAgICAgICBNYXRoLmFicyhpbmRleCArIDEpICsNCiAgICAgICAgICAgICAgICAgICciPicgKw0KICAgICAgICAgICAgICAgICAgZWxlbWVudC50aXR1bG8gKw0KICAgICAgICAgICAgICAgICAgIjwvYT48L2xpPiINCiAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGFiaSA9ICQoIiNUYWJpZnkgbGkiKS5lcShpbmRleCk7DQoNCiAgICAgICAgICAgIC8vY29uc29sZS5sb2coZWxlbWVudC5saW5rVmlkZW8gKyAiIDo6OiBlbGVtZW50LmxpbmtWaWRlbyIpOw0KDQogICAgICAgICAgICBpZiAoaVRhYiA9PSBpbmRleCkgew0KICAgICAgICAgICAgICAkKCIjdmlkZW8tbGluay1ib3ggKiIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAkKCIjdmlkZW8tbGluay1ib3giKS5hcHBlbmQoIjxoMz4iICsgZWxlbWVudC50aXRWaWRlbyArICI8L2gzPiIpOw0KICAgICAgICAgICAgICAkKCIjdmlkZW8tbGluay1ib3giKS5hcHBlbmQoIjxwPiIgKyBlbGVtZW50LmRlc2NWaWRlbyArICI8L3A+Iik7DQogICAgICAgICAgICAgIGlmIChlbGVtZW50LmxpbmtWaWRlbyAhPSAiIikgew0KICAgICAgICAgICAgICAgIC8vJCgnI3ZpZGVvLWxpbmstYm94JykuYXBwZW5kKCc8YSBocmVmPSInKyBlbGVtZW50LmxpbmtWaWRlbyArJyIgY2xhc3M9ImJ0bi1maWxsIGJ0bi1ncmF5IGJ0bi10eHQtd2hpdGUgaWNvbi1zZXRhLXJpZ2h0IGJ0bi1pY29uLXJpZ2h0Ij52ZXIgdsOtZGVvPC9hPicpOw0KICAgICAgICAgICAgICAgIGhzdHIgPQ0KICAgICAgICAgICAgICAgICAgIjxhIGhyZWY9JyN2aWRlb19jb21wcmVlbmRlcjFhZmF0dXJhcGFjb3RlY29tdGVsZW1vdmVsJyBjbGFzcz0nYnRuLWZpbGwgYnRuLWdyYXkgYnRuLXR4dC13aGl0ZSBpY29uLXNldGEtcmlnaHQgYnRuLWljb24tcmlnaHQgdHItbW9kYWwtdmlkZW9zJyBkYXRhLXc9JzEwMCUnIGRhdGEtaD0nMzUwJyBkYXRhLWJpbmQ9J2F0dHI6IHsgaHJlZjogJyN2aWRlb18nICsgSVNpdGVDb2x1bW5Ub3BpY1JlZk9XU1RFWFQsICdkYXRhLWlmcmFtZSc6ICRwYXJlbnQuZ2V0VG9waWNWaWRlb1VybCgkZGF0YSkgfSc+VmVyIHbDrWRlbzwvYT4iOw0KICAgICAgICAgICAgICAgICQoIiN2aWRlby1saW5rLWJveCIpLmFwcGVuZChoc3RyKTsNCiAgICAgICAgICAgICAgICAkKCIjdmlkZW8tbGluay1ib3ggYSIpLmF0dHIoImRhdGEtaWZyYW1lIiwgZWxlbWVudC5saW5rVmlkZW8pOw0KICAgICAgICAgICAgICAgIGlmICgkKCIudHItbW9kYWwtdmlkZW9zIikubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgICAgICAgJCgiLnRyLW1vZGFsLXZpZGVvcyIpLm9mZigiY2xpY2siKTsNCiAgICAgICAgICAgICAgICAgIG5ldyBPdmVybGF5VmlkZW9BanVkYSh7DQogICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6ICQoIi50ci1tb2RhbC12aWRlb3MiKSwNCiAgICAgICAgICAgICAgICAgICAgY2xfbW9kYWw6ICJtb2RhbCIsDQogICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgLyoqLw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoaVRhYiA9PSBpbmRleCkgew0KICAgICAgICAgICAgICAvKmxvb3AgbmFzIGZhdHVyYXMgKi8NCiAgICAgICAgICAgICAgZWxlbWVudC5mYXR1cmFzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7DQogICAgICAgICAgICAgICAgLy8gMcK6LiBvIHRpdHVsbyBkYSBmYXR1cmENCiAgICAgICAgICAgICAgICAkKCIjbmF2LWZhdHVyYXMgKiIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICQoIiNuYXYtZmF0dXJhcyIpLmFwcGVuZCgNCiAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJmYXR1cmFzLWluLXRhYnMiPjxoND4nICsNCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50aXR1bG8gKw0KICAgICAgICAgICAgICAgICAgICAiPC9oND48L2Rpdj4iDQogICAgICAgICAgICAgICAgKTsgLyp0YWJzW2lUYWJdLmZhdHVyYXNbMF0udGl0dWxvKi8NCiAgICAgICAgICAgICAgICAvLyBww6FnaW5hcyBlIGl0ZW5zDQoNCiAgICAgICAgICAgICAgICAkKCIjbmF2LWZhdHVyYXMgLmZhdHVyYXMtaW4tdGFicyIpLmFwcGVuZCgNCiAgICAgICAgICAgICAgICAgICc8dWwgaWQ9Imxpc3RhUGFnaW5hcyI+PC91bD4nDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgICAgIGNGYXQgPSBpbmRleDsNCiAgICAgICAgICAgICAgICAvKiBsb29wIG5hIHBhZ2luYWNhbyAqLw0KICAgICAgICAgICAgICAgICQoIiNuYXYtcGFnIGxpIikucmVtb3ZlKCk7DQoNCiAgICAgICAgICAgICAgICBlbGVtZW50LnBhZ3MuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHsNCiAgICAgICAgICAgICAgICAgIC8qcGFnaW5hw6fDo28gdG9wbyBkaXJlaXRvKi8NCiAgICAgICAgICAgICAgICAgICQoIiNuYXYtcGFnIikuYXBwZW5kKA0KICAgICAgICAgICAgICAgICAgICAnPGxpIHRpdGxlPSInICsNCiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRpdHVsbyArDQogICAgICAgICAgICAgICAgICAgICAgJyIgY2xhc3M9IicgKw0KICAgICAgICAgICAgICAgICAgICAgIChpbmRleCA9PSBjdXJQYWcgPyAiYWN0aXZlIiA6ICIiKSArDQogICAgICAgICAgICAgICAgICAgICAgJyI+JyArDQogICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaW5kZXggKyAxKSArDQogICAgICAgICAgICAgICAgICAgICAgIjwvbGk+Ig0KICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgIC8qIGdydXBvIGRlIHBhZ2luYXMgZSB0aXR1bG8gKi8NCiAgICAgICAgICAgICAgICAgICQoIiNsaXN0YVBhZ2luYXMiKS5hcHBlbmQoDQogICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJwYWdlcy1ncm91cCI+PGg1PicgKw0KICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudGl0dWxvICsNCiAgICAgICAgICAgICAgICAgICAgICAnPC9oNT48dWwgY2xhc3M9Imxpc3RhSXRlbXMiPjwvdWw+PC9kaXY+Jw0KICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgIC8qIGNhcnJlZ2EgYSBpbWFnZW0gZGVzdGEgcGFnaW5hICovDQogICAgICAgICAgICAgICAgICBpZiAoaVBhZyA9PSBpbmRleCkgew0KICAgICAgICAgICAgICAgICAgICBsb2FkSW1hZ2UoKTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIC8qIGxvb3AgZGUgaXRlbnMgKi8NCiAgICAgICAgICAgICAgICAgIGNQYWcgPSBpbmRleDsNCg0KICAgICAgICAgICAgICAgICAgaWYgKGlQYWcgPT0gY1BhZyAmJiBpRmF0ID09IGNGYXQpIHsNCiAgICAgICAgICAgICAgICAgICAgJCgiI2FyZWEtYm9sYXMtcmVjdHMgLmJvbGFzIGEiKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgZWxlbWVudC5pdGVucy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkgew0KICAgICAgICAgICAgICAgICAgICAvL2FkZCBpdGVtDQogICAgICAgICAgICAgICAgICAgICQoIiNsaXN0YVBhZ2luYXMgLnBhZ2VzLWdyb3VwIikNCiAgICAgICAgICAgICAgICAgICAgICAuZXEoY1BhZykNCiAgICAgICAgICAgICAgICAgICAgICAuZmluZCgiLmxpc3RhSXRlbXMiKQ0KICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoIjxsaT4iICsgZWxlbWVudC50aXR1bG8gKyAiPC9saT4iKTsNCiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGNsaWNrIHRvIHRoYXQgaXRlbQ0KDQogICAgICAgICAgICAgICAgICAgICQoIiNsaXN0YVBhZ2luYXMgLnBhZ2VzLWdyb3VwIikNCiAgICAgICAgICAgICAgICAgICAgICAuZXEoY1BhZykNCiAgICAgICAgICAgICAgICAgICAgICAuZmluZCgiLmxpc3RhSXRlbXMgbGk6bGFzdC1jaGlsZCIpDQogICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vJCh0aGlzKS5jbG9zZXN0KCcucGFnZXMtZ3JvdXAnKS5maW5kKCdoNSknLmNsaWNrKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vJCh0aGlzKS5jbG9zZXN0KCcucGFnZXMtZ3JvdXAnKS5maW5kKCdoNScpLmNsaWNrKCkNCg0KICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJBY3RpdmVzKCIubGlzdGFJdGVtcyBsaSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygiYWN0aXZlIik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1clBhZyA9ICQodGhpcykuY2xvc2VzdCgiLnBhZ2VzLWdyb3VwIikuaW5kZXgoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdldE5ld1BhZ2UoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRJbWFnZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhbG9vbigkKHRoaXMpLmluZGV4KCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVNZW51UGFyZW50SXRlbShjdXJQYWcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2V0TmF2UG9zaXRpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBhZGQgYmFsbHMgYXBlbmFzIMOgcyBmYXR1cmEgZSBwYWdpbmEgYXR1YWwNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlQYWcgPT0gY1BhZyAmJiBpRmF0ID09IGNGYXQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAvL2RhdGEtYXJlYVByb3BzPSInKyBlbGVtZW50LmFyZWFQcm9wcyArJyINCiAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RlbGF5ID0gTWF0aC5yYW5kb20oKSAqIDI7DQogICAgICAgICAgICAgICAgICAgICAgJCgiI2FyZWEtYm9sYXMtcmVjdHMgLmJvbGFzIikuYXBwZW5kKA0KICAgICAgICAgICAgICAgICAgICAgICAgJzxhIHRpdGxlPSInICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50aXR1bG8gKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBzdHlsZT0ibGVmdDonICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcmVhUHJvcHMueEJvbGEgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAiJTt0b3A6IiArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXJlYVByb3BzLnlCb2xhICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiU7dHJhbnNpdGlvbi1kZWxheToiICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2RlbGF5LnRvUHJlY2lzaW9uKDMpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3M7Ij4rPC9hPicNCiAgICAgICAgICAgICAgICAgICAgICApOyAvLw0KICAgICAgICAgICAgICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5ib2xhcyBhOmxhc3QtY2hpbGQiKS5jbGljaygNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VySXRlbSA9ICQodGhpcykuaW5kZXgoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhbG9vbigkKHRoaXMpLmluZGV4KCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZU1lbnVJdGVtKCQodGhpcykuaW5kZXgoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlTWVudVBhcmVudEl0ZW0oY3VyUGFnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TmF2UG9zaXRpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgLyogQ0xJQ0sgTk8gTk9NRS9Qw4BHSU5BIERFIENBREEgRkFUVVJBIE1PU1RSQSBBIEhPTUUgREEgUEFHSU5BIENPTSBCT0xBUyovDQogICAgICAgICAgICAgICAgICAkKCIjbGlzdGFQYWdpbmFzIC5wYWdlcy1ncm91cCIpDQogICAgICAgICAgICAgICAgICAgIC5lcShpbmRleCkNCiAgICAgICAgICAgICAgICAgICAgLmZpbmQoImg1IikNCiAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICBjdXJQYWcgPSAkKHRoaXMpLmNsb3Nlc3QoIi5wYWdlcy1ncm91cCIpLmluZGV4KCk7DQogICAgICAgICAgICAgICAgICAgICAgZ2V0TmV3UGFnZSgpOw0KICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRhYnMoY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgbnVsbCwgdHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVNZW51UGFyZW50SXRlbShjdXJQYWcpOw0KICAgICAgICAgICAgICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAkKCIjbmF2LXBhZyBsaSIpDQogICAgICAgICAgICAgICAgICAgIC5lcShpbmRleCkNCiAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKDIpDQogICAgICAgICAgICAgICAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKCJhY3RpdmUiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY3VyUGFnID0gJCh0aGlzKS5pbmRleCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY3VySXRlbSA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGN1clBhZyk7DQogICAgICAgICAgICAgICAgICAgICAgICBnZXROZXdQYWdlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGN1clBhZyk7DQogICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVUYWJzKGN1clRhYiwgY3VyRmF0LCBjdXJQYWcsIG51bGwsIHRydWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgLy9hY3RpdmF0ZU1lbnVQYXJlbnRJdGVtKGN1clBhZyk7DQogICAgICAgICAgICAgICAgICAgICAgICBnZXROZXdQYWdlKCk7DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLyogYWRpY2lvbmEgZXZlbnRvIGNsaWNrIMOgcyB0YWJzIGFwZW5hcyB1bWEgdmV6Li4uICovDQogICAgICAgICAgICBpZiAoZmlyc3RpbWUpIHsNCiAgICAgICAgICAgICAgaWYgKG9wZW5JKSB7DQogICAgICAgICAgICAgICAgaWYgKGN1ckl0ZW0gPj0gMCkgew0KICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjdXJJdGVtKQ0KDQogICAgICAgICAgICAgICAgICAvL3NldFRpbWVvdXQoZnVuY3Rpb24oKXsgc2hvd0JhbG9vbihjdXJJdGVtKTsgfSwgMjAwMCk7DQogICAgICAgICAgICAgICAgICBzaG93QmFsb29uKGN1ckl0ZW0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICQodGFiaSkuY2xpY2soZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQoNCiAgICAgICAgICAgICAgICBpZiAoISQodGhpcykuaGFzQ2xhc3MoImFjdGl2ZSIpKSB7DQogICAgICAgICAgICAgICAgICBjdXJUYWIgPSAkKHRoaXMpLmNsb3Nlc3QoImxpIikuaW5kZXgoKTsNCiAgICAgICAgICAgICAgICAgIGN1ckZhdCA9IDA7DQogICAgICAgICAgICAgICAgICBjdXJQYWcgPSAwOw0KDQogICAgICAgICAgICAgICAgICBnZXROZXdQYWdlKCk7DQoNCiAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgidWwiKS5maW5kKCJsaSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICAgICAgICAgY3JlYXRlVGFicyhjdXJUYWIsIDAsIDAsIG51bGwsIHRydWUpOw0KICAgICAgICAgICAgICAgICAgLy9zY3JvbGxlVG9JdGVtKCcjVGFiaWZ5Jyk7DQoNCiAgICAgICAgICAgICAgICAgIC8qIFJFTU9WSURPIFBBUkEgTkFPIElSIFBBUkEgQkFJWE8gQSBQRURJRE8gREEgUklUQSBOT1ZBTUVOVEUgKi8NCiAgICAgICAgICAgICAgICAgIC8vc2Nyb2xsZVRvSXRlbSgnI2xpc3RhUGFnaW5hcycpOw0KDQogICAgICAgICAgICAgICAgICBnZXROZXdQYWdlKCk7DQoNCiAgICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5mYXR1cmFzLWluLXRhYnMgaDQiKS5yZW1vdmVDbGFzcygNCiAgICAgICAgICAgICAgICAgICAgImFjdGl2ZSINCiAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgLy9nZXROZXdQYWdlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQoNCiAgICAgICAgICBpZiAoZmlyc3RpbWUpIHsNCiAgICAgICAgICAgICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICBzZXROYXZQb3NpdGlvbigpOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICQoIi5mYXR1cmFzLWluLXRhYnMgaDQiKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgIC8vY29uc29sZS5sb2coImNsaWNrbyB1IikNCiAgICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoImFjdGl2ZSIpKSB7DQogICAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLnNlYy1oZWxwLmxpbmtzIikuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5mYXR1cmFzLWluLXRhYnMgaDQiKS5yZW1vdmVDbGFzcygNCiAgICAgICAgICAgICAgICAgICJhY3RpdmUiDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSAuc2VjLWhlbHAubGlua3MiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7DQogICAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLmZhdHVyYXMtaW4tdGFicyBoNCIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBzZXROYXZQb3NpdGlvbigpOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICQoIi5zZWMtaGVscC5saW5rcyBoMyIpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiY2xpY2tvdSIpDQogICAgICAgICAgICAgIGlmICgkKHRoaXMpLmNsb3Nlc3QoIi5saW5rcyIpLmhhc0NsYXNzKCJhY3RpdmUiKSkgew0KICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSAuZmF0dXJhcy1pbi10YWJzIGg0IikuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSAuZmF0dXJhcy1pbi10YWJzIGg0IikucmVtb3ZlQ2xhc3MoDQogICAgICAgICAgICAgICAgICAiYWN0aXZlIg0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgc2V0TmF2UG9zaXRpb24oKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIGZpcnN0aW1lID0gZmFsc2U7DQoNCiAgICAgICAgICAkKHdpbmRvdykub24oImhhc2hjaGFuZ2UiLCBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKA0KICAgICAgICAgICAgICAiIiwNCiAgICAgICAgICAgICAgZG9jdW1lbnQudGl0bGUsDQogICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZQ0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZy4uLg0KICAgICAgICAgIH0pOw0KDQogICAgICAgICAgZ2V0SXRSaWdodCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgc2V0TmF2UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgc2Nyb2xsZWQgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7DQoNCiAgICAgICAgICB0b3BNaW4gPQ0KICAgICAgICAgICAgJCgiI0NvbnRlbnRpZnkiKS5vZmZzZXQoKS50b3AgKw0KICAgICAgICAgICAgKCQoIiN2aWRlby1saW5rLWJveCIpLm91dGVySGVpZ2h0KHRydWUpICsgMjAgKyA3MCk7DQogICAgICAgICAgdG9wTWF4ID0NCiAgICAgICAgICAgICQoIiNDb250ZW50aWZ5Iikub2Zmc2V0KCkudG9wICsgJCgiI0NvbnRlbnRpZnkiKS5vdXRlckhlaWdodCh0cnVlKTsNCiAgICAgICAgICBuYXZIID0NCiAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscCIpLm91dGVySGVpZ2h0KHRydWUpICsNCiAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtbmF2Iikub3V0ZXJIZWlnaHQodHJ1ZSk7DQoNCiAgICAgICAgICBpZiAoc2Nyb2xsZWQgKyA4MCA8PSB0b3BNYXgpIHsNCiAgICAgICAgICAgIGlmIChzY3JvbGxlZCArIDgwICsgbmF2SCA+PSB0b3BNYXgpIHsNCiAgICAgICAgICAgICAgY29uc29sZS5sb2coInZhaSBwYXJhIGJhaXhvIik7DQoNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5yZW1vdmVBdHRyKCJzdHlsZSIpOw0KICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSIpDQogICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCJhZmZpeGVkIikNCiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoImFmZml4ZWQtdG9wIikNCiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoImFmZml4ZWQtYm90dG9tIik7DQogICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IikuY3NzKA0KICAgICAgICAgICAgICAgICJ0b3AiLA0KICAgICAgICAgICAgICAgICQoIiNjb2wtY29udC1yaWdodCIpLm91dGVySGVpZ2h0KHRydWUpIC0NCiAgICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51Iikub3V0ZXJIZWlnaHQodHJ1ZSkNCiAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsZWQgKyA4MCA+PSB0b3BNaW4pIHsNCiAgICAgICAgICAgICAgY29uc29sZS5sb2coInZhaSBmaXhhciIpOw0KDQogICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IikucmVtb3ZlQXR0cigic3R5bGUiKTsNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKQ0KICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygiYWZmaXhlZC1ib3R0b20iKQ0KICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygiYWZmaXhlZC10b3AiKQ0KICAgICAgICAgICAgICAgIC5hZGRDbGFzcygiYWZmaXhlZCIpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgY29uc29sZS5sb2coIm1hbnRlbSBzZSBubyB0b3BvIik7DQoNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5yZW1vdmVBdHRyKCJzdHlsZSIpOw0KICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSIpDQogICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCJhZmZpeGVkIikNCiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoImFmZml4ZWQtYm90dG9tIikNCiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoImFmZml4ZWQtdG9wIik7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIGNsZWFyQWN0aXZlcyA9IGZ1bmN0aW9uIChlbGVtKSB7DQogICAgICAgICAgJChlbGVtKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7DQogICAgICAgIH07DQoNCiAgICAgICAgYWN0aXZhdGVNZW51SXRlbSA9IGZ1bmN0aW9uIChpbmRleCkgew0KICAgICAgICAgIGNsZWFyQWN0aXZlcygiLmxpc3RhSXRlbXMgbGkiKTsNCg0KICAgICAgICAgICQoIiNsaXN0YVBhZ2luYXMgLnBhZ2VzLWdyb3VwIikNCiAgICAgICAgICAgIC5lcShjdXJQYWcpDQogICAgICAgICAgICAuZmluZCgiLmxpc3RhSXRlbXMgbGkiKQ0KICAgICAgICAgICAgLmVxKGluZGV4KQ0KICAgICAgICAgICAgLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgfTsNCiAgICAgICAgYWN0aXZhdGVNZW51UGFyZW50SXRlbSA9IGZ1bmN0aW9uIChpbmRleCkgew0KICAgICAgICAgIGNsZWFyQWN0aXZlcygiI2xpc3RhUGFnaW5hcyAucGFnZXMtZ3JvdXAgaDUiKTsNCiAgICAgICAgICAkKCIjbGlzdGFQYWdpbmFzIC5wYWdlcy1ncm91cCIpDQogICAgICAgICAgICAuZXEoaW5kZXgpDQogICAgICAgICAgICAuZmluZCgiaDUiKQ0KICAgICAgICAgICAgLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICBnZXRJdFJpZ2h0KCk7DQogICAgICAgIH07DQoNCiAgICAgICAgJCgiI2ltZy1mYXR1cmEsIC5jbG9zZWJhbGxvb24sICNyZWN0LWJvcmRlciwgLm1vZGFsLWZhdHVyYSIpLmNsaWNrKA0KICAgICAgICAgIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGJhbGxvb25Jc09wZW4gPSBmYWxzZTsNCiAgICAgICAgICAgIC8vY29uc29sZS5sb2coImNsb3NpbmciKQ0KICAgICAgICAgICAgY3JlYXRlVGFicyhjdXJUYWIsIGN1ckZhdCwgY3VyUGFnLCBjdXJJdGVtLCB0cnVlKTsNCiAgICAgICAgICAgIC8vaWYoJCh3aW5kb3cpLndpZHRoKCkgPCA3Njgpew0KDQogICAgICAgICAgICAvL3Njcm9sbCBwYXJhIG8gdG9wbyAtIHJpdGEgcGVkaXUgcGFyYSByZW1vdmVyDQogICAgICAgICAgICAvL3Njcm9sbGVUb0l0ZW0oJyNUYWJpZnknKTsNCg0KICAgICAgICAgICAgLy99DQoNCiAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5oaWRlKCk7DQogICAgICAgICAgICAkKCIjYXJlYS1ib2xhcy1yZWN0cyAuYm9sYXMiKS5zaG93KCk7DQogICAgICAgICAgICAkKCIjYXJlYS1ib2xhcy1yZWN0cyIpLnJlbW92ZUNsYXNzKCJib2xhc09uIik7DQogICAgICAgICAgICAkKCIuYXJlYS1jb250ZXVkbyIpLnJlbW92ZUNsYXNzKCJhZGQtbW9kYWwiKTsNCiAgICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5yZWN0YW5ndWxvIikuaGlkZSgpOw0KICAgICAgICAgICAgJCgiI2ltZy1mYXR1cmEiKS5jc3MoIm9wYWNpdHkiLCAxKTsNCiAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5yZW1vdmVDbGFzcygpOw0KDQogICAgICAgICAgICBjbGVhckFjdGl2ZXMoIi5saXN0YUl0ZW1zIGxpIik7DQogICAgICAgICAgICBhY3RpdmF0ZU1lbnVQYXJlbnRJdGVtKGN1clBhZyk7DQogICAgICAgICAgICBzZXROYXZQb3NpdGlvbigpOw0KICAgICAgICAgIH0NCiAgICAgICAgKTsNCg0KICAgICAgICBsb2FkSW1hZ2UgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgaW1nID0gdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaW1hZ2VtOw0KICAgICAgICAgIC8vJCgnI2ltZy1mYXR1cmEnKS5hdHRyKCdzcmMnLCBpbWcpOw0KDQogICAgICAgICAgLyoqLw0KICAgICAgICAgICQoIiNpbWctZmF0dXJhIikNCiAgICAgICAgICAgIC5vbigibG9hZCIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygibG9hZGNvbXBsZXRlIik7DQoNCiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgJCgiLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIikucmVtb3ZlQ2xhc3MoImlzLWxvYWRpbmciKTsNCiAgICAgICAgICAgICAgfSwgNTAwKTsNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAuYXR0cigic3JjIiwgaW1nKTsNCg0KICAgICAgICAgICQoIi5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSIpLnJlbW92ZUNsYXNzKCJpcy1sb2FkaW5nIik7DQoNCiAgICAgICAgICAkKCIjaW1nLWZhdHVyYSIpLmNzcygib3BhY2l0eSIsIDEpOw0KICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5yZW1vdmVDbGFzcygpOw0KICAgICAgICB9Ow0KDQogICAgICAgIGdldE5ld1BhZ2UgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmhpZGUoKTsNCiAgICAgICAgICAkKCIjYXJlYS1ib2xhcy1yZWN0cyAuYm9sYXMiKS5zaG93KCk7DQogICAgICAgICAgJCgiI2FyZWEtYm9sYXMtcmVjdHMiKS5yZW1vdmVDbGFzcygiYm9sYXNPbiIpOw0KICAgICAgICAgICQoIi5hcmVhLWNvbnRldWRvIikucmVtb3ZlQ2xhc3MoImFkZC1tb2RhbCIpOw0KICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5yZWN0YW5ndWxvIikuaGlkZSgpOw0KICAgICAgICAgIGxvYWRJbWFnZSgpOw0KICAgICAgICAgICQoIiNpbWctZmF0dXJhIikuY3NzKCJvcGFjaXR5IiwgMSk7DQogICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLnJlbW92ZUNsYXNzKCk7DQoNCiAgICAgICAgICAvL2NvbnNvbGUubG9nKCJDUklBUiBDTElDS1MgIikNCiAgICAgICAgICAkKCIuZmF0dXJhcy1pbi10YWJzIGg0IikuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiY2xpY2tvIHUiKQ0KICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoImFjdGl2ZSIpKSB7DQogICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLmZhdHVyYXMtaW4tdGFicyBoNCIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLmZhdHVyYXMtaW4tdGFicyBoNCIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgICAgfSk7DQogICAgICAgIH07DQoNCiAgICAgICAgc2hvd0JhbG9vbiA9IGZ1bmN0aW9uIChpbmRpY2UpIHsNCiAgICAgICAgICBiYWxsb29uSXNPcGVuID0gdHJ1ZTsNCg0KICAgICAgICAgIGN1cnJlbnRJdGVtID0gaW5kaWNlOw0KICAgICAgICAgIGN1ckl0ZW0gPSBjdXJyZW50SXRlbTsNCg0KICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5ib2xhcyIpLmhpZGUoKTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIHVsIikucmVtb3ZlKCk7DQogICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiBoNSIpLmh0bWwoDQogICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdLnRpdHVsb0JhbGFvDQogICAgICAgICAgKTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIC5kZXNjcmljYW8iKS5odG1sKA0KICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXS5kZXNjcmljYW8NCiAgICAgICAgICApOw0KDQogICAgICAgICAgLypwYWdpbmHDp8OjbyB0b3BvIGRpcmVpdG8qLw0KICAgICAgICAgICQoIiNuYXYtcGFnIGxpIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICQoIiNuYXYtcGFnIGxpIikuZXEoY3VyUGFnKS5hZGRDbGFzcygiYWN0aXZlIik7DQoNCiAgICAgICAgICAvLyR0eXBlID0gdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXS50eXBlOw0KDQogICAgICAgICAgJGxpbmtzID0NCiAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0ubGlua3M7DQoNCiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdURU1PUyBMSU5LUyA/ICcgKyAkbGlua3MubGVuZ3RoICsgIiAtICIgKyBjdXJGYXQgKyAiIC0gIiArIGN1clBhZyArICIgLSAiICsgaW5kaWNlKQ0KDQogICAgICAgICAgaWYgKCRsaW5rcy5sZW5ndGggIT0gMCkgew0KICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmFwcGVuZCgiPHVsPjwvdWw+Iik7DQoNCiAgICAgICAgICAgICRsaW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkgew0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGVsZW1lbnQudHlwZSArICIgJHR5cGUiKQ0KDQogICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gInZpZGVvIikgew0KICAgICAgICAgICAgICAgIGhzdHIgPQ0KICAgICAgICAgICAgICAgICAgIjxsaT48YSBocmVmPScjdmlkZW9fZmF0dXJhJyBjbGFzcz0ndHItbW9kYWwtdmlkZW9zJyBkYXRhLXc9JzEwMCUnIGRhdGEtaD0nMzUwJyBkYXRhLWJpbmQ9J2F0dHI6IHsgaHJlZjogJyN2aWRlb19mYXR1cmEsICdkYXRhLWlmcmFtZSc6ICRwYXJlbnQuZ2V0VG9waWNWaWRlb1VybCgkZGF0YSkgfSc+IiArDQogICAgICAgICAgICAgICAgICBlbGVtZW50LnRleHRvICsNCiAgICAgICAgICAgICAgICAgICI8L2E+PC9saT4iOw0KDQogICAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiB1bCIpLmFwcGVuZChoc3RyKTsNCg0KICAgICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24gdWwgbGk6bGFzdC1jaGlsZCBhIikuYXR0cigNCiAgICAgICAgICAgICAgICAgICJkYXRhLWlmcmFtZSIsDQogICAgICAgICAgICAgICAgICBlbGVtZW50LmhyZWYNCiAgICAgICAgICAgICAgICApOw0KDQogICAgICAgICAgICAgICAgaWYgKCQoIi50ci1tb2RhbC12aWRlb3MiKS5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICAgICAgICAkKCIudHItbW9kYWwtdmlkZW9zIikub2ZmKCJjbGljayIpOw0KICAgICAgICAgICAgICAgICAgbmV3IE92ZXJsYXlWaWRlb0FqdWRhKHsNCiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogJCgiLnRyLW1vZGFsLXZpZGVvcyIpLA0KICAgICAgICAgICAgICAgICAgICBjbF9tb2RhbDogIm1vZGFsIiwNCiAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vPGEgY2xhc3M9InRyLW1vZGFsLXZpZGVvcyIgaHJlZj0iI3ZpZGVvMSIgZGF0YS1pZnJhbWU9Imh0dHA6Ly9yZDMudmlkZW9zLnNhcG8ucHQvcGxheWh0bWw/ZmlsZT1odHRwOi8vcmQzLnZpZGVvcy5zYXBvLnB0L2tHak5UcnBPTE1ZcnpGeThDeVlaL21vdi8xJnF1YWxpdHk9c2QiIGRhdGEtdz0iMTAwJSIgZGF0YS1oPSIzNTAiPg0KICAgICAgICAgICAgICAgIC8vJCgnI2luZm8tYmFsbG9vbiB1bCcpLmFwcGVuZCgnPGxpPjxhIGNsYXNzPSJ0ci1tb2RhbC12aWRlb3MiIGhyZWY9IiN2aWRlbycgKyBpbmRleCArJyIgZGF0YS1pZnJhbWU9IicgKyBlbGVtZW50LmhyZWYgKyciIGRhdGEtdz0iMTAwJSIgZGF0YS1oPSIzNTAiPicrIGVsZW1lbnQudGV4dG8gKyc8L2E+PC9saT4nKTsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIHVsIikuYXBwZW5kKA0KICAgICAgICAgICAgICAgICAgJzxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJyArDQogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaHJlZiArDQogICAgICAgICAgICAgICAgICAgICciPicgKw0KICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRleHRvICsNCiAgICAgICAgICAgICAgICAgICAgIjwvYT48L2xpPiINCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgLy8kKCcjaW5mby1iYWxsb29uIHVsJykuYXBwZW5kKCc8bGk+PGEgaHJlZj0iJysgZWxlbWVudC5ocmVmICsnIj4nKyBlbGVtZW50LnRleHRvICsnPC9hPjwvbGk+Jyk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICBwb3NpdGlvbmF0ZUJhbGxvb24oY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgY3VycmVudEl0ZW0pOw0KDQogICAgICAgICAgLyoNCiAgICAgICAgICAgIHZhciBpYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmZvLWJhbGxvb24nKTsNCiAgICAgICAgICB2YXIgb2Zmc2V0ID0ge3k6MH07DQogICAgICAgICAgd2hpbGUgKGliKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIG9mZnNldC55ICs9IGliLm9mZnNldFRvcDsNCiAgICAgICAgICAgIGliID0gaWIub2Zmc2V0UGFyZW50Ow0KICAgICAgICAgIH0NCg0KICAgICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIG9mZnNldC55IC09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmJvZHkgJiYgKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBvZmZzZXQueSAtPSBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBpZiAod2luZG93LnBhZ2VZT2Zmc2V0KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIG9mZnNldC55IC09IHdpbmRvdy5wYWdlWU9mZnNldDsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvL2NvbnNvbGUubG9nKG9mZnNldC55ICsiIGNlbmFzIik7DQogICAgICAgICAgKi8NCg0KICAgICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDc2OCkgew0KICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuaGVpZ2h0KCkgKyAkKCIjcmVjdC1ib3JkZXIiKS5oZWlnaHQoKSA+PQ0KICAgICAgICAgICAgICAkKHdpbmRvdykuaGVpZ2h0KCkgKiAwLjcNCiAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICBzY3JvbGxlVG9JdGVtKCIjaW5mby1iYWxsb29uIik7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBzY3JvbGxlVG9JdGVtKCIjcmVjdC1ib3JkZXIiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgeUluZm8gPSAkKCIjaW5mby1iYWxsb29uIikub2Zmc2V0KCkudG9wOw0KICAgICAgICAgICAgeVJlYyA9ICQoIiNyZWN0LWJvcmRlciIpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgICAgIC8vY29uc29sZS5sb2coeUluZm8gKyAiIC0gIiArIHlSZWMpDQoNCiAgICAgICAgICAgIGlmICh5SW5mbyA8IHlSZWMpIHsNCiAgICAgICAgICAgICAgc2Nyb2xsZVRvSXRlbSgiI2luZm8tYmFsbG9vbiIpOyAvLycjaW1nLWZhdHVyYScpOycjcmVjdC1ib3JkZXInKQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgc2Nyb2xsZVRvSXRlbSgiI3JlY3QtYm9yZGVyIik7IC8vJyNpbWctZmF0dXJhJyk7JyNyZWN0LWJvcmRlcicpDQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIHZhciBjdXJUYWIgPSAwOw0KICAgICAgICB2YXIgY3VyRmF0ID0gMDsgLy92YWkgc2VyIHNlbXByZSAwIHBvaXMgYXBlbmFzIGjDoSB1bWEgZmF0dXJhIHBvciBUYWINCiAgICAgICAgdmFyIGN1clBhZyA9IDA7DQoNCiAgICAgICAgdmFyIGN1ckl0ZW0gPSBudWxsOw0KICAgICAgICB2YXIgc2Nyb2xsVG9JbWFnOw0KDQogICAgICAgIHZhciBmbG9hdGluZ0lzT24gPSBmYWxzZTsNCiAgICAgICAgdmFyIG9wZW5UID0gZmFsc2U7DQogICAgICAgIHZhciBvcGVuRiA9IGZhbHNlOw0KICAgICAgICB2YXIgb3BlblAgPSBmYWxzZTsNCiAgICAgICAgdmFyIG9wZW5JID0gZmFsc2U7DQogICAgICAgIHZhciBiYWxsb29uSXNPcGVuID0gZmFsc2U7DQogICAgICAgIHZhciBxc3RyOw0KICAgICAgICB2YXIgcXVlcmllcyA9IHt9Ow0KDQogICAgICAgIHBvc2l0aW9uYXRlQmFsbG9vbiA9IGZ1bmN0aW9uIChjdXJUYWIsIGN1ckZhdCwgY3VyUGFnLCBpbmRpY2UpIHsNCiAgICAgICAgICAvKiBTSE9XIFJFQ1RBTkdVTE8gKi8NCiAgICAgICAgICAvL3hCb2xhLCB5Qm9sYSwgeFJlY3QseVJlY3Qsd1JlY3QsaFJlY3QsIHh5UG9wDQoNCiAgICAgICAgICB0b3BlID0NCiAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0uYXJlYVByb3BzDQogICAgICAgICAgICAgIC55UmVjdCArICIlIjsNCiAgICAgICAgICBsZWZ0ZSA9DQogICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdLmFyZWFQcm9wcw0KICAgICAgICAgICAgICAueFJlY3QgKyAiJSI7DQogICAgICAgICAgd2lkdGhlID0NCiAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0uYXJlYVByb3BzDQogICAgICAgICAgICAgIC53UmVjdCArICIlIjsNCiAgICAgICAgICBoZWlnaHRlID0NCiAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0uYXJlYVByb3BzDQogICAgICAgICAgICAgIC5oUmVjdCArICIlIjsNCg0KICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5yZW1vdmVBdHRyKCJzdHlsZSIpOw0KICAgICAgICAgIHZhciB0cmFuc2xhdGVZLCB0cmFuc2xhdGVYOw0KICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5yZW1vdmVDbGFzcygibW9iaWxlIik7DQoNCiAgICAgICAgICBzd2l0Y2ggKA0KICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXS5hcmVhUHJvcHMNCiAgICAgICAgICAgICAgLnhQb3ANCiAgICAgICAgICApIHsNCiAgICAgICAgICAgIGNhc2UgImxlZnQiOg0KICAgICAgICAgICAgICBsZSA9DQogICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy54UmVjdDsNCiAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgICAgbGVmdDogbGUgKyAiJSIsDQogICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwNCiAgICAgICAgICAgICAgICAibWFyZ2luLWxlZnQiOiAwLA0KICAgICAgICAgICAgICAgICJtYXJnaW4tcmlnaHQiOiAiMjJweCIsDQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB0cmFuc2xhdGVYID0gIjAiOw0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdsJykNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICJyaWdodCI6DQogICAgICAgICAgICAgIChyaSA9DQogICAgICAgICAgICAgICAgMTAwIC0NCiAgICAgICAgICAgICAgICAodGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy54UmVjdCArDQogICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMud1JlY3QpKSwNCiAgICAgICAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuY3NzKHsNCiAgICAgICAgICAgICAgICAgIGxlZnQ6ICJhdXRvIiwNCiAgICAgICAgICAgICAgICAgIHJpZ2h0OiByaSArICIlIiwNCiAgICAgICAgICAgICAgICAgICJtYXJnaW4tbGVmdCI6ICIyMnB4IiwNCiAgICAgICAgICAgICAgICAgICJtYXJnaW4tcmlnaHQiOiAwLA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB0cmFuc2xhdGVYID0gIjAiOw0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdyJykNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICJjZW50ZXIiOg0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgbGUgPQ0KICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMueFJlY3QgKw0KICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMud1JlY3QgLw0KICAgICAgICAgICAgICAgICAgMjsNCiAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgICAgbGVmdDogbGUgKyAiJSIsDQogICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwNCiAgICAgICAgICAgICAgICAibWFyZ2luLWxlZnQiOiAwLA0KICAgICAgICAgICAgICAgICJtYXJnaW4tcmlnaHQiOiAwLA0KICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICB0cmFuc2xhdGVYID0gIi01MCUiOw0KDQogICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2MnKQ0KICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICBzd2l0Y2ggKA0KICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXS5hcmVhUHJvcHMNCiAgICAgICAgICAgICAgLnlQb3ANCiAgICAgICAgICApIHsNCiAgICAgICAgICAgIGNhc2UgInRvcCI6DQogICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3Moew0KICAgICAgICAgICAgICAgIHRvcDogImF1dG8iLA0KICAgICAgICAgICAgICAgIGJvdHRvbTogImNhbGMoIiArICIxMDAlIiArICIgLSAiICsgdG9wZSArICIpIiwNCiAgICAgICAgICAgICAgICBoZWlnaHQ6ICJhdXRvIiwNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5hZGRDbGFzcygiYm90dG9tLXNldGEiKTsNCg0KICAgICAgICAgICAgICB0cmFuc2xhdGVZID0gIjAiOw0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd0JykNCiAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgImJvdHRvbSI6DQogICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3Moew0KICAgICAgICAgICAgICAgIHRvcDoNCiAgICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy55UmVjdCArDQogICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMuaFJlY3QgKw0KICAgICAgICAgICAgICAgICAgIiUiLA0KICAgICAgICAgICAgICAgIGJvdHRvbTogImF1dG8iLA0KICAgICAgICAgICAgICAgICJtYXJnaW4tdG9wIjogIjIycHgiLA0KICAgICAgICAgICAgICAgIGhlaWdodDogImF1dG8iLA0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnYicpDQogICAgICAgICAgICAgIHRyYW5zbGF0ZVkgPSAiMCI7DQogICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlICJtaWRkbGUiOg0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMueFBvcCA9PSAibGVmdCINCiAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgICAgICBsZWZ0OiAiYXV0byIsDQogICAgICAgICAgICAgICAgICByaWdodDoNCiAgICAgICAgICAgICAgICAgICAgMTAwIC0NCiAgICAgICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMueFJlY3QgKw0KICAgICAgICAgICAgICAgICAgICAiJSIsDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIH0gZWxzZSBpZiAoDQogICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy54UG9wID09ICJyaWdodCINCiAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiYSIpDQogICAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgICAgICByaWdodDogImF1dG8iLA0KICAgICAgICAgICAgICAgICAgbGVmdDoNCiAgICAgICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMueFJlY3QgKw0KICAgICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy53UmVjdCArDQogICAgICAgICAgICAgICAgICAgICIlIiwNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3Moew0KICAgICAgICAgICAgICAgIHRvcDoNCiAgICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy55UmVjdCArDQogICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMuaFJlY3QgLw0KICAgICAgICAgICAgICAgICAgICAyICsNCiAgICAgICAgICAgICAgICAgICIlIiwNCiAgICAgICAgICAgICAgICBib3R0b206ICJhdXRvIiwNCiAgICAgICAgICAgICAgICB3aWR0aDogIjUwJSIsDQogICAgICAgICAgICAgICAgaGVpZ2h0OiAiYXV0byIsDQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB0cmFuc2xhdGVZID0gIi01MCUiOw0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdtJykNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgdHJhbnNsYXRlID0NCiAgICAgICAgICAgICJ0cmFuc2xhdGVZKCIgKyB0cmFuc2xhdGVZICsgIikgdHJhbnNsYXRlWCgiICsgdHJhbnNsYXRlWCArICIpIjsNCg0KICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3MoeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSB9KTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikucmVtb3ZlQ2xhc3MoKTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuYWRkQ2xhc3MoDQogICAgICAgICAgICBTdHJpbmcoDQogICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0uYXJlYVByb3BzDQogICAgICAgICAgICAgICAgLnlQb3AgKw0KICAgICAgICAgICAgICAgICJfIiArDQogICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy54UG9wDQogICAgICAgICAgICApDQogICAgICAgICAgKTsNCg0KICAgICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDc2OCkgew0KICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgIHRvcDoNCiAgICAgICAgICAgICAgICAiY2FsYygiICsNCiAgICAgICAgICAgICAgICAodGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy55UmVjdCArDQogICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMuaFJlY3QpICsNCiAgICAgICAgICAgICAgICAiJSArIDIycHgpIiwNCiAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIsDQogICAgICAgICAgICAgICJtYXJnaW4tdG9wIjogIjIycHgiLA0KICAgICAgICAgICAgICBoZWlnaHQ6ICJhdXRvIiwNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgICQoIiNpbWctZmF0dXJhIikuY3NzKCJvcGFjaXR5IiwgMC4yKTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuc2hvdygpOw0KICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIikuYWRkQ2xhc3MoImJvbGFzT24iKTsNCiAgICAgICAgICAkKCIuYXJlYS1jb250ZXVkbyIpLmFkZENsYXNzKCJhZGQtbW9kYWwiKTsNCiAgICAgICAgICAkKCIjYXJlYS1ib2xhcy1yZWN0cyAucmVjdGFuZ3VsbyIpLnNob3coKTsNCg0KICAgICAgICAgIHJhdGlvID0gJCgiI2ltZy1mYXR1cmEiKS5oZWlnaHQoKSAvICQoIiNhcmVhLWJvbGFzLXJlY3RzIikuaGVpZ2h0KCk7DQoNCiAgICAgICAgICByYXRpbyA9PSAwID8gKHJhdGlvID0gMSkgOiAocmF0aW8gPSByYXRpbyk7DQoNCiAgICAgICAgICB2YXIgc3RyVG9wID0NCiAgICAgICAgICAgICJjYWxjKCIgKyB0b3BlLnRvU3RyaW5nKCkgKyAiICogIiArIHJhdGlvLnRvU3RyaW5nKCkgKyAiKSI7DQogICAgICAgICAgdmFyIHN0cmhlaSA9DQogICAgICAgICAgICAiY2FsYygiICsgaGVpZ2h0ZS50b1N0cmluZygpICsgIiAqICIgKyByYXRpby50b1N0cmluZygpICsgIikiOw0KDQogICAgICAgICAgLy9jb25zb2xlLmxvZyggICAiYm9sYXMgOiAiICsgJCgnI2FyZWEtYm9sYXMtcmVjdHMnKS5oZWlnaHQoKSArICIgfCByYXRpbyA6ICIgKyByYXRpby50b1N0cmluZygpICsgICIgfCBpbWFnZW0gOiAiICsgJCgnI2ltZy1mYXR1cmEnKS5oZWlnaHQoKSArICIgLSAiICsgc3RyVG9wKQ0KICAgICAgICAgIC8vY29uc29sZS5sb2coc3RyVG9wKTsNCg0KICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5yZWN0YW5ndWxvIikuY3NzKHsNCiAgICAgICAgICAgIHRvcDogc3RyVG9wLA0KICAgICAgICAgICAgbGVmdDogbGVmdGUsDQogICAgICAgICAgICB3aWR0aDogd2lkdGhlLA0KICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRlLA0KICAgICAgICAgIH0pOw0KICAgICAgICB9Ow0KDQogICAgICAgICQoIi5yaWdodC1idCIpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICBjdXJQYWcgPCAkKCIjbmF2LXBhZyBsaSIpLmxlbmd0aCAtIDEgPyAoY3VyUGFnICs9IDEpIDogKGN1clBhZyA9IDApOw0KDQogICAgICAgICAgY3VySXRlbSA9IDA7DQogICAgICAgICAgLy9jb25zb2xlLmxvZyhjdXJQYWcpOw0KICAgICAgICAgIGdldE5ld1BhZ2UoKTsNCiAgICAgICAgICAvL2NvbnNvbGUubG9nKGN1clBhZyk7DQogICAgICAgICAgY3JlYXRlVGFicyhjdXJUYWIsIGN1ckZhdCwgY3VyUGFnLCBudWxsLCB0cnVlKTsNCg0KICAgICAgICAgIGFjdGl2YXRlTWVudVBhcmVudEl0ZW0oY3VyUGFnKTsNCiAgICAgICAgICBnZXROZXdQYWdlKCk7DQoNCiAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSAuc2VjLWhlbHAubGlua3MiKS5hZGRDbGFzcygiYWN0aXZlIik7DQogICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLmZhdHVyYXMtaW4tdGFicyBoNCIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICBzY3JvbGxlVG9JdGVtKCIjVGFiaWZ5Iik7DQogICAgICAgICAgc2V0TmF2UG9zaXRpb24oKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgJCgiLmxlZnQtYnQiKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAgICAgY3VyUGFnID4gMCA/IChjdXJQYWcgLT0gMSkgOiAoY3VyUGFnID0gJCgiI25hdi1wYWcgbGkiKS5sZW5ndGggLSAxKTsNCg0KICAgICAgICAgIGN1ckl0ZW0gPSAwOw0KICAgICAgICAgIC8vY29uc29sZS5sb2coY3VyUGFnKTsNCiAgICAgICAgICBnZXROZXdQYWdlKCk7DQogICAgICAgICAgLy9jb25zb2xlLmxvZyhjdXJQYWcpOw0KICAgICAgICAgIGNyZWF0ZVRhYnMoY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgbnVsbCwgdHJ1ZSk7DQoNCiAgICAgICAgICBhY3RpdmF0ZU1lbnVQYXJlbnRJdGVtKGN1clBhZyk7DQogICAgICAgICAgZ2V0TmV3UGFnZSgpOw0KDQogICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLnNlYy1oZWxwLmxpbmtzIikuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5mYXR1cmFzLWluLXRhYnMgaDQiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7DQogICAgICAgICAgc2Nyb2xsZVRvSXRlbSgiI1RhYmlmeSIpOw0KICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHNjcm9sbGVUb0l0ZW0gPSBmdW5jdGlvbiAoaVRlbSkgew0KICAgICAgICAgICRlbGVtID0gaVRlbTsNCiAgICAgICAgICAvL2lmKHNjcm9sbFRvSW1hZyl7DQogICAgICAgICAgJCgiaHRtbCwgYm9keSIpLmFuaW1hdGUoDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHNjcm9sbFRvcDogJCgkZWxlbSkub2Zmc2V0KCkudG9wIC0gMjAgLSA1MCAtIDMwLA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIDEwMDANCiAgICAgICAgICApOw0KICAgICAgICAgIC8vfQ0KICAgICAgICAgIC8vY29uc29sZS5sb2coJCggJGVsZW0gKS5vZmZzZXQoKS50b3AgLSAyMCAtIDUwICsgIiBzY3JvbGwgWSIpDQogICAgICAgIH07DQoNCiAgICAgICAgZ2V0SXRSaWdodCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICB2YXIgdGFyZ2V0Ow0KICAgICAgICAgIC8vY29uc29sZS5sb2coImdldCBpdCByaWdodCIpDQoNCiAgICAgICAgICAvLyQoIiNuYXYtZmF0dXJhcyIpLnJlbW92ZUNsYXNzKCdhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tJykucmVtb3ZlRGF0YSgnYnMuYWZmaXgnKQ0KDQogICAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpID49IDc2OCkgew0KICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiYWRkaW5nIik7DQogICAgICAgICAgICAvL3Njcm9sbFRvSW1hZyA9IGZhbHNlOw0KICAgICAgICAgICAgc2Nyb2xsVG9JbWFnID0gdHJ1ZTsNCiAgICAgICAgICAgIHRhcmdldCA9ICQoIiNyaWdodC1zaWRlIik7DQogICAgICAgICAgICAkKCIjY29sLWNvbnQtcmlnaHQiKS5hcHBlbmRUbyh0YXJnZXQpOw0KDQogICAgICAgICAgICAvLyAkKCIjbmF2LWZhdHVyYXMiKS5hZmZpeCh7b2Zmc2V0OiB7dG9wOiAkKCIjbmF2LWZhdHVyYXMiKS5vZmZzZXQoKS50b3AgfSB9KTsNCg0KICAgICAgICAgICAgaWYgKGZsb2F0aW5nSXNPbikgew0KICAgICAgICAgICAgICAvLy8vY29uc29sZS5sb2coImRvIG5vdGhpbmciKQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiZG8gaXQiKQ0KDQogICAgICAgICAgICAgIGZsb2F0aW5nSXNPbiA9IHRydWU7DQogICAgICAgICAgICAvKg0KICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5hZmZpeCh7DQoNCiAgICAgICAgICAgICAgICBvZmZzZXQ6IHsNCiAgICAgICAgICAgICAgICAgIHRvcDogJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5vZmZzZXQoKS50b3AsDQogICAgICAgICAgICAgICAgICBib3R0b206ICQoIiNDb250ZW50aWZ5Iikub3V0ZXJIZWlnaHQodHJ1ZSkgLSAkKCIjd3JhcGZsb2F0aW5nbWVudSIpLmhlaWdodCgpIC8vKCQoIiNDb250ZW50aWZ5Iikub2Zmc2V0KCkudG9wICsgJCgiI0NvbnRlbnRpZnkiKS5oZWlnaHQoKSkgLSAkKCIjd3JhcGZsb2F0aW5nbWVudSIpLm9mZnNldCgpLnRvcA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgLy9jb25zb2xlLmxvZygicmVtb3ZpbmciKTsNCg0KICAgICAgICAgICAgc2Nyb2xsVG9JbWFnID0gdHJ1ZTsNCiAgICAgICAgICAgIHRhcmdldCA9ICQoIiNsZWZ0LXNpZGUtZmF0LW1vYmlsZSIpOw0KICAgICAgICAgICAgJCgiI2NvbC1jb250LXJpZ2h0IikuYXBwZW5kVG8odGFyZ2V0KTsNCg0KICAgICAgICAgICAgLy8kKCIjbmF2LWZhdHVyYXMiKS5yZW1vdmVDbGFzcygnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbScpLnJlbW92ZURhdGEoJ2JzLmFmZml4JykNCg0KICAgICAgICAgICAgaWYgKGZsb2F0aW5nSXNPbikgew0KICAgICAgICAgICAgICBmbG9hdGluZ0lzT24gPSBmYWxzZTsNCiAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgJCh3aW5kb3cpLm9mZignLmFmZml4JykNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5yZW1vdmVDbGFzcygnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbScpLnJlbW92ZURhdGEoJ2JzLmFmZml4JykNCiAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3MoDQogICAgICAgICAgICAgICJ0b3AiLA0KICAgICAgICAgICAgICBwYXJzZUludCgkKCIjcmVjdC1ib3JkZXIiKS5jc3MoImhlaWdodCIpKSArDQogICAgICAgICAgICAgICAgcGFyc2VJbnQoJCgiI3JlY3QtYm9yZGVyIikuY3NzKCJ0b3AiKSkNCiAgICAgICAgICAgICk7DQogICAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuY3NzKCJtYXJnaW4tdG9wIiwgIjIycHghaW1wb3J0YW50Iik7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgaWYgKGN1ckl0ZW0gIT0gbnVsbCAmJiBiYWxsb29uSXNPcGVuKSB7DQogICAgICAgICAgICBwb3NpdGlvbmF0ZUJhbGxvb24oY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgY3VySXRlbSk7DQogICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgICQuZWFjaChkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2guc3Vic3RyKDEpLnNwbGl0KCImIiksIGZ1bmN0aW9uIChjLCBxKSB7DQogICAgICAgICAgdmFyIGkgPSBxLnNwbGl0KCI9Iik7DQoNCiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoDQogICAgICAgICAgICAiIiwNCiAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlLA0KICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lDQogICAgICAgICAgKTsNCg0KICAgICAgICAgIGlmIChpICE9ICIiKSB7DQogICAgICAgICAgICBxdWVyaWVzW2lbMF0udG9TdHJpbmcoKV0gPSBpWzFdLnRvU3RyaW5nKCk7DQoNCiAgICAgICAgICAgIGlmIChxdWVyaWVzLnQpIHsNCiAgICAgICAgICAgICAgb3BlblRhYiA9IHRydWU7DQogICAgICAgICAgICAgIGN1clRhYiA9IHF1ZXJpZXMudCAtIDE7DQogICAgICAgICAgICAgIG9wZW5UID0gdHJ1ZTsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHF1ZXJpZXMuZikgew0KICAgICAgICAgICAgICBvcGVuVGFiID0gdHJ1ZTsNCiAgICAgICAgICAgICAgY3VyRmF0ID0gcXVlcmllcy5mIC0gMTsNCiAgICAgICAgICAgICAgb3BlbkYgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHF1ZXJpZXMucCkgew0KICAgICAgICAgICAgICBvcGVuVGFiID0gdHJ1ZTsNCiAgICAgICAgICAgICAgY3VyUGFnID0gcXVlcmllcy5wIC0gMTsNCiAgICAgICAgICAgICAgb3BlblAgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHF1ZXJpZXMuaSkgew0KICAgICAgICAgICAgICBvcGVuVGFiID0gdHJ1ZTsNCiAgICAgICAgICAgICAgY3VySXRlbSA9IHF1ZXJpZXMuaSAtIDE7DQogICAgICAgICAgICAgIG9wZW5JID0gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICAvKiovDQogICAgICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24gKCkgew0KICAgICAgICAgIGdldEl0UmlnaHQoKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgJCh3aW5kb3cpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAvL2dldEl0UmlnaHQoKQ0KICAgICAgICAgIGNyZWF0ZVRhYnMoY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgY3VySXRlbSwgZmFsc2UpOw0KICAgICAgICAgIGdldEl0UmlnaHQoKTsNCiAgICAgICAgICAkKCJodG1sLCBib2R5IikuYW5pbWF0ZSgNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc2Nyb2xsVG9wOiA1LA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIDEwMDANCiAgICAgICAgICApOw0KICAgICAgICB9KTsNCiAgICAgIDwvc2NyaXB0Pg0KICAgIDwvc2VjdGlvbj4NCg0KICAgIDwhLS0gRklOQUwgRE8gQkxPQ08gREUgSFRNTCBMSVZSRSAtLT4NCiAgICA8IS0tIEZJTkFMIERPIEJMT0NPIERFIEhUTUwgTElWUkUgLS0+DQogICAgPCEtLSBGSU5BTCBETyBCTE9DTyBERSBIVE1MIExJVlJFIC0tPmQCBQ9kFgICAQ9kFgICAg9kFgICAQ9kFgICAw8WAh8BaBYCZg9kFgQCAw9kFgYCAQ8WAh8BaGQCAw8WAh8BaGQCBQ8WAh8BaGQCBA8PFgIeCUFjY2Vzc0tleQUBL2RkAgcPZBYCAgEPDxYCHwFoZGQCCw8PFgIeDElzRW50cmVwcmlzZWhkZAIND2QWAgICD2QWBAIFDxYCHwALKwQBZAINDxYCHwALKwQBZAI5D2QWAgIBD2QWAgIBDxYCHwALKwQBZGSfcMtDV2Lik5kfgTd/9+ZREXNvhA==">
  </div>
  <script type="text/javascript">
    //<![CDATA[
    var theForm = document.forms['aspnetForm'];
    if (!theForm) {
      theForm = document.aspnetForm;
    }

    function __doPostBack(eventTarget, eventArgument) {
      if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
      }
    }
    //]]>
  </script>
  <script src="/WebResource.axd?d=ax2ekkvf1XVLkysz55fI5L-bAsXumDyhgpwMs1MkDe_V4uzaPC363mvJZG18wUoc42DkM38fxD9Jjr-U11gzm4tV35A1&amp;t=637823365705833095" type="text/javascript"></script>
  <script type="text/javascript">
    //<![CDATA[
    var MSOWebPartPageFormName = 'aspnetForm';
    var g_presenceEnabled = true;
    var g_wsaEnabled = false;
    var g_correlationId = '54c8b3a0-580f-e01e-12fa-40f52e20e09e';
    var g_wsaQoSEnabled = false;
    var g_wsaQoSDataPoints = [];
    var g_wsaRUMEnabled = false;
    var g_wsaLCID = 2070;
    var g_wsaListTemplateId = 850;
    var g_wsaSiteTemplateId = 'CMSPUBLISHING#0';
    var _fV4UI = true;
    var _spPageContextInfo = {
      webServerRelativeUrl: "\u002fisites\u002fajuda-e-suporte",
      webAbsoluteUrl: "https:\u002f\u002fwww.meo.pt\u002fisites\u002fajuda-e-suporte",
      siteAbsoluteUrl: "https:\u002f\u002fwww.meo.pt",
      serverRequestPath: "\u002fisites\u002fajuda-e-suporte\u002fPaginas\u002ffatura-interativa.aspx",
      layoutsUrl: "_layouts\u002f15",
      webTitle: "Ajuda e Suporte",
      webTemplate: "39",
      tenantAppVersion: "3222075475",
      isAppWeb: false,
      Has2019Era: true,
      webLogoUrl: "\u002fSiteAssets\u002fsiteIcon16PRD.png",
      webLanguage: 2070,
      currentLanguage: 2070,
      currentUICultureName: "pt-PT",
      currentCultureName: "pt-PT",
      clientServerTimeDelta: new Date("2023-05-17T15:33:37.1722380Z") - new Date(),
      updateFormDigestPageLoaded: new Date("2023-05-17T15:33:37.1722380Z"),
      siteClientTag: "20139$$16.0.5361.1002",
      crossDomainPhotosEnabled: false,
      webUIVersion: 15,
      webPermMasks: {
        High: 16,
        Low: 196673
      },
      pageListId: "{a8317881-e08a-4755-9174-a0c5ca0e3c65}",
      pageItemId: 122,
      pagePersonalizationScope: 1,
      alertsEnabled: true,
      customMarkupInCalculatedFieldDisabled: true,
      siteServerRelativeUrl: "\u002f",
      allowSilverlightPrompt: 'True',
      isSiteAdmin: false
    };
    var L_Menu_BaseUrl = "/isites/ajuda-e-suporte";
    var L_Menu_LCID = "2070";
    var L_Menu_SiteTheme = "null";
    document.onreadystatechange = fnRemoveAllStatus;

    function fnRemoveAllStatus() {
      removeAllStatus(true)
    };
    Flighting.ExpFeatures = [480215056, 1880287568, 1561350208, 302071836, 3212816, 69472768, 4194310, -2113396707, 268502022, -872284160, 1049232, -2147421952, 65536, 65536, 2097472, 917504, -2147474174, 1372324107, 67108882, 0, 0, -2147483648,
      2097152, 0, 0, 32768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32768
    ];
    (function() {
      if (typeof(window.SP) == "undefined") window.SP = {};
      if (typeof(window.SP.YammerSwitch) == "undefined") window.SP.YammerSwitch = {};
      var ysObj = window.SP.YammerSwitch;
      ysObj.IsEnabled = false;
      ysObj.TargetYammerHostName = "www.yammer.com";
    })();
    var _spWebPartComponents = new Object(); //]]>
  </script>
  <script src="/_layouts/15/blank.js?rev=5eU34nte%2Fbx2pM%2FG%2BAh98A%3D%3DTAG0" type="text/javascript"></script>
  <script type="text/javascript">
    //<![CDATA[
    (function() {
      if (typeof(_spBodyOnLoadFunctions) === 'undefined' || _spBodyOnLoadFunctions === null) {
        return;
      }
      _spBodyOnLoadFunctions.push(function() {
        SP.SOD.executeFunc('core.js', 'FollowingDocument', function() {
          FollowingDocument();
        });
      });
    })();
    (function() {
      if (typeof(_spBodyOnLoadFunctions) === 'undefined' || _spBodyOnLoadFunctions === null) {
        return;
      }
      _spBodyOnLoadFunctions.push(function() {
        SP.SOD.executeFunc('core.js', 'FollowingCallout', function() {
          FollowingCallout();
        });
      });
    })();
    if (typeof(DeferWebFormInitCallback) == 'function') DeferWebFormInitCallback();

    function WebForm_OnSubmit() {
      UpdateFormDigest('\u002fisites\u002fajuda-e-suporte', 1440000);
      if (typeof(_spFormOnSubmitWrapper) != 'undefined') {
        return _spFormOnSubmitWrapper();
      } else {
        return true;
      };
      return true;
    }
    //]]>
  </script>
  <div class="aspNetHidden">
    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="FA3903EC">
  </div>
  <!-- ===== STARTER: SharePoint Reqs this for adding columns ===================================================== -->
  <script type="text/javascript">
    var submitHook = function() {
      return false;
    };
    theForm._spOldSubmit = theForm.submit;
    theForm.submit = function() {
      if (!submitHook()) {
        this._spOldSubmit();
      }
    };
  </script>
  <!-- ===== STARTER: Web Part Manager  ============================================================================================= -->
  <span id="DeltaSPWebPartManager">
  </span>
  <!-- ===== STARTER: ScriptManager ===================================================== -->
  <script type="text/javascript">
    //<![CDATA[
    Sys.WebForms.PageRequestManager._initialize('ctl00$ScriptManager', 'aspnetForm', [], [], [], 90, 'ctl00');
    //]]>
  </script>
  <!-- FIX 20180912 - missing pagestatus in SP16-->
  <!-- ===== STARTER: Main Scrolling Body Starts Here =============================================================================== -->
  <div id="s4-workspace" class="s4-nosetwidth">
    <div id="s4-bodyContainer">
      <noscript>
        <div class="alert alert-warning alert-top">
          <div class="noindex">Detetámos que tem o JavaScript desativado no seu browser. Para poder usar em pleno o site MEO é necessário ter o JavaScript ativado.</div>
        </div>
      </noscript>
      <!-- TOP - BARRA TRANSVERSAL - INICIO -->
      <div class="top-lnks" id="top-lnks">
        <!-- topbottomlinks.js injects here-->
      </div>
      <div class="main" id="topo">
        <!-- acessibilidade - removido 
                        <div class="noindex">
                            <ul class="list-unstyled anchor">
                                <li><a href="#anchor" accesskey="c" class="skip" tabindex="1">Saltar para os conteúdos [Alt+C]</a></li>
                            </ul>
                        </div>-->
        <header id="header" class="fixed" data-scroll-direction="down">
          <mainmenu id="main-menu-v5">
            <nav class="main-menu-v5 MEO">
              <section class="top-nav-bar" id="top-nav-bar">
                <section class="top-nav-bar-one"></section>
                <section class="top-nav-bar-two">
                  <ul class="menu-hyperlinks">
                    <li class="is-active">
                      <a class="" href="https://www.meo.pt" target="_self" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="Particulares" data-eventlink="https://www.meo.pt"><span class="hyperlinks-txt">Particulares</span></a></li>
                    <li class="">
                      <a class="" href="https://www.meo.pt/empresas" target="_self" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="Empresas" data-eventlink="https://www.meo.pt/empresas"><span class="hyperlinks-txt">Empresas</span></a>
                    </li>
                    <li class=""><a class="" href="https://www.sapo.pt/" target="_blank" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="SAPO" data-eventlink="https://www.sapo.pt/"><span class="hyperlinks-txt">SAPO</span></a></li>
                    <li class="">
                      <a class="" href="https://blueticket.meo.pt/?refer=MEO1090HP09df" target="_blank" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="MEO Bluecticket" data-eventlink="https://blueticket.meo.pt/?refer=MEO1090HP09df"><span class="hyperlinks-txt">MEO Blueticket</span></a>
                    </li>
                  </ul>
                </section>
                <section class="top-nav-bar-three">
                  <ul class="menu-hyperlinks">
                    <li class="">
                      <a class="cos-link" href="https://conteudos.meo.pt/meo/Documentos/Condicoes-Oferta-Servicos/Mod-C1001276.pdf" target="_blank" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="Condições de oferta dos serviços" data-eventlink="https://conteudos.meo.pt/meo/Documentos/Condicoes-Oferta-Servicos/Mod-C1001276.pdf"><span class="hyperlinks-txt">Condições de oferta dos serviços</span></a>
                    </li>
                    <li class=""><a class="" href="/ocorrencias" target="_blank" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="Ocorrências" data-eventlink="/ocorrencias"><span class="hyperlinks-txt">Ocorrências</span></a></li>
                  </ul>
                  <ul class="language-selector-toggle">
                    <li class=""><a class="" href="/en" target="_self"><span class="hyperlinks-txt">English</span></a></li>
                  </ul>
                </section>
              </section>
              <section class="nav-bar" id="nav-bar">
                <section class="nav-bar-one"><a href="/" class="logo"><img src="https://conteudos.meo.pt/Style%20Library/consumo/images/logo-meo.svg" alt="MEO" width="144" height="50" loading="lazy"></a></section>
                <section class="nav-bar-two">
                  <section class="main-nav">
                    <section class="level-1">
                      <ul class="level-1-entries">
                        <li class="level-1-entry  "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M1" data-eventtitle="Sente o 5G" data-eventlink="sente-5g"><span
                              class="level-1-entry-link-title">5G</span></button>
                          <section class="level-2">
                            <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">5G</span></div>
                            <ul class="level-2-entries">
                              <li class="level-2-entry  no-submenu">
                                <a href="/5g" class="level-2-entry-link icon-5g" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M1.1" data-eventtitle="Sente que é real" data-eventlink="/5g"><span class="level-2-entry-link-title">Sente que é real</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="https://loja.meo.pt/Equipamentos/Telemoveis/?_ga=2.123430863.538160453.1640547250-1499281708.1589105636#!filter=modalidadecompra_Pronto%20pagamento%24tecnologia_5G" class="level-2-entry-link icon-telemoveis" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M1.2" data-eventtitle="Smartphones 5G" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis/?_ga=2.123430863.538160453.1640547250-1499281708.1589105636#!filter=modalidadecompra_Pronto%20pagamento%24tecnologia_5G"><span class="level-2-entry-link-title">Smartphones 5G</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/5g#add-velocidade-anchor" class="level-2-entry-link icon-m-meo" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M1.3" data-eventtitle="Máxima velocidade" data-eventlink="/5g#add-velocidade-anchor"><span class="level-2-entry-link-title">Máxima velocidade</span></a>
                              </li>
                            </ul>
                          </section>
                        </li>
                        <li class="level-1-entry  "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2" data-eventtitle="Serviços" data-eventlink="/servicos"><span
                              class="level-1-entry-link-title">Serviços</span></button>
                          <section class="level-2">
                            <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Serviços</span></div>
                            <ul class="level-2-entries">
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-emcasa" data-eventregion="MEO_MENU" data-eventclick="M_M2.1" data-eventtitle="Para casa" data-eventlink="/servicos/casa"><span
                                    class="level-2-entry-link-title">Para casa</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Para casa</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/servicos/casa/fibra/pacotes-tv-net-voz" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.1" data-eventtitle="TV+Net+Voz" data-eventlink="/servicos/casa/fibra/pacotes-tv-net-voz"><span class="level-3-entry-link-title">TV+Net+Voz</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/servicos/casa/fibra/pacotes-com-telemovel" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.2" data-eventtitle="TV+Net+Voz+Móvel" data-eventlink="/servicos/casa/fibra/pacotes-com-telemovel"><span class="level-3-entry-link-title">TV+Net+Voz+Móvel</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/servicos/casa/alterar-servicos/mudanca-de-casa" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.3" data-eventtitle="Mudar de Casa" data-eventlink="/servicos/casa/alterar-servicos/mudanca-de-casa"><span class="level-3-entry-link-title">Mudar de Casa</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/servicos/casa/cobertura-fibra" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.4" data-eventtitle="Testar cobertura" data-eventlink="/servicos/casa/cobertura-fibra"><span class="level-3-entry-link-title">Testar cobertura</span></a>
                                    </li>
                                    <li class="level-3-entry  "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.1.5" data-eventtitle="Adicionar serviços" data-eventlink="/servicos/casa/alterar-servicos"><span
                                          class="level-3-entry-link-title">Adicionar serviços</span></button>
                                      <section class="level-4">
                                        <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Adicionar serviços</span></div>
                                        <ul class="level-4-entries">
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/formulario-mais-cartoes-pacote-com-telemovel" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.5.1" data-eventtitle="Adicionar cartões telemóvel" data-eventlink="/formulario-mais-cartoes-pacote-com-telemovel"><span class="level-4-entry-link-title">Adicionar cartões telemóvel</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/casa/alterar-servicos/mais-net-no-telemovel" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.5.2" data-eventtitle="Mais Net no telemóvel" data-eventlink="/servicos/casa/alterar-servicos/mais-net-no-telemovel"><span class="level-4-entry-link-title">Mais Net no telemóvel</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/casa/alterar-servicos/segunda-casa" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.5.3" data-eventtitle="Segunda casa" data-eventlink="/servicos/casa/alterar-servicos/segunda-casa"><span class="level-4-entry-link-title">Segunda casa</span></a>
                                          </li>
                                        </ul>
                                      </section>
                                    </li>
                                    <li class="level-3-entry  "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.1.6" data-eventtitle="Internet Fibra" data-eventlink="/servicos/casa/internet-fibra"><span
                                          class="level-3-entry-link-title">Internet Fibra</span></button>
                                      <section class="level-4">
                                        <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Internet Fibra</span></div>
                                        <ul class="level-4-entries">
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/casa/internet-fibra/meo-smart-wifi" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.6.1" data-eventtitle="MEO Smart WiFi" data-eventlink="/servicos/casa/internet-fibra/meo-smart-wifi"><span class="level-4-entry-link-title">MEO Smart WiFi</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/casa/internet-fibra/melhor-experiencia-net" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.6.2" data-eventtitle="Melhor experiência Net" data-eventlink="/servicos/casa/internet-fibra/melhor-experiencia-net"><span class="level-4-entry-link-title">Melhor experiência Net</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/speedtest" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.6.3" data-eventtitle="Testar velocidade" data-eventlink="/speedtest"><span class="level-4-entry-link-title">Testar velocidade</span></a>
                                          </li>
                                        </ul>
                                      </section>
                                    </li>
                                    <li class="level-3-entry  "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.1.7" data-eventtitle="Telefone fixo" data-eventlink="/servicos/casa/telefone-fixo"><span
                                          class="level-3-entry-link-title">Telefone fixo</span></button>
                                      <section class="level-4">
                                        <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Telefone fixo</span></div>
                                        <ul class="level-4-entries">
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/casa/telefone-fixo/servico-telefonico" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.7.1" data-eventtitle="Serviço telefónico" data-eventlink="/servicos/casa/telefone-fixo/servico-telefonico"><span class="level-4-entry-link-title">Serviço telefónico</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/casa/telefone-fixo/tarifarios" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.7.2" data-eventtitle="Tarifários" data-eventlink="/servicos/casa/telefone-fixo/tarifarios"><span class="level-4-entry-link-title">Tarifários</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/casa/telefone-fixo/cartoes-hello" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.7.3" data-eventtitle="Cartões Hello" data-eventlink="/servicos/casa/telefone-fixo/cartoes-hello"><span class="level-4-entry-link-title">Cartões Hello</span></a>
                                          </li>
                                        </ul>
                                      </section>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/servicos/casa/tarifa-social-internet" class="level-3-entry-link " target="_self" data-eventregion="EventTrackingCategoria" data-eventclick="M_M2.1.8" data-eventtitle="Tarifa Social Internet" data-eventlink="/servicos/casa/tarifa-social-internet"><span class="level-3-entry-link-title">Tarifa Social Internet</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-net-movel" data-eventregion="MEO_MENU" data-eventclick="M_M2.2" data-eventtitle="Móvel" data-eventlink="/servicos/movel"><span
                                    class="level-2-entry-link-title">Móvel</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Móvel</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1" data-eventtitle="Tarifários telemóvel"
                                        data-eventlink="/servicos/movel/tarifarios-telemovel"><span class="level-3-entry-link-title">Tarifários telemóvel</span></button>
                                      <section class="level-4">
                                        <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Tarifários telemóvel</span></div>
                                        <ul class="level-4-entries">
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/movel/tarifarios-telemovel/pos-pago/m-movel" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1.1" data-eventtitle="pós-pago telemóvel" data-eventlink="/servicos/movel/tarifarios-telemovel/pos-pago/m-movel"><span class="level-4-entry-link-title">Pós-pagos</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/movel/tarifarios-telemovel/pre-pagos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1.2" data-eventtitle="pré-pagos telemóvel" data-eventlink="/servicos/movel/tarifarios-telemovel/pre-pagos"><span class="level-4-entry-link-title">Pré-pagos</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/movel/tarifarios-telemovel/roaming" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1.3" data-eventtitle="Roaming" data-eventlink="/servicos/movel/tarifarios-telemovel/roaming"><span class="level-4-entry-link-title">Roaming</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/movel/tarifarios-telemovel/internacional/tarifa-base-internacional" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1.4" data-eventtitle="Internacional" data-eventlink="/servicos/movel/tarifarios-telemovel/internacional/tarifa-base-internacional"><span class="level-4-entry-link-title">Internacional</span></a>
                                          </li>
                                        </ul>
                                      </section>
                                    </li>
                                    <li class="level-3-entry  "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2" data-eventtitle="Mais net e serviços"
                                        data-eventlink="/servicos/movel/mais-net-servicos/adicionar-net-movel"><span class="level-3-entry-link-title">Mais net e serviços</span></button>
                                      <section class="level-4">
                                        <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Mais net e serviços</span></div>
                                        <ul class="level-4-entries">
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/movel/mais-net-servicos/apps-servicos/meo-net-segura" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2.1" data-eventtitle="Net Segura" data-eventlink="/servicos/movel/mais-net-servicos/apps-servicos/meo-net-segura"><span class="level-4-entry-link-title">Net Segura</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/movel/mais-net-servicos/adicionar-net-movel/pos-pagos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2.2" data-eventtitle="Adicionar Internet" data-eventlink="/servicos/movel/mais-net-servicos/adicionar-net-movel/pos-pagos"><span class="level-4-entry-link-title">Adicionar net telemóvel</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/movel/mais-net-servicos/apps-servicos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2.3" data-eventtitle="Apps e Serviços" data-eventlink="/servicos/movel/mais-net-servicos/apps-servicos"><span class="level-4-entry-link-title">Apps e Serviços</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="https://waitingring.meo.pt/" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2.4" data-eventtitle="Waiting Rings" data-eventlink="https://waitingring.meo.pt/"><span class="level-4-entry-link-title">Waiting Rings</span></a>
                                          </li>
                                        </ul>
                                      </section>
                                    </li>
                                    <li class="level-3-entry  "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.2.3" data-eventtitle="Net para PC/Tablet" data-eventlink="/servicos/movel/net-pc-router"><span
                                          class="level-3-entry-link-title">Net para PC/Tablet</span></button>
                                      <section class="level-4">
                                        <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Net para PC/Tablet</span></div>
                                        <ul class="level-4-entries">
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/movel/net-pc-router/pos-pagos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.3.1" data-eventtitle="pós-pagos net" data-eventlink="/servicos/movel/net-pc-router/pos-pagos"><span class="level-4-entry-link-title">Pós-pagos</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="/servicos/movel/net-pc-router/pre-pagos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.3.2" data-eventtitle="pré-pagos net" data-eventlink="/servicos/movel/net-pc-router/pre-pagos"><span class="level-4-entry-link-title">Pré-pagos</span></a>
                                          </li>
                                        </ul>
                                      </section>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/home" class="level-2-entry-link icon-meo-home" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.3" data-eventtitle="MEO Home" data-eventlink="/home"><span class="level-2-entry-link-title">MEO Home</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/servicos/smart-living" class="level-2-entry-link icon-smart-living" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.4" data-eventtitle="Smart Living" data-eventlink="/servicos/smart-living"><span class="level-2-entry-link-title">Smart Living</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/servicos/casa/casa-digital" class="level-2-entry-link icon-smarthome" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.5" data-eventtitle="Casa Digital" data-eventlink="/servicos/casa/casa-digital"><span class="level-2-entry-link-title">Casa Digital</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/energia" class="level-2-entry-link icon-energia" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.6" data-eventtitle="Eletricidade" data-eventlink="/energia"><span class="level-2-entry-link-title">Eletricidade</span></a>
                              </li>
                            </ul>
                          </section>
                        </li>
                        <li class="level-1-entry  "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M3" data-eventtitle="MEO Care" data-eventlink="\meocare"><span class="level-1-entry-link-title">MEO
                              Care</span></button>
                          <section class="level-2">
                            <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">MEO Care</span></div>
                            <ul class="level-2-entries">
                              <li class="level-2-entry  no-submenu">
                                <a href="/care" class="level-2-entry-link icon-meo-care" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.1" data-eventtitle="Conhecer MEO Care" data-eventlink="/care"><span class="level-2-entry-link-title">Conhecer MEO Care</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/care/saude" class="level-2-entry-link icon-meo-care-saude" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.2" data-eventtitle="Saúde" data-eventlink="/care/saude"><span class="level-2-entry-link-title">Saúde</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/care/animais" class="level-2-entry-link icon-meo-care-animais" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.3" data-eventtitle="Animais" data-eventlink="/care/animais"><span class="level-2-entry-link-title">Animais</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/care/casa" class="level-2-entry-link icon-meo-care-casa" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.4" data-eventtitle="Casa" data-eventlink="/care/casa"><span class="level-2-entry-link-title">Casa</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/care/seniores" class="level-2-entry-link icon-meo-care-seniores" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.5" data-eventtitle="Seniores" data-eventlink="/care/seniores"><span class="level-2-entry-link-title">Seniores</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/care/tecnologia" class="level-2-entry-link icon-meo-care-tecnologia" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.6" data-eventtitle="Tecnologia" data-eventlink="/care/tecnologia"><span class="level-2-entry-link-title">Tecnologia</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="/care#assistente-pessoal" class="level-2-entry-link icon-meo-care-assistente-pessoal" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.7" data-eventtitle="Assistente Pessoal" data-eventlink="/care#assistente-pessoal"><span class="level-2-entry-link-title">Assistente Pessoal</span></a>
                              </li>
                            </ul>
                          </section>
                        </li>
                        <li class="level-1-entry  "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M4" data-eventtitle="Loja Online" data-eventlink="/loja"><span class="level-1-entry-link-title">Loja
                              Online</span></button>
                          <section class="level-2">
                            <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Loja Online</span></div>
                            <ul class="level-2-entries">
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-desconto-online" data-eventregion="MEO_MENU" data-eventclick="M_M4.1" data-eventtitle="Destaques e promoções"
                                  data-eventlink="/loja/destaques-promocoes"><span class="level-2-entry-link-title">Destaques e promoções</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Destaques e promoções</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/loja/destaques-promocoes" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.1" data-eventtitle="Promoções" data-eventlink="/loja/destaques-promocoes"><span class="level-3-entry-link-title">Promoções</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/lpc/apple" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.2" data-eventtitle="Mundo Apple" data-eventlink="/lpc/apple"><span class="level-3-entry-link-title">Mundo Apple</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/lpc/samsung" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.3" data-eventtitle="Universo Samsung Galaxy" data-eventlink="/lpc/samsung"><span class="level-3-entry-link-title">Universo Samsung Galaxy</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/lpc/xiaomi" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.4" data-eventtitle="Mi Xiaomi" data-eventlink="/lpc/xiaomi"><span class="level-3-entry-link-title">Mi Xiaomi</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/lpc/huawei" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.5" data-eventtitle="Huawei Series" data-eventlink="/lpc/huawei"><span class="level-3-entry-link-title">Huawei Series</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-telemoveis" data-eventregion="MEO_MENU" data-eventclick="M_M4.2" data-eventtitle="Telemóveis"
                                  data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Telemóveis</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Telemóveis</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/Telemoveis?menu=apple&amp;utm_campaign=mundo-apple#!filter=marca_Apple%24modalidadecompra_Presta%C3%A7%C3%B5es" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.1" data-eventtitle="Apple" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis?menu=apple&amp;utm_campaign=mundo-apple#!filter=marca_Apple%24modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-3-entry-link-title">Apple</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/Telemoveis/#!filter=marca_OPPO%24modalidadecompra_Presta%C3%A7%C3%B5es" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.2" data-eventtitle="OPPO" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis/#!filter=marca_OPPO%24modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-3-entry-link-title">OPPO</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/Telemoveis?menu=samsung&amp;utm_campaign=universo-samsung#!filter=marca_Samsung$modalidadecompra_Prestações" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.3" data-eventtitle="Samsung" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis?menu=samsung&amp;utm_campaign=universo-samsung#!filter=marca_Samsung$modalidadecompra_Prestações"><span class="level-3-entry-link-title">Samsung</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/Telemoveis?menu=xiaomi#!filter=marca_Xiaomi%24modalidadecompra_Presta%C3%A7%C3%B5es" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.4" data-eventtitle="Xiaomi" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis?menu=xiaomi#!filter=marca_Xiaomi%24modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-3-entry-link-title">Xiaomi</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/lpc/recondicionados" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.5" data-eventtitle="Recondicionados iPhone" data-eventlink="/lpc/recondicionados"><span class="level-3-entry-link-title">Recondicionados iPhone</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/Telemoveis/#!filter=modalidadecompra_Presta%C3%A7%C3%B5es%24tecnologia_5G" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.6" data-eventtitle="Smartphones 5G" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis/#!filter=modalidadecompra_Presta%C3%A7%C3%B5es%24tecnologia_5G"><span class="level-3-entry-link-title">Smartphones 5G</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/Telemoveis#!filter=modalidadecompra_Presta%C3%A7%C3%B5es" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.7" data-eventtitle="ver todos telemóveis" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis#!filter=modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-3-entry-link-title">Ver todos</span></a>
                                    </li>
                                    <li class="level-3-entry  "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M4.2.8" data-eventtitle="acessórios telemóveis"
                                        data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Acessórios</span></button>
                                      <section class="level-4">
                                        <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Acessórios</span></div>
                                        <ul class="level-4-entries">
                                          <li class="level-4-entry  no-submenu">
                                            <a href="https://loja.meo.pt/Equipamentos/Acessorios/?menu=audio#!filter=tipodeacessorios_Audio%20e%20Música%24modalidadecompra_Todos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.8.1" data-eventtitle="Audio e Música" data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios/?menu=audio#!filter=tipodeacessorios_Audio%20e%20Música%24modalidadecompra_Todos"><span class="level-4-entry-link-title">Audio e Música</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="https://loja.meo.pt/Equipamentos/Acessorios/?menu=cabos#!filter=tipodeacessorios_Cabos%20e%20Carregadores%24modalidadecompra_Todos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.8.2" data-eventtitle="Cabos e Carregadores" data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios/?menu=cabos#!filter=tipodeacessorios_Cabos%20e%20Carregadores%24modalidadecompra_Todos"><span class="level-4-entry-link-title">Cabos e Carregadores</span></a>
                                          </li>
                                          <li class="level-4-entry  no-submenu">
                                            <a href="https://loja.meo.pt/Equipamentos/Acessorios/#!filter=tipodeacessorios_Capas%20e%20Pel%C3%ADculas%24modalidadecompra_Pronto%20pagamento" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.8.3" data-eventtitle="Capas e Películas" data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios/#!filter=tipodeacessorios_Capas%20e%20Pel%C3%ADculas%24modalidadecompra_Pronto%20pagamento"><span class="level-4-entry-link-title">Capas e Películas</span></a>
                                          </li>
                                        </ul>
                                      </section>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-prod-net" data-eventregion="MEO_MENU" data-eventclick="M_M4.3" data-eventtitle="Informática"
                                  data-eventlink="https://loja.meo.pt/Equipamentos/pcs#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Informática</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Informática</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/pcs/#!filter=modalidadecompra_Todos$tipodeproduto_Impressoras_PC" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.3.1" data-eventtitle="PCs e Impressoras" data-eventlink="https://loja.meo.pt/Equipamentos/pcs/#!filter=modalidadecompra_Todos$tipodeproduto_Impressoras_PC"><span class="level-3-entry-link-title">PCs e Impressoras</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/pcs/?menu=acessorios#!filter=modalidadecompra_Todos%24tipodeproduto_Acess%C3%B3rios_Headsets_Mochilas%20para%20PC_Monitores_Ratos%20e%20tapetes_Teclados_Webcams" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.3.2" data-eventtitle="acessórios informática" data-eventlink="https://loja.meo.pt/Equipamentos/pcs/?menu=acessorios#!filter=modalidadecompra_Todos%24tipodeproduto_Acess%C3%B3rios_Headsets_Mochilas%20para%20PC_Monitores_Ratos%20e%20tapetes_Teclados_Webcams"><span class="level-3-entry-link-title">Acessórios</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="https://loja.meo.pt/Equipamentos/tv#!filter=modalidadecompra_Todos" class="level-2-entry-link icon-tvs4k" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.4" data-eventtitle="Smart TVs e Box 4K" data-eventlink="https://loja.meo.pt/Equipamentos/tv#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Smart TVs e Box 4K</span></a>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="https://loja.meo.pt/Equipamentos/smartwatch#!filter=modalidadecompra_Todos" class="level-2-entry-link icon-smartwatch" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.5" data-eventtitle="Smartwatches" data-eventlink="https://loja.meo.pt/Equipamentos/smartwatch#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Smartwatches</span></a>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-jogos" data-eventregion="MEO_MENU" data-eventclick="M_M4.6" data-eventtitle="Gaming"
                                  data-eventlink="https://loja.meo.pt/Equipamentos/gaming#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Gaming</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Gaming</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos$tipodeproduto_Consolas de Jogos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.6.1" data-eventtitle="Consolas" data-eventlink="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos$tipodeproduto_Consolas de Jogos"><span class="level-3-entry-link-title">Consolas</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos$tipodeproduto_Jogos Playstation" class="level-3-entry-link " target="_self" data-eventregion="MEO_Menu" data-eventclick="M_M4.6.2" data-eventtitle="jogos gaming" data-eventlink="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos$tipodeproduto_Jogos Playstation"><span class="level-3-entry-link-title">Jogos</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos%24tipodeproduto_Acess%C3%B3rios_Acess%C3%B3rios%20Playstation_Bundles%20gaming_Cadeiras%20gaming_Headsets_Ratos%20e%20tapetes_Secret%C3%A1rias%20Gaming_Tapetes%20para%20cadeiras_Teclados_Webcams" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.6.3" data-eventtitle="acessórios gaming" data-eventlink="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos%24tipodeproduto_Acess%C3%B3rios_Acess%C3%B3rios%20Playstation_Bundles%20gaming_Cadeiras%20gaming_Headsets_Ratos%20e%20tapetes_Secret%C3%A1rias%20Gaming_Tapetes%20para%20cadeiras_Teclados_Webcams"><span class="level-3-entry-link-title">Acessórios</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M4.7" data-eventtitle="Mais produtos"
                                  data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Mais produtos</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Mais produtos</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/Acessorios/#!filter=modalidadecompra_Todos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.1" data-eventtitle="Acessorios" data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios/#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Acessórios</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/Tablets/#!filter=modalidadecompra_Todos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.2" data-eventtitle="Tablets" data-eventlink="https://loja.meo.pt/Equipamentos/Tablets/#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Tablets</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/eletrodomesticos/#!filter=modalidadecompra_Todos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.3" data-eventtitle="Eletrodomesticos" data-eventlink="https://loja.meo.pt/Equipamentos/eletrodomesticos/#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Eletrodomésticos</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/smart-living/#!filter=modalidadecompra_Todos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.4" data-eventtitle="Smart Living" data-eventlink="https://loja.meo.pt/Equipamentos/smart-living/#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Smart Living</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/routers-e-wifi/" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.5" data-eventtitle="Routers e WiFi" data-eventlink="https://loja.meo.pt/Equipamentos/routers-e-wifi/"><span class="level-3-entry-link-title">Routers e WiFi</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/meo-blueticket" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.6" data-eventtitle="Bilhetes" data-eventlink="/meo-blueticket"><span class="level-3-entry-link-title">Bilhetes</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="https://loja.meo.pt/Equipamentos/oportunidades/" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.7" data-eventtitle="Oportunidades" data-eventlink="https://loja.meo.pt/Equipamentos/oportunidades/"><span class="level-3-entry-link-title">Oportunidades</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                            </ul>
                          </section>
                        </li>
                        <li class="level-1-entry  "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M5" data-eventtitle="TV e Entretenimento" data-eventlink="/tv"><span
                              class="level-1-entry-link-title">TV</span></button>
                          <section class="level-2">
                            <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">TV</span></div>
                            <ul class="level-2-entries">
                              <li class="level-2-entry  no-submenu">
                                <a href="https://meogo.meo.pt/" class="level-2-entry-link icon-go" target="_blank" data-eventregion="MEO_MENU" data-eventclick="M_M5.1" data-eventtitle="Ver TV agora" data-eventlink="https://meogo.meo.pt/"><span class="level-2-entry-link-title">Ver TV agora</span></a>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-tv-canais" data-eventregion="MEO_MENU" data-eventclick="M_M5.2" data-eventtitle="Novidades" data-eventlink="/tv/novidades-canais"><span
                                    class="level-2-entry-link-title">Novidades</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Novidades</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/novidades/destaque" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.2.1" data-eventtitle="Em destaque" data-eventlink="/tv/novidades/destaque"><span class="level-3-entry-link-title">Em destaque</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/novidades/melhor-experiencia-tv" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.2.2" data-eventtitle="Melhor experiência TV" data-eventlink="/tv/novidades/melhor-experiencia-tv"><span class="level-3-entry-link-title">Melhor experiência TV</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-lista" data-eventregion="MEO_MENU" data-eventclick="M_M5.3" data-eventtitle="Canais e Programação" data-eventlink="/tv/canais-programacao"><span
                                    class="level-2-entry-link-title">Canais e Programação</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Canais e Programação</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/canais-programacao/lista-canais/fibra" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.3.1" data-eventtitle="Lista de canais" data-eventlink="/tv/canais-programacao/lista-canais/fibra"><span class="level-3-entry-link-title">Lista de canais</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/canais-programacao/guia-tv" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.3.2" data-eventtitle="Guia TV" data-eventlink="/tv/canais-programacao/guia-tv"><span class="level-3-entry-link-title">Guia TV</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-tv-tematicas" data-eventregion="MEO_MENU" data-eventclick="M_M5.4" data-eventtitle="Temáticas" data-eventlink="/tv/tematicas"><span
                                    class="level-2-entry-link-title">Temáticas</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Temáticas</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/tematicas/filmes-series" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.1" data-eventtitle="Filmes e Séries" data-eventlink="/tv/tematicas/filmes-series"><span class="level-3-entry-link-title">Filmes e Séries</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/tematicas/desporto" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.2" data-eventtitle="Desporto" data-eventlink="/tv/tematicas/desporto"><span class="level-3-entry-link-title">Desporto</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/tematicas/infantil" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.3" data-eventtitle="Infantil" data-eventlink="/tv/tematicas/infantil"><span class="level-3-entry-link-title">Infantil</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/tematicas/entretenimento" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.4" data-eventtitle="Entretenimento" data-eventlink="/tv/tematicas/entretenimento"><span class="level-3-entry-link-title">Entretenimento</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/tematicas/musica" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.5" data-eventtitle="Música" data-eventlink="/tv/tematicas/musica"><span class="level-3-entry-link-title">Música</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/tematicas/internacional" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.6" data-eventtitle="Internacional" data-eventlink="/tv/tematicas/internacional"><span class="level-3-entry-link-title">Internacional</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/tematicas/informacao" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.7" data-eventtitle="Informação" data-eventlink="/tv/tematicas/informacao"><span class="level-3-entry-link-title">Informação</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-tvs" data-eventregion="MEO_MENU" data-eventclick="M_M5.5" data-eventtitle="TV Multiplataforma" data-eventlink="/tv/multiplataforma"><span
                                    class="level-2-entry-link-title">TV Multiplataforma</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">TV Multiplataforma</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/multiplataforma/meo-android-tv" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.5.1" data-eventtitle="Android TV" data-eventlink="/tv/multiplataforma/meo-android-tv"><span class="level-3-entry-link-title">Android TV</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/multiplataforma/meo-apple-tv" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.5.2" data-eventtitle="Apple TV" data-eventlink="/tv/multiplataforma/meo-apple-tv"><span class="level-3-entry-link-title">Apple TV</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/tv/multiplataforma/meo-go" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.5.3" data-eventtitle="MEO Go" data-eventlink="/tv/multiplataforma/meo-go"><span class="level-3-entry-link-title">MEO Go</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="https://mag.sapo.pt/tv" class="level-2-entry-link icon-sapo" target="_blank" data-eventregion="MEO_MENU" data-eventclick="M_M5.6" data-eventtitle="Sapo Mag" data-eventlink="https://mag.sapo.pt/tv"><span class="level-2-entry-link-title">Sapo Mag</span></a>
                              </li>
                            </ul>
                          </section>
                        </li>
                        <li class="level-1-entry  "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M6" data-eventtitle="Suporte" data-eventlink="/ajuda-e-suporte"><span
                              class="level-1-entry-link-title">Suporte</span></button>
                          <section class="level-2">
                            <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Suporte</span></div>
                            <ul class="level-2-entries">
                              <li class="level-2-entry  no-submenu">
                                <a href="/cliente" class="level-2-entry-link icon-user" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.1" data-eventtitle="my MEO" data-eventlink="/cliente"><span class="level-2-entry-link-title">my MEO</span></a>
                              </li>
                              <li class="level-2-entry  "><button class="level-2-entry-link icon-suporte" data-eventregion="MEO_MENU" data-eventclick="M_M6.2" data-eventtitle="Ajuda" data-eventlink="/ajuda-e-suporte"><span
                                    class="level-2-entry-link-title">Ajuda</span></button>
                                <section class="level-3">
                                  <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Ajuda</span></div>
                                  <ul class="level-3-entries">
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/ajuda-e-suporte#div-apoio-tecnico-e-configuracoes" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.2.1" data-eventtitle="Apoio Técnico" data-eventlink="/ajuda-e-suporte#div-apoio-tecnico-e-configuracoes"><span class="level-3-entry-link-title">Apoio técnico</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/ajuda-e-suporte#div-faturas-pagamentos-e-carregamentos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.2.2" data-eventtitle="Faturas e pagamentos" data-eventlink="/ajuda-e-suporte#div-faturas-pagamentos-e-carregamentos"><span class="level-3-entry-link-title">Faturas e Pagamentos</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/ajuda-e-suporte#div-produtos-meo" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.2.3" data-eventtitle="Produtos MEO" data-eventlink="/ajuda-e-suporte#div-produtos-meo"><span class="level-3-entry-link-title">Produtos MEO</span></a>
                                    </li>
                                    <li class="level-3-entry  no-submenu">
                                      <a href="/ajuda-e-suporte#div-outros-servicos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.2.4" data-eventtitle="Outros serviços" data-eventlink="/ajuda-e-suporte#div-outros-servicos"><span class="level-3-entry-link-title">Outros serviços</span></a>
                                    </li>
                                  </ul>
                                </section>
                              </li>
                              <li class="level-2-entry  no-submenu">
                                <a href="https://forum.meo.pt" class="level-2-entry-link icon-meo-forum" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.3" data-eventtitle="MEO Fórum" data-eventlink="https://forum.meo.pt"><span class="level-2-entry-link-title">MEO Fórum</span></a>
                              </li>
                            </ul>
                          </section>
                        </li>
                      </ul>
                    </section>
                  </section>
                </section>
                <section class="nav-bar-three"><i class="icon-search" aria-hidden="true"></i><input placeholder="Pesquisar no MEO" type="search" value=""></section>
              </section>
              <section class="context-menu" id="menuToolbar">
                <div class="context-menu-custom" id="context-menu-custom"></div>
                <div class="context-menu-login" id="liUserMenu"><span class="icon off" id="hrefUser" data-eventregion="MEO_MENU" data-eventclick="M_M10" data-eventtitle="my MEO" data-eventlink="my MEO"><i class="icon-user"></i><span
                      class="menu-title">my MEO</span></span><span class="content off" style="height: 0px;"><span class="wrp">
                      <div>
                        <section class="user-box">
                          <p class="txt-semibold">my MEO</p><span>
                            <ul class="hyperlinks">
                              <li>
                                <a id="hrefEntrar" href="https://cliente.meo.pt/pag/Homepage" class="icon-id-meo btn-icon-left btn-tiny btn-secondary btn-color-3" data-eventregion="MEO_MENU" data-eventclick="M_M10.1" data-eventtitle="Entrar" data-eventlink="https://cliente.meo.pt/pag/Homepage">Entrar</a>
                              </li>
                              <li>
                                <a id="hrefRegistar" href="https://login.telecom.pt/Public/Register.aspx?appKey=Xa6qa5wG2b" class="btn-tiny btn-primary btn-color-3" data-eventregion="MEO_MENU" data-eventclick="M_M10.2" data-eventtitle="Registe-se" data-eventlink="https://login.telecom.pt/Public/Register.aspx?appKey=Xa6qa5wG2b">Registe-se</a>
                              </li>
                            </ul>
                            <div class="desambiguation">
                              <p>É cliente MEO
                                Empresas?<br><strong><a id="hrefDesambig" href="https://www.meo.pt/empresas/cliente" data-eventregion="MEO_MENU" data-eventclick="M_M10.5" data-eventtitle="Entrar" data-eventlink="https://www.meo.pt/empresas/cliente">Entrar</a></strong>
                              </p>
                            </div>
                          </span>
                        </section>
                        <section class="campaign">
                          <div class="image"><img src="https://www.meo.pt/PublishingImages/push-login/push_my_MEO.jpg" width="360px" height="120px" loading="lazy"></div><span class="campaign-text"><strong>A tua área de cliente onde e quando
                              quiseres</strong></span>
                        </section>
                        <ul class="login-hyperlinks">
                          <li class="">
                            <a class="icon-produtos" href="https://cliente.meo.pt/meus-produtos" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.1" data-eventtitle="Os meus produtos" data-eventlink="https://cliente.meo.pt/meus-produtos"><span class="hyperlinks-txt">Os meus produtos</span></a>
                          </li>
                          <li class="">
                            <a class="icon-cons-e-faturas" href="https://cliente.meo.pt/escolher/faturas" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.2" data-eventtitle="As minhas faturas" data-eventlink="https://cliente.meo.pt/escolher/faturas"><span class="hyperlinks-txt">As minhas faturas</span></a>
                          </li>
                          <li class="">
                            <a class="icon-entrega-loja" href="https://loja.meo.pt/encomendas" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.3" data-eventtitle="Consultar encomendas" data-eventlink="https://loja.meo.pt/encomendas"><span class="hyperlinks-txt">Consultar encomendas</span></a>
                          </li>
                          <li class="">
                            <a class="icon-meos" href="https://cliente.meo.pt/escolher/pontos" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.4" data-eventtitle="Os meus MEOS" data-eventlink="https://cliente.meo.pt/escolher/pontos"><span class="hyperlinks-txt">Os meus MEOS</span></a>
                          </li>
                          <li class="">
                            <a class="icon-saldo" href="https://cliente.meo.pt/ofertas" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.5" data-eventtitle="Ofertas" data-eventlink="https://cliente.meo.pt/ofertas"><span class="hyperlinks-txt">Ofertas</span></a>
                          </li>
                          <li class="">
                            <a class="icon-msg-envelope" href="https://cliente.meo.pt/perfil/mensagens" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.6" data-eventtitle="Pedidos e mensagens" data-eventlink="https://cliente.meo.pt/perfil/mensagens"><span class="hyperlinks-txt">Pedidos e mensagens</span></a>
                          </li>
                        </ul>
                      </div>
                    </span></span>
                  <div class="context-menu-overlay"></div>
                </div>
                <div class="context-menu-meos" id="meos-main-menu"><span class="icon off" data-notifications="" data-eventregion="MEO_MENU" data-eventclick="M_M11" data-eventtitle="MEOS" data-eventlink="MEOS"><i class="icon-m-meo"></i><span
                      class="menu-title">MEOS</span></span><span class="content off" style="height: 0px;"><span class="wrp">
                      <div><i class="icon-m-meo"></i>
                        <div>
                          <p class="tiny sub-title">MEOS</p>
                          <p class="note"><a href="https://mymeo.page.link/meos">Saber mais</a></p>
                        </div>
                      </div>
                      <ul class="meos-hyperlinks">
                        <li class="">
                          <a class="icon-chain-link" href="https://mymeo.page.link/AMEOS" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.1" data-eventtitle="Aderir ao programa MEOS" data-eventlink="https://mymeo.page.link/AMEOS"><span class="hyperlinks-txt">Aderir aos MEOS</span></a>
                        </li>
                        <li class="">
                          <a class="icon-desconto-online" href="/programa-meos" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.2" data-eventtitle="Em destaque" data-eventlink="/programa-meos"><span class="hyperlinks-txt">Em destaque</span></a>
                        </li>
                        <li class="">
                          <a class="icon-telemoveis" href="https://loja.meo.pt/Equipamentos/Telemoveis/?#!filter=modalidadecompra_MEOS" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.3" data-eventtitle="Telemoveis MEOS" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis/?#!filter=modalidadecompra_MEOS"><span class="hyperlinks-txt">Telemóveis</span></a>
                        </li>
                        <li class="">
                          <a class="icon-experiencias" href="https://experiencias-meos.meo.pt/" target="_blank" data-eventregion="MEO_MENU" data-eventclick="M_M11.4" data-eventtitle="Experiencas" data-eventlink="https://experiencias-meos.meo.pt/"><span class="hyperlinks-txt">Experiências</span></a>
                        </li>
                        <li class="">
                          <a class="icon-espetaculos" href="https://loja.meo.pt/Equipamentos/sensacoes" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.5" data-eventtitle="Sensacoes" data-eventlink="https://loja.meo.pt/Equipamentos/sensacoes"><span class="hyperlinks-txt">Sensações</span></a>
                        </li>
                        <li class="">
                          <a class="icon-donativos" href="https://loja.meo.pt/Equipamentos/intervencao-social" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.6" data-eventtitle="Intervencao Social" data-eventlink="https://loja.meo.pt/Equipamentos/intervencao-social"><span class="hyperlinks-txt">Intervenção Social</span></a>
                        </li>
                        <li class="">
                          <a class="icon-tvs4k" href="https://loja.meo.pt/Equipamentos/tv#!filter=modalidadecompra_MEOS" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.7" data-eventtitle="Smart TVs e BOX 4K" data-eventlink="https://loja.meo.pt/Equipamentos/tv#!filter=modalidadecompra_MEOS"><span class="hyperlinks-txt">Smart TVs e BOX 4K</span></a>
                        </li>
                        <li class="">
                          <a class="icon-pdf" href="https://catalogomeos.meo.pt/" target="_blank" data-eventregion="MEO_MENU" data-eventclick="M_M11.8" data-eventtitle="Edição MEOS" data-eventlink="https://catalogomeos.meo.pt/"><span class="hyperlinks-txt">Edição MEOS</span></a>
                        </li>
                      </ul>
                    </span></span>
                  <div class="context-menu-overlay"></div>
                </div>
                <div class="context-menu-cart cart-button" id="ctl00_userMenu_shopBasket"><span class="icon" data-eventregion="MEO_MENU" data-eventclick="M_M12" data-eventtitle="Carrinho de compras"
                    data-eventlink="Carrinho de compras"><i id="cartCount" class="icon-cart"></i><span class="menu-title">Carrinho</span>
                    <div id="miniCartApp" class="cart-box"></div>
                  </span></div>
                <div class="context-menu-click2call" id="liClick2Call"></div>
              </section>
              <section class="toggle-nav-bar" id="toggle-nav-bar"></section>
            </nav>
          </mainmenu>
          <script type="text/javascript">
            CreateFullHeader(false, false, '', '', '', '', '', '', '', false, false, '');
          </script>
        </header>
        <!-- id="mso_contentdiv" required, helps SharePoint put the web part editing pane in the main body on the right, you can move the ID if needed -->
        <div id="ctl00_MSO_ContentDiv" class="conteudo">
          <div id="innerThirdlevelnavigation" class="sub-header context-bar" style="display: none;"></div>
          <a id="anchor"></a>
          <!-- ===== STARTER: Main Placeholder gets replaced with content of the page ======================================= -->
          <h1 style="display:none !important;"> Ajuda e Suporte – Fatura Interativa | MEO </h1>
          <div class="ms-webpart-zone ms-fullWidth">
            <div id="MSOZoneCell_WebPartctl00_SPWebPartManager1_g_d079c845_ccf4_4f5c_b675_9329fbef6a95" 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="d079c845-ccf4-4f5c-b675-9329fbef6a95" haspers="false" id="WebPartctl00_SPWebPartManager1_g_d079c845_ccf4_4f5c_b675_9329fbef6a95" width="100%" class="ms-WPBody " allowdelete="false" allowexport="false" style="">
                  <div id="ctl00_SPWebPartManager1_g_d079c845_ccf4_4f5c_b675_9329fbef6a95">
                    <div class="ms-rte-embedcode ms-rte-embedwp"><!-- INICIO DO BLOCO DE HTML LIVRE -->
                      <!-- INICIO DO BLOCO DE HTML LIVRE -->
                      <!-- INICIO DO BLOCO DE HTML LIVRE -->
                      <section class="preload hidden">
                        <img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_1.png">
                        <img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_2.png">
                        <img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_3.png">
                        <img class="hidden" src="https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/1FaturaTelemovel_p1.jpg">
                        <img class="hidden" src="https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/1FaturaTelemovel_p2.jpg">
                        <img class="hidden" src="https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/2FaturaTelemovel_p1.jpg">
                        <img class="hidden" src="https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/2FaturaTelemovel_p2.jpg">
                        <img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_1.png">
                        <img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_2.png">
                        <img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_3.png">
                      </section>
                      <style>
                        #Loadify {
                          display: none;
                          height: 300px;
                          vertical-align: middle;
                          line-height: 300px;
                          margin-bottom: 50px;
                          text-align: center;
                        }

                        #Loadify img {
                          display: inline-block;
                          vertical-align: middle;
                        }

                        .is-loading #Loadify {
                          display: block;
                        }

                        .is-loading #Tabify,
                        .is-loading #Contentify {
                          display: none !important;
                        }

                        .bloco-fatura-interativa {
                          /*background:#FFF;*/
                          width: 100%;
                          text-align: left;
                          padding: 0;
                        }

                        .bloco-fatura-interativa h2 {
                          text-transform: none;
                          padding-left: 20px;
                          padding-right: 20px;
                          padding-top: 10px;
                          margin-bottom: 0;
                        }

                        .bloco-fatura-interativa h3 {
                          margin-top: 0;
                          font-size: 24px;
                          padding-bottom: 0px;
                        }

                        .bloco-fatura-interativa .box-title {
                          margin: 20px auto 30px;
                          display: inline-block;
                          text-align: left;
                          width: 100%;
                          max-width: 100%;
                          padding-left: 265px;
                        }

                        .bloco-fatura-interativa .box-title p {
                          font-size: 10px;
                          color: #000;
                        }

                        /*.bloco-fatura-interativa .fd-nav-tabs{margin-top:40px;}*/
                        .bloco-fatura-interativa ul,
                        .bloco-fatura-interativa li {
                          list-style: none;
                          margin: 0;
                          padding: 0;
                        }

                        .top-intro {
                          padding-bottom: 40px;
                          padding-left: 20px;
                          padding-right: 20px;
                          text-align: center;
                        }

                        .bl-tabs .tab-content {
                          background: transparent;
                          border-color: transparent;
                        }

                        .bl-tabs .tab-content .tab-pane {
                          display: inline-block;
                          width: auto;
                          float: none;
                          display: inline-table;
                          max-width: 1170px;
                          max-width: none;
                          width: 100%;
                          padding: 0;
                          padding-left: 265px;
                        }

                        /*.bloco-fatura-interativa.bl-tabs ul.nav-tabs{width:100%;background:#333333;overflow: hidden;background-clip: content-box;padding-top: 6px;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li:first-of-type{margin-left: 15px;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li:last-of-type{margin-right:15px;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li:not(.active){background: transparent !important;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li{font-size: 14px;color: #000000;vertical-align: middle;display: inline-block;margin-bottom: -12px;transform: translateY(-6px);}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li a{font-family: 'Montserrat',Arial, Helvetica, sans-serif;font-size:14px;font-weight: 300;padding:30px;text-decoration:none;background:none;color:#FFF;border:0;white-space: nowrap;position: relative;min-height:104px;display: flex;align-items: center;flex-direction: column;justify-content: center;transition:none;margin:0;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li a:hover{color: #0099ab;text-decoration:none;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li:not(.active) a:after{content: '';background: #000000;position: absolute;opacity: 0;top: 6px;height: 100%;left: 0;width: 100%;z-index: -1;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li:not(.active) a:hover:after{opacity:1;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li:hover a:before,
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li:hover + li a:before,
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li.active a:before,
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li.active + li a:before{background:none;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li.active{background:#FFF;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li.active a{border:0;padding:30px;margin:0;font-weight:600;color:#000;cursor:pointer;}
  .bloco-fatura-interativa.bl-tabs ul.nav-tabs li + li a:before{content: '';width: 1px;position: absolute;left: 0;top: 30px;height: calc(100% - 60px);background: #808080;}*/
                        .left-side {
                          /*display:inline-block;vertical-align:top;*/
                          padding: 70px 20px 20px 0;
                          position: absolute;
                          left: 0;
                          top: auto;
                        }

                        .left-side .col-nav-left {
                          padding: 20px;
                          padding-top: 0;
                          float: right;
                        }

                        .col-nav-left .sec-help {
                          border-bottom: 1px solid #ccc;
                        }

                        .col-nav-left {
                          /*background:#fff;*/
                          width: 245px;
                          text-align: left;
                        }

                        .col-nav-left h3 {
                          font-size: 12px;
                          line-height: 20px;
                          font-weight: 600;
                          color: #000000;
                          text-transform: uppercase;
                        }

                        .col-nav-left p {
                          font-size: 12px;
                          line-height: 15px;
                          color: #000000;
                        }

                        .col-nav-left .sec-nav {
                          padding: 20px 0;
                          border-bottom: 1px solid #ccc;
                        }

                        .col-nav-left h4 {
                          font-size: 12px;
                          line-height: 20px;
                          font-weight: 600;
                          text-transform: uppercase;
                          margin-bottom: 0;
                        }

                        .col-nav-left h5 {
                          font-size: 12px;
                          line-height: 15px;
                          font-weight: 600;
                          margin-top: 18px;
                          cursor: pointer;
                        }

                        .col-nav-left h5.active,
                        .col-nav-left h5:hover {
                          color: #0099ab;
                        }

                        .col-nav-left .sec-nav li,
                        .col-nav-left .sec-help li {
                          font-size: 12px;
                          color: #000;
                          margin-bottom: 5px;
                        }

                        .col-nav-left .sec-nav .listaItems li:hover {
                          cursor: pointer;
                          color: #666;
                          text-decoration: underline;
                        }

                        .col-nav-left .sec-nav .listaItems li.active {
                          color: #0099ab;
                        }

                        .col-nav-left .sec-help {
                          padding-bottom: 20px;
                        }

                        .col-nav-left .sec-help .btn {
                          margin-top: 25px;
                        }

                        .sec-help.links {
                          border: none;
                          position: relative;
                          padding-bottom: 0;
                        }

                        .sec-help.links h3 {
                          margin-bottom: 20px;
                          position: relative;
                          width: 100%;
                          display: block;
                        }

                        .sec-help.links.active h3 {
                          margin-bottom: 0;
                        }

                        .sec-help.links.active h3:after {
                          transform: rotateX(180deg);
                          transition: 0.15s all ease;
                          top: 10px;
                        }

                        .sec-help.links h3:after,
                        .faturas-in-tabs h4:after {
                          margin-top: 0;
                          /*content:url(https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/ico_seta_open.svg);*/
                          width: 20px;
                          height: 12px;
                          position: absolute;
                          right: 0;
                          top: 0;
                          transition: 0.15s all ease;
                          content: "\e03f";
                          font-family: "icons-meo" !important;
                          font-style: normal !important;
                          font-weight: normal !important;
                          font-variant: normal !important;
                          text-transform: none !important;
                          speak: none;
                          line-height: 1;
                          -webkit-font-smoothing: antialiased;
                          -moz-osx-font-smoothing: grayscale;
                          font-size: 2em;
                        }

                        .faturas-in-tabs h4.active:after {
                          transition: 0.15s all ease;
                          transform: rotateX(180deg);
                          transition: 0.15s all ease;
                          top: 10px;
                        }

                        .faturas-in-tabs h4.active+ul#listaPaginas {
                          display: none;
                        }

                        .faturas-in-tabs h4 {
                          position: relative;
                        }

                        .sec-help.links h3:hover,
                        .faturas-in-tabs h4:hover {
                          cursor: pointer;
                          color: #0099ab;
                        }

                        .sec-help.links ul {
                          transition: 0.15s all ease;
                        }

                        .sec-help.links li a {
                          line-height: 15px;
                          display: block;
                          margin-bottom: 11px;
                          text-decoration: none;
                        }

                        .sec-help.links.active ul {
                          display: none;
                        }

                        .desktop.sec-help.links {
                          display: block;
                        }

                        .mobile.sec-help.links {
                          display: none;
                        }

                        #right-side {
                          /*width: calc(100% - 289px);display:inline-block;*/
                          display: block;
                          /*padding:0 20px 30px;*/
                        }

                        .bloco-fatura-interativa .menu-fatura {}

                        .bloco-fatura-interativa .menu-fatura .sec-nav {
                          padding: 10px 0;
                        }

                        .bloco-fatura-interativa .menu-fatura .sec-help {
                          padding: 20px 0 5px;
                        }

                        #col-cont-right {
                          position: relative;
                        }

                        #col-cont-right .area-conteudo {
                          background: #fff;
                          position: relative;
                          padding: 0 50px;
                        }

                        div#video-link-box:empty {
                          border: none;
                        }

                        #col-cont-right .nav-pag {
                          text-align: right;
                          height: 70px;
                          padding-top: 15px;
                          list-style: none;
                          max-width: 991px;
                          margin: 0 auto;
                        }

                        #col-cont-right .nav-pag li {
                          background: url(https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/pdf_ico_grey_new.svg) no-repeat 0 0;
                          width: 38px;
                          height: 40px;
                          line-height: 40px;
                          display: inline-block;
                          padding: 0px;
                          font-size: 12px;
                          font-weight: bold;
                          margin: 0;
                          cursor: pointer;
                          color: #6e6e6e;
                          /*opacity:0.5;*/
                          text-align: left;
                          padding-left: 13px;
                        }

                        #col-cont-right .nav-pag li:hover {
                          color: #0099ab;
                          background: url(https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/pdf_ico_new_hover.svg) no-repeat 0 0;
                        }

                        #col-cont-right .nav-pag li.active {
                          background: url(https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/pdf_ico_new.svg) no-repeat 0 0;
                          color: #000;
                        }

                        #col-cont-right .nav-pag li.active {
                          opacity: 1;
                        }

                        #col-cont-right .nav-pag li:hover {}

                        .area-conteudo .area-img {
                          width: 100%;
                          /*max-width:1220px;*/
                          max-width: 880px;
                          margin: 0 auto;
                        }

                        .area-conteudo .area-img img {
                          width: 100%;
                          height: auto;
                          position: relative;
                        }

                        .area-conteudo .area-img {
                          background: #222222;
                          position: relative;
                        }

                        /*#area-bolas-rects.bolasOn + #img-fatura{opacity:.7}*/
                        .area-conteudo.add-modal .modal-fatura {
                          content: " ";
                          position: absolute;
                          top: 0;
                          left: 0;
                          width: 100%;
                          height: 100%;
                          background: #000;
                          opacity: 0.7;
                        }

                        .area-conteudo.add-modal .right-bt,
                        .area-conteudo.add-modal .left-bt {
                          opacity: 0.1;
                          pointer-events: none;
                        }

                        .area-conteudo .area-img img {
                          opacity: 1;
                          min-width: 320px;
                          min-height: 500px;
                        }

                        #info-balloon {
                          padding: 20px;
                          font-size: 16px;
                          position: absolute;
                          max-width: 65%;
                          width: 500px;
                          height: auto;
                          background: #fff;
                          z-index: 55;
                          /*padding-bottom: 20px;*/
                          margin-bottom: 22px;
                          text-align: left;
                        }

                        #info-balloon:after {
                          content: "";
                          width: 0;
                          height: 0;
                          border-left: 10px solid transparent;
                          border-right: 10px solid transparent;
                          border-top: 18px solid #fff;
                          bottom: -18px;
                          position: absolute;
                        }

                        #info-balloon a.close {}

                        #info-balloon .titulo {
                          font-size: 16px;
                          font-weight: 600;
                          margin-top: 0;
                        }

                        #info-balloon .descricao {
                          font-size: 12px;
                          color: #000;
                          line-height: 17px;
                        }

                        #info-balloon ul {
                          border-top: 1px solid transparent;
                          padding-top: 0px;
                        }

                        #info-balloon ul li a {
                          font-size: 13px;
                          line-height: 18px;
                          line-height: 15px;
                          display: inline-block;
                          text-decoration: underline;
                        }

                        #info-balloon ul li a:hover {
                          color: #0099ab;
                          text-decoration: none;
                        }

                        #info-balloon {
                          /*bottom:calc(100% - 27%);left: calc(100% - 9%/2 - 88%/2 - 150px);*/
                        }

                        #info-balloon.bottom_left:after {
                          top: 0;
                          margin-top: -18px;
                          left: 50%;
                          transform: rotate(180deg);
                        }

                        #info-balloon.bottom_center:after {
                          top: 0;
                          margin-top: -18px;
                          left: 50%;
                          transform: rotate(180deg);
                          margin-left: -5px;
                        }

                        #info-balloon.bottom_right:after {
                          margin-top: -18px;
                          top: 0;
                          right: 10px;
                          transform: rotate(180deg);
                        }

                        #info-balloon.top_center:after {
                          left: 50%;
                          margin-left: -4px;
                        }

                        #info-balloon.top_right:after {
                          right: 10px;
                        }

                        #info-balloon.middle_left:after {
                          right: 0;
                          top: 50%;
                          margin-right: -18px;
                          transform: rotate(-90deg);
                        }

                        #info-balloon.middle_right:after {
                          left: 0;
                          margin-left: -18px;
                          top: 50%;
                          transform: rotate(90deg);
                        }

                        .closeballoon {
                          position: absolute;
                          right: 0px;
                          /* top: -26px; */
                          top: -29px;
                          cursor: pointer;
                          /* padding: 3px 8px 0px; */
                          color: #fff;
                          /* font-size: 9px; */
                          font-size: 18px;
                          line-height: 22px;
                          text-align: center;
                          width: 24px;
                          height: 24px;
                          transition: all 0.3s ease-out;
                          border-radius: 50%;
                        }

                        .closeballoon:hover {
                          background-color: #0099ab;
                          color: #fff;
                          /*border-radius: 5px;*/
                        }

                        .closeballoon:before {
                          z-index: 62;
                          content: "\78";
                          font-family: "icons-meo" !important;
                          font-style: normal !important;
                          font-weight: normal !important;
                          font-variant: normal !important;
                          text-transform: none !important;
                          speak: none;
                          line-height: 1;
                          -webkit-font-smoothing: antialiased;
                          -moz-osx-font-smoothing: grayscale;
                          vertical-align: middle;
                          margin-left: 1px;
                        }

                        #area-bolas-rects {
                          position: absolute;
                          height: 100%;
                          width: 100%;
                          bottom: 0;
                          top: 0;
                          left: 0;
                          right: 0;
                        }

                        .bolas {
                          position: absolute;
                          z-index: 1;
                          width: 100%;
                          height: 100%;
                        }

                        .bolas a {
                          height: 36px;
                          width: 36px;
                          border-radius: 18px;
                          /*background:#333333;*/
                          background: rgba(204, 204, 204, 0.5);
                          position: absolute;
                          color: #000;
                          /*transform: translate(-50%,-50%);*/
                          font-size: 28px;
                          line-height: 34px;
                          cursor: pointer;
                          text-decoration: none;
                          text-align: center;
                        }

                        .bolas a:before,
                        .bolas a:after {
                          content: "";
                          width: 26px;
                          height: 26px;
                          display: block;
                          border-radius: 50%;
                          z-index: -2;
                          position: absolute;
                          left: 5px;
                          top: 5px;
                          animation: sonarEffect 2s ease-out infinite;
                          transition-delay: inherit;
                        }

                        @keyframes sonarEffect {
                          0% {
                            opacity: 0.1;
                          }

                          50% {
                            opacity: 0.5;
                            box-shadow: 0 0 0 2px #33333350, 0 0 0px 5px #33333350,
                              0 0 0 5px #33333350;
                          }

                          100% {
                            box-shadow: 0 0 0 2px #33333350, 0 0 0px 10px #33333350,
                              0 0 0 5px #33333350;
                            transform: scale(1.3);
                            opacity: 0.1;
                            transform-origin: center center;
                            transform-style: preserve-3D;
                          }
                        }

                        .bolas a:hover {
                          text-decoration: none;
                          background: #0099ab;
                        }

                        .rectangulo {
                          position: absolute;
                          outline: 3px solid #fff;
                          z-index: 55;
                          width: 88%;
                          top: 27%;
                          height: 7%;
                          left: 9%;
                        }

                        .col-nav-left .sec-help:empty {
                          padding: 0;
                        }

                        .sec-help.links li a:hover {
                          color: #0099ab;
                        }

                        /*.left-bt, .right-bt {position: absolute;top: 50%;z-index: 1;height: 30px; width: 20px;content: url("http://www.meo.pt/PublishingImages/paginas/_fatura_interativa/ico_seta_r_l_light.svg");transition: 0.15s all ease;padding: 5px ;}*/
                        .left-bt,
                        .right-bt {
                          position: absolute;
                          top: 50%;
                          z-index: 5;
                          transition: all 0.3s ease-out;
                          text-decoration: none;
                          text-align: center;
                          background: rgba(204, 204, 204, 0.5);
                          width: 50px;
                          padding: 15px 0;
                          color: #000;
                          font-size: 14px;
                          cursor: pointer;
                        }

                        .left-bt:before,
                        .right-bt:before {
                          vertical-align: -2px;
                          content: "\e03d";
                          font-family: "icons-meo" !important;
                          font-style: normal !important;
                          font-weight: normal !important;
                          font-variant: normal !important;
                          text-transform: none !important;
                          speak: none;
                          line-height: 2em;
                          font-size: 2em;
                          -webkit-font-smoothing: antialiased;
                          -moz-osx-font-smoothing: grayscale;
                        }

                        .right-bt {
                          right: -50px;
                          transform: rotate(180deg);
                        }

                        .left-bt {
                          left: -50px;
                        }

                        .right-bt:hover,
                        .left-bt:hover {
                          background: #0099ab;
                          color: #000;
                        }

                        @media screen and (min-width: 769px) {
                          div#wrapfloatingmenu.affixed {
                            position: fixed;
                            width: 205px;
                            z-index: 5;
                            top: 80px !important;
                          }

                          div#wrapfloatingmenu.affixed-top {
                            position: relative;
                          }

                          div#wrapfloatingmenu.affixed-bottom {
                            position: absolute;
                            top: auto;
                            width: 205px;
                            bottom: 0;
                          }
                        }

                        @media screen and (max-width: 991px) {
                          .bloco-fatura-interativa {
                            padding-left: 0px;
                            padding-right: 0px;
                          }

                          .bolas a {
                            transform: scale(0.7) translateY(-70%) translateX(-70%);
                          }
                        }

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

                          .bl-tabs .tab-content .tab-pane,
                          #col-cont-right .area-conteudo {
                            padding: 0;
                          }

                          .right-bt,
                          .left-bt {
                            display: none;
                          }

                          .closeballoon {
                            right: 15px;
                            top: 5px;
                          }

                          .bolas {
                            display: none !important;
                          }

                          .col-nav-left {
                            margin-top: 30px;
                          }

                          .col-nav-left,
                          #right-side {
                            width: 100%;
                          }

                          #col-cont-right .nav-pag {
                            display: none;
                          }

                          .left-side {
                            position: relative;
                          }

                          .left-side .col-nav-left {
                            /*padding-left:0;padding-right:0;text-align: center;*/
                          }

                          .left-side {
                            padding: 0;
                          }

                          .sec-help {
                            display: none;
                          }

                          .col-nav-left .sec-nav {
                            border: none;
                            padding-top: 0;
                          }

                          .area-conteudo .area-img img {
                            min-width: inherit;
                            min-height: inherit;
                          }

                          .bloco-fatura-interativa {
                            padding-left: 0;
                            padding-right: 0;
                          }

                          .sec-help.links {
                            display: block;
                          }

                          .col-nav-left {
                            margin-top: 25px;
                          }

                          .left-side .col-nav-left {
                            padding-left: 0;
                            padding-right: 0;
                          }

                          .bloco-fatura-interativa .menu-fatura {
                            padding-left: 20px;
                            padding-right: 20px;
                          }

                          .left-side .col-nav-left,
                          .bl-tabs .tab-content>a.active,
                          .bl-tabs .tab-content a:active {
                            background: #f4f4f4;
                          }

                          .bl-tabs .tab-content .tab-pane.active {
                            background: #fff;
                            border-top: none;
                          }

                          .bl-tabs .nav-tabs {
                            padding: 0 0px;
                            width: 100%;
                            display: block !important;
                            margin-bottom: 1px;
                          }

                          .bl-tabs .nav-tabs li {
                            border: 1px solid #eee !important;
                            border-bottom: none;
                          }

                          .bl-tabs .nav-tabs li {
                            margin: 0 !important;
                            display: inline-block !important;
                            width: 100% !important;
                          }

                          .bl-tabs .nav-tabs li:last-child {
                            border-bottom: 1px solid #eee !important;
                          }

                          .bl-tabs .nav-tabs li a {
                            border: none !important;
                            margin: 0 !important;
                          }

                          .bl-tabs .nav-tabs li {
                            display: inline-block;
                            float: none;
                            width: 100%;
                            border: none !important;
                            border-radius: 0;
                            margin: 0;
                            outline: 1px solid #eee !important;
                          }

                          .bl-tabs .nav-tabs li.active,
                          .bl-tabs .nav-tabs li a,
                          .bl-tabs .nav-tabs li a:hover,
                          .bl-tabs .nav-tabs li a:focus {
                            border: none !important;
                            border-radius: 0;
                            margin: 0;
                          }

                          .col-nav-left .sec-help,
                          .col-nav-left .sec-nav {
                            padding: 30px 20px;
                          }

                          .bloco-fatura-interativa .box-title {
                            padding: 0 20px;
                          }

                          #info-balloon {
                            width: 100% !important;
                            max-width: 100% !important;
                            left: 0 !important;
                            right: 0 !important;
                            /*position:relative!important;*/
                            margin: 0 !important;
                            /*top:0!important;bottom:0!important;*/
                            transform: none !important;
                            /**/
                          }

                          #info-balloon.bottom_left:after,
                          #info-balloon.bottom_center:after,
                          #info-balloon.bottom_right:after,
                          #info-balloon.top_center:after,
                          #info-balloon.top_right:after,
                          #info-balloon.middle_left:after,
                          #info-balloon.middle_right:after,
                          #info-balloon:after {
                            top: -15px !important;
                            left: 50% !important;
                            transform: rotate(180deg) !important;
                            border-left: 10px solid transparent;
                            border-right: 10px solid transparent;
                            border-top: 15px solid #fff;
                            margin-top: 5px;
                          }

                          .bloco-fatura-interativa h2 {
                            padding-top: 0;
                            font-size: 22px;
                          }

                          .bloco-fatura-interativa h3 {
                            padding-bottom: 0px;
                            margin-bottom: 0;
                          }

                          /*#Tabify{padding-top:30px;}*/
                          .sec-help.links h3 {
                            padding-bottom: 0px;
                          }

                          .left-side .col-nav-left {
                            margin-top: 0;
                          }

                          .header-bot {
                            border-bottom: 2px solid #f4f4f4 !important;
                          }

                          #right-side {
                            display: none;
                          }

                          #Contentify {
                            padding-bottom: 0;
                          }

                          .col-nav-left .sec-help {
                            padding-bottom: 0;
                          }

                          .box-title.text-left.container {
                            margin-top: 20px;
                          }

                          .desktop.sec-help.links {
                            display: none !important;
                          }

                          .mobile.sec-help.links {
                            display: block !important;
                          }

                          .mobile.sec-help.links h3:after {
                            content: none;
                          }

                          .mobile.sec-help.links h3 {
                            padding-bottom: 20px;
                            pointer-events: none;
                          }

                          .mobile.sec-help.links ul {
                            display: block !important;
                          }

                          .faturas-in-tabs h4,
                          .faturas-in-tabs h4:hover {
                            pointer-events: none;
                          }

                          .faturas-in-tabs h4:after {
                            content: none;
                          }

                          .faturas-in-tabs ul {
                            display: block !important;
                          }

                          div#wrapfloatingmenu.affixed {
                            position: relative;
                            width: 100%;
                          }
                        }
                      </style>
                      <section class="bloco-fatura-interativa bl-tabs" style="">
                        <div class="top-intro">
                          <h2>Compreender a sua fatura</h2>
                          <h4>Conheça em detalhe o conteúdo das várias secções da sua fatura</h4>
                        </div>
                        <div id="Loadify">
                          <img src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/loading.gif" height="64" width="64" alt="loading">
                        </div>
                        <!--<div class="fd-nav-tabs"><ul class="nav nav-tabs" id="Tabify"></ul></div>-->
                        <div class="block-tabs fake-tabs" data-activetab="0">
                          <div class="part">
                            <div class="tab-menu">
                              <ul id="Tabify">
                                <li class="active"><a title="1ª Fatura - Pacotes" href="#tab11">1ª Fatura - Pacotes</a></li>
                                <li class=""><a title="Fatura Pacotes" href="#tab12">Fatura Pacotes</a></li>
                                <li class=""><a title="1ª Fatura - Telemóvel" href="#tab13">1ª Fatura - Telemóvel</a></li>
                                <li class=""><a title="Fatura - Telemóvel" href="#tab14">Fatura - Telemóvel</a></li>
                              </ul>
                              <div class="arrows limit"><a class="left-arrow"></a><a class="right-arrow"></a></div>
                            </div>
                          </div>
                        </div>
                        <div class="tab-content" id="Contentify">
                          <!-- MEO <a href="#tab11" class="active">MEO</a>-->
                          <div class="tab-pane active">
                            <span class="hidden ancoras"></span>
                            <div class="left-side">
                              <div class="col-nav-left">
                                <div class="sec-help" id="video-link-box">
                                  <h3>Dúvidas na fatura?</h3>
                                  <p>Saiba como está organizada e veja as explicações passo a passo.</p>
                                </div>
                                <div id="wrapfloatingmenu" class="menu-fatura affixed-top">
                                  <div class="sec-nav" id="nav-faturas">
                                    <div class="faturas-in-tabs">
                                      <h4>1ª Fatura - Pacotes</h4>
                                      <ul id="listaPaginas">
                                        <div class="pages-group">
                                          <h5>Página 1</h5>
                                          <ul class="listaItems">
                                            <li>Área de Cliente</li>
                                            <li>Dados de Cliente</li>
                                            <li>Resumo da Fatura</li>
                                            <li>Valor a Pagar</li>
                                            <li>Modalidades de Pagamento</li>
                                          </ul>
                                        </div>
                                        <div class="pages-group">
                                          <h5>Página 2</h5>
                                          <ul class="listaItems">
                                            <li>Adesões</li>
                                            <li>Mensalidades do Serviço</li>
                                            <li>Mensalidades Televisão</li>
                                            <li>Mensalidades Telemóvel</li>
                                            <li>Mensalidades Equipamentos</li>
                                            <li>Fatura Electrónica</li>
                                            <li>QR Code</li>
                                          </ul>
                                        </div>
                                        <div class="pages-group">
                                          <h5>Página 3</h5>
                                          <ul class="listaItems">
                                            <li>Consumos</li>
                                          </ul>
                                        </div>
                                      </ul>
                                    </div>
                                  </div>
                                  <div class="desktop sec-help links active">
                                    <h3>Ajuda e Suporte</h3>
                                    <ul>
                                      <li>
                                        <a href="https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente">Área de Cliente</a>
                                      </li>
                                      <li>
                                        <a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura">Consultar a sua fatura</a>
                                      </li>
                                      <li>
                                        <a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes">Consultar detalhe de comunicações</a>
                                      </li>
                                      <li>
                                        <a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado">Compreender valor de fatura superior ao esperado</a>
                                      </li>
                                      <li>
                                        <a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura">Pagar fatura</a>
                                      </li>
                                    </ul>
                                  </div>
                                </div>
                                <div id="left-side-fat-mobile"></div>
                                <div class="mobile sec-help links active">
                                  <h3>Ajuda e Suporte</h3>
                                  <ul>
                                    <li>
                                      <a href="https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente">Área de Cliente</a>
                                    </li>
                                    <li>
                                      <a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura">Consultar a sua fatura</a>
                                    </li>
                                    <li>
                                      <a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes">Consultar detalhe de comunicações</a>
                                    </li>
                                    <li>
                                      <a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado">Compreender valor de fatura superior ao esperado</a>
                                    </li>
                                    <li>
                                      <a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura">Pagar fatura</a>
                                    </li>
                                  </ul>
                                </div>
                              </div>
                            </div>
                            <div id="right-side">
                              <div id="col-cont-right">
                                <ul class="nav-pag" id="nav-pag">
                                  <li title="Página 1" class="active">1</li>
                                  <li title="Página 2" class="">2</li>
                                  <li title="Página 3" class="">3</li>
                                </ul>
                                <div class="area-conteudo">
                                  <div class="modal-fatura"></div>
                                  <div class="area-img">
                                    <div class="right-bt"></div>
                                    <div class="left-bt"></div>
                                    <div id="area-bolas-rects">
                                      <ul class="bolas">
                                        <a title="Área de Cliente" style="left:48.46%;top:6.88%;transition-delay:0.959s;">+</a><a title="Dados de Cliente" style="left:9.19%;top:12.5%;transition-delay:0.344s;">+</a><a title="Resumo da Fatura" style="left:9.19%;top:31.36%;transition-delay:0.762s;">+</a><a title="Valor a Pagar" style="left:9.19%;top:50.2%;transition-delay:0.344s;">+</a><a title="Modalidades de Pagamento" style="left:9.19%;top:76.77%;transition-delay:0.691s;">+</a>
                                      </ul>
                                      <div id="rect-border" class="rectangulo" style="display: none"></div>
                                      <!-- bolinhas e retangulos-->
                                    </div>
                                    <img id="img-fatura" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_1.png" alt="fatura" style="opacity: 1;">
                                    <div id="info-balloon" style="display: none" class="">
                                      <span class="closeballoon"></span>
                                      <h5 class="titulo"></h5>
                                      <p class="descricao"></p>
                                      <ul></ul>
                                    </div>
                                  </div>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                        <div class="box-title text-left container notas">
                          <p>
                            <strong>Nota: </strong>A fatura apresentada é apenas um exemplo. Os valores apresentados são exemplificativos.
                          </p>
                        </div>
                        <script>
                          /* DADOS  DA FATURA */
                          var objs = [];
                          /* TABS */
                          function AreasTabs(titulo, faturas, titVideo, linkVideo, descVideo) {
                            this.init(titulo, faturas, titVideo, linkVideo, descVideo);
                          }
                          AreasTabs.prototype = {
                            init: function(titulo, faturas, titVideo, linkVideo, descVideo) {
                              this.titulo = titulo;
                              this.faturas = faturas;
                              this.titVideo = titVideo;
                              this.linkVideo = linkVideo;
                              this.descVideo = descVideo;
                            },
                            create: function() {},
                          };
                          /* FATURAS */
                          function Fatura(titulo, pags) {
                            this.init(titulo, pags);
                          }
                          Fatura.prototype = {
                            init: function(titulo, pags) {
                              this.titulo = titulo;
                              this.pags = pags;
                            },
                          };
                          /* PAGINAS da FATURA */
                          function Pag(titulo, itens, imagem) {
                            this.init(titulo, itens, imagem);
                          }
                          Pag.prototype = {
                            init: function(titulo, itens, imagem) {
                              this.titulo = titulo;
                              this.itens = itens;
                              this.imagem = imagem;
                            },
                          };
                          /* propriedades bola / rect */
                          function AreaProps(xBola, yBola, xRect, yRect, wRect, hRect, xPop, yPop) {
                            this.init(xBola, yBola, xRect, yRect, wRect, hRect, xPop, yPop);
                          }
                          AreaProps.prototype = {
                            init: function(xBola, yBola, xRect, yRect, wRect, hRect, xPop, yPop) {
                              this.xBola = xBola;
                              this.yBola = yBola;
                              this.xRect = xRect;
                              this.yRect = yRect;
                              this.wRect = wRect;
                              this.hRect = hRect;
                              this.xPop = xPop;
                              this.yPop = yPop;
                            },
                          };
                          /* ITEMS */
                          function Items(titulo, tituloBalao, descricao, areaProps, links) {
                            this.init(titulo, tituloBalao, descricao, areaProps, links);
                          }
                          Items.prototype = {
                            init: function(titulo, tituloBalao, descricao, areaProps, links) {
                              this.titulo = titulo;
                              this.tituloBalao = tituloBalao;
                              this.descricao = descricao;
                              this.areaProps = areaProps;
                              this.links = links;
                            },
                          };
                          /* LINKS */
                          function Linke(type, texto, href) {
                            this.init(type, texto, href);
                          }
                          Linke.prototype = {
                            init: function(type, texto, href) {
                              this.type = type;
                              this.texto = texto;
                              this.href = href;
                            },
                          };
                          /* links */
                          var itens = [];
                          var linkes = [];
                          var pags = [];
                          var fats = [];
                          var tabs = [];
                          var props;
                          /* **************************************************************************** */
                          /* INICIO DOS  DADOS */
                          /* **************************************************************************** */
                          /* ############### FATURA 1º FATURA PACOTE ###############*/
                          /* ############### FATURA 1º FATURA PACOTE ###############*/
                          /* ############### FATURA 1º FATURA PACOTE ###############*/
                          //https://rd3.videos.sapo.pt/playhtml?file=https://rd3.videos.sapo.pt/kGjNTrpOLMYrzFy8CyYZ/mov/1&amp;quality=sd
                          // 1 Área de Cliente
                          linkes.push(new Linke("url", "Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente"));
                          linkes.push(new Linke("url", "Consultar fatura no PC", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura#consultarfaturaareadecliente"));
                          linkes.push(new Linke("url", "Consultar fatura na TV", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura#consultarfaturatv"));
                          linkes.push(new Linke("url", "Vantagens de aderir à Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#vantagensdeaderirareadecliente"));
                          props = new AreaProps(48.46, 6.88, 52.9, 4.95, 22.7, 7.5, "center", "bottom");
                          itens.push(new Items("Área de Cliente", "Área de Cliente", 'Consulte o detalhe da sua fatura, ative serviços e muito mais em <a href="http://www.meo.pt">meo.pt</a> ou no menu da sua televisão', props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // 2 dados do cliente
                          linkes.push(new Linke("url", "Consultar dados de cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/dados-de-acesso-a-sites-e-apps#vernrdeclienteenrdecontanaareadecliente"));
                          linkes.push(new Linke("url", "Registo na Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
                          props = new AreaProps(9.19, 12.5, 11, 11, 30, 11, "right", "middle");
                          itens.push(new Items("Dados de Cliente", "Dados de Cliente", "Tenha os seus <strong>dados de cliente</strong> à mão, sempre que nos contactar", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // 3 resumo da fatura
                          //linkes.push(new Linke('url','Compreender a sua 1ª fatura (pacote com telemóvel) - vídeo','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#video_compreender1afaturapacotecomtelemovel'));
                          // EM MODAL new Linke('video'
                          //https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4'));
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          // EM MODAL
                          //'https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado'));
                          props = new AreaProps(9.19, 31.36, 10.07, 27.99, 86.01, 24.46, "center", "top");
                          itens.push(new Items("Resumo da Fatura", "Resumo da Fatura", "Aqui pode ver o resumo da sua fatura, o mês a que corresponde, data limite para pagamento e valor a pagar", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          /* new item */
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          //linkes.push(new Linke('url','Compreender a sua 1ª fatura (pacote com telemóvel) - vídeo','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado'));
                          linkes.push(new Linke("url", "Como pagar a sua fatura?", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura"));
                          // EM MODAL
                          //'https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4'));
                          props = new AreaProps(9.19, 50.2, 10.07, 48, 86.01, 4.1, "center", "top");
                          itens.push(new Items("Valor a Pagar", "Valor a Pagar",
                            "A sua 1ª fatura pode não corresponder a um mês completo pois começa no dia da instalação e termina no final do período de faturação. Nas próximas faturas isso já não acontecerá!", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // new item  (removido pois nao aparece no pdf/imagem da fatura
                          /*	linkes = []; // ESTE ITEM NAO TEM LINKS
                            props = new AreaProps(6.31, 70.81, 10.07, 68.64, 86.01, 5.55, 'center','top');
                            itens.push(new Items('Promoções e Novidades','Promoções e Novidades','Fique atento às promoções e novidades que temos para si',props,linkes));
                            linkes = [];
                            props = "";
                          */
                          /* new item */
                          linkes.push(new Linke("url", "Pagar Faturas na Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasareadecliente"));
                          linkes.push(new Linke("url", "Pagar Faturas por Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturaspordebitodireto"));
                          linkes.push(new Linke("url", "Vantagens do Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
                          linkes.push(new Linke("url", "Pagar Faturas por Multibanco", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasnomultibanco"));
                          linkes.push(new Linke("url", "Fatura eletrónica", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao"));
                          props = new AreaProps(9.19, 76.77, 11.5, 74.43, 84, 19.9, "center", "top");
                          itens.push(new Items("Modalidades de Pagamento", "Modalidades de Pagamento",
                            "Tudo o que precisa para pagar a sua fatura está aqui! Para sua conveniência, <strong>ative o Débito Direto de forma gratuita</strong> na sua Área de Cliente. Se pagar por MB, <strong>saiba que a entidade e referência são sempre iguais</strong> em todas as faturas.",
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          /* new item */
                          // finalmente adicionar tudo a esta página
                          pags.push(new Pag("Página 1", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_1.png"));
                          itens = [];
                          // agora criar a outra página...:
                          // agora criar a outra página...:
                          // agora criar a outra página...:
                          // agora criar a outra página...:
                          /* new item */
                          linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          linkes.push(new Linke("url", "Ofertas de adesão aos pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#ofertasadesaopacotesmeo"));
                          props = new AreaProps(9.19, 20.39, 11.5, 18.58, 84.64, 14.35, "center", "bottom");
                          itens.push(new Items("Adesões", "Adesões", "Instalação e ativação do serviço, bem como os restantes serviços ativados e eventuais ofertas", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          /* new item */
                          linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          props = new AreaProps(9.19, 37.64, 11.5, 33.3, 84.64, 12.3, "center", "top");
                          itens.push(new Items("Mensalidades do Serviço", "Mensalidades do Serviço", "Mensalidade do seu pacote e descontos que possa ter atribuídos", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          /* new item */
                          linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          props = new AreaProps(9.19, 46.56, 11.5, 45.36, 84.64, 8.55, "center", "top");
                          itens.push(new Items("Mensalidades Televisão", "Mensalidades Televisão", "Mensalidade de canais adicionais que tenha subscrito", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          /* new item */
                          linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          props = new AreaProps(9.19, 55.97, 11.5, 54.04, 84.64, 5.85, "center", "top");
                          itens.push(new Items("Mensalidades Telemóvel", "Mensalidades Telemóvel", "Apenas para serviços com telemóveis: mensalidades do 3º e/ou 4º cartões e eventuais descontos", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          /* new item */
                          linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
                          linkes.push(new Linke("url", "Compra ou aluguer de equipamentos", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/adesao-e-instalacao#compraoualuguerdeequipamentosnospacotesmeo"));
                          linkes.push(new Linke("url", "MEOBoxes Fibra, ADSL e Satélite", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/adesao-e-instalacao#meoboxesfibraadslesatelite"));
                          /*linkes.push(new Linke('url','Compreender valor de fatura superior ao esperado','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado'));*/
                          props = new AreaProps(9.19, 61.28, 11.5, 59.95, 84.64, 10.25, "center", "top");
                          itens.push(new Items("Mensalidades Equipamentos", "Mensalidades Equipamentos", "Aluguer mensal de MEObox e descontos associados", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Vantagens da fatura eletrónica", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#vantagensdafaturaeletronica"));
                          linkes.push(new Linke("url", "Aderir à fatura eletrónica na Área de Cliente",
                            "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#aderirfaturaeletronicanaareadecliente"));
                          linkes.push(new Linke("url", "Aderir à fatura eletrónica na TV", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#aderirfaturaeletronicanatv"));
                          linkes.push(new Linke("url", "Vantagens do débito direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
                          props = new AreaProps(9.19, 76.99, 9.49, 74.91, 61.21, 11.1, "center", "top");
                          itens.push(new Items("Fatura Electrónica", "Fatura Eletrónica",
                            "Se ainda não tem fatura eletrónica e débito direto, adira já na Área de Cliente em meo.pt ou na sua TV. Simplifique a sua vida, ajude o ambiente e usufrua de ofertas especiais.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          /* new item */
                          linkes.push(new Linke("video", "Ver video", "https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4"));
                          props = new AreaProps(69.06, 76.84, 69.28, 74.67, 26.45, 11.7, "left", "middle");
                          //itens.push(new Items('QR Code','QR Code','Saiba mais sobre a sua fatura através deste QR Code.',props,linkes));
                          itens.push(new Items("QR Code", "QR Code", "Saiba mais sobre a sua fatura através deste QR Code.", props, ""));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          /* */
                          // DEPOIS DO ULTIMA ITEM DA fatura
                          // finalmente adicionar tudo a esta página
                          pags.push(new Pag("Página 2", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_2.png"));
                          itens = [];
                          // agora criar a outra página...:
                          // agora criar a outra página...:
                          // agora criar a outra página...:
                          // agora criar a outra página...:
                          /* new item */
                          //linkes.push(new Linke('url','Controlo de custos de pacotes MEO','https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#controlodecustospacotesmeo'));
                          linkes.push(new Linke("url", "Consultar detalhe de comunicações", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes"));
                          linkes.push(new Linke("url", "Consultar consumos marcando *#123#", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/consultar-consumos#consultarconsumosusd"));
                          linkes.push(new Linke("url", "Consumos de extramensalidade e saldo recarga",
                            "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/extramensalidade#consultarextramensalidadesaldorecarga"));
                          //'https://www.meo.pt/PublishingImages/videos/ajuda/Unlimited-Controlo-de-custos/Unlimited-Controlo-de-custos.mp4'));
                          linkes.push(new Linke("url", "Detalhe e dados de fatura", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura"));
                          linkes.push(new Linke("url", "Alertas de consumo no telemóvel", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/alertas#alertasdeconsumosdotelemovel"));
                          props = new AreaProps(4.19, 13.5, 6.39, 12.42, 82.71, 36.9, "center", "bottom");
                          itens.push(new Items("Consumos", "Consumos",
                            "Na rubrica consumos pode consultar os consumos extramensalidade, nomeadamente chamadas telefónicas (fixas e móveis) por serviço e tipo de comunicação, bem como alugueres do MEO VideoClube.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // adiciona tudo à pagina
                          pags.push(new Pag("Página 3", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_3.png"));
                          itens = [];
                          // e adicionar ás faturas
                          fats.push(new Fatura("1ª Fatura - Pacotes", pags));
                          // era a ultima pagina
                          // adiciona a fatura á tab atual---  (4 valor é o link do botão)
                          // exemplo com botão ---- tabs.push(new AreasTabs("1ª Fatura - Pacotes",fats,"Dúvidas com a sua fatura?", "https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4", "Saiba como interpretar a sua fatura e compreenda facilmente toda a informação que lhe enviamos."))
                          tabs.push(new AreasTabs("1ª Fatura - Pacotes", fats, "Dúvidas na fatura?", "", "Saiba como está organizada e veja as explicações passo a passo."));
                          // limpar fatura depois de adicionar a ultima página e adicionar a fatura á tab
                          fats = [];
                          // apenas porque só há uma fatura por tab, senao continuava a adicionar props e fats á tab.
                          // limpa  as paginas
                          pags = [];
                          /* ############### FATURA PACOTES  ###############*/
                          /* ############### FATURA PACOTES  ###############*/
                          /* ############### FATURA PACOTES  ###############*/
                          linkes.push(new Linke("url", "Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente"));
                          linkes.push(new Linke("url", "Consultar fatura no PC ", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura#consultarfaturaareadecliente"));
                          linkes.push(new Linke("url", "Consultar fatura na TV", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura#consultarfaturatv "));
                          linkes.push(new Linke("url", "Vantagens de aderir à Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#vantagensdeaderirareadecliente"));
                          props = new AreaProps(48.46, 6.88, 52.9, 4.95, 22.7, 7.5, "center", "bottom");
                          itens.push(new Items("Área de Cliente", "Área de Cliente", "Consulte o detalhe da sua fatura, ative serviços e muito mais em meo.pt ou no menu da sua televisão", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Consultar dados de cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/dados-de-acesso-a-sites-e-apps#vernrdeclienteenrdecontanaareadecliente"));
                          linkes.push(new Linke("url", "Registo na Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
                          props = new AreaProps(9.19, 12.5, 11, 11, 30, 11, "right", "middle");
                          itens.push(new Items("Dados de Cliente", "Dados de Cliente", "Tenha os seus <strong>dados de cliente</strong> à mão, sempre que nos contactar", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          //linkes.push(new Linke('url','Compreender a sua 1ª fatura (pacote com telemóvel) - vídeo','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#video_videofatura'));
                          //'https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4'));
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          props = new AreaProps(9.19, 31.36, 10.07, 27.99, 86.01, 27.46, "center", "top");
                          itens.push(new Items("Resumo da Fatura", "Resumo da Fatura", "Aqui pode ver o resumo da sua fatura, o mês a que corresponde, data limite para pagamento e valor a pagar", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes = [];
                          //linkes.push(new Linke('url','Saiba mais sobre a sua fatura - vídeo','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#video_videofatura'));
                          //'https://www.meo.pt/PublishingImages/videos/ajuda/fatura-eletronica-meo/fatura-eletronica-meo.mp4'));
                          props = new AreaProps(9.19, 56.6, 10.8, 55.67, 84.12, 10.98, "center", "top");
                          itens.push(new Items("Extrato de Conta", "Extrato de Conta",
                            'No Extrato de Conta encontram-se todos os movimentos da sua conta desde a última fatura. Caso existam valores de faturas anteriores que estejam por pagar os mesmos irão surgir nesta secção, já englobados na rubrica "Valor a Pagar"',
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Pagar Faturas na Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasareadecliente"));
                          linkes.push(new Linke("url", "Pagar Faturas por Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturaspordebitodireto"));
                          linkes.push(new Linke("url", "Vantagens do Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
                          linkes.push(new Linke("url", "Pagar Faturas por Multibanco", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasnomultibanco"));
                          linkes.push(new Linke("url", "Fatura eletrónica", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao"));
                          props = new AreaProps(9.19, 72.49, 10.8, 70.98, 84.12, 24.51, "center", "top");
                          itens.push(new Items("Modalidades de Pagamento", "Modalidades de Pagamento",
                            "Tudo o que precisa para pagar a sua fatura está aqui! Para sua conveniência, <strong>ative o Débito Direto de forma gratuita</strong> na sua Área de Cliente. Se pagar por MB, <strong>saiba que a entidade e referência são sempre iguais</strong> em todas as faturas.",
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // adiciona tudo à pagina
                          pags.push(new Pag("Página 1", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_1.png"));
                          itens = [];
                          linkes.push(new Linke("url", "Ofertas de adesão aos pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#ofertasadesaopacotesmeo"));
                          linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          //'https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4'));
                          props = new AreaProps(9.19, 19.97, 11.29, 18.95, 84.45, 13.5, "center", "bottom");
                          itens.push(new Items("Adesões", "Adesões", 'Caso tenha aderido a algum serviço MEO, o valor referente à sua adesão estará na rubrica "Adesões", com o detalhe do serviço a que se refere.', props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          props = new AreaProps(9.19, 34.57, 11.29, 32.6, 84.45, 40.35, "center", "top");
                          itens.push(new Items("Mensalidades", "Mensalidades",
                            'Na secção "Mensalidades" encontram-se os valores mensais das suas subcrições: pacote contratado, canais premium e/ou cartões móveis adicionais. Tem ainda as mensalidades de equipamentos que possa ter (exemplo: aluguer MEObox)',
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          /* AQUI */
                          linkes.push(new Linke("url", "Vantagens da fatura eletrónica", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#vantagensdafaturaeletronica"));
                          linkes.push(new Linke("url", "Aderir à fatura eletrónica na Área de Cliente",
                            "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#aderirfaturaeletronicanaareadecliente"));
                          linkes.push(new Linke("url", "Aderir à fatura eletrónica na TV", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#aderirfaturaeletronicanatv"));
                          linkes.push(new Linke("url", "Vantagens do débito direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
                          props = new AreaProps(9.19, 76.99, 9.49, 74.91, 61.21, 11.1, "center", "top");
                          itens.push(new Items("Fatura Electrónica", "Fatura Eletrónica",
                            "Se ainda não tem fatura eletrónica e débito direto, adira já na Área de Cliente em meo.pt ou na sua TV. Simplifique a sua vida, ajude o ambiente e usufrua de ofertas especiais.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("video", "Ver video", "https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4"));
                          props = new AreaProps(69.06, 76.84, 69.28, 74.67, 26.45, 11.7, "left", "middle");
                          //itens.push(new Items('QR Code','QR Code','Saiba mais sobre a sua fatura através deste QR Code.',props,linkes));
                          itens.push(new Items("QR Code", "QR Code", "Saiba mais sobre a sua fatura através deste QR Code.", props, ""));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // adiciona tudo à pagina
                          pags.push(new Pag("Página 2", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_2.png"));
                          itens = [];
                          linkes.push(new Linke("url", "Detalhe e dados de fatura", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura"));
                          linkes.push(new Linke("url", "Consultar detalhe de comunicações", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes"));
                          linkes.push(new Linke("url", "Consultar consumos marcando *#123#", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/consultar-consumos#consultarconsumosusd"));
                          linkes.push(new Linke("url", "Consultar consumos de extramensalidade",
                            "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/extramensalidade#consultarextramensalidadesaldorecarga"));
                          linkes.push(new Linke("url", "Alertas de consumo no telemóvel", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/alertas#alertasdeconsumosdotelemovel"));
                          //'https://www.meo.pt/PublishingImages/videos/ajuda/Unlimited-Controlo-de-custos/Unlimited-Controlo-de-custos.mp4'));
                          props = new AreaProps(4.82, 14.51, 5.62, 12.02, 84.43, 42.4, "center", "bottom");
                          itens.push(new Items("Consumos", "Consumos",
                            "Na rubrica consumos pode consultar os consumos extramensalidade, nomeadamente chamadas telefónicas (fixas e móveis) por serviço e tipo de comunicação, bem como alugueres do MEO VideoClube.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          linkes.push(new Linke("url", "Penalização no atraso no pagamento da fatura", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#atrasopagamentofatura"));
                          linkes.push(new Linke("url", "Vantagens do débito direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
                          linkes.push(new Linke("url", "Custo de restabelecimento do serviço", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#custorestabelecimento"));
                          props = new AreaProps(4.82, 56.51, 5.62, 54.65, 84.43, 10.09, "center", "top");
                          itens.push(new Items("Serviços Administrativos", "Serviços Administrativos",
                            'Na secção "Serviços Administrativos" podem constar rubricas como, por exemplo, taxas de atraso de pagamento ou outros impostos. Para manter os seus pagamentos sempre em dia e evitar eventuais taxas por atraso de pagamento, ative o Débito Direto. Pode fazê-lo de forma gratuita na sua área de cliente no PC ou no Tablet em meo.pt',
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // adiciona tudo à pagina
                          pags.push(new Pag("Página 3", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_3.png"));
                          itens = [];
                          // e adicionar ás faturas
                          fats.push(new Fatura("Fatura Pacotes", pags));
                          // adiciona a fatura á tab atual
                          //tabs.push(new AreasTabs("Fatura Pacotes",fats,"Dúvidas com a sua fatura?", "https://www.meo.pt/PublishingImages/videos/ajuda/fatura-eletronica-meo/fatura-eletronica-meo.mp4", "Saiba como interpretar a sua fatura e compreenda facilmente toda a informação que lhe enviamos."))
                          tabs.push(new AreasTabs("Fatura Pacotes", fats, "Dúvidas na fatura?", "", "Saiba como está organizada e veja as explicações passo a passo."));
                          // limpar fatura depois de adicionar a ultima página e adicionar a fatura á tab, uma vez que é so uma fatura por tab
                          fats = [];
                          // limpa  as paginas
                          pags = [];
                          /* ############# FIM FATURA ##############*/
                          /* ############### 1º fatura telemovel ###############*/
                          /* ############### 1º fatura telemovel ###############*/
                          /* ############### 1º fatura telemovel ###############*/
                          linkes.push(new Linke("url", "Saber o que pode fazer no my MEO.", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#vantagensdeaderirareadecliente"));
                          linkes.push(new Linke("url", "Como Instalar a app my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#instalarappmymeo"));
                          linkes.push(new Linke("url", "Como ver os serviços no my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
                          linkes.push(new Linke("url", "Entrar no my MEO", "https://mymeo.page.link/home"));
                          linkes.push(new Linke("url", "Consultar as linhas de apoio MEO", "https://www.meo.pt/linhas-apoio"));
                          props = new AreaProps(46.7, 4.49, 51.41, 5.0, 23.04, 5.55, "center", "bottom");
                          itens.push(new Items("Área de Cliente my MEO", "Área de Cliente <a href='https://www.meo.pt/cliente' target='_blank'>my MEO</a>", "Permite gerir os serviços MEO sem custos 24h/dia, no computador, tablet ou telemóvel.",
                            props, linkes));
                          linkes = [];
                          props = "";
                          linkes.push(new Linke("url", "O que é o CVP", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/telefone/portabilidade#oqueeocvppacotes"));
                          linkes.push(new Linke("url", "Acesso ao my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
                          props = new AreaProps(9.19, 12.55, 10.84, 11.5, 30.57, 15.77, "right", "middle");
                          itens.push(new Items("Dados de Cliente", "Dados de Cliente",
                            "Estes são os números que o identificam no MEO.<br>Aqui tem o nº de conta e o tarifário subscrito.<br>Tenha estes dados à mão quando nos contactar ou quando associar os serviços no my MEO.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // FALTA UM ITEM DE CONTEUDO  VIDEO
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          props = new AreaProps(9.19, 31.06, 10.84, 28.04, 86.6, 17.79, "center", "bottom");
                          itens.push(new Items("Resumo da Fatura", "Resumo da Fatura",
                            "Esta é a área da fatura onde pode ver o resumo da fatura do mês, a data limite de pagamento e o valor a pagar.<br><br>A faturação está organizada em três áreas:</p>" +
                            "<strong>- Adesões</strong>: valores relativos a adesão a novos serviços<br>" + "<strong>- Mensalidades</strong>: valores relativos a mensalidades dos tarifários subscritos<br>" +
                            "<strong>- Consumos</strong>: valores consumidos no mês anterior à fatura<br><br>" + "<p class='descricao'>A 1ª fatura pode não corresponder a um mês inteiro porque a faturação só inicia no dia de adesão", props,
                            linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // removido este destaque do valor a pagar
                          /*
                          linkes.push(
                            new Linke(
                              "url",
                              "Compreender valor de fatura superior ao esperado",
                              "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"
                            )
                          );
                          props = new AreaProps(
                            9.19,
                            56.7,
                            11.14,
                            55.74,
                            86.6,
                            3.4,
                            "center",
                            "top"
                          );
                          itens.push(
                            new Items(
                              "Valor a Pagar",
                              "Valor a Pagar",
                              "A sua 1ª fatura pode não corresponder a um mês completo, pois começa no dia em que aderiu. As mensalidades e consumos são referentes ao mês anterior.",
                              props,
                              linkes
                            )
                          );
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          */
                          // removido este destaque das promoçoes e novidades
                          /*
                          linkes = [];
                          props = new AreaProps(
                            9.19,
                            70.11,
                            11.14,
                            67.98,
                            86.6,
                            7.34,
                            "center",
                            "top"
                          );
                          itens.push(
                            new Items(
                              "Promoções e Novidades",
                              "Promoções e Novidades",
                              "Fique atento às promoções e novidades que temos para si",
                              props,
                              linkes
                            )
                          );
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          */
                          linkes.push(new Linke("url", "Como ativar o Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#aderirdebitodiretopctablet"));
                          linkes.push(new Linke("url", "Como pagar a fatura na área de cliente my MEO", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasareadecliente"));
                          linkes.push(new Linke("url", "Como pagar faturas por Multibanco", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasnomultibanco"));
                          props = new AreaProps(9.19, 76.7, 10.54, 74.21, 86.6, 20.91, "center", "top");
                          itens.push(new Items("Meios de Pagamento", "Meios de Pagamento",
                            "Toda a informação que precisa para pagar a fatura está aqui.</p><p class='descricao'>Saiba como <strong>ativar o Débito Direto</strong>, uma forma gratuita e cómoda de pagar a sua fatura.</p><p class='descricao'>Se optar por <strong>pagar por MB</strong>, saiba que a entidade e a referência são sempre as mesmas. Só muda o valor.",
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // adiciona tudo à pagina
                          pags.push(new Pag("Página 1", itens,
                            //"https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_UNL_Page_1.png"
                            "https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/1FaturaTelemovel_p1.jpg"));
                          itens = [];
                          linkes.push(new Linke("url", "Saiba o que é o Programa MEOS", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/meos/programa#oqueeoprogramameos"));
                          linkes.push(new Linke("url", "Conheça as sugestões e o catálogo", "https://www.meo.pt/meos"));
                          props = new AreaProps(6.19, 6.66, 5.54, 4.8, 86.6, 8.5, "center", "bottom");
                          itens.push(new Items("Programa MEOS", "Programa MEOS", "Nesta área pode ver o <strong>saldo MEOS</strong> e principais movimentos.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // nao tem ul de links
                          props = new AreaProps(6.19, 26.83, 7.54, 27.06, 81.6, 6.5, "center", "bottom");
                          itens.push(new Items("Adesões", "Adesões", "Nesta área, pode ver no período indicado, o valor de adesão ao tarifário e respetivos descontos comerciais.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // nao tem ul de links
                          props = new AreaProps(6.19, 32.83, 7.54, 34.06, 81.6, 8.5, "center", "bottom");
                          itens.push(new Items("Mensalidades", "Mensalidades",
                            "Nesta área pode ver no período indicado, a <strong>mensalidade do tarifário</strong> e dos <strong>serviços adicionais</strong> (ex. extra de internet, waiting ring) e respetivos descontos, como por ex. o desconto mensal de adesão à Fatura Eletrónica.",
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Saber mais sobre extramensalidade", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/extramensalidade#extramensalidadeesaldorecarga"));
                          //'https://www.meo.pt/PublishingImages/videos/ajuda/Unlimited-Controlo-de-custos/Unlimited-Controlo-de-custos.mp4'));
                          linkes.push(new Linke("url", "Como controlar consumos", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/consultar-consumos#consultarconsumosusd"));
                          linkes.push(new Linke("url", "Como consultar detalhe de comunicações", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes"));
                          linkes.push(new Linke("url", "Alertas de consumo no telemóvel", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/alertas#alertasdeconsumosdotelemovel"));
                          props = new AreaProps(6.19, 42.83, 6.54, 43, 84.6, 13.68, "center", "top");
                          itens.push(new Items("Consumos", "Consumos",
                            "Aqui pode ver a <strong>faturação dos consumos que realizou no mês anterior</strong> e que podem ser de voz, internet ou roaming.</p><p class='descricao'>Pode consultar o valor das comunicações que não estão incluídas no tarifário, assim como o nº de comunicações que foram realizadas.</p><p class='descricao'>Caso não pretenda realizar chamadas ou acessos com custo, pode alterar o valor da extramensalidade, mas alertamos que é importante ter sempre algum valor para comunicações urgentes e inesperadas.",
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // adiciona tudo à pagina
                          pags.push(new Pag("Página 2", itens,
                            //"https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_UNL_Page_2.png"
                            "https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/1FaturaTelemovel_p2.jpg"));
                          itens = [];
                          // e adicionar ás faturas
                          fats.push(new Fatura("1ª Fatura - Telemóvel", pags));
                          // adiciona a fatura á tab atual
                          //https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4
                          //tabs.push(new AreasTabs("1ª Fatura - Telemóvel",fats,"Dúvidas com a sua fatura?", "https://www.meo.pt/PublishingImages/videos/ajuda/Fatura_Movel.mp4", "Saiba como interpretar a sua fatura e compreenda facilmente toda a informação que lhe enviamos."))
                          tabs.push(new AreasTabs("1ª Fatura - Telemóvel", fats, "Dúvidas na fatura?", "", "Saiba como está organizada e veja as explicações passo a passo."));
                          // limpar fatura depois de adicionar a ultima página e adicionar a fatura á tab, uma vez que é so uma fatura por tab
                          fats = [];
                          // limpa  as paginas
                          pags = [];
                          /* ############# FIM FATURA ##############*/
                          /* ############### FATURA TELEMOVEL  ###############*/
                          /* ############### FATURA TELEMOVEL  ###############*/
                          /* ############### FATURA TELEMOVEL  ###############*/
                          linkes.push(new Linke("url", "Saber o que pode fazer no my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#vantagensdeaderirareadecliente"));
                          linkes.push(new Linke("url", "Como instalar a app my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#instalarappmymeo"));
                          linkes.push(new Linke("url", "Como ver os serviços no my MEO ", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
                          linkes.push(new Linke("url", "Entrar no my MEO", "https://mymeo.page.link/home"));
                          linkes.push(new Linke("url", "Consultar as linhas de apoio MEO", "https://www.meo.pt/linhas-apoio"));
                          props = new AreaProps(50.0, 7.13, 52.41, 5.11, 22.44, 7.23, "center", "bottom");
                          itens.push(new Items("Área de Cliente my MEO", "Área de Cliente <a href='https://www.meo.pt/cliente' target='_blank'>my MEO</a>",
                            "Permite gerir os serviços sem custos 24h/dia, disponível no computador, tablet ou telemóvel.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "O que é o CVP", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/telefone/portabilidade#oqueeocvppacotes"));
                          linkes.push(new Linke("url", "Acesso ao my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
                          props = new AreaProps(9.19, 14.57, 11.14, 13.3, 30.57, 10.11, "right", "middle");
                          itens.push(new Items("Dados de Cliente", "Dados de Cliente",
                            "Estes são os números que o identificam no MEO.</p><p class='descricao'>Aqui tem o nº de conta e o tarifário subscrito.<p class='descricao'>Tenha estes dados à mão quando nos contactar ou quando associar os serviços no my MEO.",
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          props = new AreaProps(9.19, 31.17, 11.14, 28.72, 86.75, 16.53, "center", "top");
                          itens.push(new Items("Resumo da Fatura", "Resumo da Fatura", "Aqui pode ver o resumo da fatura do mês, a data limite de pagamento da fatura e o valor a pagar.<br><br>A faturação está organizada em três áreas:</p>" +
                            "<strong>- Adesões</strong>: valores relativos a adesão a novos serviços<br>" + "<strong>- Mensalidades</strong>: valores relativos a mensalidades dos tarifários subscritos<br>" +
                            "<strong>- Consumos</strong>: valores consumidos no mês anterior à fatura<br><br>" + "<p class='descricao'>A 1ª fatura pode não corresponder a um mês inteiro porque a faturação só inicia no dia de adesão", props,
                            linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // nao tem linkes
                          linkes = [];
                          props = new AreaProps(9.19, 46.06, 11.54, 49.04, 86.6, 10.32, "center", "top");
                          itens.push(new Items("Extrato de Conta", "Extrato de Conta",
                            'Aqui encontra todos os movimentos na conta, desde a última fatura até à data de emissão da fatura do mês. Caso existam valores de faturas anteriores por pagar, os valores serão incluídos no <strong>Valor a pagar</strong>.</p><p class="descricao">Todos os valores pagos após a data de emissão da fatura, só serão visíveis na próxima fatura.',
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Como ativar o Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#aderirdebitodiretopctablet"));
                          linkes.push(new Linke("url", "Como pagar a fatura na área de cliente my MEO", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasareadecliente"));
                          linkes.push(new Linke("url", "Como pagar Faturas por Multibanco", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasnomultibanco"));
                          props = new AreaProps(9.19, 76.49, 10.54, 74.0, 86.6, 21.7, "center", "top");
                          itens.push(new Items("Meios de Pagamento", "Meios de Pagamento",
                            "Toda a informação que precisa para pagar a fatura está aqui.</p><p class='descricao'>Saiba como <strong>ativar o Débito Direto</strong>, uma forma gratuita e cómoda de pagar a sua fatura.</p><p class='descricao'>Se optar por <strong>pagar por MB</strong>, saiba que a entidade e a referência são sempre as mesmas. Só muda o valor.",
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // adiciona tudo à pagina
                          pags.push(new Pag("Página 1", itens, "https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/2FaturaTelemovel_p1.jpg"));
                          itens = [];
                          linkes.push(new Linke("url", "Como acumular MEOS.", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/meos/programa#oqueeoprogramameos"));
                          linkes.push(new Linke("url", "Conhecer as sugestões e o catálogo", "https://www.meo.pt/meos"));
                          linkes.push(new Linke("url", "Como consultar o saldo MEOS", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/meos/saldo#comoconsultarsaldomeos"));
                          linkes.push(new Linke("url", "Onde posso trocar MEOS", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/meos/trocar#ondepossotrocarmeos"));
                          props = new AreaProps(9.19, 6.91, 5.24, 5.5, 87.65, 7.5, "center", "bottom");
                          itens.push(new Items("Programa MEOS", "Programa MEOS", "Nesta área pode ver o <strong>saldo MEOS</strong> e principais movimentos.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
                          props = new AreaProps(4.19, 27.23, 5.54, 24.06, 87.65, 11.36, "center", "top");
                          itens.push(new Items("Mensalidades", "Mensalidades",
                            "Nesta área pode ver no período de faturação indicado, o valor da mensalidade do tarifário e dos serviços adicionais (ex. extra de internet) e respetivos descontos comerciais.", props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          linkes.push(new Linke("url", "Saber mais sobre extramensalidade", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/extramensalidade#extramensalidadeesaldorecarga"));
                          //'https://www.meo.pt/PublishingImages/videos/ajuda/Unlimited-Controlo-de-custos/Unlimited-Controlo-de-custos.mp4'));
                          linkes.push(new Linke("url", "Como controlar consumos", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/consultar-consumos#consultarconsumosusd"));
                          linkes.push(new Linke("url", "Como consultar detalhe de comunicações", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes"));
                          linkes.push(new Linke("url", "Alertas de consumo no telemóvel", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/alertas#alertasdeconsumosdotelemovel"));
                          props = new AreaProps(4.19, 37.13, 4.54, 34.74, 87.65, 11.7, "center", "top");
                          itens.push(new Items("Consumos", "Consumos",
                            "Aqui pode ver a <strong>faturação dos consumos que realizou no mês anterior</strong> e que podem ser de voz, internet ou roaming.</p><p class='descricao'>Pode consultar o valor das comunicações que não estão incluídas no tarifário, assim como o nº de comunicações que foram realizadas.</p><p class='descricao'>Caso não pretenda realizar chamadas ou acessos com custo, pode alterar o valor da extramensalidade, mas alertamos que é importante ter sempre algum valor para comunicações urgentes e inesperadas.",
                            props, linkes));
                          // LIMPA DADOS
                          linkes = [];
                          props = "";
                          // #### ADICIONA NOVA BOLA
                          // adiciona tudo à pagina
                          pags.push(new Pag("Página 2", itens, "https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/2FaturaTelemovel_p2.jpg"));
                          itens = [];
                          // e adicionar ás faturas
                          fats.push(new Fatura("Fatura - Telemóvel", pags));
                          // adiciona a fatura á tab atual
                          //tabs.push(new AreasTabs("Fatura - Telemóvel",fats,"Dúvidas com a sua fatura?", "https://www.meo.pt/PublishingImages/videos/ajuda/Fatura_Corrente_Movel/Fatura_Corrente_Movel.mp4", "Saiba como interpretar a sua fatura e compreenda facilmente toda a informação que lhe enviamos."))
                          tabs.push(new AreasTabs("Fatura - Telemóvel", fats, "Dúvidas na fatura?", "", "Saiba como está organizada e veja as explicações passo a passo."));
                          // limpar fatura depois de adicionar a ultima página e adicionar a fatura á tab, uma vez que é so uma fatura por tab
                          fats = [];
                          // limpa  as paginas
                          pags = [];
                          /* ############# FIM FATURA ##############*/
                          /* **************************************************************************** */
                          /* FIM DOS DADOS */
                          /* **************************************************************************** */
                          /* current indexes */
                          var firstime = true;
                          var openTab = false;

                          function createTabs(iTab, iFat, iPag, iTem, bottomLevelsOnly) {
                            tabs.forEach(function(element, index) {
                              if (firstime) {
                                $("#Tabify").append('<li class="' + (iTab == index ? "active" : "") + '"><a title="' + element.titulo + '" href="#tab1' + Math.abs(index + 1) + '">' + element.titulo + "</a></li>");
                              }
                              tabi = $("#Tabify li").eq(index);
                              //console.log(element.linkVideo + " ::: element.linkVideo");
                              if (iTab == index) {
                                $("#video-link-box *").remove();
                                $("#video-link-box").append("<h3>" + element.titVideo + "</h3>");
                                $("#video-link-box").append("<p>" + element.descVideo + "</p>");
                                if (element.linkVideo != "") {
                                  //$('#video-link-box').append('<a href="'+ element.linkVideo +'" class="btn-fill btn-gray btn-txt-white icon-seta-right btn-icon-right">ver vídeo</a>');
                                  hstr =
                                    "<a href='#video_compreender1afaturapacotecomtelemovel' class='btn-fill btn-gray btn-txt-white icon-seta-right btn-icon-right tr-modal-videos' data-w='100%' data-h='350' data-bind='attr: { href: '#video_' + ISiteColumnTopicRefOWSTEXT, 'data-iframe': $parent.getTopicVideoUrl($data) }'>Ver vídeo</a>";
                                  $("#video-link-box").append(hstr);
                                  $("#video-link-box a").attr("data-iframe", element.linkVideo);
                                  if ($(".tr-modal-videos").length > 0) {
                                    $(".tr-modal-videos").off("click");
                                    new OverlayVideoAjuda({
                                      trigger: $(".tr-modal-videos"),
                                      cl_modal: "modal",
                                    });
                                  }
                                }
                                /**/
                              }
                              if (iTab == index) {
                                /*loop nas faturas */
                                element.faturas.forEach(function(element, index) {
                                  // 1º. o titulo da fatura
                                  $("#nav-faturas *").remove();
                                  $("#nav-faturas").append('<div class="faturas-in-tabs"><h4>' + element.titulo + "</h4></div>"); /*tabs[iTab].faturas[0].titulo*/
                                  // páginas e itens
                                  $("#nav-faturas .faturas-in-tabs").append('<ul id="listaPaginas"></ul>');
                                  cFat = index;
                                  /* loop na paginacao */
                                  $("#nav-pag li").remove();
                                  element.pags.forEach(function(element, index) {
                                    /*paginação topo direito*/
                                    $("#nav-pag").append('<li title="' + element.titulo + '" class="' + (index == curPag ? "active" : "") + '">' + parseInt(index + 1) + "</li>");
                                    /* grupo de paginas e titulo */
                                    $("#listaPaginas").append('<div class="pages-group"><h5>' + element.titulo + '</h5><ul class="listaItems"></ul></div>');
                                    /* carrega a imagem desta pagina */
                                    if (iPag == index) {
                                      loadImage();
                                    }
                                    /* loop de itens */
                                    cPag = index;
                                    if (iPag == cPag && iFat == cFat) {
                                      $("#area-bolas-rects .bolas a").remove();
                                    }
                                    element.itens.forEach(function(element, index) {
                                      //add item
                                      $("#listaPaginas .pages-group").eq(cPag).find(".listaItems").append("<li>" + element.titulo + "</li>");
                                      // add click to that item
                                      $("#listaPaginas .pages-group").eq(cPag).find(".listaItems li:last-child").click(function() {
                                        //$(this).closest('.pages-group').find('h5)'.click()
                                        //$(this).closest('.pages-group').find('h5').click()
                                        clearActives(".listaItems li");
                                        $(this).addClass("active");
                                        curPag = $(this).closest(".pages-group").index();
                                        getNewPage();
                                        loadImage();
                                        showBaloon($(this).index());
                                        activateMenuParentItem(curPag);
                                        setNavPosition();
                                      });
                                      // add balls apenas às fatura e pagina atual
                                      if (iPag == cPag && iFat == cFat) {
                                        //data-areaProps="'+ element.areaProps +'"
                                        var _delay = Math.random() * 2;
                                        $("#area-bolas-rects .bolas").append('<a title="' + element.titulo + '" style="left:' + element.areaProps.xBola + "%;top:" + element.areaProps.yBola + "%;transition-delay:" + _delay.toPrecision(
                                          3) + 's;">+</a>'); //
                                        $("#area-bolas-rects .bolas a:last-child").click(function() {
                                          curItem = $(this).index();
                                          showBaloon($(this).index());
                                          activateMenuItem($(this).index());
                                          activateMenuParentItem(curPag);
                                          setNavPosition();
                                        });
                                      }
                                    });
                                    /* CLICK NO NOME/PÀGINA DE CADA FATURA MOSTRA A HOME DA PAGINA COM BOLAS*/
                                    $("#listaPaginas .pages-group").eq(index).find("h5").click(function() {
                                      curPag = $(this).closest(".pages-group").index();
                                      getNewPage();
                                      createTabs(curTab, curFat, curPag, null, true);
                                      activateMenuParentItem(curPag);
                                      setNavPosition();
                                    });
                                    $("#nav-pag li").eq(index).click(function() {
                                      //console.log(2)
                                      if (!$(this).hasClass("active")) {
                                        curPag = $(this).index();
                                        curItem = 0;
                                        //console.log(curPag);
                                        getNewPage();
                                        //console.log(curPag);
                                        createTabs(curTab, curFat, curPag, null, true);
                                        //activateMenuParentItem(curPag);
                                        getNewPage();
                                      }
                                      setNavPosition();
                                    });
                                  });
                                });
                              }
                              /* adiciona evento click às tabs apenas uma vez... */
                              if (firstime) {
                                if (openI) {
                                  if (curItem >= 0) {
                                    //console.log(curItem)
                                    //setTimeout(function(){ showBaloon(curItem); }, 2000);
                                    showBaloon(curItem);
                                  }
                                }
                                $(tabi).click(function(e) {
                                  e.preventDefault();
                                  if (!$(this).hasClass("active")) {
                                    curTab = $(this).closest("li").index();
                                    curFat = 0;
                                    curPag = 0;
                                    getNewPage();
                                    $(this).closest("ul").find("li").removeClass("active");
                                    $(this).addClass("active");
                                    createTabs(curTab, 0, 0, null, true);
                                    //scrolleToItem('#Tabify');
                                    /* REMOVIDO PARA NAO IR PARA BAIXO A PEDIDO DA RITA NOVAMENTE */
                                    //scrolleToItem('#listaPaginas');
                                    getNewPage();
                                    $("#wrapfloatingmenu .sec-help.links").addClass("active");
                                    $("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
                                  }
                                  setNavPosition();
                                });
                              } else {
                                //getNewPage();
                              }
                            });
                            if (firstime) {
                              $(window).scroll(function() {
                                setNavPosition();
                              });
                              $(".faturas-in-tabs h4").click(function() {
                                //console.log("clicko u")
                                if ($(this).hasClass("active")) {
                                  $("#wrapfloatingmenu .sec-help.links").addClass("active");
                                  $("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
                                } else {
                                  $("#wrapfloatingmenu .sec-help.links").removeClass("active");
                                  $("#wrapfloatingmenu .faturas-in-tabs h4").addClass("active");
                                }
                                setNavPosition();
                              });
                              $(".sec-help.links h3").click(function() {
                                //console.log("clickou")
                                if ($(this).closest(".links").hasClass("active")) {
                                  $("#wrapfloatingmenu .sec-help.links").removeClass("active");
                                  $("#wrapfloatingmenu .faturas-in-tabs h4").addClass("active");
                                } else {
                                  $("#wrapfloatingmenu .sec-help.links").addClass("active");
                                  $("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
                                }
                                setNavPosition();
                              });
                            }
                            firstime = false;
                            $(window).on("hashchange", function(e) {
                              window.history.pushState("", document.title, window.location.pathname);
                              // do something...
                            });
                            getItRight();
                          }
                          setNavPosition = function() {
                            scrolled = $(window).scrollTop();
                            topMin = $("#Contentify").offset().top + ($("#video-link-box").outerHeight(true) + 20 + 70);
                            topMax = $("#Contentify").offset().top + $("#Contentify").outerHeight(true);
                            navH = $("#wrapfloatingmenu .sec-help").outerHeight(true) + $("#wrapfloatingmenu .sec-nav").outerHeight(true);
                            if (scrolled + 80 <= topMax) {
                              if (scrolled + 80 + navH >= topMax) {
                                console.log("vai para baixo");
                                $("#wrapfloatingmenu").removeAttr("style");
                                $("#wrapfloatingmenu").removeClass("affixed").removeClass("affixed-top").addClass("affixed-bottom");
                                $("#wrapfloatingmenu").css("top", $("#col-cont-right").outerHeight(true) - $("#wrapfloatingmenu").outerHeight(true));
                              } else if (scrolled + 80 >= topMin) {
                                console.log("vai fixar");
                                $("#wrapfloatingmenu").removeAttr("style");
                                $("#wrapfloatingmenu").removeClass("affixed-bottom").removeClass("affixed-top").addClass("affixed");
                              } else {
                                console.log("mantem se no topo");
                                $("#wrapfloatingmenu").removeAttr("style");
                                $("#wrapfloatingmenu").removeClass("affixed").removeClass("affixed-bottom").addClass("affixed-top");
                              }
                            }
                          };
                          clearActives = function(elem) {
                            $(elem).removeClass("active");
                          };
                          activateMenuItem = function(index) {
                            clearActives(".listaItems li");
                            $("#listaPaginas .pages-group").eq(curPag).find(".listaItems li").eq(index).addClass("active");
                          };
                          activateMenuParentItem = function(index) {
                            clearActives("#listaPaginas .pages-group h5");
                            $("#listaPaginas .pages-group").eq(index).find("h5").addClass("active");
                            getItRight();
                          };
                          $("#img-fatura, .closeballoon, #rect-border, .modal-fatura").click(function() {
                            balloonIsOpen = false;
                            //console.log("closing")
                            createTabs(curTab, curFat, curPag, curItem, true);
                            //if($(window).width() < 768){
                            //scroll para o topo - rita pediu para remover
                            //scrolleToItem('#Tabify');
                            //}
                            $("#info-balloon").hide();
                            $("#area-bolas-rects .bolas").show();
                            $("#area-bolas-rects").removeClass("bolasOn");
                            $(".area-conteudo").removeClass("add-modal");
                            $("#area-bolas-rects .rectangulo").hide();
                            $("#img-fatura").css("opacity", 1);
                            $("#info-balloon").removeClass();
                            clearActives(".listaItems li");
                            activateMenuParentItem(curPag);
                            setNavPosition();
                          });
                          loadImage = function() {
                            img = tabs[curTab].faturas[curFat].pags[curPag].imagem;
                            //$('#img-fatura').attr('src', img);
                            /**/
                            $("#img-fatura").on("load", function() {
                              //console.log("loadcomplete");
                              setTimeout(function() {
                                $(".bloco-fatura-interativa").removeClass("is-loading");
                              }, 500);
                            }).attr("src", img);
                            $(".bloco-fatura-interativa").removeClass("is-loading");
                            $("#img-fatura").css("opacity", 1);
                            $("#info-balloon").removeClass();
                          };
                          getNewPage = function() {
                            $("#info-balloon").hide();
                            $("#area-bolas-rects .bolas").show();
                            $("#area-bolas-rects").removeClass("bolasOn");
                            $(".area-conteudo").removeClass("add-modal");
                            $("#area-bolas-rects .rectangulo").hide();
                            loadImage();
                            $("#img-fatura").css("opacity", 1);
                            $("#info-balloon").removeClass();
                            //console.log("CRIAR CLICKS ")
                            $(".faturas-in-tabs h4").click(function() {
                              //console.log("clicko u")
                              if ($(this).hasClass("active")) {
                                $("#wrapfloatingmenu .sec-help.links").addClass("active");
                                $("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
                              } else {
                                $("#wrapfloatingmenu .sec-help.links").removeClass("active");
                                $("#wrapfloatingmenu .faturas-in-tabs h4").addClass("active");
                              }
                              setNavPosition();
                            });
                          };
                          showBaloon = function(indice) {
                            balloonIsOpen = true;
                            currentItem = indice;
                            curItem = currentItem;
                            $("#area-bolas-rects .bolas").hide();
                            $("#info-balloon ul").remove();
                            $("#info-balloon h5").html(tabs[curTab].faturas[curFat].pags[curPag].itens[indice].tituloBalao);
                            $("#info-balloon .descricao").html(tabs[curTab].faturas[curFat].pags[curPag].itens[indice].descricao);
                            /*paginação topo direito*/
                            $("#nav-pag li").removeClass("active");
                            $("#nav-pag li").eq(curPag).addClass("active");
                            //$type = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].type;
                            $links = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].links;
                            //console.log('TEMOS LINKS ? ' + $links.length + " - " + curFat + " - " + curPag + " - " + indice)
                            if ($links.length != 0) {
                              $("#info-balloon").append("<ul></ul>");
                              $links.forEach(function(element, index) {
                                //console.log(element.type + " $type")
                                if (element.type == "video") {
                                  hstr = "<li><a href='#video_fatura' class='tr-modal-videos' data-w='100%' data-h='350' data-bind='attr: { href: '#video_fatura, 'data-iframe': $parent.getTopicVideoUrl($data) }'>" + element.texto + "</a></li>";
                                  $("#info-balloon ul").append(hstr);
                                  $("#info-balloon ul li:last-child a").attr("data-iframe", element.href);
                                  if ($(".tr-modal-videos").length > 0) {
                                    $(".tr-modal-videos").off("click");
                                    new OverlayVideoAjuda({
                                      trigger: $(".tr-modal-videos"),
                                      cl_modal: "modal",
                                    });
                                  }
                                  //<a class="tr-modal-videos" href="#video1" data-iframe="http://rd3.videos.sapo.pt/playhtml?file=http://rd3.videos.sapo.pt/kGjNTrpOLMYrzFy8CyYZ/mov/1&quality=sd" data-w="100%" data-h="350">
                                  //$('#info-balloon ul').append('<li><a class="tr-modal-videos" href="#video' + index +'" data-iframe="' + element.href +'" data-w="100%" data-h="350">'+ element.texto +'</a></li>');
                                } else {
                                  $("#info-balloon ul").append('<li><a target="_blank" href="' + element.href + '">' + element.texto + "</a></li>");
                                }
                                //$('#info-balloon ul').append('<li><a href="'+ element.href +'">'+ element.texto +'</a></li>');
                              });
                            }
                            positionateBalloon(curTab, curFat, curPag, currentItem);
                            /*
                              var ib = document.getElementById('info-balloon');
                            var offset = {y:0};
                            while (ib)
                            {
                              offset.y += ib.offsetTop;
                              ib = ib.offsetParent;
                            }

                            if (document.documentElement && (document.documentElement.scrollTop))
                            {
                              offset.y -= document.documentElement.scrollTop;
                            }
                            else if (document.body && (document.body.scrollTop))
                            {
                              offset.y -= document.body.scrollTop;
                            }
                            else if (window.pageYOffset)
                            {
                              offset.y -= window.pageYOffset;
                            }

                            //console.log(offset.y +" cenas");
                            */
                            if ($(window).width() < 768) {
                              if ($("#info-balloon").height() + $("#rect-border").height() >= $(window).height() * 0.7) {
                                scrolleToItem("#info-balloon");
                              } else {
                                scrolleToItem("#rect-border");
                              }
                            } else {
                              yInfo = $("#info-balloon").offset().top;
                              yRec = $("#rect-border").offset().top;
                              //console.log(yInfo + " - " + yRec)
                              if (yInfo < yRec) {
                                scrolleToItem("#info-balloon"); //'#img-fatura');'#rect-border')
                              } else {
                                scrolleToItem("#rect-border"); //'#img-fatura');'#rect-border')
                              }
                            }
                          };
                          var curTab = 0;
                          var curFat = 0; //vai ser sempre 0 pois apenas há uma fatura por Tab
                          var curPag = 0;
                          var curItem = null;
                          var scrollToImag;
                          var floatingIsOn = false;
                          var openT = false;
                          var openF = false;
                          var openP = false;
                          var openI = false;
                          var balloonIsOpen = false;
                          var qstr;
                          var queries = {};
                          positionateBalloon = function(curTab, curFat, curPag, indice) {
                            /* SHOW RECTANGULO */
                            //xBola, yBola, xRect,yRect,wRect,hRect, xyPop
                            tope = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yRect + "%";
                            lefte = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + "%";
                            widthe = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.wRect + "%";
                            heighte = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.hRect + "%";
                            $("#info-balloon").removeAttr("style");
                            var translateY, translateX;
                            $("#info-balloon").removeClass("mobile");
                            switch (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xPop) {
                              case "left":
                                le = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect;
                                $("#info-balloon").css({
                                  left: le + "%",
                                  right: "auto",
                                  "margin-left": 0,
                                  "margin-right": "22px",
                                });
                                translateX = "0";
                                //console.log('l')
                                break;
                              case "right":
                                (ri = 100 - (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.wRect)),
                                $("#info-balloon").css({
                                  left: "auto",
                                  right: ri + "%",
                                  "margin-left": "22px",
                                  "margin-right": 0,
                                });
                                translateX = "0";
                                //console.log('r')
                                break;
                              case "center":
                              default:
                                le = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.wRect / 2;
                                $("#info-balloon").css({
                                  left: le + "%",
                                  right: "auto",
                                  "margin-left": 0,
                                  "margin-right": 0,
                                });
                                translateX = "-50%";
                                //console.log('c')
                                break;
                            }
                            switch (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yPop) {
                              case "top":
                                $("#info-balloon").css({
                                  top: "auto",
                                  bottom: "calc(" + "100%" + " - " + tope + ")",
                                  height: "auto",
                                });
                                $("#info-balloon").addClass("bottom-seta");
                                translateY = "0";
                                //console.log('t')
                                break;
                              case "bottom":
                                $("#info-balloon").css({
                                  top: tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.hRect + "%",
                                  bottom: "auto",
                                  "margin-top": "22px",
                                  height: "auto",
                                });
                                //console.log('b')
                                translateY = "0";
                                break;
                              case "middle":
                              default:
                                if (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xPop == "left") {
                                  $("#info-balloon").css({
                                    left: "auto",
                                    right: 100 - tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + "%",
                                  });
                                } else if (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xPop == "right") {
                                  //console.log("a")
                                  $("#info-balloon").css({
                                    right: "auto",
                                    left: tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.wRect + "%",
                                  });
                                }
                                $("#info-balloon").css({
                                  top: tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.hRect / 2 + "%",
                                  bottom: "auto",
                                  width: "50%",
                                  height: "auto",
                                });
                                translateY = "-50%";
                                //console.log('m')
                                break;
                            }
                            translate = "translateY(" + translateY + ") translateX(" + translateX + ")";
                            $("#info-balloon").css({
                              transform: translate
                            });
                            $("#info-balloon").removeClass();
                            $("#info-balloon").addClass(String(tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yPop + "_" + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xPop));
                            if ($(window).width() < 768) {
                              $("#info-balloon").css({
                                top: "calc(" + (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.hRect) + "% + 22px)",
                                bottom: "auto",
                                "margin-top": "22px",
                                height: "auto",
                              });
                            }
                            $("#img-fatura").css("opacity", 0.2);
                            $("#info-balloon").show();
                            $("#area-bolas-rects").addClass("bolasOn");
                            $(".area-conteudo").addClass("add-modal");
                            $("#area-bolas-rects .rectangulo").show();
                            ratio = $("#img-fatura").height() / $("#area-bolas-rects").height();
                            ratio == 0 ? (ratio = 1) : (ratio = ratio);
                            var strTop = "calc(" + tope.toString() + " * " + ratio.toString() + ")";
                            var strhei = "calc(" + heighte.toString() + " * " + ratio.toString() + ")";
                            //console.log(   "bolas : " + $('#area-bolas-rects').height() + " | ratio : " + ratio.toString() +  " | imagem : " + $('#img-fatura').height() + " - " + strTop)
                            //console.log(strTop);
                            $("#area-bolas-rects .rectangulo").css({
                              top: strTop,
                              left: lefte,
                              width: widthe,
                              height: heighte,
                            });
                          };
                          $(".right-bt").click(function() {
                            curPag < $("#nav-pag li").length - 1 ? (curPag += 1) : (curPag = 0);
                            curItem = 0;
                            //console.log(curPag);
                            getNewPage();
                            //console.log(curPag);
                            createTabs(curTab, curFat, curPag, null, true);
                            activateMenuParentItem(curPag);
                            getNewPage();
                            $("#wrapfloatingmenu .sec-help.links").addClass("active");
                            $("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
                            scrolleToItem("#Tabify");
                            setNavPosition();
                          });
                          $(".left-bt").click(function() {
                            curPag > 0 ? (curPag -= 1) : (curPag = $("#nav-pag li").length - 1);
                            curItem = 0;
                            //console.log(curPag);
                            getNewPage();
                            //console.log(curPag);
                            createTabs(curTab, curFat, curPag, null, true);
                            activateMenuParentItem(curPag);
                            getNewPage();
                            $("#wrapfloatingmenu .sec-help.links").addClass("active");
                            $("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
                            scrolleToItem("#Tabify");
                            setNavPosition();
                          });
                          scrolleToItem = function(iTem) {
                            $elem = iTem;
                            //if(scrollToImag){
                            $("html, body").animate({
                              scrollTop: $($elem).offset().top - 20 - 50 - 30,
                            }, 1000);
                            //}
                            //console.log($( $elem ).offset().top - 20 - 50 + " scroll Y")
                          };
                          getItRight = function() {
                            var target;
                            //console.log("get it right")
                            //$("#nav-faturas").removeClass('affix affix-top affix-bottom').removeData('bs.affix')
                            if ($(window).width() >= 768) {
                              //console.log("adding");
                              //scrollToImag = false;
                              scrollToImag = true;
                              target = $("#right-side");
                              $("#col-cont-right").appendTo(target);
                              // $("#nav-faturas").affix({offset: {top: $("#nav-faturas").offset().top } });
                              if (floatingIsOn) {
                                ////console.log("do nothing")
                              } else {
                                //console.log("do it")
                                floatingIsOn = true;
                                /*
                                $("#wrapfloatingmenu").affix({

                                    offset: {
                                      top: $("#wrapfloatingmenu").offset().top,
                                      bottom: $("#Contentify").outerHeight(true) - $("#wrapfloatingmenu").height() //($("#Contentify").offset().top + $("#Contentify").height()) - $("#wrapfloatingmenu").offset().top
                                    }
                                });
                                */
                              }
                            } else {
                              //console.log("removing");
                              scrollToImag = true;
                              target = $("#left-side-fat-mobile");
                              $("#col-cont-right").appendTo(target);
                              //$("#nav-faturas").removeClass('affix affix-top affix-bottom').removeData('bs.affix')
                              if (floatingIsOn) {
                                floatingIsOn = false;
                                /*
                                $(window).off('.affix')
                                $("#wrapfloatingmenu").removeClass('affix affix-top affix-bottom').removeData('bs.affix')
                                */
                              }
                              $("#info-balloon").css("top", parseInt($("#rect-border").css("height")) + parseInt($("#rect-border").css("top")));
                              $("#info-balloon").css("margin-top", "22px!important");
                            }
                            if (curItem != null && balloonIsOpen) {
                              positionateBalloon(curTab, curFat, curPag, curItem);
                            }
                          };
                          $.each(document.location.search.substr(1).split("&"), function(c, q) {
                            var i = q.split("=");
                            window.history.pushState("", document.title, window.location.pathname);
                            if (i != "") {
                              queries[i[0].toString()] = i[1].toString();
                              if (queries.t) {
                                openTab = true;
                                curTab = queries.t - 1;
                                openT = true;
                                //console.log
                              }
                              if (queries.f) {
                                openTab = true;
                                curFat = queries.f - 1;
                                openF = true;
                              }
                              if (queries.p) {
                                openTab = true;
                                curPag = queries.p - 1;
                                openP = true;
                              }
                              if (queries.i) {
                                openTab = true;
                                curItem = queries.i - 1;
                                openI = true;
                              }
                            }
                          });
                          /**/
                          $(window).resize(function() {
                            getItRight();
                          });
                          $(window).ready(function() {
                            //getItRight()
                            createTabs(curTab, curFat, curPag, curItem, false);
                            getItRight();
                            $("html, body").animate({
                              scrollTop: 5,
                            }, 1000);
                          });
                        </script>
                      </section>
                      <!-- FINAL DO BLOCO DE HTML LIVRE -->
                      <!-- FINAL DO BLOCO DE HTML LIVRE -->
                      <!-- FINAL DO BLOCO DE HTML LIVRE -->
                    </div>
                  </div>
                  <div class="ms-clear"></div>
                </div>
              </div>
            </div>
          </div>
          <script type="text/javascript">
            // date received format: 'dd/MM/yyyy hh:mm'; example: '02/11/2013 00:00'
            var dateString = '18/08/2022 11:01';
            var dateOnly = dateString.split(" ")[0];
            var finalDate = dateOnly.replace("//g", ".");
          </script>
          <div style="display:none" id="hidZone">
            <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="Ajuda" type="option"
                style="display:none">
              </ie:menuitem>
            </menu>
          </div>
        </div>
        <footer id="footer">
          <span id="footer-awards">
            <section id="awards-row" class="footer-awards alt-premios alt-patrocinio txt-align-center background-c-gray" data-hover-color="">
              <div id="divAwardsPart" class="part">
                <div class="pp-holder background-c-white" id="divawards" data-numitems="5">
                  <h4>Prémios e distinções</h4>
                  <ul id="awards-lst" class="item-holder">
                    <li class="item">
                      <a class="" href="https://www.meo.pt/premios" target="_self" title="Prémio Cinco Estrelas 2023"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/premio-cinco-estrelas-meo-2023-icon.webp" alt="Prémio Cinco Estrelas 2023" title="Prémio Cinco Estrelas 2023"></div></a>
                    </li>
                    <li class="item">
                      <a class="" href="https://www.meo.pt/premios" target="_self" title="Escolha do Consumidor 2023"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/escolha-consumidor-2023-meo-icon.webp" alt="Escolha do Consumidor 2023" title="Escolha do Consumidor 2023"></div></a>
                    </li>
                    <li class="item">
                      <a class="" href="https://www.meo.pt/premios" target="_self" title="Marca de Confiança 2022"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/marca-confianca-2022-meo-icone.png" alt="Marca de Confiança 2022" title="Marca de Confiança 2022"></div></a>
                    </li>
                    <li class="item">
                      <a class="" href="/premios" target="_self" title="Marca Recomendada 2023"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/marca-recomendada-2023-meo-icon.webp" alt="Marca Recomendada 2023" title="Marca Recomendada 2023"></div></a>
                    </li>
                    <li class="item">
                      <a class="" href="https://www.meo.pt/premios" target="_self" title="Melhor Loja Portugal 2021-2022"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/melhor-loja-portugal-2021-2022-meo-icon.png" alt="Melhor Loja Portugal 2021-2022" title="Melhor Loja Portugal 2021-2022"></div></a>
                    </li>
                  </ul>
                  <ul class="hyperlinks">
                    <li><a class="btn-text btn-color-1" href="https://www.meo.pt/premios" target="_self">ver todos</a></li>
                  </ul>
                </div>
                <div class="pp-holder background-c-white" id="divsponsors" data-numitems="5">
                  <h4>Patrocínios</h4>
                  <ul id="sponsors-lst" class="item-holder">
                    <li class="item">
                      <a class="" href="https://www.meo.pt/lpc/patrocinio-surf" target="_blank" title="Liga MEO Surf"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/liga-meo-surf-parceiro-icon.png" alt="Liga MEO Surf" title="Liga MEO Surf"></div></a>
                    </li>
                    <li class="item">
                      <a class="" href="https://maresvivas.meo.pt/" target="_blank" title="MEO Marés Vivas"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/mares-vivas-meo-2023-icon.webp" alt="MEO Marés Vivas" title="MEO Marés Vivas"></div></a>
                    </li>
                    <li class="item">
                      <a class="" href="https://sudoeste.meo.pt/" target="_blank" title="MEO Sudoeste"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/msw-parceiro-icon.png" alt="MEO Sudoeste" title="MEO Sudoeste"></div></a>
                    </li>
                    <li class="item">
                      <a class="" href="https://meokalorama.pt/" target="_blank" title="MEO Kalorama"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/festival-meo-kalorama-icon.webp" alt="MEO Kalorama" title="MEO Kalorama"></div></a>
                    </li>
                    <li class="item">
                      <a class="" href="https://www.meo.pt/lpc/patrocinio-selecao" target="_blank" title="Seleção Nacional"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/fpf-selecao-icon.png" alt="Seleção Nacional" title="Seleção Nacional"></div></a>
                    </li>
                  </ul>
                </div>
              </div>
            </section>
          </span>
          <div class="footer-wrp">
            <section id="sitemap-w" class="footer-nav-bar">
              <section class="footer-nav-bar-one">
                <section class="main-nav">
                  <section class="level-1">
                    <ul class="level-1-entries">
                      <li class="level-1-entry  ">
                        <a href="https://www.meo.pt/loja/destaques-promocoes" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1" data-eventtitle="DESTAQUES" data-eventlink="https://www.meo.pt/loja/destaques-promocoes"><span class="level-1-entry-link-title">Destaques</span></a>
                        <section class="level-2">
                          <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Destaques</span></div>
                          <ul class="level-2-entries">
                            <li class="level-2-entry  no-submenu">
                              <a href="/metaverso" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.1" data-eventtitle="MEO no Metaverso" data-eventlink="/metaverso"><span class="level-2-entry-link-title">MEO no Metaverso</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/care" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.2" data-eventtitle="MEO Care" data-eventlink="https://www.meo.pt/care"><span class="level-2-entry-link-title">MEO Care</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/5g" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.3" data-eventtitle="5G em Portugal" data-eventlink="https://www.meo.pt/5g"><span class="level-2-entry-link-title">5G em Portugal</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/lpc/apple" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.4" data-eventtitle="Mundo Apple no MEO" data-eventlink="https://www.meo.pt/lpc/apple"><span class="level-2-entry-link-title">Mundo Apple no MEO</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/lpc/samsung" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.5" data-eventtitle="Universo Samsung Galaxy" data-eventlink="https://www.meo.pt/lpc/samsung"><span class="level-2-entry-link-title">Universo Samsung Galaxy</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/energia" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.6" data-eventtitle="Eletricidade" data-eventlink="https://www.meo.pt/energia"><span class="level-2-entry-link-title">Eletricidade</span></a>
                            </li>
                          </ul>
                        </section>
                      </li>
                      <li class="level-1-entry  ">
                        <a href="https://loja.meo.pt/Equipamentos/Telemoveis" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2" data-eventtitle="MAIS PROCURADOS" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis"><span class="level-1-entry-link-title">Mais procurados</span></a>
                        <section class="level-2">
                          <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Mais procurados</span></div>
                          <ul class="level-2-entries">
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/servicos/casa/fibra/pacotes-com-telemovel" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.1" data-eventtitle="Pacotes com Telemóvel" data-eventlink="https://www.meo.pt/servicos/casa/fibra/pacotes-com-telemovel"><span class="level-2-entry-link-title">Pacotes com telemóvel</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/servicos/casa/fibra/pacotes-tv-net-voz" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.2" data-eventtitle="TV+Net+Voz" data-eventlink="https://www.meo.pt/servicos/casa/fibra/pacotes-tv-net-voz"><span class="level-2-entry-link-title">TV+Net+Voz</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/servicos/movel/tarifarios-telemovel/pos-pago/m-movel" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.3" data-eventtitle="Pós-pagos" data-eventlink="https://www.meo.pt/servicos/movel/tarifarios-telemovel/pos-pago/m-movel"><span class="level-2-entry-link-title">Pós-pagos</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/servicos/casa/alterar-servicos/mudanca-de-casa" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.4" data-eventtitle="Mudança de casa" data-eventlink="https://www.meo.pt/servicos/casa/alterar-servicos/mudanca-de-casa"><span class="level-2-entry-link-title">Mudança de casa</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/servicos/casa/alterar-servicos/segunda-casa" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.5" data-eventtitle="TV na 2a Casa" data-eventlink="https://www.meo.pt/servicos/casa/alterar-servicos/segunda-casa"><span class="level-2-entry-link-title">TV na 2ª Casa</span></a>
                            </li>
                          </ul>
                        </section>
                      </li>
                      <li class="level-1-entry  ">
                        <a href="https://www.meo.pt/loja/destaques-promocoes" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3" data-eventtitle="LOJA ONLINE" data-eventlink="https://www.meo.pt/loja/destaques-promocoes"><span class="level-1-entry-link-title">Loja Online</span></a>
                        <section class="level-2">
                          <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Loja Online</span></div>
                          <ul class="level-2-entries">
                            <li class="level-2-entry  no-submenu">
                              <a href="https://loja.meo.pt/Equipamentos/telemoveis#!filter=destaquesepromocoes_iPhone%2014_iPhone%2014%20Plus_iPhone%2014%20Pro_iPhone%2014%20Pro%20Max%24modalidadecompra_Presta%C3%A7%C3%B5es" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.1" data-eventtitle="Apple iPhone 14 Pro Max" data-eventlink="https://loja.meo.pt/Equipamentos/telemoveis#!filter=destaquesepromocoes_iPhone%2014_iPhone%2014%20Plus_iPhone%2014%20Pro_iPhone%2014%20Pro%20Max%24modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-2-entry-link-title">Apple iPhone 14 Pro Max</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/lpc/samsung-galaxy-s23" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.2" data-eventtitle="Samsung Galaxy S23 Ultra" data-eventlink="https://www.meo.pt/lpc/samsung-galaxy-s23"><span class="level-2-entry-link-title">Samsung Galaxy S23 Ultra</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos%24tipodeproduto_Consolas%20de%20Jogos%24marca_Sony&amp;sorting=Relevance&amp;viewtype=grid" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.3" data-eventtitle="PS5" data-eventlink="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos%24tipodeproduto_Consolas%20de%20Jogos%24marca_Sony&amp;sorting=Relevance&amp;viewtype=grid"><span class="level-2-entry-link-title">PS5</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/lpc/smartphones-prestacoes" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.4" data-eventtitle="Comprar a prestações" data-eventlink="https://www.meo.pt/lpc/smartphones-prestacoes"><span class="level-2-entry-link-title">Comprar a prestações</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/programa-meos" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.5" data-eventtitle="Comprar com MEOS" data-eventlink="https://www.meo.pt/programa-meos"><span class="level-2-entry-link-title">Comprar com MEOS</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/lpc/entregas-loja-online" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.6" data-eventtitle="Entregas grátis" data-eventlink="https://www.meo.pt/lpc/entregas-loja-online"><span class="level-2-entry-link-title">Entregas grátis</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/ajuda-e-suporte/produtos-meo/comprar-online/devolucao-e-assistencia-tecnica#assistenciatecnicaequipamentoscompradosonline" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.7" data-eventtitle="Trocas e devoluções grátis" data-eventlink="https://www.meo.pt/ajuda-e-suporte/produtos-meo/comprar-online/devolucao-e-assistencia-tecnica#assistenciatecnicaequipamentoscompradosonline"><span class="level-2-entry-link-title">Trocas e devoluções grátis</span></a>
                            </li>
                          </ul>
                        </section>
                      </li>
                      <li class="level-1-entry  ">
                        <a href="https://www.meo.pt/ajuda-e-suporte" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4" data-eventtitle="AJUDA E SUPORTE" data-eventlink="https://www.meo.pt/ajuda-e-suporte"><span class="level-1-entry-link-title">Ajuda e Suporte</span></a>
                        <section class="level-2">
                          <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Ajuda e Suporte</span></div>
                          <ul class="level-2-entries">
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/ajuda-e-suporte#faturas-pagamentos-e-carregamentos" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.1" data-eventtitle="Faturas, pagamentos e carregamentos" data-eventlink="https://www.meo.pt/ajuda-e-suporte#faturas-pagamentos-e-carregamentos"><span class="level-2-entry-link-title">Faturas, pagamentos e carregamentos</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/ajuda-e-suporte#apoio-tecnico-e-configuracoes" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.2" data-eventtitle="Apoio técnico e configurações" data-eventlink="https://www.meo.pt/ajuda-e-suporte#apoio-tecnico-e-configuracoes"><span class="level-2-entry-link-title">Apoio técnico e configurações</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/ajuda-e-suporte#div-produtos-meo" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.3" data-eventtitle="Produtos MEO" data-eventlink="https://www.meo.pt/ajuda-e-suporte#div-produtos-meo"><span class="level-2-entry-link-title">Produtos MEO</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/ajuda-e-suporte#div-outros-servicos" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.4" data-eventtitle="Outros serviços" data-eventlink="https://www.meo.pt/ajuda-e-suporte#div-outros-servicos"><span class="level-2-entry-link-title">Outros serviços</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://www.meo.pt/suporte/seguranca-online" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.5" data-eventtitle="Segurança Online" data-eventlink="https://www.meo.pt/suporte/seguranca-online"><span class="level-2-entry-link-title">Segurança Online</span></a>
                            </li>
                          </ul>
                        </section>
                      </li>
                      <li class="level-1-entry  ">
                        <a href="https://www.meo.pt/cliente" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5" data-eventtitle="my MEO" data-eventlink="https://www.meo.pt/cliente"><span class="level-1-entry-link-title">my MEO</span></a>
                        <section class="level-2">
                          <div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">my MEO</span></div>
                          <ul class="level-2-entries">
                            <li class="level-2-entry  no-submenu">
                              <a href="https://cliente.meo.pt" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.1" data-eventtitle="Entrar" data-eventlink="https://cliente.meo.pt"><span class="level-2-entry-link-title">Entrar</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://cliente.meo.pt/meus-produtos" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.2" data-eventtitle="Os meus produtos" data-eventlink="https://cliente.meo.pt/meus-produtos"><span class="level-2-entry-link-title">Os meus produtos</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://cliente.meo.pt/escolher/consumosmovel" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.3" data-eventtitle="Os meus consumos telemóvel" data-eventlink="https://cliente.meo.pt/escolher/consumosmovel"><span class="level-2-entry-link-title">Os meus consumos</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://cliente.meo.pt/escolher/faturas" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.4" data-eventtitle="Faturas e pagamentos" data-eventlink="https://cliente.meo.pt/escolher/faturas"><span class="level-2-entry-link-title">Faturas e pagamentos</span></a>
                            </li>
                            <li class="level-2-entry  no-submenu">
                              <a href="https://login.telecom.pt/Public/Register.aspx?appKey=Xa6qa5wG2b" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.5" data-eventtitle="Criar conta" data-eventlink="https://login.telecom.pt/Public/Register.aspx?appKey=Xa6qa5wG2b"><span class="level-2-entry-link-title">Criar conta</span></a>
                            </li>
                          </ul>
                        </section>
                      </li>
                    </ul>
                  </section>
                </section>
              </section>
              <section class="footer-nav-bar-two"></section>
              <section class="footer-nav-bar-three">
                <ul class="menu-hyperlinks">
                  <li class="">
                    <a class="icon-blog" href="https://blog.meo.pt/" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Blog MEO" data-eventlink="https://blog.meo.pt/"><span class="hyperlinks-txt">Blog MEO</span><span class="hyperlinks-desc">Conhece as tendências e novidades</span></a>
                  </li>
                  <li class="">
                    <a class="icon-meo-forum" href="https://forum.meo.pt/" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="MEO Fórum" data-eventlink="https://forum.meo.pt/"><span class="hyperlinks-txt">MEO Fórum</span><span class="hyperlinks-desc">Pergunta, responde e contribui</span></a>
                  </li>
                  <li class="">
                    <a class="icon-gps" href="https://www.meo.pt/lojas" target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Lojas MEO" data-eventlink="https://www.meo.pt/lojas"><span class="hyperlinks-txt">Lojas MEO</span><span class="hyperlinks-desc">Encontra a loja mais próxima</span></a>
                  </li>
                </ul>
              </section>
            </section>
            <div id="footer-content" class="footer-content">
              <section class="footer-top">
                <section class="footer-top-one">
                  <ul class="menu-hyperlinks">
                    <li class="">
                      <a class="" href="https://www.altice.pt/pt/politica-privacidade" target="_blank" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Politica de Privacidade" data-eventlink="https://www.altice.pt/pt/politica-privacidade"><span class="hyperlinks-txt">Política de Privacidade</span></a>
                    </li>
                    <li class="">
                      <a class="" href="https://www.altice.pt/pt/rgpd" target="_blank" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="RGPD" data-eventlink="https://www.altice.pt/pt/rgpd"><span class="hyperlinks-txt">RGPD</span></a>
                    </li>
                    <li class=""><a class="" href="#!" target="_self"><span class="hyperlinks-txt">Definições de Privacidade</span></a></li>
                    <li class="">
                      <a class="" href="https://conteudos.meo.pt/meo/Documentos/Qualidade-Servico/Qualidade-Servico-Telefonico.pdf" target="_blank" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Qualidade do Serviço" data-eventlink="https://conteudos.meo.pt/meo/Documentos/Qualidade-Servico/Qualidade-Servico-Telefonico.pdf"><span class="hyperlinks-txt">Qualidade do Serviço</span></a>
                    </li>
                    <li class="">
                      <a class="" href="/condicoes-de-utilizacao" target="_self" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Condições de Utilização" data-eventlink="/condicoes-de-utilizacao"><span class="hyperlinks-txt">Condições de Utilização</span></a>
                    </li>
                    <li class="">
                      <a class="" href="/condicoes-2023" target="_self" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Preços 2023" data-eventlink="/condicoes-2023"><span class="hyperlinks-txt">Preços 2023</span></a></li>
                    <li class="">
                      <a class="" href="/intermediacao-credito" target="_self" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Intermediação de Crédito" data-eventlink="/intermediacao-credito"><span class="hyperlinks-txt">Intermediação de Crédito</span></a>
                    </li>
                    <li class=""><a class="" href="/contactos" target="_self" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Contactos" data-eventlink="/contactos"><span class="hyperlinks-txt">Contactos</span></a></li>
                    <li class=""><a class="" href="https://www.altice.pt/pt/contactos/provedoria-cliente" target="_blank"><span class="hyperlinks-txt">Provedoria do Cliente</span></a></li>
                  </ul>
                </section>
                <section class="footer-top-two"></section>
                <section class="footer-top-three">
                  <ul class="menu-hyperlinks">
                    <li class="">
                      <a class="complaint-book" href="https://livroreclamacoes.pt/" target="_blank" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Livro de Reclamações" data-eventlink="https://livroreclamacoes.pt/"><span class="hyperlinks-txt">Livro de Reclamações</span><span class="hyperlinks-desc">Livro de Reclamações</span></a>
                    </li>
                    <li>
                      <p id="pLastUpdate" class="last-updated">Atualizado<br>em 18 ago 2022</p>
                    </li>
                  </ul>
                </section>
              </section>
              <section class="footer-bottom">
                <section class="footer-bottom-one">
                  <ul class="menu-hyperlinks">
                    <li>
                      <div class="copyrights">
                        <p class="tiny">© Todos os direitos reservados.</p>
                      </div>
                    </li>
                  </ul>
                  <section class="social-networks ">
                    <p class="social-networks-title">Segue-nos</p>
                    <ul class="social-networks-list">
                      <li class="">
                        <a class="social-icon-instagram" href="http://instagram.com/meoinstagram" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Instagram" data-eventlink="http://instagram.com/meoinstagram"><span class="hyperlinks-txt">Instagram</span><span class="hyperlinks-desc">Instagram</span></a>
                      </li>
                      <li class="">
                        <a class="social-icon-linkedin" href="https://www.linkedin.com/company/altice-portugal/" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Linkedin" data-eventlink="https://www.linkedin.com/company/altice-portugal/"><span class="hyperlinks-txt">LinkedIn</span><span class="hyperlinks-desc">LinkedIn</span></a>
                      </li>
                      <li class="">
                        <a class="social-icon-facebook" href="http://www.facebook.com/meo" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Facebook" data-eventlink="http://www.facebook.com/meo"><span class="hyperlinks-txt">Facebook</span><span class="hyperlinks-desc">Facebook</span></a>
                      </li>
                      <li class="">
                        <a class="social-icon-twitter" href="http://twitter.com/meopt" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Twitter" data-eventlink="http://twitter.com/meopt"><span class="hyperlinks-txt">Twitter</span><span class="hyperlinks-desc">Twitter</span></a>
                      </li>
                      <li class="">
                        <a class="social-icon-youtube" href="http://www.youtube.com/meo" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="YouTube" data-eventlink="http://www.youtube.com/meo"><span class="hyperlinks-txt">YouTube</span><span class="hyperlinks-desc">YouTube</span></a>
                      </li>
                      <li class="">
                        <a class="social-icon-tiktok" href="https://vm.tiktok.com/ZMLvvbFRD/" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="TikTok" data-eventlink="https://vm.tiktok.com/ZMLvvbFRD/"><span class="hyperlinks-txt">TikTok</span><span class="hyperlinks-desc">TikTok</span></a>
                      </li>
                      <li class="">
                        <a class="social-icon-spotify" href="https://open.spotify.com/user/ad3st53yif6xeoyrkf00253z7" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Spotify" data-eventlink="https://open.spotify.com/user/ad3st53yif6xeoyrkf00253z7"><span class="hyperlinks-txt">Spotify</span><span class="hyperlinks-desc">Spotify</span></a>
                      </li>
                    </ul>
                  </section>
                </section>
                <section class="footer-bottom-two"></section>
                <section class="footer-bottom-three">
                  <ul class="menu-hyperlinks">
                    <li>
                      <div class="logo-footer"> <a href="http://altice.pt" target="_blank"> <img src="https://conteudos.meo.pt/Style%20Library/brand/resources/images/altice_logo_white_footer.png" alt=""> </a> </div>
                    </li>
                  </ul>
                </section>
              </section>
            </div>
          </div>
          <!-- menuv2.js injects here -->
          <script type="text/javascript">
            CreateFullFooter(ISites.Configurations.AppId, true, true, true, true);
            if (typeof finalDate != "undefined") {
              var itemDateDisplayDiv = $('.data_rev').html('Última atualização: ');
              itemDateDisplayDiv.append(finalDate);
            }
          </script>
        </footer>
      </div>
      <!-- HTML AI -->
    </div>
  </div>
</form>

Text Content

DAMOS VALOR À SUA PRIVACIDADE

Nós e os nossos parceiros armazenamos e/ou acedemos a informações dos
dispositivos, tais como cookies, e processamos dados pessoais, tais como
identificadores exclusivos e informações padrão enviadas pelos dispositivos,
para fins relacionados com anúncios e conteúdos personalizados, medição de
anúncios e conteúdos e perspetivas sobre o público, assim como para desenvolver
e melhorar produtos. Com a sua permissão, nós e os nossos parceiros poderemos
usar identificação e dados de geolocalização precisos através da procura de
dispositivos. Poderá clicar para consentir o processamento por nossa parte e
pela parte dos nossos parceiros, conforme descrito acima. Em alternativa, pode
aceder a informações mais pormenorizadas e alterar as suas preferências antes de
consentir ou recusar o consentimento.
Tenha em atenção que algum processamento dos seus dados pessoais poderá não
exigir o seu consentimento, mas que tem o direito de se opor a esse
processamento. As suas preferências serão aplicadas a um grupo de websites.
Poderá alterar as suas preferências em qualquer momento, regressando a este site
ou acedendo à nossa política de privacidade.
MAIS OPÇÕESCONCORDO

Detetámos que tem o JavaScript desativado no seu browser. Para poder usar em
pleno o site MEO é necessário ter o JavaScript ativado.

 * Particulares
 * Empresas
 * SAPO
 * MEO Blueticket

 * Condições de oferta dos serviços
 * Ocorrências

 * English

 * 5G
   5G
    * Sente que é real
    * Smartphones 5G
    * Máxima velocidade

 * Serviços
   Serviços
    * Para casa
      Para casa
       * TV+Net+Voz
       * TV+Net+Voz+Móvel
       * Mudar de Casa
       * Testar cobertura
       * Adicionar serviços
         Adicionar serviços
          * Adicionar cartões telemóvel
          * Mais Net no telemóvel
          * Segunda casa
      
       * Internet Fibra
         Internet Fibra
          * MEO Smart WiFi
          * Melhor experiência Net
          * Testar velocidade
      
       * Telefone fixo
         Telefone fixo
          * Serviço telefónico
          * Tarifários
          * Cartões Hello
      
       * Tarifa Social Internet
   
    * Móvel
      Móvel
       * Tarifários telemóvel
         Tarifários telemóvel
          * Pós-pagos
          * Pré-pagos
          * Roaming
          * Internacional
      
       * Mais net e serviços
         Mais net e serviços
          * Net Segura
          * Adicionar net telemóvel
          * Apps e Serviços
          * Waiting Rings
      
       * Net para PC/Tablet
         Net para PC/Tablet
          * Pós-pagos
          * Pré-pagos
   
    * MEO Home
    * Smart Living
    * Casa Digital
    * Eletricidade

 * MEO Care
   MEO Care
    * Conhecer MEO Care
    * Saúde
    * Animais
    * Casa
    * Seniores
    * Tecnologia
    * Assistente Pessoal

 * Loja Online
   Loja Online
    * Destaques e promoções
      Destaques e promoções
       * Promoções
       * Mundo Apple
       * Universo Samsung Galaxy
       * Mi Xiaomi
       * Huawei Series
   
    * Telemóveis
      Telemóveis
       * Apple
       * OPPO
       * Samsung
       * Xiaomi
       * Recondicionados iPhone
       * Smartphones 5G
       * Ver todos
       * Acessórios
         Acessórios
          * Audio e Música
          * Cabos e Carregadores
          * Capas e Películas
   
    * Informática
      Informática
       * PCs e Impressoras
       * Acessórios
   
    * Smart TVs e Box 4K
    * Smartwatches
    * Gaming
      Gaming
       * Consolas
       * Jogos
       * Acessórios
   
    * Mais produtos
      Mais produtos
       * Acessórios
       * Tablets
       * Eletrodomésticos
       * Smart Living
       * Routers e WiFi
       * Bilhetes
       * Oportunidades

 * TV
   TV
    * Ver TV agora
    * Novidades
      Novidades
       * Em destaque
       * Melhor experiência TV
   
    * Canais e Programação
      Canais e Programação
       * Lista de canais
       * Guia TV
   
    * Temáticas
      Temáticas
       * Filmes e Séries
       * Desporto
       * Infantil
       * Entretenimento
       * Música
       * Internacional
       * Informação
   
    * TV Multiplataforma
      TV Multiplataforma
       * Android TV
       * Apple TV
       * MEO Go
   
    * Sapo Mag

 * Suporte
   Suporte
    * my MEO
    * Ajuda
      Ajuda
       * Apoio técnico
       * Faturas e Pagamentos
       * Produtos MEO
       * Outros serviços
   
    * MEO Fórum


my MEO

my MEO

 * Entrar
 * Registe-se

É cliente MEO Empresas?
Entrar


A tua área de cliente onde e quando quiseres
 * Os meus produtos
 * As minhas faturas
 * Consultar encomendas
 * Os meus MEOS
 * Ofertas
 * Pedidos e mensagens


MEOS

MEOS

Saber mais

 * Aderir aos MEOS
 * Em destaque
 * Telemóveis
 * Experiências
 * Sensações
 * Intervenção Social
 * Smart TVs e BOX 4K
 * Edição MEOS


Carrinho





AJUDA E SUPORTE – FATURA INTERATIVA | MEO


COMPREENDER A SUA FATURA

CONHEÇA EM DETALHE O CONTEÚDO DAS VÁRIAS SECÇÕES DA SUA FATURA


 * 1ª Fatura - Pacotes
 * Fatura Pacotes
 * 1ª Fatura - Telemóvel
 * Fatura - Telemóvel




DÚVIDAS NA FATURA?

Saiba como está organizada e veja as explicações passo a passo.

1ª FATURA - PACOTES

PÁGINA 1

 * Área de Cliente
 * Dados de Cliente
 * Resumo da Fatura
 * Valor a Pagar
 * Modalidades de Pagamento

PÁGINA 2

 * Adesões
 * Mensalidades do Serviço
 * Mensalidades Televisão
 * Mensalidades Telemóvel
 * Mensalidades Equipamentos
 * Fatura Electrónica
 * QR Code

PÁGINA 3

 * Consumos


AJUDA E SUPORTE

 * Área de Cliente
 * Consultar a sua fatura
 * Consultar detalhe de comunicações
 * Compreender valor de fatura superior ao esperado
 * Pagar fatura




AJUDA E SUPORTE

 * Área de Cliente
 * Consultar a sua fatura
 * Consultar detalhe de comunicações
 * Compreender valor de fatura superior ao esperado
 * Pagar fatura

 * 1
 * 2
 * 3

+
+
+
+
+





Nota: A fatura apresentada é apenas um exemplo. Os valores apresentados são
exemplificativos.




PRÉMIOS E DISTINÇÕES

 * 
 * 
 * 
 * 
 * 

 * ver todos

PATROCÍNIOS

 * 
 * 
 * 
 * 
 * 

 * Destaques
   Destaques
    * MEO no Metaverso
    * MEO Care
    * 5G em Portugal
    * Mundo Apple no MEO
    * Universo Samsung Galaxy
    * Eletricidade

 * Mais procurados
   Mais procurados
    * Pacotes com telemóvel
    * TV+Net+Voz
    * Pós-pagos
    * Mudança de casa
    * TV na 2ª Casa

 * Loja Online
   Loja Online
    * Apple iPhone 14 Pro Max
    * Samsung Galaxy S23 Ultra
    * PS5
    * Comprar a prestações
    * Comprar com MEOS
    * Entregas grátis
    * Trocas e devoluções grátis

 * Ajuda e Suporte
   Ajuda e Suporte
    * Faturas, pagamentos e carregamentos
    * Apoio técnico e configurações
    * Produtos MEO
    * Outros serviços
    * Segurança Online

 * my MEO
   my MEO
    * Entrar
    * Os meus produtos
    * Os meus consumos
    * Faturas e pagamentos
    * Criar conta


 * Blog MEOConhece as tendências e novidades
 * MEO FórumPergunta, responde e contribui
 * Lojas MEOEncontra a loja mais próxima

 * Política de Privacidade
 * RGPD
 * Definições de Privacidade
 * Qualidade do Serviço
 * Condições de Utilização
 * Preços 2023
 * Intermediação de Crédito
 * Contactos
 * Provedoria do Cliente


 * Livro de ReclamaçõesLivro de Reclamações

 * Atualizado
   em 18 ago 2022

 * © Todos os direitos reservados.

Segue-nos

 * InstagramInstagram
 * LinkedInLinkedIn
 * FacebookFacebook
 * TwitterTwitter
 * YouTubeYouTube
 * TikTokTikTok
 * SpotifySpotify


 * 





Queres ajuda?

Mais info
Close


Joao do MEO

Esclarece todas as questões
com um especialista MEOSIM LIGUEM-ME

Agora não
Close

Queres ajuda?

Mais info

Adere ao MEO

Esclarece aqui todas as questões comerciais

Telemóvel 131323334394041444647484955818486351352353380 Quando AgoraDaqui a 1
minutoDaqui a 3 minutosDaqui a 5 minutosDaqui a 10 minutosDaqui a 15
minutos17:0018:0019:0020:0021:0022:0023:00Amanhã 10:00Amanhã 11:00Amanhã
12:00Amanhã 13:00Amanhã 14:00Amanhã 15:00Amanhã 16:00Amanhã 17:00Amanhã
18:00Amanhã 19:00Amanhã 20:00Amanhã 21:00Amanhã 22:00Amanhã 23:00




Liguem-me Grátis

Para apoio ao cliente acede aqui

Estamos a ligar do número 220 432 060.

Ligado

Obrigado pelo contacto

Como classificas esta experiência sendo
1 muito má e 10 muito boa?
 * 1
 * 2
 * 3
 * 4
 * 5
 * 6
 * 7
 * 8
 * 9
 * 10

Recomendarias a um amigo
sendo 1 nunca e 10 com certeza?
 * 1
 * 2
 * 3
 * 4
 * 5
 * 6
 * 7
 * 8
 * 9
 * 10

Escolhe uma opção

Enviar

Enviado

Esperamos que voltes em breve Fechar



Voltar