TimeTrex/interface/html5/dist/invoice-client_contact-ClientContactViewController.bundle.js

1 line
75 KiB
JavaScript

"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["invoice-client_contact-ClientContactViewController"],{7397:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ClientContactViewController\": () => (/* binding */ ClientContactViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass ClientContactViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#client_contact_view_container',\n\n\t\t\tstatus_array: null,\n\t\t\ttype_array: null,\n\t\t\tcountry_array: null,\n\t\t\tprovince_array: null,\n\n\t\t\te_province_array: null,\n\n\t\t\tdistrict_array: null,\n\n\t\t\tcompany_api: null,\n\t\t\tarea_policy_api: null,\n\t\t\tsub_document_view_controller: null,\n\t\t\tdocument_object_type_id: null\n\t\t} );\n\n\t\tsuper( options );\n\t}\n\n\tinit( options ) {\n\t\t//this._super('initialize', options );\n\t\tthis.edit_view_tpl = 'ClientContactEditView.html';\n\t\tthis.permission_id = 'client';\n\t\tthis.viewId = 'ClientContact';\n\t\tthis.script_name = 'ClientContactView';\n\t\tthis.table_name_key = 'client_contact';\n\t\tthis.document_object_type_id = 85;\n\t\tthis.context_menu_name = $.i18n._( 'Client Contacts' );\n\t\tthis.navigation_label = $.i18n._( 'Client Contact' );\n\t\tthis.api = TTAPI.APIClientContact;\n\t\tthis.company_api = TTAPI.APICompany;\n\t\tthis.area_policy_api = TTAPI.APIAreaPolicy;\n\n\t\tthis.render();\n\t\tthis.buildContextMenu();\n\n\t\tif ( !this.sub_view_mode ) {\n\t\t\tthis.initData();\n\t\t}\n\t}\n\n\tinitOptions() {\n\t\tvar options = [\n\t\t\t{ option_name: 'status', api: this.api },\n\t\t\t{ option_name: 'type', api: this.api },\n\t\t\t{ option_name: 'country', field_name: 'country', api: this.company_api },\n\t\t];\n\n\t\tthis.initDropDownOptions( options );\n\t}\n\n\tgetFilterColumnsFromDisplayColumns() {\n\t\tvar column_filter = {};\n\t\tcolumn_filter.client_id = true;\n\t\tthis._getFilterColumnsFromDisplayColumns( column_filter, true );\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\texclude: [], //This is modified below.\n\t\t\tinclude: [\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Map' ),\n\t\t\t\t\tid: 'map',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\tgroup: 'other',\n\t\t\t\t\tvue_icon: 'tticon tticon-map_black_24dp',\n\t\t\t\t\tsort_order: 8000,\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\tif ( this.sub_view_mode ) {\n\t\t\tcontext_menu_model.exclude.push( 'export_excel' ); //Hide Export icon.\n\t\t} else {\n\t\t\tcontext_menu_model.include.push(\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Jump To' ),\n\t\t\t\t\tid: 'jump_to_header',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\taction_group_header: true,\n\t\t\t\t\tpermission_result: false, // to hide it in legacy context menu and avoid errors in legacy parsers.\n\t\t\t\t\tsort_order: 9050,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Edit Client' ),\n\t\t\t\t\tid: 'edit_client',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t\tsort_order: 9050,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Invoices' ),\n\t\t\t\t\tid: 'invoice',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t\tsort_order: 9050,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Transactions' ),\n\t\t\t\t\tid: 'transaction',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t\tsort_order: 9050,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: $.i18n._( 'Payment Methods' ),\n\t\t\t\t\tid: 'payment_method',\n\t\t\t\t\tmenu_align: 'right',\n\t\t\t\t\taction_group: 'jump_to',\n\t\t\t\t\tgroup: 'navigation',\n\t\t\t\t\tsort_order: 9050,\n\t\t\t\t},\n\t\t\t\t'export_excel'\n\t\t\t);\n\t\t}\n\n\t\tcontext_menu_model.include.push(\n\t\t\t{\n\t\t\t\tlabel: '', //Empty label. vue_icon is displayed instead of text.\n\t\t\t\tid: 'other_header',\n\t\t\t\tmenu_align: 'right',\n\t\t\t\taction_group: 'other',\n\t\t\t\taction_group_header: true,\n\t\t\t\tvue_icon: 'tticon tticon-more_vert_black_24dp',\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: $.i18n._( 'Add Company' ),\n\t\t\t\tid: 'add_company',\n\t\t\t\tmenu_align: 'right',\n\t\t\t\taction_group: 'other'\n\t\t\t},\n\t\t)\n\n\t\treturn context_menu_model;\n\t}\n\n\tsetDefaultMenuAddCompanyIcon( context_btn, grid_selected_length ) {\n\n\t\tif ( !PermissionManager.validate( 'company', 'enabled' ) || !PermissionManager.validate( 'company', 'add' ) ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )\n\t\t}\n\n\t\tif ( grid_selected_length === 1 ) {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t} else {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\tsetCustomDefaultMenuIcon( id, context_btn, grid_selected_length ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'edit_client':\n\t\t\t\tthis.setDefaultMenuEditClientIcon( context_btn, grid_selected_length );\n\t\t\t\tbreak;\n\t\t\tcase 'add_company':\n\t\t\t\tthis.setDefaultMenuAddCompanyIcon( context_btn, grid_selected_length );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetCustomEditMenuIcon( id, context_btn ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'edit_client':\n\t\t\t\tthis.setEditMenuEditClientIcon( context_btn );\n\t\t\t\tbreak;\n\t\t\tcase 'add_company':\n\t\t\t\tthis.setEditMenuAddCompanyIcon( context_btn );\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetEditMenuAddCompanyIcon( context_btn, pId ) {\n\n\t\tif ( this.current_edit_record && this.current_edit_record.id ) {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t} else {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\tsetEditMenuEditClientIcon( context_btn, pId ) {\n\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\n\t\tif ( this.is_mass_editing ) {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\tsetDefaultMenuEditClientIcon( context_btn, grid_selected_length, pId ) {\n\t\tif ( grid_selected_length === 1 ) {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );\n\t\t} else {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\tonMapClick() {\n\t\t// only trigger map load in specific product editions.\n\t\tif ( ( Global.getProductEdition() >= 15 ) ) {\n\t\t\tthis.is_viewing = false;\n\t\t\tProgressBar.showProgressBar();\n\t\t\tvar data = {\n\t\t\t\tfilter_columns: {\n\t\t\t\t\tid: true,\n\t\t\t\t\tclient: true,\n\t\t\t\t\tfirst_name: true,\n\t\t\t\t\tlast_name: true,\n\t\t\t\t\ttype: true,\n\t\t\t\t\taddress1: true,\n\t\t\t\t\taddress2: true,\n\t\t\t\t\tcity: true,\n\t\t\t\t\tprovince: true,\n\t\t\t\t\tcountry: true,\n\t\t\t\t\tpostal_code: true,\n\t\t\t\t\tlatitude: true,\n\t\t\t\t\tlongitude: true\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar ids = this.getGridSelectIdArray();\n\t\t\tdata.filter_data = Global.convertLayoutFilterToAPIFilter( this.select_layout );\n\t\t\tif ( ids.length > 0 ) {\n\t\t\t\tdata.filter_data.id = ids;\n\t\t\t}\n\t\t\tvar cells = this.api.getClientContact( data, { async: false } ).getResult();\n\t\t\tif ( !this.is_mass_editing ) {\n\t\t\t\tPromise.all(/* import() | leaflet-timetrex */[__webpack_require__.e(\"vendors-node_modules_leaflet_dist_images_marker-icon-2x_png-node_modules_leaflet_dist_images_-78d511\"), __webpack_require__.e(\"interface_html5_framework_leaflet_leaflet-timetrex_js\"), __webpack_require__.e(\"leaflet-timetrex\")]).then(__webpack_require__.bind(__webpack_require__, 6889)).then(( module )=>{\n\t\t\t\t\tvar processed_data_for_map = module.TTConvertMapData.processBasicFromGenericViewController( cells );\n\t\t\t\t\tIndexViewController.openEditView( this, 'Map', processed_data_for_map );\n\t\t\t\t}).catch( Global.importErrorHandler );\n\t\t\t}\n\t\t}\n\t}\n\n\tonCustomContextClick( id ) {\n\t\tswitch ( id ) {\n\t\t\tcase 'edit_client':\n\t\t\tcase 'invoice':\n\t\t\tcase 'transaction':\n\t\t\tcase 'payment_method':\n\t\t\t\tthis.onNavigationClick( id );\n\t\t\t\tbreak;\n\t\t\tcase 'add_company':\n\t\t\t\tthis.onAddCompanyClick();\n\t\t\t\tbreak;\n\t\t\tcase 'map':\n\t\t\t\tthis.onMapClick();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tonAddCompanyClick() {\n\n\t\tvar $this = this;\n\t\tvar id = '';\n\n\t\tif ( this.edit_view ) {\n\t\t\tid = this.current_edit_record.id;\n\t\t} else {\n\t\t\tid = this.getGridSelectIdArray()[0];\n\t\t}\n\n\t\tthis.api.addCompany( id, {\n\t\t\tonResult: function( result ) {\n\t\t\t\tif ( !result.isValid() ) {\n\t\t\t\t\tTAlertManager.showErrorAlert( result );\n\t\t\t\t} else {\n\t\t\t\t\t$this.search();\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\t}\n\n\tonNavigationClick( iconName ) {\n\n\t\tvar $this = this;\n\n\t\tvar grid_selected_id_array;\n\n\t\tvar filter = { filter_data: {} };\n\n\t\tvar client_ids = [];\n\n\t\tif ( $this.edit_view && $this.current_edit_record.id ) {\n\t\t\tclient_ids.push( $this.current_edit_record.client_id );\n\t\t} else {\n\t\t\tgrid_selected_id_array = this.getGridSelectIdArray();\n\t\t\t$.each( grid_selected_id_array, function( index, value ) {\n\t\t\t\tvar grid_selected_row = $this.getRecordFromGridById( value );\n\t\t\t\tclient_ids.push( grid_selected_row.client_id );\n\t\t\t} );\n\t\t}\n\n\t\tfilter.filter_data.client_id = client_ids;\n\n\t\tswitch ( iconName ) {\n\t\t\tcase 'edit_client':\n\t\t\t\tif ( client_ids.length > 0 ) {\n\t\t\t\t\tIndexViewController.openEditView( this, 'Client', client_ids[0] );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'invoice':\n\t\t\t\tGlobal.addViewTab( $this.viewId, $.i18n._( 'Client Contacts' ), window.location.href );\n\t\t\t\tIndexViewController.goToView( 'Invoice', filter );\n\t\t\t\tbreak;\n\t\t\tcase 'transaction':\n\t\t\t\tGlobal.addViewTab( $this.viewId, $.i18n._( 'Client Contacts' ), window.location.href );\n\t\t\t\tIndexViewController.goToView( 'InvoiceTransaction', filter );\n\t\t\t\tbreak;\n\t\t\tcase 'payment_method':\n\t\t\t\tGlobal.addViewTab( $this.viewId, $.i18n._( 'Client Contacts' ), window.location.href );\n\t\t\t\tIndexViewController.goToView( 'ClientPayment', filter );\n\t\t\t\tbreak;\n\n\t\t}\n\t}\n\n\tbuildEditViewUI() {\n\n\t\tsuper.buildEditViewUI();\n\n\t\tvar $this = this;\n\n\t\tvar tab_model = {\n\t\t\t'tab_contact_information': { 'label': $.i18n._( 'Contact Information' ), 'is_multi_column': true },\n\t\t\t'tab_policy': { 'label': $.i18n._( 'Policy' ) },\n\t\t\t'tab_portal': { 'label': $.i18n._( 'Portal' ) },\n\t\t\t'tab_attachment': true,\n\t\t\t'tab_audit': true,\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\tthis.navigation.AComboBox( {\n\t\t\tapi_class: TTAPI.APIUserTitle,\n\t\t\tid: this.script_name + '_navigation',\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_client_contact',\n\t\t\tnavigation_mode: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\n\t\tthis.setNavigation();\n\n\t\t//Tab 0 start\n\n\t\tvar tab_contact_information = this.edit_view_tab.find( '#tab_contact_information' );\n\n\t\tvar tab_contact_information_column1 = tab_contact_information.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_contact_information_column1 );\n\n\t\t//Client\n\t\tvar form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIClient,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_client',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'client_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Client' ), form_item_input, tab_contact_information_column1, '' );\n\n\t\t// Status\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'status_id' } );\n\t\tform_item_input.setSourceData( $this.status_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Status' ), form_item_input, tab_contact_information_column1 );\n\n\t\t// Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'type_id' } );\n\t\tform_item_input.setSourceData( $this.type_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Type' ), form_item_input, tab_contact_information_column1 );\n\n\t\t// Default\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_input.TCheckbox( { field: 'is_default' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Default' ), form_item_input, tab_contact_information_column1 );\n\n\t\t// Currency\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APICurrency,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_currency',\n\t\t\tshow_search_inputs: true,\n\t\t\tfield: 'currency_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Currency' ), form_item_input, tab_contact_information_column1 );\n\n\t\t// First Name\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'first_name', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'First Name' ), form_item_input, tab_contact_information_column1 );\n\n\t\t// Last Name\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'last_name', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Last Name' ), form_item_input, tab_contact_information_column1 );\n\n\t\t// Address(Line 1)\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'address1', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Address(Line 1)' ), form_item_input, tab_contact_information_column1 );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t// Address(Line 2)\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'address2', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Address(Line 2)' ), form_item_input, tab_contact_information_column1 );\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t// Address(Line 3)\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'address3', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Address(Line 3)' ), form_item_input, tab_contact_information_column1 );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t//Tags\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TAG_INPUT );\n\n\t\tform_item_input.TTagInput( { field: 'tag', object_type_id: 810 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Tags' ), form_item_input, tab_contact_information_column1, '', null, null, true );\n\n\t\tvar tab_contact_information_column2 = tab_contact_information.find( '.second-column' );\n\n\t\tthis.edit_view_tabs[0].push( tab_contact_information_column2 );\n\n\t\t//City\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'city', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'City' ), form_item_input, tab_contact_information_column2, '' );\n\n\t\t//Country\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'country', set_empty: true } );\n\t\tform_item_input.setSourceData( $this.country_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Country' ), form_item_input, tab_contact_information_column2 );\n\n\t\t//Province / State\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\n\t\tform_item_input.TComboBox( { field: 'province' } );\n\t\tform_item_input.setSourceData( [] );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Province / State' ), form_item_input, tab_contact_information_column2 );\n\n\t\tform_item_input.change( $.proxy( function() {\n\t\t\tvar c = this.edit_view_ui_dic['country'].getValue();\n\t\t\tvar p = this.edit_view_ui_dic['province'].getValue();\n\t\t\tthis.setDistrict( c, p );\n\n\t\t}, this ) );\n\n\t\t// District\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'invoice_district_id', set_empty: true } );\n\t\tform_item_input.setSourceData( [] );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'District' ), form_item_input, tab_contact_information_column2 );\n\n\t\t// Postal / ZIP Code\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'postal_code', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Postal/ZIP Code' ), form_item_input, tab_contact_information_column2 );\n\n\t\t//Work Phone\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'work_phone', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Work Phone' ), form_item_input, tab_contact_information_column2 );\n\n\t\t//Mobile Phone\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'mobile_phone', width: 200 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Mobile Phone' ), form_item_input, tab_contact_information_column2 );\n\n\t\t//Fax\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'fax_phone', width: 150 } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Fax' ), form_item_input, tab_contact_information_column2 );\n\n\t\t// Email\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'email', width: 220 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Email' ), form_item_input, tab_contact_information_column2 );\n\n\t\t//Note\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_AREA );\n\n\t\tform_item_input.TTextArea( { field: 'note', width: '100%' } );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Note' ), form_item_input, tab_contact_information_column2, '', null, null, true );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\tvar tab_policy = this.edit_view_tab.find( '#tab_policy' );\n\n\t\tvar tab_policy_column1 = tab_policy.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[1] = [];\n\n\t\tthis.edit_view_tabs[1].push( tab_policy_column1 );\n\n\t\t// Include Tax Policy\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APITaxPolicy,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_tax_policy',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'include_tax_policy'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Include Tax Policy' ), form_item_input, tab_policy_column1, '' );\n\n\t\t// Exclude Tax Policy\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APITaxPolicy,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_tax_policy',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'exclude_tax_policy'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Exclude Tax Policy' ), form_item_input, tab_policy_column1, '' );\n\n\t\tvar tab_portal = this.edit_view_tab.find( '#tab_portal' );\n\n\t\tvar tab_portal_column1 = tab_portal.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[2] = [];\n\n\t\tthis.edit_view_tabs[2].push( tab_portal_column1 );\n\n\t\t// User Name\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'user_name', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'User Name' ), form_item_input, tab_portal_column1, '' );\n\n\t\t// Password\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'password', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Password' ), form_item_input, tab_portal_column1 );\n\n\t\t// Password(confirm)\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'password2', width: 150 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Password (Confirm)' ), form_item_input, tab_portal_column1, '' );\n\t}\n\n\tbuildSearchFields() {\n\n\t\tsuper.buildSearchFields();\n\t\tthis.search_fields = [\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Client' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'client_id',\n\t\t\t\tlayout_name: 'global_client',\n\t\t\t\tapi_class: TTAPI.APIClient,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Status' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'status_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Type' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'type_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'First Name' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'first_name',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Last Name' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'last_name',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Tags' ),\n\t\t\t\tfield: 'tag',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 1,\n\t\t\t\tobject_type_id: 810,\n\t\t\t\tform_item_type: FormItemType.TAG_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'City' ),\n\t\t\t\tfield: 'city',\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 2,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Country' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'country',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.COMBO_BOX\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Province/State' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'province',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Phone' ),\n\t\t\t\tfield: 'any_phone',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 2,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Email' ),\n\t\t\t\tfield: 'email',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 2,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Created By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'created_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Updated By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'updated_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} )\n\t\t];\n\t}\n\n\tsetSelectLayout() {\n\t\tif ( this.sub_view_mode ) {\n\t\t\tsuper.setSelectLayout( ['client'] );\n\t\t} else {\n\t\t\tsuper.setSelectLayout();\n\t\t}\n\t}\n\n\tonFormItemChange( target, doNotValidate ) {\n\t\tthis.setIsChanged( target );\n\t\tthis.setMassEditingFieldsWhenFormChange( target );\n\t\tvar key = target.getField();\n\n\t\tthis.current_edit_record[key] = target.getValue();\n\n\t\tswitch ( key ) {\n\n\t\t\tcase 'country':\n\t\t\t\tvar widget = this.edit_view_ui_dic['province'];\n\t\t\t\twidget.setValue( null );\n\t\t\t\tbreak;\n\t\t\tcase 'province':\n\t\t\t\twidget = this.edit_view_ui_dic['invoice_district_id'];\n\t\t\t\twidget.setValue( null );\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif ( key === 'country' ) {\n\t\t\tthis.onCountryChange();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !doNotValidate ) {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\tonGridDblClickRow() {\n\t\t//Shorten the path. it's only ever an edit click\n\t\tthis.onEditClick();\n\t}\n\n\tsetCurrentEditRecordData() {\n\n\t\t//Set current edit record data to all widgets\n\t\t//Set current edit record data to all widgets\n\t\tfor ( var key in this.current_edit_record ) {\n\t\t\tvar widget = this.edit_view_ui_dic[key];\n\t\t\tif ( Global.isSet( widget ) ) {\n\t\t\t\tswitch ( key ) {\n\t\t\t\t\tcase 'country': //popular case\n\t\t\t\t\t\tthis.setCountryValue( widget, key );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'province': //popular case\n\t\t\t\t\t\tthis.setDistrict( this.current_edit_record['country'], this.current_edit_record[key] );\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tthis.collectUIDataToCurrentEditRecord();\n\t\tthis.setEditViewDataDone();\n\t}\n\n\tonSetSearchFilterFinished() {\n\n\t\tif ( this.search_panel.getSelectTabIndex() === 1 ) {\n\t\t\tvar combo = this.adv_search_field_ui_dic['country'];\n\t\t\tvar select_value = combo.getValue();\n\t\t\tthis.setProvince( select_value );\n\t\t}\n\t}\n\n\tsetProvince( val, m ) {\n\t\tvar $this = this;\n\n\t\tif ( !val || val === '-1' || val === '0' ) {\n\t\t\t$this.province_array = [];\n\t\t\tthis.adv_search_field_ui_dic['province'].setSourceData( [] );\n\t\t} else {\n\n\t\t\tthis.company_api.getOptions( 'province', val, {\n\t\t\t\tonResult: function( res ) {\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tif ( !res ) {\n\t\t\t\t\t\tres = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t$this.province_array = Global.buildRecordArray( res );\n\t\t\t\t\t$this.adv_search_field_ui_dic['province'].setSourceData( $this.province_array );\n\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\teSetProvince( val, refresh ) {\n\t\tvar $this = this;\n\t\tvar province_widget = $this.edit_view_ui_dic['province'];\n\n\t\tif ( !val || val === '-1' || val === '0' ) {\n\t\t\t$this.e_province_array = [];\n\t\t\tprovince_widget.setSourceData( [] );\n\t\t} else {\n\t\t\tthis.company_api.getOptions( 'province', val, {\n\t\t\t\tonResult: function( res ) {\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tif ( !res ) {\n\t\t\t\t\t\tres = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t$this.e_province_array = Global.buildRecordArray( res );\n\t\t\t\t\tif ( refresh && $this.e_province_array.length > 0 ) {\n\t\t\t\t\t\t$this.current_edit_record.province = $this.e_province_array[0].value;\n\t\t\t\t\t\tprovince_widget.setValue( $this.current_edit_record.province );\n\t\t\t\t\t}\n\t\t\t\t\tprovince_widget.setSourceData( $this.e_province_array );\n\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\tsetDistrict( c, p ) {\n\t\tvar $this = this;\n\t\tvar district_widget = $this.edit_view_ui_dic['invoice_district_id'];\n\n\t\tif ( !Global.isSet( c ) || c === '-1' || c === '0' || !Global.isSet( p ) || p === '-1' || p === '0' ) {\n\t\t\t$this.district_array = [];\n\t\t\tdistrict_widget.setSourceData( [] );\n\t\t} else {\n\n\t\t\tthis.area_policy_api.getDistrictOptions( c, p, {\n\t\t\t\tonResult: function( res ) {\n\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tif ( !res ) {\n\t\t\t\t\t\tres = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t$this.district_array = Global.buildRecordArray( res );\n\t\t\t\t\tdistrict_widget.setSourceData( $this.district_array );\n\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\tonBuildAdvUIFinished() {\n\n\t\tthis.adv_search_field_ui_dic['country'].change( $.proxy( function() {\n\t\t\tvar combo = this.adv_search_field_ui_dic['country'];\n\t\t\tvar selectVal = combo.getValue();\n\n\t\t\tthis.setProvince( selectVal );\n\n\t\t\tthis.adv_search_field_ui_dic['province'].setValue( null );\n\n\t\t}, this ) );\n\t}\n\n\tremoveEditView() {\n\t\tsuper.removeEditView();\n\t\tthis.sub_client_contact_view_controller = null;\n\t}\n}\n\nClientContactViewController.loadSubView = function( container, beforeViewLoadedFun, afterViewLoadedFun ) {\n\n\tGlobal.loadViewSource( 'ClientContact', 'SubClientContactView.html', function( result ) {\n\t\tvar args = {};\n\t\tvar template = _.template( result );\n\n\t\tif ( Global.isSet( beforeViewLoadedFun ) ) {\n\t\t\tbeforeViewLoadedFun();\n\t\t}\n\n\t\tif ( Global.isSet( container ) ) {\n\t\t\tcontainer.html( template( args ) );\n\t\t\tif ( Global.isSet( afterViewLoadedFun ) ) {\n\t\t\t\tafterViewLoadedFun( sub_client_contact_view_controller );\n\t\t\t}\n\t\t}\n\t} );\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM5Ny5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTztBQUNQLDJCQUEyQjtBQUMzQixFQUFFLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLENBQUM7QUFDNUIsMEJBQTBCLENBQUM7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUssc0NBQXNDO0FBQzNDLEtBQUssb0NBQW9DO0FBQ3pDLEtBQUssc0VBQXNFO0FBQzNFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxDQUFDO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNEQUFzRDtBQUN0RCxJQUFJO0FBQ0o7QUFDQTtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxZQUFZLENBQUM7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsWUFBWSxDQUFDO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxlQUFlO0FBQ2pFO0FBQ0EsSUFBSSxrV0FBMkY7QUFDL0Y7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxpQkFBaUI7O0FBRWpCOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHLENBQUM7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLENBQUM7QUFDdEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsZ0NBQWdDLFNBQVMsQ0FBQywyREFBMkQ7QUFDckcsbUJBQW1CLFNBQVMsQ0FBQyxxQkFBcUI7QUFDbEQsbUJBQW1CLFNBQVMsQ0FBQyxxQkFBcUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0IscUJBQXFCO0FBQ3BEO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0IsbUJBQW1CO0FBQ2xEO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JELDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxnQ0FBZ0Msa0NBQWtDO0FBQ2xFLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBLGdDQUFnQyxpQ0FBaUM7QUFDakUsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUEsZ0NBQWdDLG1DQUFtQztBQUNuRSw2QkFBNkIsQ0FBQzs7QUFFOUI7O0FBRUE7QUFDQTs7QUFFQSxnQ0FBZ0MsbUNBQW1DO0FBQ25FLDZCQUE2QixDQUFDO0FBQzlCOztBQUVBO0FBQ0E7O0FBRUEsZ0NBQWdDLG1DQUFtQztBQUNuRSw2QkFBNkIsQ0FBQzs7QUFFOUI7O0FBRUE7QUFDQTs7QUFFQSwrQkFBK0Isb0NBQW9DO0FBQ25FLDZCQUE2QixDQUFDOztBQUU5Qjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGdDQUFnQyw0QkFBNEI7QUFDNUQsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUEsK0JBQStCLG9DQUFvQztBQUNuRTtBQUNBLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBLCtCQUErQixvQkFBb0I7QUFDbkQ7QUFDQSw2QkFBNkIsQ0FBQzs7QUFFOUIsMEJBQTBCLENBQUM7QUFDM0I7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLCtCQUErQixnREFBZ0Q7QUFDL0U7QUFDQSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxnQ0FBZ0MsbUNBQW1DO0FBQ25FLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBLGdDQUFnQyxrQ0FBa0M7QUFDbEUsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUEsZ0NBQWdDLG9DQUFvQztBQUNwRSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxnQ0FBZ0MsaUNBQWlDOztBQUVqRSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxnQ0FBZ0MsNkJBQTZCO0FBQzdELDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBLCtCQUErQiwrQkFBK0I7O0FBRTlELDZCQUE2QixDQUFDOztBQUU5Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLDZCQUE2QixDQUFDOztBQUU5Qjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGdDQUFnQyxpQ0FBaUM7QUFDakUsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUEsZ0NBQWdDLGdDQUFnQztBQUNoRSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxnQ0FBZ0MsaUNBQWlDO0FBQ2pFLDZCQUE2QixDQUFDO0FBQzlCOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUEsa0RBQWtELENBQUM7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLENBQUM7O0FBRWxCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9pbnRlcmZhY2UvaHRtbDUvdmlld3MvaW52b2ljZS9jbGllbnRfY29udGFjdC9DbGllbnRDb250YWN0Vmlld0NvbnRyb2xsZXIuanM/NGE0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ2xpZW50Q29udGFjdFZpZXdDb250cm9sbGVyIGV4dGVuZHMgQmFzZVZpZXdDb250cm9sbGVyIHtcblx0Y29uc3RydWN0b3IoIG9wdGlvbnMgPSB7fSApIHtcblx0XHRfLmRlZmF1bHRzKCBvcHRpb25zLCB7XG5cdFx0XHRlbDogJyNjbGllbnRfY29udGFjdF92aWV3X2NvbnRhaW5lcicsXG5cblx0XHRcdHN0YXR1c19hcnJheTogbnVsbCxcblx0XHRcdHR5cGVfYXJyYXk6IG51bGwsXG5cdFx0XHRjb3VudHJ5X2FycmF5OiBudWxsLFxuXHRcdFx0cHJvdmluY2VfYXJyYXk6IG51bGwsXG5cblx0XHRcdGVfcHJvdmluY2VfYXJyYXk6IG51bGwsXG5cblx0XHRcdGRpc3RyaWN0X2FycmF5OiBudWxsLFxuXG5cdFx0XHRjb21wYW55X2FwaTogbnVsbCxcblx0XHRcdGFyZWFfcG9saWN5X2FwaTogbnVsbCxcblx0XHRcdHN1Yl9kb2N1bWVudF92aWV3X2NvbnRyb2xsZXI6IG51bGwsXG5cdFx0XHRkb2N1bWVudF9vYmplY3RfdHlwZV9pZDogbnVsbFxuXHRcdH0gKTtcblxuXHRcdHN1cGVyKCBvcHRpb25zICk7XG5cdH1cblxuXHRpbml0KCBvcHRpb25zICkge1xuXHRcdC8vdGhpcy5fc3VwZXIoJ2luaXRpYWxpemUnLCBvcHRpb25zICk7XG5cdFx0dGhpcy5lZGl0X3ZpZXdfdHBsID0gJ0NsaWVudENvbnRhY3RFZGl0Vmlldy5odG1sJztcblx0XHR0aGlzLnBlcm1pc3Npb25faWQgPSAnY2xpZW50Jztcblx0XHR0aGlzLnZpZXdJZCA9ICdDbGllbnRDb250YWN0Jztcblx0XHR0aGlzLnNjcmlwdF9uYW1lID0gJ0NsaWVudENvbnRhY3RWaWV3Jztcblx0XHR0aGlzLnRhYmxlX25hbWVfa2V5ID0gJ2NsaWVudF9jb250YWN0Jztcblx0XHR0aGlzLmRvY3VtZW50X29iamVjdF90eXBlX2lkID0gODU7XG5cdFx0dGhpcy5jb250ZXh0X21lbnVfbmFtZSA9ICQuaTE4bi5fKCAnQ2xpZW50IENvbnRhY3RzJyApO1xuXHRcdHRoaXMubmF2aWdhdGlvbl9sYWJlbCA9ICQuaTE4bi5fKCAnQ2xpZW50IENvbnRhY3QnICk7XG5cdFx0dGhpcy5hcGkgPSBUVEFQSS5BUElDbGllbnRDb250YWN0O1xuXHRcdHRoaXMuY29tcGFueV9hcGkgPSBUVEFQSS5BUElDb21wYW55O1xuXHRcdHRoaXMuYXJlYV9wb2xpY3lfYXBpID0gVFRBUEkuQVBJQXJlYVBvbGljeTtcblxuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cblx0XHRpZiAoICF0aGlzLnN1Yl92aWV3X21vZGUgKSB7XG5cdFx0XHR0aGlzLmluaXREYXRhKCk7XG5cdFx0fVxuXHR9XG5cblx0aW5pdE9wdGlvbnMoKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSBbXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnc3RhdHVzJywgYXBpOiB0aGlzLmFwaSB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ3R5cGUnLCBhcGk6IHRoaXMuYXBpIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnY291bnRyeScsIGZpZWxkX25hbWU6ICdjb3VudHJ5JywgYXBpOiB0aGlzLmNvbXBhbnlfYXBpIH0sXG5cdFx0XTtcblxuXHRcdHRoaXMuaW5pdERyb3BEb3duT3B0aW9ucyggb3B0aW9ucyApO1xuXHR9XG5cblx0Z2V0RmlsdGVyQ29sdW1uc0Zyb21EaXNwbGF5Q29sdW1ucygpIHtcblx0XHR2YXIgY29sdW1uX2ZpbHRlciA9IHt9O1xuXHRcdGNvbHVtbl9maWx0ZXIuY2xpZW50X2lkID0gdHJ1ZTtcblx0XHR0aGlzLl9nZXRGaWx0ZXJDb2x1bW5zRnJvbURpc3BsYXlDb2x1bW5zKCBjb2x1bW5fZmlsdGVyLCB0cnVlICk7XG5cdH1cblxuXHRnZXRDdXN0b21Db250ZXh0TWVudU1vZGVsKCkge1xuXHRcdHZhciBjb250ZXh0X21lbnVfbW9kZWwgPSB7XG5cdFx0XHRleGNsdWRlOiBbXSwgLy9UaGlzIGlzIG1vZGlmaWVkIGJlbG93LlxuXHRcdFx0aW5jbHVkZTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnTWFwJyApLFxuXHRcdFx0XHRcdGlkOiAnbWFwJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGdyb3VwOiAnb3RoZXInLFxuXHRcdFx0XHRcdHZ1ZV9pY29uOiAndHRpY29uIHR0aWNvbi1tYXBfYmxhY2tfMjRkcCcsXG5cdFx0XHRcdFx0c29ydF9vcmRlcjogODAwMCxcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cblx0XHRpZiAoIHRoaXMuc3ViX3ZpZXdfbW9kZSApIHtcblx0XHRcdGNvbnRleHRfbWVudV9tb2RlbC5leGNsdWRlLnB1c2goICdleHBvcnRfZXhjZWwnICk7IC8vSGlkZSBFeHBvcnQgaWNvbi5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dF9tZW51X21vZGVsLmluY2x1ZGUucHVzaChcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0p1bXAgVG8nICksXG5cdFx0XHRcdFx0aWQ6ICdqdW1wX3RvX2hlYWRlcicsXG5cdFx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0XHRhY3Rpb25fZ3JvdXA6ICdqdW1wX3RvJyxcblx0XHRcdFx0XHRhY3Rpb25fZ3JvdXBfaGVhZGVyOiB0cnVlLFxuXHRcdFx0XHRcdHBlcm1pc3Npb25fcmVzdWx0OiBmYWxzZSwgLy8gdG8gaGlkZSBpdCBpbiBsZWdhY3kgY29udGV4dCBtZW51IGFuZCBhdm9pZCBlcnJvcnMgaW4gbGVnYWN5IHBhcnNlcnMuXG5cdFx0XHRcdFx0c29ydF9vcmRlcjogOTA1MCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0VkaXQgQ2xpZW50JyApLFxuXHRcdFx0XHRcdGlkOiAnZWRpdF9jbGllbnQnLFxuXHRcdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnanVtcF90bycsXG5cdFx0XHRcdFx0Z3JvdXA6ICduYXZpZ2F0aW9uJyxcblx0XHRcdFx0XHRzb3J0X29yZGVyOiA5MDUwLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnSW52b2ljZXMnICksXG5cdFx0XHRcdFx0aWQ6ICdpbnZvaWNlJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdGdyb3VwOiAnbmF2aWdhdGlvbicsXG5cdFx0XHRcdFx0c29ydF9vcmRlcjogOTA1MCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1RyYW5zYWN0aW9ucycgKSxcblx0XHRcdFx0XHRpZDogJ3RyYW5zYWN0aW9uJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdGdyb3VwOiAnbmF2aWdhdGlvbicsXG5cdFx0XHRcdFx0c29ydF9vcmRlcjogOTA1MCxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1BheW1lbnQgTWV0aG9kcycgKSxcblx0XHRcdFx0XHRpZDogJ3BheW1lbnRfbWV0aG9kJyxcblx0XHRcdFx0XHRtZW51X2FsaWduOiAncmlnaHQnLFxuXHRcdFx0XHRcdGFjdGlvbl9ncm91cDogJ2p1bXBfdG8nLFxuXHRcdFx0XHRcdGdyb3VwOiAnbmF2aWdhdGlvbicsXG5cdFx0XHRcdFx0c29ydF9vcmRlcjogOTA1MCxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2V4cG9ydF9leGNlbCdcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29udGV4dF9tZW51X21vZGVsLmluY2x1ZGUucHVzaChcblx0XHRcdHtcblx0XHRcdFx0bGFiZWw6ICcnLCAvL0VtcHR5IGxhYmVsLiB2dWVfaWNvbiBpcyBkaXNwbGF5ZWQgaW5zdGVhZCBvZiB0ZXh0LlxuXHRcdFx0XHRpZDogJ290aGVyX2hlYWRlcicsXG5cdFx0XHRcdG1lbnVfYWxpZ246ICdyaWdodCcsXG5cdFx0XHRcdGFjdGlvbl9ncm91cDogJ290aGVyJyxcblx0XHRcdFx0YWN0aW9uX2dyb3VwX2hlYWRlcjogdHJ1ZSxcblx0XHRcdFx0dnVlX2ljb246ICd0dGljb24gdHRpY29uLW1vcmVfdmVydF9ibGFja18yNGRwJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0FkZCBDb21wYW55JyApLFxuXHRcdFx0XHRpZDogJ2FkZF9jb21wYW55Jyxcblx0XHRcdFx0bWVudV9hbGlnbjogJ3JpZ2h0Jyxcblx0XHRcdFx0YWN0aW9uX2dyb3VwOiAnb3RoZXInXG5cdFx0XHR9LFxuXHRcdClcblxuXHRcdHJldHVybiBjb250ZXh0X21lbnVfbW9kZWw7XG5cdH1cblxuXHRzZXREZWZhdWx0TWVudUFkZENvbXBhbnlJY29uKCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGggKSB7XG5cblx0XHRpZiAoICFQZXJtaXNzaW9uTWFuYWdlci52YWxpZGF0ZSggJ2NvbXBhbnknLCAnZW5hYmxlZCcgKSB8fCAhUGVybWlzc2lvbk1hbmFnZXIudmFsaWRhdGUoICdjb21wYW55JywgJ2FkZCcgKSApIHtcblx0XHRcdENvbnRleHRNZW51TWFuYWdlci5oaWRlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlIClcblx0XHR9XG5cblx0XHRpZiAoIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoID09PSAxICkge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgdHJ1ZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCBmYWxzZSApO1xuXHRcdH1cblx0fVxuXG5cdHNldEN1c3RvbURlZmF1bHRNZW51SWNvbiggaWQsIGNvbnRleHRfYnRuLCBncmlkX3NlbGVjdGVkX2xlbmd0aCApIHtcblx0XHRzd2l0Y2ggKCBpZCApIHtcblx0XHRcdGNhc2UgJ2VkaXRfY2xpZW50Jzpcblx0XHRcdFx0dGhpcy5zZXREZWZhdWx0TWVudUVkaXRDbGllbnRJY29uKCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGggKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhZGRfY29tcGFueSc6XG5cdFx0XHRcdHRoaXMuc2V0RGVmYXVsdE1lbnVBZGRDb21wYW55SWNvbiggY29udGV4dF9idG4sIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHNldEN1c3RvbUVkaXRNZW51SWNvbiggaWQsIGNvbnRleHRfYnRuICkge1xuXHRcdHN3aXRjaCAoIGlkICkge1xuXHRcdFx0Y2FzZSAnZWRpdF9jbGllbnQnOlxuXHRcdFx0XHR0aGlzLnNldEVkaXRNZW51RWRpdENsaWVudEljb24oIGNvbnRleHRfYnRuICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYWRkX2NvbXBhbnknOlxuXHRcdFx0XHR0aGlzLnNldEVkaXRNZW51QWRkQ29tcGFueUljb24oIGNvbnRleHRfYnRuICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHNldEVkaXRNZW51QWRkQ29tcGFueUljb24oIGNvbnRleHRfYnRuLCBwSWQgKSB7XG5cblx0XHRpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCAmJiB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKSB7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCB0cnVlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdENvbnRleHRNZW51TWFuYWdlci5kaXNhYmxlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlICk7XG5cdFx0fVxuXHR9XG5cblx0c2V0RWRpdE1lbnVFZGl0Q2xpZW50SWNvbiggY29udGV4dF9idG4sIHBJZCApIHtcblx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCB0cnVlICk7XG5cblx0XHRpZiAoIHRoaXMuaXNfbWFzc19lZGl0aW5nICkge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgZmFsc2UgKTtcblx0XHR9XG5cdH1cblxuXHRzZXREZWZhdWx0TWVudUVkaXRDbGllbnRJY29uKCBjb250ZXh0X2J0biwgZ3JpZF9zZWxlY3RlZF9sZW5ndGgsIHBJZCApIHtcblx0XHRpZiAoIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoID09PSAxICkge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmRpc2FibGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgdHJ1ZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDb250ZXh0TWVudU1hbmFnZXIuZGlzYWJsZU1lbnVJdGVtKCB0aGlzLmRldGVybWluZUNvbnRleHRNZW51TW91bnRBdHRyaWJ1dGVzKCkuaWQsIGNvbnRleHRfYnRuLmlkLCBmYWxzZSApO1xuXHRcdH1cblx0fVxuXG5cdG9uTWFwQ2xpY2soKSB7XG5cdFx0Ly8gb25seSB0cmlnZ2VyIG1hcCBsb2FkIGluIHNwZWNpZmljIHByb2R1Y3QgZWRpdGlvbnMuXG5cdFx0aWYgKCAoIEdsb2JhbC5nZXRQcm9kdWN0RWRpdGlvbigpID49IDE1ICkgKSB7XG5cdFx0XHR0aGlzLmlzX3ZpZXdpbmcgPSBmYWxzZTtcblx0XHRcdFByb2dyZXNzQmFyLnNob3dQcm9ncmVzc0JhcigpO1xuXHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdGZpbHRlcl9jb2x1bW5zOiB7XG5cdFx0XHRcdFx0aWQ6IHRydWUsXG5cdFx0XHRcdFx0Y2xpZW50OiB0cnVlLFxuXHRcdFx0XHRcdGZpcnN0X25hbWU6IHRydWUsXG5cdFx0XHRcdFx0bGFzdF9uYW1lOiB0cnVlLFxuXHRcdFx0XHRcdHR5cGU6IHRydWUsXG5cdFx0XHRcdFx0YWRkcmVzczE6IHRydWUsXG5cdFx0XHRcdFx0YWRkcmVzczI6IHRydWUsXG5cdFx0XHRcdFx0Y2l0eTogdHJ1ZSxcblx0XHRcdFx0XHRwcm92aW5jZTogdHJ1ZSxcblx0XHRcdFx0XHRjb3VudHJ5OiB0cnVlLFxuXHRcdFx0XHRcdHBvc3RhbF9jb2RlOiB0cnVlLFxuXHRcdFx0XHRcdGxhdGl0dWRlOiB0cnVlLFxuXHRcdFx0XHRcdGxvbmdpdHVkZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dmFyIGlkcyA9IHRoaXMuZ2V0R3JpZFNlbGVjdElkQXJyYXkoKTtcblx0XHRcdGRhdGEuZmlsdGVyX2RhdGEgPSBHbG9iYWwuY29udmVydExheW91dEZpbHRlclRvQVBJRmlsdGVyKCB0aGlzLnNlbGVjdF9sYXlvdXQgKTtcblx0XHRcdGlmICggaWRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRcdGRhdGEuZmlsdGVyX2RhdGEuaWQgPSBpZHM7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY2VsbHMgPSB0aGlzLmFwaS5nZXRDbGllbnRDb250YWN0KCBkYXRhLCB7IGFzeW5jOiBmYWxzZSB9ICkuZ2V0UmVzdWx0KCk7XG5cdFx0XHRpZiAoICF0aGlzLmlzX21hc3NfZWRpdGluZyApIHtcblx0XHRcdFx0aW1wb3J0KCAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImxlYWZsZXQtdGltZXRyZXhcIiAqLyAnQC9mcmFtZXdvcmsvbGVhZmxldC9sZWFmbGV0LXRpbWV0cmV4JyApLnRoZW4oKCBtb2R1bGUgKT0+e1xuXHRcdFx0XHRcdHZhciBwcm9jZXNzZWRfZGF0YV9mb3JfbWFwID0gbW9kdWxlLlRUQ29udmVydE1hcERhdGEucHJvY2Vzc0Jhc2ljRnJvbUdlbmVyaWNWaWV3Q29udHJvbGxlciggY2VsbHMgKTtcblx0XHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLm9wZW5FZGl0VmlldyggdGhpcywgJ01hcCcsIHByb2Nlc3NlZF9kYXRhX2Zvcl9tYXAgKTtcblx0XHRcdFx0fSkuY2F0Y2goIEdsb2JhbC5pbXBvcnRFcnJvckhhbmRsZXIgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbkN1c3RvbUNvbnRleHRDbGljayggaWQgKSB7XG5cdFx0c3dpdGNoICggaWQgKSB7XG5cdFx0XHRjYXNlICdlZGl0X2NsaWVudCc6XG5cdFx0XHRjYXNlICdpbnZvaWNlJzpcblx0XHRcdGNhc2UgJ3RyYW5zYWN0aW9uJzpcblx0XHRcdGNhc2UgJ3BheW1lbnRfbWV0aG9kJzpcblx0XHRcdFx0dGhpcy5vbk5hdmlnYXRpb25DbGljayggaWQgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdhZGRfY29tcGFueSc6XG5cdFx0XHRcdHRoaXMub25BZGRDb21wYW55Q2xpY2soKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdtYXAnOlxuXHRcdFx0XHR0aGlzLm9uTWFwQ2xpY2soKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0b25BZGRDb21wYW55Q2xpY2soKSB7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHZhciBpZCA9ICcnO1xuXG5cdFx0aWYgKCB0aGlzLmVkaXRfdmlldyApIHtcblx0XHRcdGlkID0gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZCA9IHRoaXMuZ2V0R3JpZFNlbGVjdElkQXJyYXkoKVswXTtcblx0XHR9XG5cblx0XHR0aGlzLmFwaS5hZGRDb21wYW55KCBpZCwge1xuXHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdGlmICggIXJlc3VsdC5pc1ZhbGlkKCkgKSB7XG5cdFx0XHRcdFx0VEFsZXJ0TWFuYWdlci5zaG93RXJyb3JBbGVydCggcmVzdWx0ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0JHRoaXMuc2VhcmNoKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdG9uTmF2aWdhdGlvbkNsaWNrKCBpY29uTmFtZSApIHtcblxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHR2YXIgZ3JpZF9zZWxlY3RlZF9pZF9hcnJheTtcblxuXHRcdHZhciBmaWx0ZXIgPSB7IGZpbHRlcl9kYXRhOiB7fSB9O1xuXG5cdFx0dmFyIGNsaWVudF9pZHMgPSBbXTtcblxuXHRcdGlmICggJHRoaXMuZWRpdF92aWV3ICYmICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuaWQgKSB7XG5cdFx0XHRjbGllbnRfaWRzLnB1c2goICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuY2xpZW50X2lkICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGdyaWRfc2VsZWN0ZWRfaWRfYXJyYXkgPSB0aGlzLmdldEdyaWRTZWxlY3RJZEFycmF5KCk7XG5cdFx0XHQkLmVhY2goIGdyaWRfc2VsZWN0ZWRfaWRfYXJyYXksIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBncmlkX3NlbGVjdGVkX3JvdyA9ICR0aGlzLmdldFJlY29yZEZyb21HcmlkQnlJZCggdmFsdWUgKTtcblx0XHRcdFx0Y2xpZW50X2lkcy5wdXNoKCBncmlkX3NlbGVjdGVkX3Jvdy5jbGllbnRfaWQgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEuY2xpZW50X2lkID0gY2xpZW50X2lkcztcblxuXHRcdHN3aXRjaCAoIGljb25OYW1lICkge1xuXHRcdFx0Y2FzZSAnZWRpdF9jbGllbnQnOlxuXHRcdFx0XHRpZiAoIGNsaWVudF9pZHMubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLm9wZW5FZGl0VmlldyggdGhpcywgJ0NsaWVudCcsIGNsaWVudF9pZHNbMF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2ludm9pY2UnOlxuXHRcdFx0XHRHbG9iYWwuYWRkVmlld1RhYiggJHRoaXMudmlld0lkLCAkLmkxOG4uXyggJ0NsaWVudCBDb250YWN0cycgKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgKTtcblx0XHRcdFx0SW5kZXhWaWV3Q29udHJvbGxlci5nb1RvVmlldyggJ0ludm9pY2UnLCBmaWx0ZXIgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd0cmFuc2FjdGlvbic6XG5cdFx0XHRcdEdsb2JhbC5hZGRWaWV3VGFiKCAkdGhpcy52aWV3SWQsICQuaTE4bi5fKCAnQ2xpZW50IENvbnRhY3RzJyApLCB3aW5kb3cubG9jYXRpb24uaHJlZiApO1xuXHRcdFx0XHRJbmRleFZpZXdDb250cm9sbGVyLmdvVG9WaWV3KCAnSW52b2ljZVRyYW5zYWN0aW9uJywgZmlsdGVyICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAncGF5bWVudF9tZXRob2QnOlxuXHRcdFx0XHRHbG9iYWwuYWRkVmlld1RhYiggJHRoaXMudmlld0lkLCAkLmkxOG4uXyggJ0NsaWVudCBDb250YWN0cycgKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgKTtcblx0XHRcdFx0SW5kZXhWaWV3Q29udHJvbGxlci5nb1RvVmlldyggJ0NsaWVudFBheW1lbnQnLCBmaWx0ZXIgKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHR9XG5cdH1cblxuXHRidWlsZEVkaXRWaWV3VUkoKSB7XG5cblx0XHRzdXBlci5idWlsZEVkaXRWaWV3VUkoKTtcblxuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHR2YXIgdGFiX21vZGVsID0ge1xuXHRcdFx0J3RhYl9jb250YWN0X2luZm9ybWF0aW9uJzogeyAnbGFiZWwnOiAkLmkxOG4uXyggJ0NvbnRhY3QgSW5mb3JtYXRpb24nICksICdpc19tdWx0aV9jb2x1bW4nOiB0cnVlIH0sXG5cdFx0XHQndGFiX3BvbGljeSc6IHsgJ2xhYmVsJzogJC5pMThuLl8oICdQb2xpY3knICkgfSxcblx0XHRcdCd0YWJfcG9ydGFsJzogeyAnbGFiZWwnOiAkLmkxOG4uXyggJ1BvcnRhbCcgKSB9LFxuXHRcdFx0J3RhYl9hdHRhY2htZW50JzogdHJ1ZSxcblx0XHRcdCd0YWJfYXVkaXQnOiB0cnVlLFxuXHRcdH07XG5cdFx0dGhpcy5zZXRUYWJNb2RlbCggdGFiX21vZGVsICk7XG5cblx0XHR0aGlzLm5hdmlnYXRpb24uQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVVzZXJUaXRsZSxcblx0XHRcdGlkOiB0aGlzLnNjcmlwdF9uYW1lICsgJ19uYXZpZ2F0aW9uJyxcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9jbGllbnRfY29udGFjdCcsXG5cdFx0XHRuYXZpZ2F0aW9uX21vZGU6IHRydWUsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWVcblx0XHR9ICk7XG5cblx0XHR0aGlzLnNldE5hdmlnYXRpb24oKTtcblxuXHRcdC8vVGFiIDAgc3RhcnRcblxuXHRcdHZhciB0YWJfY29udGFjdF9pbmZvcm1hdGlvbiA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9jb250YWN0X2luZm9ybWF0aW9uJyApO1xuXG5cdFx0dmFyIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjEgPSB0YWJfY29udGFjdF9pbmZvcm1hdGlvbi5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMF0gPSBbXTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMF0ucHVzaCggdGFiX2NvbnRhY3RfaW5mb3JtYXRpb25fY29sdW1uMSApO1xuXG5cdFx0Ly9DbGllbnRcblx0XHR2YXIgZm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LkFDb21ib0JveCgge1xuXHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElDbGllbnQsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfY2xpZW50Jyxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGZpZWxkOiAnY2xpZW50X2lkJ1xuXHRcdH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0NsaWVudCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4xLCAnJyApO1xuXG5cdFx0Ly8gU3RhdHVzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnc3RhdHVzX2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnN0YXR1c19hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnU3RhdHVzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjEgKTtcblxuXHRcdC8vIFR5cGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICd0eXBlX2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnR5cGVfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1R5cGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NvbnRhY3RfaW5mb3JtYXRpb25fY29sdW1uMSApO1xuXG5cdFx0Ly8gRGVmYXVsdFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ0hFQ0tCT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENoZWNrYm94KCB7IGZpZWxkOiAnaXNfZGVmYXVsdCcgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGVmYXVsdCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4xICk7XG5cblx0XHQvLyBDdXJyZW5jeVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJQ3VycmVuY3ksXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfY3VycmVuY3knLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdjdXJyZW5jeV9pZCdcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDdXJyZW5jeScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4xICk7XG5cblx0XHQvLyBGaXJzdCBOYW1lXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2ZpcnN0X25hbWUnLCB3aWR0aDogMTUwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0ZpcnN0IE5hbWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NvbnRhY3RfaW5mb3JtYXRpb25fY29sdW1uMSApO1xuXG5cdFx0Ly8gTGFzdCBOYW1lXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2xhc3RfbmFtZScsIHdpZHRoOiAxNTAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTGFzdCBOYW1lJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjEgKTtcblxuXHRcdC8vIEFkZHJlc3MoTGluZSAxKVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdhZGRyZXNzMScsIHdpZHRoOiAnMTAwJScgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQWRkcmVzcyhMaW5lIDEpJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjEgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5wYXJlbnQoKS53aWR0aCggJzQ1JScgKTtcblxuXHRcdC8vIEFkZHJlc3MoTGluZSAyKVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdhZGRyZXNzMicsIHdpZHRoOiAnMTAwJScgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQWRkcmVzcyhMaW5lIDIpJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjEgKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQucGFyZW50KCkud2lkdGgoICc0NSUnICk7XG5cblx0XHQvLyBBZGRyZXNzKExpbmUgMylcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnYWRkcmVzczMnLCB3aWR0aDogJzEwMCUnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0FkZHJlc3MoTGluZSAzKScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4xICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQucGFyZW50KCkud2lkdGgoICc0NSUnICk7XG5cblx0XHQvL1RhZ3Ncblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRBR19JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUYWdJbnB1dCggeyBmaWVsZDogJ3RhZycsIG9iamVjdF90eXBlX2lkOiA4MTAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnVGFncycgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4xLCAnJywgbnVsbCwgbnVsbCwgdHJ1ZSApO1xuXG5cdFx0dmFyIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjIgPSB0YWJfY29udGFjdF9pbmZvcm1hdGlvbi5maW5kKCAnLnNlY29uZC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzBdLnB1c2goIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjIgKTtcblxuXHRcdC8vQ2l0eVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdjaXR5Jywgd2lkdGg6IDE1MCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDaXR5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjIsICcnICk7XG5cblx0XHQvL0NvdW50cnlcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ2NvdW50cnknLCBzZXRfZW1wdHk6IHRydWUgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5jb3VudHJ5X2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDb3VudHJ5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjIgKTtcblxuXHRcdC8vUHJvdmluY2UgLyBTdGF0ZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAncHJvdmluY2UnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggW10gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1Byb3ZpbmNlIC8gU3RhdGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NvbnRhY3RfaW5mb3JtYXRpb25fY29sdW1uMiApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LmNoYW5nZSggJC5wcm94eSggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgYyA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1snY291bnRyeSddLmdldFZhbHVlKCk7XG5cdFx0XHR2YXIgcCA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1sncHJvdmluY2UnXS5nZXRWYWx1ZSgpO1xuXHRcdFx0dGhpcy5zZXREaXN0cmljdCggYywgcCApO1xuXG5cdFx0fSwgdGhpcyApICk7XG5cblx0XHQvLyBEaXN0cmljdFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ2ludm9pY2VfZGlzdHJpY3RfaWQnLCBzZXRfZW1wdHk6IHRydWUgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCBbXSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGlzdHJpY3QnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2NvbnRhY3RfaW5mb3JtYXRpb25fY29sdW1uMiApO1xuXG5cdFx0Ly8gUG9zdGFsIC8gWklQIENvZGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAncG9zdGFsX2NvZGUnLCB3aWR0aDogMTUwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1Bvc3RhbC9aSVAgQ29kZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4yICk7XG5cblx0XHQvL1dvcmsgUGhvbmVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnd29ya19waG9uZScsIHdpZHRoOiAxNTAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnV29yayBQaG9uZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4yICk7XG5cblx0XHQvL01vYmlsZSBQaG9uZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdtb2JpbGVfcGhvbmUnLCB3aWR0aDogMjAwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ01vYmlsZSBQaG9uZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4yICk7XG5cblx0XHQvL0ZheFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdmYXhfcGhvbmUnLCB3aWR0aDogMTUwIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRmF4JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9jb250YWN0X2luZm9ybWF0aW9uX2NvbHVtbjIgKTtcblxuXHRcdC8vIEVtYWlsXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2VtYWlsJywgd2lkdGg6IDIyMCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdFbWFpbCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4yICk7XG5cblx0XHQvL05vdGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfQVJFQSApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0QXJlYSggeyBmaWVsZDogJ25vdGUnLCB3aWR0aDogJzEwMCUnIH0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTm90ZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfY29udGFjdF9pbmZvcm1hdGlvbl9jb2x1bW4yLCAnJywgbnVsbCwgbnVsbCwgdHJ1ZSApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LnBhcmVudCgpLndpZHRoKCAnNDUlJyApO1xuXG5cdFx0dmFyIHRhYl9wb2xpY3kgPSB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJyN0YWJfcG9saWN5JyApO1xuXG5cdFx0dmFyIHRhYl9wb2xpY3lfY29sdW1uMSA9IHRhYl9wb2xpY3kuZmluZCggJy5maXJzdC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzFdID0gW107XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzFdLnB1c2goIHRhYl9wb2xpY3lfY29sdW1uMSApO1xuXG5cdFx0Ly8gSW5jbHVkZSBUYXggUG9saWN5XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LkFDb21ib0JveCgge1xuXHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElUYXhQb2xpY3ksXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF90YXhfcG9saWN5Jyxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGZpZWxkOiAnaW5jbHVkZV90YXhfcG9saWN5J1xuXHRcdH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0luY2x1ZGUgVGF4IFBvbGljeScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcG9saWN5X2NvbHVtbjEsICcnICk7XG5cblx0XHQvLyBFeGNsdWRlIFRheCBQb2xpY3lcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSVRheFBvbGljeSxcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogdHJ1ZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3RheF9wb2xpY3knLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdleGNsdWRlX3RheF9wb2xpY3knXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRXhjbHVkZSBUYXggUG9saWN5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9wb2xpY3lfY29sdW1uMSwgJycgKTtcblxuXHRcdHZhciB0YWJfcG9ydGFsID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3BvcnRhbCcgKTtcblxuXHRcdHZhciB0YWJfcG9ydGFsX2NvbHVtbjEgPSB0YWJfcG9ydGFsLmZpbmQoICcuZmlyc3QtY29sdW1uJyApO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1syXSA9IFtdO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1syXS5wdXNoKCB0YWJfcG9ydGFsX2NvbHVtbjEgKTtcblxuXHRcdC8vIFVzZXIgTmFtZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICd1c2VyX25hbWUnLCB3aWR0aDogMTUwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1VzZXIgTmFtZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcG9ydGFsX2NvbHVtbjEsICcnICk7XG5cblx0XHQvLyBQYXNzd29yZFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdwYXNzd29yZCcsIHdpZHRoOiAxNTAgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnUGFzc3dvcmQnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3BvcnRhbF9jb2x1bW4xICk7XG5cblx0XHQvLyBQYXNzd29yZChjb25maXJtKVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdwYXNzd29yZDInLCB3aWR0aDogMTUwIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1Bhc3N3b3JkIChDb25maXJtKScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfcG9ydGFsX2NvbHVtbjEsICcnICk7XG5cdH1cblxuXHRidWlsZFNlYXJjaEZpZWxkcygpIHtcblxuXHRcdHN1cGVyLmJ1aWxkU2VhcmNoRmllbGRzKCk7XG5cdFx0dGhpcy5zZWFyY2hfZmllbGRzID0gW1xuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQ2xpZW50JyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnY2xpZW50X2lkJyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfY2xpZW50Jyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElDbGllbnQsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1N0YXR1cycgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ3N0YXR1c19pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUeXBlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAndHlwZV9pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdGaXJzdCBOYW1lJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnZmlyc3RfbmFtZScsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnTGFzdCBOYW1lJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnbGFzdF9uYW1lJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUYWdzJyApLFxuXHRcdFx0XHRmaWVsZDogJ3RhZycsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRvYmplY3RfdHlwZV9pZDogODEwLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRBR19JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQ2l0eScgKSxcblx0XHRcdFx0ZmllbGQ6ICdjaXR5Jyxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0NvdW50cnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdjb3VudHJ5Jyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1Byb3ZpbmNlL1N0YXRlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZpZWxkOiAncHJvdmluY2UnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1Bob25lJyApLFxuXHRcdFx0XHRmaWVsZDogJ2FueV9waG9uZScsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0VtYWlsJyApLFxuXHRcdFx0XHRmaWVsZDogJ2VtYWlsJyxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnQ3JlYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ2NyZWF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnVXBkYXRlZCBCeScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ3VwZGF0ZWRfYnknLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF91c2VyJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElVc2VyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApXG5cdFx0XTtcblx0fVxuXG5cdHNldFNlbGVjdExheW91dCgpIHtcblx0XHRpZiAoIHRoaXMuc3ViX3ZpZXdfbW9kZSApIHtcblx0XHRcdHN1cGVyLnNldFNlbGVjdExheW91dCggWydjbGllbnQnXSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdXBlci5zZXRTZWxlY3RMYXlvdXQoKTtcblx0XHR9XG5cdH1cblxuXHRvbkZvcm1JdGVtQ2hhbmdlKCB0YXJnZXQsIGRvTm90VmFsaWRhdGUgKSB7XG5cdFx0dGhpcy5zZXRJc0NoYW5nZWQoIHRhcmdldCApO1xuXHRcdHRoaXMuc2V0TWFzc0VkaXRpbmdGaWVsZHNXaGVuRm9ybUNoYW5nZSggdGFyZ2V0ICk7XG5cdFx0dmFyIGtleSA9IHRhcmdldC5nZXRGaWVsZCgpO1xuXG5cdFx0dGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gPSB0YXJnZXQuZ2V0VmFsdWUoKTtcblxuXHRcdHN3aXRjaCAoIGtleSApIHtcblxuXHRcdFx0Y2FzZSAnY291bnRyeSc6XG5cdFx0XHRcdHZhciB3aWRnZXQgPSB0aGlzLmVkaXRfdmlld191aV9kaWNbJ3Byb3ZpbmNlJ107XG5cdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggbnVsbCApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3Byb3ZpbmNlJzpcblx0XHRcdFx0d2lkZ2V0ID0gdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydpbnZvaWNlX2Rpc3RyaWN0X2lkJ107XG5cdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggbnVsbCApO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRpZiAoIGtleSA9PT0gJ2NvdW50cnknICkge1xuXHRcdFx0dGhpcy5vbkNvdW50cnlDaGFuZ2UoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoICFkb05vdFZhbGlkYXRlICkge1xuXHRcdFx0dGhpcy52YWxpZGF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdG9uR3JpZERibENsaWNrUm93KCkge1xuXHRcdC8vU2hvcnRlbiB0aGUgcGF0aC4gaXQncyBvbmx5IGV2ZXIgYW4gZWRpdCBjbGlja1xuXHRcdHRoaXMub25FZGl0Q2xpY2soKTtcblx0fVxuXG5cdHNldEN1cnJlbnRFZGl0UmVjb3JkRGF0YSgpIHtcblxuXHRcdC8vU2V0IGN1cnJlbnQgZWRpdCByZWNvcmQgZGF0YSB0byBhbGwgd2lkZ2V0c1xuXHRcdC8vU2V0IGN1cnJlbnQgZWRpdCByZWNvcmQgZGF0YSB0byBhbGwgd2lkZ2V0c1xuXHRcdGZvciAoIHZhciBrZXkgaW4gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkICkge1xuXHRcdFx0dmFyIHdpZGdldCA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1trZXldO1xuXHRcdFx0aWYgKCBHbG9iYWwuaXNTZXQoIHdpZGdldCApICkge1xuXHRcdFx0XHRzd2l0Y2ggKCBrZXkgKSB7XG5cdFx0XHRcdFx0Y2FzZSAnY291bnRyeSc6IC8vcG9wdWxhciBjYXNlXG5cdFx0XHRcdFx0XHR0aGlzLnNldENvdW50cnlWYWx1ZSggd2lkZ2V0LCBrZXkgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3Byb3ZpbmNlJzogLy9wb3B1bGFyIGNhc2Vcblx0XHRcdFx0XHRcdHRoaXMuc2V0RGlzdHJpY3QoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnY291bnRyeSddLCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHdpZGdldC5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmNvbGxlY3RVSURhdGFUb0N1cnJlbnRFZGl0UmVjb3JkKCk7XG5cdFx0dGhpcy5zZXRFZGl0Vmlld0RhdGFEb25lKCk7XG5cdH1cblxuXHRvblNldFNlYXJjaEZpbHRlckZpbmlzaGVkKCkge1xuXG5cdFx0aWYgKCB0aGlzLnNlYXJjaF9wYW5lbC5nZXRTZWxlY3RUYWJJbmRleCgpID09PSAxICkge1xuXHRcdFx0dmFyIGNvbWJvID0gdGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1snY291bnRyeSddO1xuXHRcdFx0dmFyIHNlbGVjdF92YWx1ZSA9IGNvbWJvLmdldFZhbHVlKCk7XG5cdFx0XHR0aGlzLnNldFByb3ZpbmNlKCBzZWxlY3RfdmFsdWUgKTtcblx0XHR9XG5cdH1cblxuXHRzZXRQcm92aW5jZSggdmFsLCBtICkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cblx0XHRpZiAoICF2YWwgfHwgdmFsID09PSAnLTEnIHx8IHZhbCA9PT0gJzAnICkge1xuXHRcdFx0JHRoaXMucHJvdmluY2VfYXJyYXkgPSBbXTtcblx0XHRcdHRoaXMuYWR2X3NlYXJjaF9maWVsZF91aV9kaWNbJ3Byb3ZpbmNlJ10uc2V0U291cmNlRGF0YSggW10gKTtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLmNvbXBhbnlfYXBpLmdldE9wdGlvbnMoICdwcm92aW5jZScsIHZhbCwge1xuXHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblx0XHRcdFx0XHRyZXMgPSByZXMuZ2V0UmVzdWx0KCk7XG5cdFx0XHRcdFx0aWYgKCAhcmVzICkge1xuXHRcdFx0XHRcdFx0cmVzID0gW107XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JHRoaXMucHJvdmluY2VfYXJyYXkgPSBHbG9iYWwuYnVpbGRSZWNvcmRBcnJheSggcmVzICk7XG5cdFx0XHRcdFx0JHRoaXMuYWR2X3NlYXJjaF9maWVsZF91aV9kaWNbJ3Byb3ZpbmNlJ10uc2V0U291cmNlRGF0YSggJHRoaXMucHJvdmluY2VfYXJyYXkgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXHR9XG5cblx0ZVNldFByb3ZpbmNlKCB2YWwsIHJlZnJlc2ggKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR2YXIgcHJvdmluY2Vfd2lkZ2V0ID0gJHRoaXMuZWRpdF92aWV3X3VpX2RpY1sncHJvdmluY2UnXTtcblxuXHRcdGlmICggIXZhbCB8fCB2YWwgPT09ICctMScgfHwgdmFsID09PSAnMCcgKSB7XG5cdFx0XHQkdGhpcy5lX3Byb3ZpbmNlX2FycmF5ID0gW107XG5cdFx0XHRwcm92aW5jZV93aWRnZXQuc2V0U291cmNlRGF0YSggW10gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb21wYW55X2FwaS5nZXRPcHRpb25zKCAncHJvdmluY2UnLCB2YWwsIHtcblx0XHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXMgKSB7XG5cdFx0XHRcdFx0cmVzID0gcmVzLmdldFJlc3VsdCgpO1xuXHRcdFx0XHRcdGlmICggIXJlcyApIHtcblx0XHRcdFx0XHRcdHJlcyA9IFtdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCR0aGlzLmVfcHJvdmluY2VfYXJyYXkgPSBHbG9iYWwuYnVpbGRSZWNvcmRBcnJheSggcmVzICk7XG5cdFx0XHRcdFx0aWYgKCByZWZyZXNoICYmICR0aGlzLmVfcHJvdmluY2VfYXJyYXkubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0XHRcdCR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQucHJvdmluY2UgPSAkdGhpcy5lX3Byb3ZpbmNlX2FycmF5WzBdLnZhbHVlO1xuXHRcdFx0XHRcdFx0cHJvdmluY2Vfd2lkZ2V0LnNldFZhbHVlKCAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLnByb3ZpbmNlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHByb3ZpbmNlX3dpZGdldC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5lX3Byb3ZpbmNlX2FycmF5ICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fVxuXG5cdHNldERpc3RyaWN0KCBjLCBwICkge1xuXHRcdHZhciAkdGhpcyA9IHRoaXM7XG5cdFx0dmFyIGRpc3RyaWN0X3dpZGdldCA9ICR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2ludm9pY2VfZGlzdHJpY3RfaWQnXTtcblxuXHRcdGlmICggIUdsb2JhbC5pc1NldCggYyApIHx8IGMgPT09ICctMScgfHwgYyA9PT0gJzAnIHx8ICFHbG9iYWwuaXNTZXQoIHAgKSB8fCBwID09PSAnLTEnIHx8IHAgPT09ICcwJyApIHtcblx0XHRcdCR0aGlzLmRpc3RyaWN0X2FycmF5ID0gW107XG5cdFx0XHRkaXN0cmljdF93aWRnZXQuc2V0U291cmNlRGF0YSggW10gKTtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0aGlzLmFyZWFfcG9saWN5X2FwaS5nZXREaXN0cmljdE9wdGlvbnMoIGMsIHAsIHtcblx0XHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXMgKSB7XG5cblx0XHRcdFx0XHRyZXMgPSByZXMuZ2V0UmVzdWx0KCk7XG5cdFx0XHRcdFx0aWYgKCAhcmVzICkge1xuXHRcdFx0XHRcdFx0cmVzID0gW107XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JHRoaXMuZGlzdHJpY3RfYXJyYXkgPSBHbG9iYWwuYnVpbGRSZWNvcmRBcnJheSggcmVzICk7XG5cdFx0XHRcdFx0ZGlzdHJpY3Rfd2lkZ2V0LnNldFNvdXJjZURhdGEoICR0aGlzLmRpc3RyaWN0X2FycmF5ICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGRBZHZVSUZpbmlzaGVkKCkge1xuXG5cdFx0dGhpcy5hZHZfc2VhcmNoX2ZpZWxkX3VpX2RpY1snY291bnRyeSddLmNoYW5nZSggJC5wcm94eSggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY29tYm8gPSB0aGlzLmFkdl9zZWFyY2hfZmllbGRfdWlfZGljWydjb3VudHJ5J107XG5cdFx0XHR2YXIgc2VsZWN0VmFsID0gY29tYm8uZ2V0VmFsdWUoKTtcblxuXHRcdFx0dGhpcy5zZXRQcm92aW5jZSggc2VsZWN0VmFsICk7XG5cblx0XHRcdHRoaXMuYWR2X3NlYXJjaF9maWVsZF91aV9kaWNbJ3Byb3ZpbmNlJ10uc2V0VmFsdWUoIG51bGwgKTtcblxuXHRcdH0sIHRoaXMgKSApO1xuXHR9XG5cblx0cmVtb3ZlRWRpdFZpZXcoKSB7XG5cdFx0c3VwZXIucmVtb3ZlRWRpdFZpZXcoKTtcblx0XHR0aGlzLnN1Yl9jbGllbnRfY29udGFjdF92aWV3X2NvbnRyb2xsZXIgPSBudWxsO1xuXHR9XG59XG5cbkNsaWVudENvbnRhY3RWaWV3Q29udHJvbGxlci5sb2FkU3ViVmlldyA9IGZ1bmN0aW9uKCBjb250YWluZXIsIGJlZm9yZVZpZXdMb2FkZWRGdW4sIGFmdGVyVmlld0xvYWRlZEZ1biApIHtcblxuXHRHbG9iYWwubG9hZFZpZXdTb3VyY2UoICdDbGllbnRDb250YWN0JywgJ1N1YkNsaWVudENvbnRhY3RWaWV3Lmh0bWwnLCBmdW5jdGlvbiggcmVzdWx0ICkge1xuXHRcdHZhciBhcmdzID0ge307XG5cdFx0dmFyIHRlbXBsYXRlID0gXy50ZW1wbGF0ZSggcmVzdWx0ICk7XG5cblx0XHRpZiAoIEdsb2JhbC5pc1NldCggYmVmb3JlVmlld0xvYWRlZEZ1biApICkge1xuXHRcdFx0YmVmb3JlVmlld0xvYWRlZEZ1bigpO1xuXHRcdH1cblxuXHRcdGlmICggR2xvYmFsLmlzU2V0KCBjb250YWluZXIgKSApIHtcblx0XHRcdGNvbnRhaW5lci5odG1sKCB0ZW1wbGF0ZSggYXJncyApICk7XG5cdFx0XHRpZiAoIEdsb2JhbC5pc1NldCggYWZ0ZXJWaWV3TG9hZGVkRnVuICkgKSB7XG5cdFx0XHRcdGFmdGVyVmlld0xvYWRlZEZ1biggc3ViX2NsaWVudF9jb250YWN0X3ZpZXdfY29udHJvbGxlciApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7397\n")}}]);