1 line
101 KiB
JavaScript
1 line
101 KiB
JavaScript
"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["company-station-StationViewController"],{132:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"StationViewController\": () => (/* binding */ StationViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass StationViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#station_view_container',\n\n\t\t\tuser_group_api: null,\n\t\t\tstatus_array: null,\n\t\t\ttype_array: null,\n\n\t\t\ttime_zone_array: null,\n\t\t\ttime_clock_command_array: null,\n\t\t\tmode_flag_array: null,\n\t\t\tdefault_mode_flag_array: null,\n\t\t\tface_recognition_match_threshold_array: null,\n\t\t\tface_recognition_required_matches_array: null,\n\t\t\tpoll_frequency_array: null,\n\t\t\tpush_frequency_array: null,\n\t\t\tpartial_push_frequency_array: null,\n\t\t\tgroup_selection_type_array: null,\n\t\t\tbranch_selection_type_array: null,\n\t\t\tdepartment_selection_type_array: null,\n\t\t\tuser_group_array: null,\n\n\t\t\tpunch_tag_api: null,\n\t\t\tdefault_punch_tag: [],\n\t\t\tprevious_punch_tag_selection: [],\n\n\t\t\tuser_preference_api: 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 = 'StationEditView.html';\n\t\tthis.permission_id = 'station';\n\t\tthis.viewId = 'Station';\n\t\tthis.script_name = 'StationView';\n\t\tthis.table_name_key = 'station';\n\t\tthis.context_menu_name = $.i18n._( 'Station' );\n\t\tthis.navigation_label = $.i18n._( 'Station' );\n\t\tthis.api = TTAPI.APIStation;\n\t\tthis.user_group_api = TTAPI.APIUserGroup;\n\t\tthis.user_preference_api = TTAPI.APIUserPreference;\n\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\tthis.job_api = TTAPI.APIJob;\n\t\t\tthis.job_item_api = TTAPI.APIJobItem;\n\t\t\tthis.punch_tag_api = TTAPI.APIPunchTag;\n\t\t}\n\n\t\tthis.render();\n\t\tthis.buildContextMenu();\n\n\t\tthis.initData();\n\t}\n\n\tgetCustomContextMenuModel() {\n\t\tvar context_menu_model = {\n\t\t\texclude: ['copy'],\n\t\t\tinclude: []\n\t\t};\n\n\t\treturn context_menu_model;\n\t}\n\n\tinitOptions( callBack ) {\n\n\t\tvar $this = this;\n\n\t\tvar options = [\n\t\t\t{ option_name: 'status', field_name: null, api: null },\n\t\t\t{ option_name: 'type', field_name: null, api: null },\n\t\t\t{ option_name: 'time_zone', field_name: 'time_zone', api: $this.user_preference_api },\n\t\t\t{ option_name: 'time_clock_command', field_name: null, api: null },\n\t\t\t{ option_name: 'poll_frequency', field_name: null, api: null },\n\t\t\t{ option_name: 'push_frequency', field_name: null, api: null },\n\t\t\t{ option_name: 'partial_push_frequency', field_name: null, api: null },\n\t\t\t{ option_name: 'group_selection_type', field_name: null, api: null },\n\t\t\t{ option_name: 'branch_selection_type', field_name: null, api: null },\n\t\t\t{ option_name: 'department_selection_type', field_name: null, api: null }\n\n\t\t];\n\n\t\tthis.initDropDownOptions( options, function( result ) {\n\n\t\t\t$this.user_group_api.getUserGroup( '', false, false, {\n\t\t\t\tonResult: function( res ) {\n\n\t\t\t\t\tres = res.getResult();\n\t\t\t\t\tres = Global.buildTreeRecord( res );\n\t\t\t\t\t$this.user_group_array = res;\n\n\t\t\t\t\tif ( callBack ) {\n\t\t\t\t\t\tcallBack( result ); // First to initialize drop down options, and then to initialize edit view UI.\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t} );\n\t}\n\n\tsetCurrentEditRecordData() {\n\t\tvar $this = this;\n\t\t// When mass editing, these fields may not be the common data, so their value will be undefined, so this will cause their change event cannot work properly.\n\t\tthis.setDefaultData( {\n\t\t\t'type_id': 10,\n\t\t\t'user_group_selection_type_id': 10,\n\t\t\t'branch_selection_type_id': 10,\n\t\t\t'department_selection_type_id': 10\n\t\t} );\n\n\t\tfor ( var key in this.current_edit_record ) {\n\n\t\t\tif ( !this.current_edit_record.hasOwnProperty( key ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\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 'job_id':\n\t\t\t\t\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'job_item_id':\n\t\t\t\t\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t\t\t\t\tvar args = {};\n\t\t\t\t\t\t\targs.filter_data = { job_id: this.current_edit_record.job_id };\n\t\t\t\t\t\t\twidget.setDefaultArgs( args );\n\t\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'punch_tag_id':\n\t\t\t\t\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t\t\t\t\twidget.setValue( this.current_edit_record[key] );\n\t\t\t\t\t\t\tthis.previous_punch_tag_selection = this.current_edit_record[key];\n\n\t\t\t\t\t\t\tvar punch_tag_widget = widget;\n\t\t\t\t\t\t\tTTPromise.wait( null, null, function() {\n\t\t\t\t\t\t\t\t//Update default args for punch tags AComboBox last as they rely on data from job, job item and related fields.\n\t\t\t\t\t\t\t\tvar args = {};\n\t\t\t\t\t\t\t\targs.filter_data = $this.getPunchTagFilterData();\n\t\t\t\t\t\t\t\tpunch_tag_widget.setDefaultArgs( args );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'punch_tag_quick_search':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'job_quick_search':\n//\t\t\t\t\t\twidget.setValue( this.current_edit_record['job_id'] ? this.current_edit_record['job_id'] : 0 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'job_item_quick_search':\n//\t\t\t\t\t\twidget.setValue( this.current_edit_record['job_item_id'] ? this.current_edit_record['job_item_id'] : 0 );\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\t\t\t}\n\t\t}\n\n\t\tthis.collectUIDataToCurrentEditRecord();\n\t\tthis.setEditViewDataDone();\n\t}\n\n\t/* jshint ignore:start */\n\tonFormItemChange( target, doNotValidate ) {\n\t\tvar $this = this;\n\t\tthis.setIsChanged( target );\n\t\tthis.setMassEditingFieldsWhenFormChange( target );\n\t\tvar key = target.getField();\n\t\tvar c_value = target.getValue();\n\n\t\tthis.current_edit_record[key] = c_value;\n\n\t\tswitch ( key ) {\n\t\t\tcase 'type_id':\n\t\t\t\tthis.onTypeChange();\n\t\t\t\tbreak;\n\t\t\tcase 'job_id':\n\t\t\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t\t\tthis.edit_view_ui_dic['job_quick_search'].setValue( target.getValue( true ) ? ( target.getValue( true ).manual_id ? target.getValue( true ).manual_id : '' ) : '' );\n\t\t\t\t\tthis.setJobItemValueWhenJobChanged( target.getValue( true ), 'job_item_id', { job_id: this.current_edit_record.job_id } );\n\t\t\t\t\tthis.edit_view_ui_dic['job_quick_search'].setCheckBox( true );\n\t\t\t\t\tthis.setPunchTagValuesWhenCriteriaChanged( this.getPunchTagFilterData(), 'punch_tag_id' );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'job_item_id':\n\t\t\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t\t\tthis.edit_view_ui_dic['job_item_quick_search'].setValue( target.getValue( true ) ? ( target.getValue( true ).manual_id ? target.getValue( true ).manual_id : '' ) : '' );\n\t\t\t\t\tthis.edit_view_ui_dic['job_item_quick_search'].setCheckBox( true );\n\t\t\t\t\tthis.setPunchTagValuesWhenCriteriaChanged( this.getPunchTagFilterData(), 'punch_tag_id' );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'punch_tag_id':\n\t\t\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t\t\tif ( c_value !== TTUUID.zero_id && c_value !== false && c_value.length > 0 ) {\n\t\t\t\t\t\tthis.setPunchTagQuickSearchManualIds( target.getSelectItems() );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.edit_view_ui_dic['punch_tag_quick_search'].setValue( '' );\n\t\t\t\t\t}\n\t\t\t\t\t$this.previous_punch_tag_selection = c_value;\n\t\t\t\t\t//Reset source data to make sure correct punch tags are always shown.\n\t\t\t\t\tthis.edit_view_ui_dic['punch_tag_id'].setSourceData( null );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'user_id':\n\t\t\tcase 'branch_id':\n\t\t\tcase 'department_id':\n\t\t\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t\t\tthis.setPunchTagValuesWhenCriteriaChanged( this.getPunchTagFilterData(), 'punch_tag_id' );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'job_quick_search':\n\t\t\tcase 'job_item_quick_search':\n\t\t\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t\t\tthis.onJobQuickSearch( key, c_value );\n\t\t\t\t\tthis.setPunchTagValuesWhenCriteriaChanged( $this.getPunchTagFilterData(), 'punch_tag_id' );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'punch_tag_quick_search':\n\t\t\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t\t\tthis.onPunchTagQuickSearch( c_value, this.getPunchTagFilterData(), 'punch_tag_id' );\n\n\t\t\t\t\t//Don't validate immediately as onPunchTagQuickSearch is doing async API calls, and it would cause a guaranteed validation failure.\n\t\t\t\t\tdoNotValidate = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'user_group_selection_type_id':\n\t\t\t\tthis.onEmployeeGroupSelectionTypeChange();\n\t\t\t\tbreak;\n\t\t\tcase 'branch_selection_type_id':\n\t\t\t\tthis.onBranchSelectionTypeChange();\n\t\t\t\tbreak;\n\t\t\tcase 'department_selection_type_id':\n\t\t\t\tthis.onDepartmentSelectionTypeChange();\n\t\t\t\tbreak;\n\n\t\t}\n\t\tthis.isDisableIncludeEmployees();\n\t\tif ( !doNotValidate ) {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\t/* jshint ignore:end */\n\tisDisableIncludeEmployees() {\n\t\tif ( this.edit_view_ui_dic['group'].getEnabled() || this.edit_view_ui_dic['branch'].getEnabled() || this.edit_view_ui_dic['department'].getEnabled() ) {\n\t\t\tthis.edit_view_ui_dic['include_user'].setEnabled( true );\n\t\t} else {\n\t\t\tthis.edit_view_ui_dic['include_user'].setEnabled( false );\n\t\t}\n\t}\n\n\tonEmployeeGroupSelectionTypeChange() {\n\n\t\tif ( parseInt( this.current_edit_record['user_group_selection_type_id'] ) == 10 ) {\n\t\t\tthis.edit_view_ui_dic['group'].setEnabled( false );\n\t\t} else {\n\t\t\tthis.edit_view_ui_dic['user_group_selection_type_id'].setValue( this.current_edit_record['user_group_selection_type_id'] );\n\t\t\tthis.edit_view_ui_dic['group'].setEnabled( true );\n\t\t}\n\t}\n\n\tonBranchSelectionTypeChange() {\n\t\tif ( parseInt( this.current_edit_record['branch_selection_type_id'] ) == 10 ) {\n\n\t\t\tthis.edit_view_ui_dic['branch'].setEnabled( false );\n\t\t} else {\n\t\t\tthis.edit_view_ui_dic['branch_selection_type_id'].setValue( this.current_edit_record['branch_selection_type_id'] );\n\t\t\tthis.edit_view_ui_dic['branch'].setEnabled( true );\n\t\t}\n\t}\n\n\tonDepartmentSelectionTypeChange() {\n\t\tif ( parseInt( this.current_edit_record['department_selection_type_id'] ) == 10 ) {\n\t\t\tthis.edit_view_ui_dic['department'].setEnabled( false );\n\t\t} else {\n\t\t\tthis.edit_view_ui_dic['department_selection_type_id'].setValue( this.current_edit_record['department_selection_type_id'] );\n\t\t\tthis.edit_view_ui_dic['department'].setEnabled( true );\n\t\t}\n\t}\n\n\tonTypeChange() {\n\t\tif ( parseInt( this.current_edit_record['type_id'] ) == 100 ||\n\t\t\tparseInt( this.current_edit_record['type_id'] ) == 150 ||\n\t\t\tparseInt( this.current_edit_record['type_id'] ) == 28 ||\n\t\t\tparseInt( this.current_edit_record['type_id'] ) == 65 ) {\n\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).show();\n\t\t\tvar tab_2_label = this.edit_view.find( 'a[ref=tab_time_clock]' );\n\n\t\t\tif ( parseInt( this.current_edit_record['type_id'] ) == 100 ||\n\t\t\t\tparseInt( this.current_edit_record['type_id'] ) == 150 ) {\n\t\t\t\ttab_2_label.text( $.i18n._( 'TimeClock' ) );\n\n\t\t\t\tif ( parseInt( this.current_edit_record['type_id'] ) != 150 ) {\n\t\t\t\t\tthis.attachElement( 'manual_command' );\n\t\t\t\t\tthis.attachElement( 'push_frequency' );\n\t\t\t\t\tthis.attachElement( 'partial_push_frequency' );\n\t\t\t\t} else {\n\t\t\t\t\tthis.detachElement( 'manual_command' );\n\t\t\t\t\tthis.detachElement( 'push_frequency' );\n\t\t\t\t\tthis.detachElement( 'partial_push_frequency' );\n\t\t\t\t}\n\n\t\t\t\tthis.attachElement( 'password' );\n\t\t\t\tthis.attachElement( 'port' );\n\t\t\t} else {\n\t\t\t\ttab_2_label.text( $.i18n._( 'Mobile App' ) );\n\t\t\t\tthis.detachElement( 'password' );\n\t\t\t\tthis.detachElement( 'port' );\n\t\t\t\tthis.detachElement( 'manual_command' );\n\t\t\t\tthis.detachElement( 'push_frequency' );\n\t\t\t\tthis.detachElement( 'partial_push_frequency' );\n\t\t\t\tthis.detachElement( 'enable_auto_punch_status' );\n\t\t\t}\n\n\t\t\tthis.initModeFlag();\n\n\t\t\t//#2590 - ensure field is only visible in valid types.\n\t\t\tif ( parseInt( this.current_edit_record['type_id'] ) == 65 ) {\n\t\t\t\tthis.initDefaultModeFlag();\n\t\t\t\tthis.initFacialRecognitionThesholdFields();\n\t\t\t} else {\n\t\t\t\tthis.edit_view_ui_dic['default_mode_flag'].parents( '.edit-view-form-item-div' ).hide();\n\t\t\t\tthis.edit_view_ui_dic['user_value_1'].parents( '.edit-view-form-item-div' ).hide();\n\t\t\t\tthis.edit_view_ui_dic['user_value_2'].parents( '.edit-view-form-item-div' ).hide();\n\t\t\t}\n\t\t} else {\n\t\t\t$( this.edit_view_tab.find( 'ul li' )[2] ).hide();\n\t\t\tthis.edit_view_tab.tabs( 'option', 'active', 0 );\n\n\t\t}\n\n\t\tthis.editFieldResize();\n\t}\n\n\tinitModeFlag() {\n\t\tvar $this = this;\n\t\tthis.api.getOptions( 'mode_flag', this.current_edit_record.type_id, true, {\n\t\t\tonResult: function( result ) {\n\t\t\t\tvar result_data = Global.buildRecordArray( result.getResult() );\n\n\t\t\t\t$this.edit_view_ui_dic['mode_flag'].setSourceData( result_data );\n\t\t\t\t$this.edit_view_ui_dic['mode_flag'].setValue( $this.current_edit_record.mode_flag );\n\n\t\t\t}\n\t\t} );\n\t}\n\n\tinitDefaultModeFlag() {\n\t\tvar $this = this;\n\t\tthis.api.getOptions( 'default_mode_flag', this.current_edit_record.type_id, true, {\n\t\t\tonResult: function( result ) {\n\t\t\t\tvar result_data = Global.buildRecordArray( result.getResult() );\n\n\t\t\t\t$this.edit_view_ui_dic['default_mode_flag'].setSourceData( result_data );\n\t\t\t\tvar value = ( $this.current_edit_record.default_mode_flag != 0 ) ? $this.current_edit_record.default_mode_flag : TTUUID.zero_id;\n\t\t\t\t$this.edit_view_ui_dic['default_mode_flag'].setValue( value );\n\t\t\t\t$this.edit_view_ui_dic['default_mode_flag'].parents( '.edit-view-form-item-div' ).show();\n\n\t\t\t}\n\t\t} );\n\t}\n\n\tinitFacialRecognitionThesholdFields() {\n\t\tvar $this = this;\n\t\tthis.api.getOptions( 'face_recognition_match_threshold', {\n\t\t\tonResult: function( result ) {\n\t\t\t\tvar result_data = Global.buildRecordArray( result.getResult() );\n\n\t\t\t\t$this.edit_view_ui_dic['user_value_1'].setSourceData( result_data );\n\t\t\t\tvar value = ( $this.current_edit_record.user_value_1 != 0 ) ? $this.current_edit_record.user_value_1 : 0;\n\t\t\t\t$this.edit_view_ui_dic['user_value_1'].setValue( value );\n\t\t\t\t$this.edit_view_ui_dic['user_value_1'].parents( '.edit-view-form-item-div' ).show();\n\t\t\t}\n\t\t} );\n\n\t\tthis.api.getOptions( 'face_recognition_required_matches', {\n\t\t\tonResult: function( result ) {\n\t\t\t\tvar result_data = Global.buildRecordArray( result.getResult() );\n\n\t\t\t\t$this.edit_view_ui_dic['user_value_2'].setSourceData( result_data );\n\t\t\t\tvar value = ( $this.current_edit_record.user_value_2 != 0 ) ? $this.current_edit_record.user_value_2 : 0;\n\t\t\t\t$this.edit_view_ui_dic['user_value_2'].setValue( value );\n\t\t\t\t$this.edit_view_ui_dic['user_value_2'].parents( '.edit-view-form-item-div' ).show();\n\t\t\t}\n\t\t} );\n\n\t}\n\n\tsetEditViewDataDone() {\n\t\tvar $this = this;\n\t\tsuper.setEditViewDataDone();\n\n\t\tthis.onTypeChange();\n\t\tthis.onEmployeeGroupSelectionTypeChange();\n\t\tthis.onBranchSelectionTypeChange();\n\t\tthis.onDepartmentSelectionTypeChange();\n\t\tthis.isDisableIncludeEmployees();\n\n\t\tvar runButton = this.edit_view_form_item_dic['manual_command'].find( 'button[type=\\'button\\']' );\n\t\tif ( $this.is_mass_editing || $this.is_viewing ) {\n\t\t\tthis.edit_view_ui_dic['manual_command'].setEnabled( false );\n\t\t\trunButton.attr( 'disabled', true );\n\t\t} else {\n\t\t\trunButton.off( 'click' ).on( 'click', function() {\n\t\t\t\t$this.onSaveAndContinue( true );\n\t\t\t} );\n\t\t}\n\t}\n\n\tonSaveAndContinue( isRun ) {\n\t\tthis.is_add = false;\n\t\tLocalCacheData.current_doing_context_action = 'save_and_continue';\n\t\tvar $this = this;\n\t\tthis.is_changed = false;\n\t\tvar commandData = this.edit_view_ui_dic['manual_command'].getValue();\n\t\tvar commandId = this.current_edit_record.id;\n\t\tthis.api['set' + this.api.key_name]( this.current_edit_record, {\n\t\t\tonResult: function( result ) {\n\t\t\t\tif ( isRun ) {\n\t\t\t\t\t$this.api['runManualCommand']( commandData, commandId, {\n\t\t\t\t\t\tonResult: function( result_1 ) {\n\t\t\t\t\t\t\tif ( result_1.isValid() ) {\n\t\t\t\t\t\t\t\tvar result_data = result_1.getResult();\n\t\t\t\t\t\t\t\tTAlertManager.showAlert( result_data, $.i18n._( 'Manual Command Result' ) );\n\t\t\t\t\t\t\t\t$this.onSaveAndContinueResult( result );\n\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tTAlertManager.showErrorAlert( result );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t$this.onSaveAndContinueResult( result );\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\t}\n\n\tonSaveDone( result ) {\n\t\tif ( this.edit_only_mode && this.parent_view_controller ) {\n\t\t\tthis.parent_view_controller.onEditStationDone( result );\n\t\t}\n\t}\n\n\tonBuildBasicUIFinished() {\n\t\tvar station_input = this.basic_search_field_ui_dic['station_id'];\n\n\t\tvar icon = $( '<img class=\"station-location\" src=\"' + Global.getRealImagePath( 'images/location.png' ) + '\">' );\n\n\t\ticon.insertAfter( station_input );\n\t\ticon.unbind( 'click' ).bind( 'click', function() {\n\t\t\tvar station_id = Global.getStationID();\n\t\t\tif ( station_id ) {\n\t\t\t\tstation_input.setValue( station_id );\n\t\t\t} else {\n\t\t\t\tTAlertManager.showAlert( $.i18n._( 'Current Station is not currently set.' ) );\n\t\t\t}\n\t\t} );\n\t}\n\n\tsetEditMenuEditIcon( context_btn, pId ) {\n\n\t\tif ( !this.editPermissionValidate( pId ) ) {\n\t\t\tContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )\n\t\t}\n\n\t\tif ( !this.is_viewing || !this.editOwnerOrChildPermissionValidate( pId ) ) {\n\t\t\tContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );\n\t\t}\n\t}\n\n\topenEditView( id ) {\n\t\tvar $this = this;\n\n\t\tif ( $this.edit_only_mode ) {\n\n\t\t\t$this.initOptions( function( result ) {\n\t\t\t\tif ( !$this.edit_view ) {\n\t\t\t\t\t$this.is_viewing = true;\n\t\t\t\t\t$this.initEditViewUI( $this.viewId, $this.edit_view_tpl );\n\t\t\t\t}\n\t\t\t\t$this.getStationData( id, function( result ) {\n\t\t\t\t\t// Waiting for the TTAPI.API returns data to set the current edit record.\n\t\t\t\t\t$this.current_edit_record = result;\n\t\t\t\t\t//if ( !$this.editPermissionValidate() || !$this.editOwnerOrChildPermissionValidate()) {\n\t\t\t\t\t//\t$this.is_viewing = true;\n\t\t\t\t\t//}\n\n\t\t\t\t\t$this.initEditView();\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t} else {\n\t\t\tif ( !this.edit_view ) {\n\t\t\t\tthis.initEditViewUI( $this.viewId, $this.edit_view_tpl );\n\t\t\t}\n\n\t\t}\n\t}\n\n\tgetStationData( id, callBack ) {\n\t\tvar filter = {};\n\t\tfilter.filter_data = {};\n\t\tfilter.filter_data.id = [id];\n\n\t\tthis.api['get' + this.api.key_name]( filter, {\n\t\t\tonResult: function( result ) {\n\t\t\t\tvar result_data = result.getResult();\n\n\t\t\t\tif ( !result_data ) {\n\t\t\t\t\tresult_data = [];\n\t\t\t\t}\n\t\t\t\tresult_data = result_data[0];\n\n\t\t\t\tcallBack( result_data );\n\n\t\t\t}\n\t\t} );\n\t}\n\n\tbuildEditViewUI() {\n\t\tsuper.buildEditViewUI();\n\n\t\tvar $this = this;\n\n\t\tvar tab_model = {\n\t\t\t'tab_station': { 'label': $.i18n._( 'Station' ) },\n\t\t\t'tab_employee_criteria': { 'label': $.i18n._( 'Employee Criteria' ) },\n\t\t\t'tab_time_clock': { 'label': $.i18n._( 'TimeClock' ), 'is_multi_column': true },\n\t\t\t'tab_audit': true,\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\tif ( !this.edit_only_mode ) {\n\t\t\tthis.navigation.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIStation,\n\t\t\t\tid: this.script_name + '_navigation',\n\t\t\t\tallow_multiple_selection: false,\n\t\t\t\tlayout_name: 'global_station',\n\t\t\t\tnavigation_mode: true,\n\t\t\t\tshow_search_inputs: true\n\t\t\t} );\n\n\t\t\tthis.setNavigation();\n\t\t}\n\n\t\t//Tab 0 start\n\n\t\tvar tab_station = this.edit_view_tab.find( '#tab_station' );\n\n\t\tvar tab_station_column1 = tab_station.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_station_column1 );\n\n\t\tvar form_item_input;\n\t\tvar widgetContainer;\n\t\tvar label;\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_station_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_station_column1 );\n\n\t\t//Station\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'station_id', width: 254 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Station' ), form_item_input, tab_station_column1 );\n\n\t\t//Source\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'source', width: 289 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Source' ), form_item_input, tab_station_column1 );\n\n\t\t//Description\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'description', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Description' ), form_item_input, tab_station_column1 );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t//Default Branch\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIBranch,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_branch',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'branch_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Default Branch' ), form_item_input, tab_station_column1 );\n\n\t\t//Default Department\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIDepartment,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_department',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'department_id'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Default Department' ), form_item_input, tab_station_column1, '' );\n\n\t\tif ( ( Global.getProductEdition() >= 20 ) ) {\n\t\t\t//Job\n\t\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\t\tform_item_input.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIJob,\n\t\t\t\tallow_multiple_selection: false,\n\t\t\t\tlayout_name: 'global_job',\n\t\t\t\tshow_search_inputs: true,\n\t\t\t\tset_empty: true,\n\t\t\t\tsetRealValueCallBack: ( function( val ) {\n\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\tjob_coder.setValue( val.manual_id );\n\t\t\t\t\t}\n\t\t\t\t} ),\n\t\t\t\tfield: 'job_id'\n\t\t\t} );\n\n\t\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\n\t\t\tvar job_coder = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\t\tjob_coder.TTextInput( { field: 'job_quick_search', disable_keyup_event: true } );\n\t\t\tjob_coder.addClass( 'job-coder' );\n\n\t\t\twidgetContainer.append( job_coder );\n\t\t\twidgetContainer.append( form_item_input );\n\t\t\tthis.addEditFieldToColumn( $.i18n._( 'Default Job' ), [form_item_input, job_coder], tab_station_column1, '', widgetContainer );\n\n\t\t\t// Task\n\t\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\t\tform_item_input.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIJobItem,\n\t\t\t\tallow_multiple_selection: false,\n\t\t\t\tlayout_name: 'global_job_item',\n\t\t\t\tshow_search_inputs: true,\n\t\t\t\tset_empty: true,\n\t\t\t\tsetRealValueCallBack: ( function( val ) {\n\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\tjob_item_coder.setValue( val.manual_id );\n\t\t\t\t\t}\n\t\t\t\t} ),\n\t\t\t\tfield: 'job_item_id'\n\t\t\t} );\n\n\t\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\n\t\t\tvar job_item_coder = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\t\tjob_item_coder.TTextInput( { field: 'job_item_quick_search', disable_keyup_event: true } );\n\t\t\tjob_item_coder.addClass( 'job-coder' );\n\n\t\t\twidgetContainer.append( job_item_coder );\n\t\t\twidgetContainer.append( form_item_input );\n\t\t\tthis.addEditFieldToColumn( $.i18n._( 'Default Task' ), [form_item_input, job_item_coder], tab_station_column1, 'last', widgetContainer );\n\n\t\t\t//Punch Tag\n\t\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\t\tform_item_input.AComboBox( {\n\t\t\t\tapi_class: TTAPI.APIPunchTag,\n\t\t\t\tallow_multiple_selection: true,\n\t\t\t\tlayout_name: 'global_punch_tag',\n\t\t\t\tshow_search_inputs: true,\n\t\t\t\tset_empty: true,\n\t\t\t\tget_real_data_on_multi: true,\n\t\t\t\tsetRealValueCallBack: ( ( punch_tags, get_real_data ) => {\n\t\t\t\t\tif ( punch_tags ) {\n\t\t\t\t\t\tthis.setPunchTagQuickSearchManualIds( punch_tags, get_real_data );\n\t\t\t\t\t}\n\t\t\t\t} ),\n\t\t\t\tfield: 'punch_tag_id'\n\t\t\t} );\n\n\t\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\n\t\t\tvar punch_tag_coder = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\t\tpunch_tag_coder.TTextInput( { field: 'punch_tag_quick_search', disable_keyup_event: true } );\n\t\t\tpunch_tag_coder.addClass( 'job-coder' );\n\n\t\t\twidgetContainer.append( punch_tag_coder );\n\t\t\twidgetContainer.append( form_item_input );\n\t\t\tthis.addEditFieldToColumn( $.i18n._( 'Default Punch Tags' ), [form_item_input, punch_tag_coder], tab_station_column1, '', widgetContainer, true );\n\n\n\t\t}\n\n\t\t//Tab 1 start\n\n\t\tvar tab_employee_criteria = this.edit_view_tab.find( '#tab_employee_criteria' );\n\t\tvar tab_employee_criteria_column1 = tab_employee_criteria.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[1] = [];\n\t\tthis.edit_view_tabs[1].push( tab_employee_criteria_column1 );\n\n\t\t//Employee group\n\t\tvar v_box = $( '<div class=\\'v-box\\'></div>' );\n\n\t\t//Selection Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'user_group_selection_type_id' } );\n\t\tform_item_input.setSourceData( $this.group_selection_type_array );\n\n\t\tvar form_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\tv_box.append( form_item );\n\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t//Selection\n\t\tform_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input_1.AComboBox( {\n\t\t\ttree_mode: true,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_tree_column',\n\t\t\tset_empty: true,\n\t\t\tfield: 'group'\n\t\t} );\n\t\tform_item_input_1.setSourceData( $this.user_group_array );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\n\t\tv_box.append( form_item );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Employee Groups' ), [form_item_input, form_item_input_1], tab_employee_criteria_column1, 'first', v_box, false, true );\n\n\t\t//Branches\n\t\tv_box = $( '<div class=\\'v-box\\'></div>' );\n\t\t//Selection Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'branch_selection_type_id' } );\n\t\tform_item_input.setSourceData( $this.branch_selection_type_array );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\n\t\tv_box.append( form_item );\n\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t//Selection\n\t\tvar form_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input_1.AComboBox( {\n\t\t\tapi_class: TTAPI.APIBranch,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_branch',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'branch'\n\t\t} );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\n\t\tv_box.append( form_item );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Branches' ), [form_item_input, form_item_input_1], tab_employee_criteria_column1, '', v_box, false, true );\n\n\t\t// Departments\n\t\tv_box = $( '<div class=\\'v-box\\'></div>' );\n\t\t// Selection Type\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'department_selection_type_id' } );\n\t\tform_item_input.setSourceData( $this.department_selection_type_array );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input, $.i18n._( 'Selection Type' ) );\n\t\tv_box.append( form_item );\n\t\tv_box.append( '<div class=\\'clear-both-div\\'></div>' );\n\n\t\t//Selection\n\t\tform_item_input_1 = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\n\t\tform_item_input_1.AComboBox( {\n\t\t\tapi_class: TTAPI.APIDepartment,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_department',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'department'\n\t\t} );\n\n\t\tform_item = this.putInputToInsideFormItem( form_item_input_1, $.i18n._( 'Selection' ) );\n\n\t\tv_box.append( form_item );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Departments' ), [form_item_input, form_item_input_1], tab_employee_criteria_column1, '', v_box, false, true );\n\n\t\t// Include Employees\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIUser,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_user',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'include_user'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Include Employees' ), form_item_input, tab_employee_criteria_column1 );\n\n\t\t// Exclude Employees\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIUser,\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_user',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'exclude_user'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Exclude Employees' ), form_item_input, tab_employee_criteria_column1, '' );\n\n\t\t// Tab2 start\n\t\tvar tab_time_clock = this.edit_view_tab.find( '#tab_time_clock' );\n\t\tvar tab_time_clock_column1 = tab_time_clock.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[2] = [];\n\t\tthis.edit_view_tabs[2].push( tab_time_clock_column1 );\n\n\t\t// Password/COMM Key\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'password', width: 254 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Password/COMM Key' ), form_item_input, tab_time_clock_column1, '', null, true );\n\n\t\t// Port\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\t\tform_item_input.TTextInput( { field: 'port', width: 254 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Port' ), form_item_input, tab_time_clock_column1, '', null, true );\n\n\t\t// Force Time Zone\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'time_zone', set_empty: true } );\n\t\tform_item_input.setSourceData( $this.time_zone_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Force Time Zone' ), form_item_input, tab_time_clock_column1 );\n\n\t\t// Enable Automatic Punch Status\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_input.TCheckbox( { field: 'enable_auto_punch_status' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Enable Automatic Punch Status' ), form_item_input, tab_time_clock_column1, '', null, true );\n\n\t\t// Manual Command\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'manual_command' } );\n\t\tform_item_input.setSourceData( $this.time_clock_command_array );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\t\tlabel = $( '<button type=\\'button\\' class=\\' t-button widget-right-label\\'>' + $.i18n._( 'Run' ) + '</button>' );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Manual Command' ), form_item_input, tab_time_clock_column1, '', widgetContainer, true );\n\n\t\t// Download Frequency\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'poll_frequency' } );\n\t\tform_item_input.setSourceData( $this.poll_frequency_array );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\t\tlabel = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'Last Download' ) + ': ' + ' </span>' );\n\n\t\tvar widget_text = Global.loadWidgetByName( FormItemType.TEXT );\n\t\twidget_text.TText( { field: 'last_push_date' } );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\t\twidgetContainer.append( widget_text );\n\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Download Frequency' ), [form_item_input, widget_text], tab_time_clock_column1, '', widgetContainer );\n\n\t\t// Full Upload Frequency\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'push_frequency' } );\n\t\tform_item_input.setSourceData( $this.push_frequency_array );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\t\tlabel = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'Last Upload' ) + ': ' + ' </span>' );\n\n\t\twidget_text = Global.loadWidgetByName( FormItemType.TEXT );\n\t\twidget_text.TText( { field: 'last_poll_date' } );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\t\twidgetContainer.append( widget_text );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Full Upload Frequency' ), [form_item_input, widget_text], tab_time_clock_column1, '', widgetContainer, true );\n\n\t\t// Partial Upload Frequency\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'partial_push_frequency' } );\n\t\tform_item_input.setSourceData( $this.push_frequency_array );\n\n\t\twidgetContainer = $( '<div class=\\'widget-h-box\\'></div>' );\n\t\tlabel = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'Last Upload' ) + ': </span>' );\n\t\twidget_text = Global.loadWidgetByName( FormItemType.TEXT );\n\t\twidget_text.TText( { field: 'last_partial_push_date' } );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\t\twidgetContainer.append( widget_text );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Partial Upload Frequency' ), [form_item_input, widget_text], tab_time_clock_column1, '', widgetContainer, true );\n\n\t\t// Last Downloaded Punch\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT );\n\t\tform_item_input.TText( { field: 'last_punch_time_stamp' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Last Downloaded Punch' ), form_item_input, tab_time_clock_column1 );\n\n\t\t// Configuration Modes\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tallow_multiple_selection: true,\n\t\t\tlayout_name: 'global_option_column',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'mode_flag'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Configuration Modes' ), form_item_input, tab_time_clock_column1, '', null, null, true );\n\n\t\t// Default Punch Mode\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_option_column',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'default_mode_flag'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Default Punch Mode' ), form_item_input, tab_time_clock_column1 ); //, '', null, null, true );\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_option_column',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: false,\n\t\t\tfield: 'user_value_1'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Face Recognition Threshold' ), form_item_input, tab_time_clock_column1 ); //, '', null, null, true );\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_option_column',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: false,\n\t\t\tfield: 'user_value_2'\n\t\t} );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Face Recognition Matches' ), form_item_input, tab_time_clock_column1 ); //, '', null, null, true );\n\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._( '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: false,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\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: false,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Station' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'station_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Source' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'source',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Description' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'description',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.TEXT_INPUT\n\t\t\t} ),\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: true,\n\t\t\t\tadv_search: false,\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: true,\n\t\t\t\tadv_search: false,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} )\n\t\t];\n\t}\n\n\tgetPunchTagFilterData() {\n\t\tif ( !this.current_edit_record ) {\n\t\t\treturn {};\n\t\t}\n\n\t\tvar filter_data = {\n\t\t\tstatus_id: 10,\n\t\t\tuser_id: TTUUID.not_exist_id,\n\t\t\tbranch_id: this.current_edit_record.branch_id,\n\t\t\tdepartment_id: this.current_edit_record.department_id,\n\t\t\tjob_id: this.current_edit_record.job_id,\n\t\t\tjob_item_id: this.current_edit_record.job_item_id\n\t\t};\n\n\t\treturn filter_data;\n\t}\n\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFPO0FBQ1AsMkJBQTJCO0FBQzNCLEVBQUUsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsQ0FBQztBQUM1QiwwQkFBMEIsQ0FBQztBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0EsS0FBSyxvREFBb0Q7QUFDekQsS0FBSyxrREFBa0Q7QUFDdkQsS0FBSyxtRkFBbUY7QUFDeEYsS0FBSyxnRUFBZ0U7QUFDckUsS0FBSyw0REFBNEQ7QUFDakUsS0FBSyw0REFBNEQ7QUFDakUsS0FBSyxvRUFBb0U7QUFDekUsS0FBSyxrRUFBa0U7QUFDdkUsS0FBSyxtRUFBbUU7QUFDeEUsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBLEtBQUs7O0FBRUwsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRiwwQ0FBMEM7QUFDN0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHLENBQUM7QUFDSjs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLENBQUM7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsc0JBQXNCLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRyxDQUFDO0FBQ0o7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxDQUFDO0FBQy9DOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxhQUFhLENBQUM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCw2QkFBNkIsQ0FBQztBQUM5QjtBQUNBLElBQUk7QUFDSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE1BQU07O0FBRU4sS0FBSzs7QUFFTCxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxvQkFBb0IsU0FBUyxDQUFDLHNCQUFzQjtBQUNwRCw4QkFBOEIsU0FBUyxDQUFDLGdDQUFnQztBQUN4RSx1QkFBdUIsU0FBUyxDQUFDLGlEQUFpRDtBQUNsRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtCQUErQixxQkFBcUI7QUFDcEQ7QUFDQSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTtBQUNBLCtCQUErQixtQkFBbUI7QUFDbEQ7QUFDQSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTs7QUFFQSxnQ0FBZ0Msa0NBQWtDO0FBQ2xFLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBOztBQUVBLGdDQUFnQyw4QkFBOEI7QUFDOUQsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUEsZ0NBQWdDLHNDQUFzQztBQUN0RSw2QkFBNkIsQ0FBQzs7QUFFOUI7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxLQUFLOztBQUVMLHFCQUFxQixDQUFDOztBQUV0QjtBQUNBLDJCQUEyQix1REFBdUQ7QUFDbEY7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QixDQUFDOztBQUUvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUs7O0FBRUwscUJBQXFCLENBQUM7O0FBRXRCO0FBQ0EsZ0NBQWdDLDREQUE0RDtBQUM1Rjs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLENBQUM7O0FBRS9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLEtBQUs7O0FBRUwscUJBQXFCLENBQUM7O0FBRXRCO0FBQ0EsaUNBQWlDLDZEQUE2RDtBQUM5Rjs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLENBQUM7OztBQUcvQjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLENBQUM7O0FBRWY7QUFDQTtBQUNBLCtCQUErQix3Q0FBd0M7QUFDdkU7O0FBRUEsa0VBQWtFLENBQUM7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUEsZ0VBQWdFLENBQUM7O0FBRWpFOztBQUVBLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBLFVBQVUsQ0FBQztBQUNYO0FBQ0E7QUFDQSwrQkFBK0Isb0NBQW9DO0FBQ25FOztBQUVBLDhEQUE4RCxDQUFDOztBQUUvRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLGdFQUFnRSxDQUFDOztBQUVqRTs7QUFFQSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQSxVQUFVLENBQUM7QUFDWDtBQUNBO0FBQ0EsK0JBQStCLHdDQUF3QztBQUN2RTs7QUFFQSw4REFBOEQsQ0FBQztBQUMvRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLGdFQUFnRSxDQUFDOztBQUVqRTs7QUFFQSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0NBQWdDLGdDQUFnQztBQUNoRSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTtBQUNBLGdDQUFnQyw0QkFBNEI7QUFDNUQsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0Isc0NBQXNDO0FBQ3JFO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0Isb0NBQW9DO0FBQ25FLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBO0FBQ0EsK0JBQStCLDBCQUEwQjtBQUN6RDs7QUFFQSxvQkFBb0IsQ0FBQztBQUNyQixVQUFVLENBQUMsc0VBQXNFLENBQUM7O0FBRWxGO0FBQ0E7O0FBRUEsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0IsMEJBQTBCO0FBQ3pEOztBQUVBLG9CQUFvQixDQUFDO0FBQ3JCLFVBQVUsQ0FBQywyQ0FBMkMsQ0FBQzs7QUFFdkQ7QUFDQSx1QkFBdUIsMEJBQTBCOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwrQkFBK0IsMEJBQTBCO0FBQ3pEOztBQUVBLG9CQUFvQixDQUFDO0FBQ3JCLFVBQVUsQ0FBQywyQ0FBMkMsQ0FBQzs7QUFFdkQ7QUFDQSx1QkFBdUIsMEJBQTBCOztBQUVqRDtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsQ0FBQzs7QUFFOUI7QUFDQTtBQUNBLCtCQUErQixrQ0FBa0M7QUFDakU7O0FBRUEsb0JBQW9CLENBQUM7QUFDckIsVUFBVSxDQUFDLDJDQUEyQyxDQUFDO0FBQ3ZEO0FBQ0EsdUJBQXVCLGtDQUFrQzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLENBQUM7O0FBRTlCO0FBQ0E7QUFDQSwyQkFBMkIsaUNBQWlDO0FBQzVELDZCQUE2QixDQUFDOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLDZCQUE2QixDQUFDOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLDZCQUE2QixDQUFDLDRFQUE0RTs7QUFFMUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osNkJBQTZCLENBQUMsb0ZBQW9GOztBQUVsSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiw2QkFBNkIsQ0FBQyxrRkFBa0Y7O0FBRWhIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vaW50ZXJmYWNlL2h0bWw1L3ZpZXdzL2NvbXBhbnkvc3RhdGlvbi9TdGF0aW9uVmlld0NvbnRyb2xsZXIuanM/MjUyYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgU3RhdGlvblZpZXdDb250cm9sbGVyIGV4dGVuZHMgQmFzZVZpZXdDb250cm9sbGVyIHtcblx0Y29uc3RydWN0b3IoIG9wdGlvbnMgPSB7fSApIHtcblx0XHRfLmRlZmF1bHRzKCBvcHRpb25zLCB7XG5cdFx0XHRlbDogJyNzdGF0aW9uX3ZpZXdfY29udGFpbmVyJyxcblxuXHRcdFx0dXNlcl9ncm91cF9hcGk6IG51bGwsXG5cdFx0XHRzdGF0dXNfYXJyYXk6IG51bGwsXG5cdFx0XHR0eXBlX2FycmF5OiBudWxsLFxuXG5cdFx0XHR0aW1lX3pvbmVfYXJyYXk6IG51bGwsXG5cdFx0XHR0aW1lX2Nsb2NrX2NvbW1hbmRfYXJyYXk6IG51bGwsXG5cdFx0XHRtb2RlX2ZsYWdfYXJyYXk6IG51bGwsXG5cdFx0XHRkZWZhdWx0X21vZGVfZmxhZ19hcnJheTogbnVsbCxcblx0XHRcdGZhY2VfcmVjb2duaXRpb25fbWF0Y2hfdGhyZXNob2xkX2FycmF5OiBudWxsLFxuXHRcdFx0ZmFjZV9yZWNvZ25pdGlvbl9yZXF1aXJlZF9tYXRjaGVzX2FycmF5OiBudWxsLFxuXHRcdFx0cG9sbF9mcmVxdWVuY3lfYXJyYXk6IG51bGwsXG5cdFx0XHRwdXNoX2ZyZXF1ZW5jeV9hcnJheTogbnVsbCxcblx0XHRcdHBhcnRpYWxfcHVzaF9mcmVxdWVuY3lfYXJyYXk6IG51bGwsXG5cdFx0XHRncm91cF9zZWxlY3Rpb25fdHlwZV9hcnJheTogbnVsbCxcblx0XHRcdGJyYW5jaF9zZWxlY3Rpb25fdHlwZV9hcnJheTogbnVsbCxcblx0XHRcdGRlcGFydG1lbnRfc2VsZWN0aW9uX3R5cGVfYXJyYXk6IG51bGwsXG5cdFx0XHR1c2VyX2dyb3VwX2FycmF5OiBudWxsLFxuXG5cdFx0XHRwdW5jaF90YWdfYXBpOiBudWxsLFxuXHRcdFx0ZGVmYXVsdF9wdW5jaF90YWc6IFtdLFxuXHRcdFx0cHJldmlvdXNfcHVuY2hfdGFnX3NlbGVjdGlvbjogW10sXG5cblx0XHRcdHVzZXJfcHJlZmVyZW5jZV9hcGk6IG51bGxcblx0XHR9ICk7XG5cblx0XHRzdXBlciggb3B0aW9ucyApO1xuXHR9XG5cblx0aW5pdCggb3B0aW9ucyApIHtcblx0XHQvL3RoaXMuX3N1cGVyKCdpbml0aWFsaXplJywgb3B0aW9ucyApO1xuXHRcdHRoaXMuZWRpdF92aWV3X3RwbCA9ICdTdGF0aW9uRWRpdFZpZXcuaHRtbCc7XG5cdFx0dGhpcy5wZXJtaXNzaW9uX2lkID0gJ3N0YXRpb24nO1xuXHRcdHRoaXMudmlld0lkID0gJ1N0YXRpb24nO1xuXHRcdHRoaXMuc2NyaXB0X25hbWUgPSAnU3RhdGlvblZpZXcnO1xuXHRcdHRoaXMudGFibGVfbmFtZV9rZXkgPSAnc3RhdGlvbic7XG5cdFx0dGhpcy5jb250ZXh0X21lbnVfbmFtZSA9ICQuaTE4bi5fKCAnU3RhdGlvbicgKTtcblx0XHR0aGlzLm5hdmlnYXRpb25fbGFiZWwgPSAkLmkxOG4uXyggJ1N0YXRpb24nICk7XG5cdFx0dGhpcy5hcGkgPSBUVEFQSS5BUElTdGF0aW9uO1xuXHRcdHRoaXMudXNlcl9ncm91cF9hcGkgPSBUVEFQSS5BUElVc2VyR3JvdXA7XG5cdFx0dGhpcy51c2VyX3ByZWZlcmVuY2VfYXBpID0gVFRBUEkuQVBJVXNlclByZWZlcmVuY2U7XG5cblx0XHRpZiAoICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMjAgKSApIHtcblx0XHRcdHRoaXMuam9iX2FwaSA9IFRUQVBJLkFQSUpvYjtcblx0XHRcdHRoaXMuam9iX2l0ZW1fYXBpID0gVFRBUEkuQVBJSm9iSXRlbTtcblx0XHRcdHRoaXMucHVuY2hfdGFnX2FwaSA9IFRUQVBJLkFQSVB1bmNoVGFnO1xuXHRcdH1cblxuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cblx0XHR0aGlzLmluaXREYXRhKCk7XG5cdH1cblxuXHRnZXRDdXN0b21Db250ZXh0TWVudU1vZGVsKCkge1xuXHRcdHZhciBjb250ZXh0X21lbnVfbW9kZWwgPSB7XG5cdFx0XHRleGNsdWRlOiBbJ2NvcHknXSxcblx0XHRcdGluY2x1ZGU6IFtdXG5cdFx0fTtcblxuXHRcdHJldHVybiBjb250ZXh0X21lbnVfbW9kZWw7XG5cdH1cblxuXHRpbml0T3B0aW9ucyggY2FsbEJhY2sgKSB7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIG9wdGlvbnMgPSBbXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnc3RhdHVzJywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAndHlwZScsIGZpZWxkX25hbWU6IG51bGwsIGFwaTogbnVsbCB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ3RpbWVfem9uZScsIGZpZWxkX25hbWU6ICd0aW1lX3pvbmUnLCBhcGk6ICR0aGlzLnVzZXJfcHJlZmVyZW5jZV9hcGkgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICd0aW1lX2Nsb2NrX2NvbW1hbmQnLCBmaWVsZF9uYW1lOiBudWxsLCBhcGk6IG51bGwgfSxcblx0XHRcdHsgb3B0aW9uX25hbWU6ICdwb2xsX2ZyZXF1ZW5jeScsIGZpZWxkX25hbWU6IG51bGwsIGFwaTogbnVsbCB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ3B1c2hfZnJlcXVlbmN5JywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAncGFydGlhbF9wdXNoX2ZyZXF1ZW5jeScsIGZpZWxkX25hbWU6IG51bGwsIGFwaTogbnVsbCB9LFxuXHRcdFx0eyBvcHRpb25fbmFtZTogJ2dyb3VwX3NlbGVjdGlvbl90eXBlJywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnYnJhbmNoX3NlbGVjdGlvbl90eXBlJywgZmllbGRfbmFtZTogbnVsbCwgYXBpOiBudWxsIH0sXG5cdFx0XHR7IG9wdGlvbl9uYW1lOiAnZGVwYXJ0bWVudF9zZWxlY3Rpb25fdHlwZScsIGZpZWxkX25hbWU6IG51bGwsIGFwaTogbnVsbCB9XG5cblx0XHRdO1xuXG5cdFx0dGhpcy5pbml0RHJvcERvd25PcHRpb25zKCBvcHRpb25zLCBmdW5jdGlvbiggcmVzdWx0ICkge1xuXG5cdFx0XHQkdGhpcy51c2VyX2dyb3VwX2FwaS5nZXRVc2VyR3JvdXAoICcnLCBmYWxzZSwgZmFsc2UsIHtcblx0XHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXMgKSB7XG5cblx0XHRcdFx0XHRyZXMgPSByZXMuZ2V0UmVzdWx0KCk7XG5cdFx0XHRcdFx0cmVzID0gR2xvYmFsLmJ1aWxkVHJlZVJlY29yZCggcmVzICk7XG5cdFx0XHRcdFx0JHRoaXMudXNlcl9ncm91cF9hcnJheSA9IHJlcztcblxuXHRcdFx0XHRcdGlmICggY2FsbEJhY2sgKSB7XG5cdFx0XHRcdFx0XHRjYWxsQmFjayggcmVzdWx0ICk7IC8vIEZpcnN0IHRvIGluaXRpYWxpemUgZHJvcCBkb3duIG9wdGlvbnMsIGFuZCB0aGVuIHRvIGluaXRpYWxpemUgZWRpdCB2aWV3IFVJLlxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHR9ICk7XG5cdH1cblxuXHRzZXRDdXJyZW50RWRpdFJlY29yZERhdGEoKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHQvLyBXaGVuIG1hc3MgZWRpdGluZywgdGhlc2UgZmllbGRzIG1heSBub3QgYmUgdGhlIGNvbW1vbiBkYXRhLCBzbyB0aGVpciB2YWx1ZSB3aWxsIGJlIHVuZGVmaW5lZCwgc28gdGhpcyB3aWxsIGNhdXNlIHRoZWlyIGNoYW5nZSBldmVudCBjYW5ub3Qgd29yayBwcm9wZXJseS5cblx0XHR0aGlzLnNldERlZmF1bHREYXRhKCB7XG5cdFx0XHQndHlwZV9pZCc6IDEwLFxuXHRcdFx0J3VzZXJfZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnOiAxMCxcblx0XHRcdCdicmFuY2hfc2VsZWN0aW9uX3R5cGVfaWQnOiAxMCxcblx0XHRcdCdkZXBhcnRtZW50X3NlbGVjdGlvbl90eXBlX2lkJzogMTBcblx0XHR9ICk7XG5cblx0XHRmb3IgKCB2YXIga2V5IGluIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCApIHtcblxuXHRcdFx0aWYgKCAhdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmhhc093blByb3BlcnR5KCBrZXkgKSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB3aWRnZXQgPSB0aGlzLmVkaXRfdmlld191aV9kaWNba2V5XTtcblx0XHRcdGlmICggR2xvYmFsLmlzU2V0KCB3aWRnZXQgKSApIHtcblx0XHRcdFx0c3dpdGNoICgga2V5ICkge1xuXHRcdFx0XHRcdGNhc2UgJ2pvYl9pZCc6XG5cdFx0XHRcdFx0XHRpZiAoICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMjAgKSApIHtcblx0XHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnam9iX2l0ZW1faWQnOlxuXHRcdFx0XHRcdFx0aWYgKCAoIEdsb2JhbC5nZXRQcm9kdWN0RWRpdGlvbigpID49IDIwICkgKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhcmdzID0ge307XG5cdFx0XHRcdFx0XHRcdGFyZ3MuZmlsdGVyX2RhdGEgPSB7IGpvYl9pZDogdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmpvYl9pZCB9O1xuXHRcdFx0XHRcdFx0XHR3aWRnZXQuc2V0RGVmYXVsdEFyZ3MoIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncHVuY2hfdGFnX2lkJzpcblx0XHRcdFx0XHRcdGlmICggKCBHbG9iYWwuZ2V0UHJvZHVjdEVkaXRpb24oKSA+PSAyMCApICkge1xuXHRcdFx0XHRcdFx0XHR3aWRnZXQuc2V0VmFsdWUoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFtrZXldICk7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXNfcHVuY2hfdGFnX3NlbGVjdGlvbiA9IHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFtrZXldO1xuXG5cdFx0XHRcdFx0XHRcdHZhciBwdW5jaF90YWdfd2lkZ2V0ID0gd2lkZ2V0O1xuXHRcdFx0XHRcdFx0XHRUVFByb21pc2Uud2FpdCggbnVsbCwgbnVsbCwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly9VcGRhdGUgZGVmYXVsdCBhcmdzIGZvciBwdW5jaCB0YWdzIEFDb21ib0JveCBsYXN0IGFzIHRoZXkgcmVseSBvbiBkYXRhIGZyb20gam9iLCBqb2IgaXRlbSBhbmQgcmVsYXRlZCBmaWVsZHMuXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFyZ3MgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRhcmdzLmZpbHRlcl9kYXRhID0gJHRoaXMuZ2V0UHVuY2hUYWdGaWx0ZXJEYXRhKCk7XG5cdFx0XHRcdFx0XHRcdFx0cHVuY2hfdGFnX3dpZGdldC5zZXREZWZhdWx0QXJncyggYXJncyApO1xuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdwdW5jaF90YWdfcXVpY2tfc2VhcmNoJzpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2pvYl9xdWlja19zZWFyY2gnOlxuLy9cdFx0XHRcdFx0XHR3aWRnZXQuc2V0VmFsdWUoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnam9iX2lkJ10gPyB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ2pvYl9pZCddIDogMCApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnam9iX2l0ZW1fcXVpY2tfc2VhcmNoJzpcbi8vXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ2pvYl9pdGVtX2lkJ10gPyB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ2pvYl9pdGVtX2lkJ10gOiAwICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0d2lkZ2V0LnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRba2V5XSApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmNvbGxlY3RVSURhdGFUb0N1cnJlbnRFZGl0UmVjb3JkKCk7XG5cdFx0dGhpcy5zZXRFZGl0Vmlld0RhdGFEb25lKCk7XG5cdH1cblxuXHQvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cdG9uRm9ybUl0ZW1DaGFuZ2UoIHRhcmdldCwgZG9Ob3RWYWxpZGF0ZSApIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHRoaXMuc2V0SXNDaGFuZ2VkKCB0YXJnZXQgKTtcblx0XHR0aGlzLnNldE1hc3NFZGl0aW5nRmllbGRzV2hlbkZvcm1DaGFuZ2UoIHRhcmdldCApO1xuXHRcdHZhciBrZXkgPSB0YXJnZXQuZ2V0RmllbGQoKTtcblx0XHR2YXIgY192YWx1ZSA9IHRhcmdldC5nZXRWYWx1ZSgpO1xuXG5cdFx0dGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkW2tleV0gPSBjX3ZhbHVlO1xuXG5cdFx0c3dpdGNoICgga2V5ICkge1xuXHRcdFx0Y2FzZSAndHlwZV9pZCc6XG5cdFx0XHRcdHRoaXMub25UeXBlQ2hhbmdlKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnam9iX2lkJzpcblx0XHRcdFx0aWYgKCAoIEdsb2JhbC5nZXRQcm9kdWN0RWRpdGlvbigpID49IDIwICkgKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydqb2JfcXVpY2tfc2VhcmNoJ10uc2V0VmFsdWUoIHRhcmdldC5nZXRWYWx1ZSggdHJ1ZSApID8gKCB0YXJnZXQuZ2V0VmFsdWUoIHRydWUgKS5tYW51YWxfaWQgPyB0YXJnZXQuZ2V0VmFsdWUoIHRydWUgKS5tYW51YWxfaWQgOiAnJyApIDogJycgKTtcblx0XHRcdFx0XHR0aGlzLnNldEpvYkl0ZW1WYWx1ZVdoZW5Kb2JDaGFuZ2VkKCB0YXJnZXQuZ2V0VmFsdWUoIHRydWUgKSwgJ2pvYl9pdGVtX2lkJywgeyBqb2JfaWQ6IHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5qb2JfaWQgfSApO1xuXHRcdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snam9iX3F1aWNrX3NlYXJjaCddLnNldENoZWNrQm94KCB0cnVlICk7XG5cdFx0XHRcdFx0dGhpcy5zZXRQdW5jaFRhZ1ZhbHVlc1doZW5Dcml0ZXJpYUNoYW5nZWQoIHRoaXMuZ2V0UHVuY2hUYWdGaWx0ZXJEYXRhKCksICdwdW5jaF90YWdfaWQnICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdqb2JfaXRlbV9pZCc6XG5cdFx0XHRcdGlmICggKCBHbG9iYWwuZ2V0UHJvZHVjdEVkaXRpb24oKSA+PSAyMCApICkge1xuXHRcdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snam9iX2l0ZW1fcXVpY2tfc2VhcmNoJ10uc2V0VmFsdWUoIHRhcmdldC5nZXRWYWx1ZSggdHJ1ZSApID8gKCB0YXJnZXQuZ2V0VmFsdWUoIHRydWUgKS5tYW51YWxfaWQgPyB0YXJnZXQuZ2V0VmFsdWUoIHRydWUgKS5tYW51YWxfaWQgOiAnJyApIDogJycgKTtcblx0XHRcdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2pvYl9pdGVtX3F1aWNrX3NlYXJjaCddLnNldENoZWNrQm94KCB0cnVlICk7XG5cdFx0XHRcdFx0dGhpcy5zZXRQdW5jaFRhZ1ZhbHVlc1doZW5Dcml0ZXJpYUNoYW5nZWQoIHRoaXMuZ2V0UHVuY2hUYWdGaWx0ZXJEYXRhKCksICdwdW5jaF90YWdfaWQnICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdwdW5jaF90YWdfaWQnOlxuXHRcdFx0XHRpZiAoICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMjAgKSApIHtcblx0XHRcdFx0XHRpZiAoIGNfdmFsdWUgIT09IFRUVVVJRC56ZXJvX2lkICYmIGNfdmFsdWUgIT09IGZhbHNlICYmIGNfdmFsdWUubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0UHVuY2hUYWdRdWlja1NlYXJjaE1hbnVhbElkcyggdGFyZ2V0LmdldFNlbGVjdEl0ZW1zKCkgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydwdW5jaF90YWdfcXVpY2tfc2VhcmNoJ10uc2V0VmFsdWUoICcnICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCR0aGlzLnByZXZpb3VzX3B1bmNoX3RhZ19zZWxlY3Rpb24gPSBjX3ZhbHVlO1xuXHRcdFx0XHRcdC8vUmVzZXQgc291cmNlIGRhdGEgdG8gbWFrZSBzdXJlIGNvcnJlY3QgcHVuY2ggdGFncyBhcmUgYWx3YXlzIHNob3duLlxuXHRcdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1sncHVuY2hfdGFnX2lkJ10uc2V0U291cmNlRGF0YSggbnVsbCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAndXNlcl9pZCc6XG5cdFx0XHRjYXNlICdicmFuY2hfaWQnOlxuXHRcdFx0Y2FzZSAnZGVwYXJ0bWVudF9pZCc6XG5cdFx0XHRcdGlmICggKCBHbG9iYWwuZ2V0UHJvZHVjdEVkaXRpb24oKSA+PSAyMCApICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0UHVuY2hUYWdWYWx1ZXNXaGVuQ3JpdGVyaWFDaGFuZ2VkKCB0aGlzLmdldFB1bmNoVGFnRmlsdGVyRGF0YSgpLCAncHVuY2hfdGFnX2lkJyApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnam9iX3F1aWNrX3NlYXJjaCc6XG5cdFx0XHRjYXNlICdqb2JfaXRlbV9xdWlja19zZWFyY2gnOlxuXHRcdFx0XHRpZiAoICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMjAgKSApIHtcblx0XHRcdFx0XHR0aGlzLm9uSm9iUXVpY2tTZWFyY2goIGtleSwgY192YWx1ZSApO1xuXHRcdFx0XHRcdHRoaXMuc2V0UHVuY2hUYWdWYWx1ZXNXaGVuQ3JpdGVyaWFDaGFuZ2VkKCAkdGhpcy5nZXRQdW5jaFRhZ0ZpbHRlckRhdGEoKSwgJ3B1bmNoX3RhZ19pZCcgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3B1bmNoX3RhZ19xdWlja19zZWFyY2gnOlxuXHRcdFx0XHRpZiAoICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMjAgKSApIHtcblx0XHRcdFx0XHR0aGlzLm9uUHVuY2hUYWdRdWlja1NlYXJjaCggY192YWx1ZSwgdGhpcy5nZXRQdW5jaFRhZ0ZpbHRlckRhdGEoKSwgJ3B1bmNoX3RhZ19pZCcgKTtcblxuXHRcdFx0XHRcdC8vRG9uJ3QgdmFsaWRhdGUgaW1tZWRpYXRlbHkgYXMgb25QdW5jaFRhZ1F1aWNrU2VhcmNoIGlzIGRvaW5nIGFzeW5jIEFQSSBjYWxscywgYW5kIGl0IHdvdWxkIGNhdXNlIGEgZ3VhcmFudGVlZCB2YWxpZGF0aW9uIGZhaWx1cmUuXG5cdFx0XHRcdFx0ZG9Ob3RWYWxpZGF0ZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd1c2VyX2dyb3VwX3NlbGVjdGlvbl90eXBlX2lkJzpcblx0XHRcdFx0dGhpcy5vbkVtcGxveWVlR3JvdXBTZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnYnJhbmNoX3NlbGVjdGlvbl90eXBlX2lkJzpcblx0XHRcdFx0dGhpcy5vbkJyYW5jaFNlbGVjdGlvblR5cGVDaGFuZ2UoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdkZXBhcnRtZW50X3NlbGVjdGlvbl90eXBlX2lkJzpcblx0XHRcdFx0dGhpcy5vbkRlcGFydG1lbnRTZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0fVxuXHRcdHRoaXMuaXNEaXNhYmxlSW5jbHVkZUVtcGxveWVlcygpO1xuXHRcdGlmICggIWRvTm90VmFsaWRhdGUgKSB7XG5cdFx0XHR0aGlzLnZhbGlkYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoganNoaW50IGlnbm9yZTplbmQgKi9cblx0aXNEaXNhYmxlSW5jbHVkZUVtcGxveWVlcygpIHtcblx0XHRpZiAoIHRoaXMuZWRpdF92aWV3X3VpX2RpY1snZ3JvdXAnXS5nZXRFbmFibGVkKCkgfHwgdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydicmFuY2gnXS5nZXRFbmFibGVkKCkgfHwgdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydkZXBhcnRtZW50J10uZ2V0RW5hYmxlZCgpICkge1xuXHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydpbmNsdWRlX3VzZXInXS5zZXRFbmFibGVkKCB0cnVlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snaW5jbHVkZV91c2VyJ10uc2V0RW5hYmxlZCggZmFsc2UgKTtcblx0XHR9XG5cdH1cblxuXHRvbkVtcGxveWVlR3JvdXBTZWxlY3Rpb25UeXBlQ2hhbmdlKCkge1xuXG5cdFx0aWYgKCBwYXJzZUludCggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWyd1c2VyX2dyb3VwX3NlbGVjdGlvbl90eXBlX2lkJ10gKSA9PSAxMCApIHtcblx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snZ3JvdXAnXS5zZXRFbmFibGVkKCBmYWxzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ3VzZXJfZ3JvdXBfc2VsZWN0aW9uX3R5cGVfaWQnXS5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWyd1c2VyX2dyb3VwX3NlbGVjdGlvbl90eXBlX2lkJ10gKTtcblx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snZ3JvdXAnXS5zZXRFbmFibGVkKCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0b25CcmFuY2hTZWxlY3Rpb25UeXBlQ2hhbmdlKCkge1xuXHRcdGlmICggcGFyc2VJbnQoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnYnJhbmNoX3NlbGVjdGlvbl90eXBlX2lkJ10gKSA9PSAxMCApIHtcblxuXHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydicmFuY2gnXS5zZXRFbmFibGVkKCBmYWxzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2JyYW5jaF9zZWxlY3Rpb25fdHlwZV9pZCddLnNldFZhbHVlKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ2JyYW5jaF9zZWxlY3Rpb25fdHlwZV9pZCddICk7XG5cdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2JyYW5jaCddLnNldEVuYWJsZWQoIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRvbkRlcGFydG1lbnRTZWxlY3Rpb25UeXBlQ2hhbmdlKCkge1xuXHRcdGlmICggcGFyc2VJbnQoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnZGVwYXJ0bWVudF9zZWxlY3Rpb25fdHlwZV9pZCddICkgPT0gMTAgKSB7XG5cdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2RlcGFydG1lbnQnXS5zZXRFbmFibGVkKCBmYWxzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2RlcGFydG1lbnRfc2VsZWN0aW9uX3R5cGVfaWQnXS5zZXRWYWx1ZSggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydkZXBhcnRtZW50X3NlbGVjdGlvbl90eXBlX2lkJ10gKTtcblx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snZGVwYXJ0bWVudCddLnNldEVuYWJsZWQoIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRvblR5cGVDaGFuZ2UoKSB7XG5cdFx0aWYgKCBwYXJzZUludCggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWyd0eXBlX2lkJ10gKSA9PSAxMDAgfHxcblx0XHRcdHBhcnNlSW50KCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3R5cGVfaWQnXSApID09IDE1MCB8fFxuXHRcdFx0cGFyc2VJbnQoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsndHlwZV9pZCddICkgPT0gMjggfHxcblx0XHRcdHBhcnNlSW50KCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3R5cGVfaWQnXSApID09IDY1ICkge1xuXG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzJdICkuc2hvdygpO1xuXHRcdFx0dmFyIHRhYl8yX2xhYmVsID0gdGhpcy5lZGl0X3ZpZXcuZmluZCggJ2FbcmVmPXRhYl90aW1lX2Nsb2NrXScgKTtcblxuXHRcdFx0aWYgKCBwYXJzZUludCggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWyd0eXBlX2lkJ10gKSA9PSAxMDAgfHxcblx0XHRcdFx0cGFyc2VJbnQoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsndHlwZV9pZCddICkgPT0gMTUwICkge1xuXHRcdFx0XHR0YWJfMl9sYWJlbC50ZXh0KCAkLmkxOG4uXyggJ1RpbWVDbG9jaycgKSApO1xuXG5cdFx0XHRcdGlmICggcGFyc2VJbnQoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsndHlwZV9pZCddICkgIT0gMTUwICkge1xuXHRcdFx0XHRcdHRoaXMuYXR0YWNoRWxlbWVudCggJ21hbnVhbF9jb21tYW5kJyApO1xuXHRcdFx0XHRcdHRoaXMuYXR0YWNoRWxlbWVudCggJ3B1c2hfZnJlcXVlbmN5JyApO1xuXHRcdFx0XHRcdHRoaXMuYXR0YWNoRWxlbWVudCggJ3BhcnRpYWxfcHVzaF9mcmVxdWVuY3knICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5kZXRhY2hFbGVtZW50KCAnbWFudWFsX2NvbW1hbmQnICk7XG5cdFx0XHRcdFx0dGhpcy5kZXRhY2hFbGVtZW50KCAncHVzaF9mcmVxdWVuY3knICk7XG5cdFx0XHRcdFx0dGhpcy5kZXRhY2hFbGVtZW50KCAncGFydGlhbF9wdXNoX2ZyZXF1ZW5jeScgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuYXR0YWNoRWxlbWVudCggJ3Bhc3N3b3JkJyApO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEVsZW1lbnQoICdwb3J0JyApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGFiXzJfbGFiZWwudGV4dCggJC5pMThuLl8oICdNb2JpbGUgQXBwJyApICk7XG5cdFx0XHRcdHRoaXMuZGV0YWNoRWxlbWVudCggJ3Bhc3N3b3JkJyApO1xuXHRcdFx0XHR0aGlzLmRldGFjaEVsZW1lbnQoICdwb3J0JyApO1xuXHRcdFx0XHR0aGlzLmRldGFjaEVsZW1lbnQoICdtYW51YWxfY29tbWFuZCcgKTtcblx0XHRcdFx0dGhpcy5kZXRhY2hFbGVtZW50KCAncHVzaF9mcmVxdWVuY3knICk7XG5cdFx0XHRcdHRoaXMuZGV0YWNoRWxlbWVudCggJ3BhcnRpYWxfcHVzaF9mcmVxdWVuY3knICk7XG5cdFx0XHRcdHRoaXMuZGV0YWNoRWxlbWVudCggJ2VuYWJsZV9hdXRvX3B1bmNoX3N0YXR1cycgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5pbml0TW9kZUZsYWcoKTtcblxuXHRcdFx0Ly8jMjU5MCAtIGVuc3VyZSBmaWVsZCBpcyBvbmx5IHZpc2libGUgaW4gdmFsaWQgdHlwZXMuXG5cdFx0XHRpZiAoIHBhcnNlSW50KCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmRbJ3R5cGVfaWQnXSApID09IDY1ICkge1xuXHRcdFx0XHR0aGlzLmluaXREZWZhdWx0TW9kZUZsYWcoKTtcblx0XHRcdFx0dGhpcy5pbml0RmFjaWFsUmVjb2duaXRpb25UaGVzaG9sZEZpZWxkcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydkZWZhdWx0X21vZGVfZmxhZyddLnBhcmVudHMoICcuZWRpdC12aWV3LWZvcm0taXRlbS1kaXYnICkuaGlkZSgpO1xuXHRcdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ3VzZXJfdmFsdWVfMSddLnBhcmVudHMoICcuZWRpdC12aWV3LWZvcm0taXRlbS1kaXYnICkuaGlkZSgpO1xuXHRcdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ3VzZXJfdmFsdWVfMiddLnBhcmVudHMoICcuZWRpdC12aWV3LWZvcm0taXRlbS1kaXYnICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQkKCB0aGlzLmVkaXRfdmlld190YWIuZmluZCggJ3VsIGxpJyApWzJdICkuaGlkZSgpO1xuXHRcdFx0dGhpcy5lZGl0X3ZpZXdfdGFiLnRhYnMoICdvcHRpb24nLCAnYWN0aXZlJywgMCApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy5lZGl0RmllbGRSZXNpemUoKTtcblx0fVxuXG5cdGluaXRNb2RlRmxhZygpIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHRoaXMuYXBpLmdldE9wdGlvbnMoICdtb2RlX2ZsYWcnLCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQudHlwZV9pZCwgdHJ1ZSwge1xuXHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdHZhciByZXN1bHRfZGF0YSA9IEdsb2JhbC5idWlsZFJlY29yZEFycmF5KCByZXN1bHQuZ2V0UmVzdWx0KCkgKTtcblxuXHRcdFx0XHQkdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydtb2RlX2ZsYWcnXS5zZXRTb3VyY2VEYXRhKCByZXN1bHRfZGF0YSApO1xuXHRcdFx0XHQkdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydtb2RlX2ZsYWcnXS5zZXRWYWx1ZSggJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5tb2RlX2ZsYWcgKTtcblxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdGluaXREZWZhdWx0TW9kZUZsYWcoKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR0aGlzLmFwaS5nZXRPcHRpb25zKCAnZGVmYXVsdF9tb2RlX2ZsYWcnLCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQudHlwZV9pZCwgdHJ1ZSwge1xuXHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdHZhciByZXN1bHRfZGF0YSA9IEdsb2JhbC5idWlsZFJlY29yZEFycmF5KCByZXN1bHQuZ2V0UmVzdWx0KCkgKTtcblxuXHRcdFx0XHQkdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydkZWZhdWx0X21vZGVfZmxhZyddLnNldFNvdXJjZURhdGEoIHJlc3VsdF9kYXRhICk7XG5cdFx0XHRcdHZhciB2YWx1ZSA9ICggJHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5kZWZhdWx0X21vZGVfZmxhZyAhPSAwICkgPyAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmRlZmF1bHRfbW9kZV9mbGFnIDogVFRVVUlELnplcm9faWQ7XG5cdFx0XHRcdCR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2RlZmF1bHRfbW9kZV9mbGFnJ10uc2V0VmFsdWUoIHZhbHVlICk7XG5cdFx0XHRcdCR0aGlzLmVkaXRfdmlld191aV9kaWNbJ2RlZmF1bHRfbW9kZV9mbGFnJ10ucGFyZW50cyggJy5lZGl0LXZpZXctZm9ybS1pdGVtLWRpdicgKS5zaG93KCk7XG5cblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cblxuXHRpbml0RmFjaWFsUmVjb2duaXRpb25UaGVzaG9sZEZpZWxkcygpIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHRoaXMuYXBpLmdldE9wdGlvbnMoICdmYWNlX3JlY29nbml0aW9uX21hdGNoX3RocmVzaG9sZCcsIHtcblx0XHRcdG9uUmVzdWx0OiBmdW5jdGlvbiggcmVzdWx0ICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0X2RhdGEgPSBHbG9iYWwuYnVpbGRSZWNvcmRBcnJheSggcmVzdWx0LmdldFJlc3VsdCgpICk7XG5cblx0XHRcdFx0JHRoaXMuZWRpdF92aWV3X3VpX2RpY1sndXNlcl92YWx1ZV8xJ10uc2V0U291cmNlRGF0YSggcmVzdWx0X2RhdGEgKTtcblx0XHRcdFx0dmFyIHZhbHVlID0gKCAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLnVzZXJfdmFsdWVfMSAhPSAwICkgPyAkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLnVzZXJfdmFsdWVfMSA6IDA7XG5cdFx0XHRcdCR0aGlzLmVkaXRfdmlld191aV9kaWNbJ3VzZXJfdmFsdWVfMSddLnNldFZhbHVlKCB2YWx1ZSApO1xuXHRcdFx0XHQkdGhpcy5lZGl0X3ZpZXdfdWlfZGljWyd1c2VyX3ZhbHVlXzEnXS5wYXJlbnRzKCAnLmVkaXQtdmlldy1mb3JtLWl0ZW0tZGl2JyApLnNob3coKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHR0aGlzLmFwaS5nZXRPcHRpb25zKCAnZmFjZV9yZWNvZ25pdGlvbl9yZXF1aXJlZF9tYXRjaGVzJywge1xuXHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdHZhciByZXN1bHRfZGF0YSA9IEdsb2JhbC5idWlsZFJlY29yZEFycmF5KCByZXN1bHQuZ2V0UmVzdWx0KCkgKTtcblxuXHRcdFx0XHQkdGhpcy5lZGl0X3ZpZXdfdWlfZGljWyd1c2VyX3ZhbHVlXzInXS5zZXRTb3VyY2VEYXRhKCByZXN1bHRfZGF0YSApO1xuXHRcdFx0XHR2YXIgdmFsdWUgPSAoICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQudXNlcl92YWx1ZV8yICE9IDAgKSA/ICR0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQudXNlcl92YWx1ZV8yIDogMDtcblx0XHRcdFx0JHRoaXMuZWRpdF92aWV3X3VpX2RpY1sndXNlcl92YWx1ZV8yJ10uc2V0VmFsdWUoIHZhbHVlICk7XG5cdFx0XHRcdCR0aGlzLmVkaXRfdmlld191aV9kaWNbJ3VzZXJfdmFsdWVfMiddLnBhcmVudHMoICcuZWRpdC12aWV3LWZvcm0taXRlbS1kaXYnICkuc2hvdygpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9XG5cblx0c2V0RWRpdFZpZXdEYXRhRG9uZSgpIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdHN1cGVyLnNldEVkaXRWaWV3RGF0YURvbmUoKTtcblxuXHRcdHRoaXMub25UeXBlQ2hhbmdlKCk7XG5cdFx0dGhpcy5vbkVtcGxveWVlR3JvdXBTZWxlY3Rpb25UeXBlQ2hhbmdlKCk7XG5cdFx0dGhpcy5vbkJyYW5jaFNlbGVjdGlvblR5cGVDaGFuZ2UoKTtcblx0XHR0aGlzLm9uRGVwYXJ0bWVudFNlbGVjdGlvblR5cGVDaGFuZ2UoKTtcblx0XHR0aGlzLmlzRGlzYWJsZUluY2x1ZGVFbXBsb3llZXMoKTtcblxuXHRcdHZhciBydW5CdXR0b24gPSB0aGlzLmVkaXRfdmlld19mb3JtX2l0ZW1fZGljWydtYW51YWxfY29tbWFuZCddLmZpbmQoICdidXR0b25bdHlwZT1cXCdidXR0b25cXCddJyApO1xuXHRcdGlmICggJHRoaXMuaXNfbWFzc19lZGl0aW5nIHx8ICR0aGlzLmlzX3ZpZXdpbmcgKSB7XG5cdFx0XHR0aGlzLmVkaXRfdmlld191aV9kaWNbJ21hbnVhbF9jb21tYW5kJ10uc2V0RW5hYmxlZCggZmFsc2UgKTtcblx0XHRcdHJ1bkJ1dHRvbi5hdHRyKCAnZGlzYWJsZWQnLCB0cnVlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJ1bkJ1dHRvbi5vZmYoICdjbGljaycgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCR0aGlzLm9uU2F2ZUFuZENvbnRpbnVlKCB0cnVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXHR9XG5cblx0b25TYXZlQW5kQ29udGludWUoIGlzUnVuICkge1xuXHRcdHRoaXMuaXNfYWRkID0gZmFsc2U7XG5cdFx0TG9jYWxDYWNoZURhdGEuY3VycmVudF9kb2luZ19jb250ZXh0X2FjdGlvbiA9ICdzYXZlX2FuZF9jb250aW51ZSc7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblx0XHR0aGlzLmlzX2NoYW5nZWQgPSBmYWxzZTtcblx0XHR2YXIgY29tbWFuZERhdGEgPSB0aGlzLmVkaXRfdmlld191aV9kaWNbJ21hbnVhbF9jb21tYW5kJ10uZ2V0VmFsdWUoKTtcblx0XHR2YXIgY29tbWFuZElkID0gdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmlkO1xuXHRcdHRoaXMuYXBpWydzZXQnICsgdGhpcy5hcGkua2V5X25hbWVdKCB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQsIHtcblx0XHRcdG9uUmVzdWx0OiBmdW5jdGlvbiggcmVzdWx0ICkge1xuXHRcdFx0XHRpZiAoIGlzUnVuICkge1xuXHRcdFx0XHRcdCR0aGlzLmFwaVsncnVuTWFudWFsQ29tbWFuZCddKCBjb21tYW5kRGF0YSwgY29tbWFuZElkLCB7XG5cdFx0XHRcdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlc3VsdF8xICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHJlc3VsdF8xLmlzVmFsaWQoKSApIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0X2RhdGEgPSByZXN1bHRfMS5nZXRSZXN1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRUQWxlcnRNYW5hZ2VyLnNob3dBbGVydCggcmVzdWx0X2RhdGEsICQuaTE4bi5fKCAnTWFudWFsIENvbW1hbmQgUmVzdWx0JyApICk7XG5cdFx0XHRcdFx0XHRcdFx0JHRoaXMub25TYXZlQW5kQ29udGludWVSZXN1bHQoIHJlc3VsdCApO1xuXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0VEFsZXJ0TWFuYWdlci5zaG93RXJyb3JBbGVydCggcmVzdWx0ICk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkdGhpcy5vblNhdmVBbmRDb250aW51ZVJlc3VsdCggcmVzdWx0ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdG9uU2F2ZURvbmUoIHJlc3VsdCApIHtcblx0XHRpZiAoIHRoaXMuZWRpdF9vbmx5X21vZGUgJiYgdGhpcy5wYXJlbnRfdmlld19jb250cm9sbGVyICkge1xuXHRcdFx0dGhpcy5wYXJlbnRfdmlld19jb250cm9sbGVyLm9uRWRpdFN0YXRpb25Eb25lKCByZXN1bHQgKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkQmFzaWNVSUZpbmlzaGVkKCkge1xuXHRcdHZhciBzdGF0aW9uX2lucHV0ID0gdGhpcy5iYXNpY19zZWFyY2hfZmllbGRfdWlfZGljWydzdGF0aW9uX2lkJ107XG5cblx0XHR2YXIgaWNvbiA9ICQoICc8aW1nIGNsYXNzPVwic3RhdGlvbi1sb2NhdGlvblwiIHNyYz1cIicgKyBHbG9iYWwuZ2V0UmVhbEltYWdlUGF0aCggJ2ltYWdlcy9sb2NhdGlvbi5wbmcnICkgKyAnXCI+JyApO1xuXG5cdFx0aWNvbi5pbnNlcnRBZnRlciggc3RhdGlvbl9pbnB1dCApO1xuXHRcdGljb24udW5iaW5kKCAnY2xpY2snICkuYmluZCggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc3RhdGlvbl9pZCA9IEdsb2JhbC5nZXRTdGF0aW9uSUQoKTtcblx0XHRcdGlmICggc3RhdGlvbl9pZCApIHtcblx0XHRcdFx0c3RhdGlvbl9pbnB1dC5zZXRWYWx1ZSggc3RhdGlvbl9pZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0VEFsZXJ0TWFuYWdlci5zaG93QWxlcnQoICQuaTE4bi5fKCAnQ3VycmVudCBTdGF0aW9uIGlzIG5vdCBjdXJyZW50bHkgc2V0LicgKSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdHNldEVkaXRNZW51RWRpdEljb24oIGNvbnRleHRfYnRuLCBwSWQgKSB7XG5cblx0XHRpZiAoICF0aGlzLmVkaXRQZXJtaXNzaW9uVmFsaWRhdGUoIHBJZCApICkge1xuXHRcdFx0Q29udGV4dE1lbnVNYW5hZ2VyLmhpZGVNZW51SXRlbSggdGhpcy5kZXRlcm1pbmVDb250ZXh0TWVudU1vdW50QXR0cmlidXRlcygpLmlkLCBjb250ZXh0X2J0bi5pZCwgZmFsc2UgKVxuXHRcdH1cblxuXHRcdGlmICggIXRoaXMuaXNfdmlld2luZyB8fCAhdGhpcy5lZGl0T3duZXJPckNoaWxkUGVybWlzc2lvblZhbGlkYXRlKCBwSWQgKSApIHtcblx0XHRcdENvbnRleHRNZW51TWFuYWdlci5kaXNhYmxlTWVudUl0ZW0oIHRoaXMuZGV0ZXJtaW5lQ29udGV4dE1lbnVNb3VudEF0dHJpYnV0ZXMoKS5pZCwgY29udGV4dF9idG4uaWQsIGZhbHNlICk7XG5cdFx0fVxuXHR9XG5cblx0b3BlbkVkaXRWaWV3KCBpZCApIHtcblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0aWYgKCAkdGhpcy5lZGl0X29ubHlfbW9kZSApIHtcblxuXHRcdFx0JHRoaXMuaW5pdE9wdGlvbnMoIGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdGlmICggISR0aGlzLmVkaXRfdmlldyApIHtcblx0XHRcdFx0XHQkdGhpcy5pc192aWV3aW5nID0gdHJ1ZTtcblx0XHRcdFx0XHQkdGhpcy5pbml0RWRpdFZpZXdVSSggJHRoaXMudmlld0lkLCAkdGhpcy5lZGl0X3ZpZXdfdHBsICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHRoaXMuZ2V0U3RhdGlvbkRhdGEoIGlkLCBmdW5jdGlvbiggcmVzdWx0ICkge1xuXHRcdFx0XHRcdC8vIFdhaXRpbmcgZm9yIHRoZSBUVEFQSS5BUEkgcmV0dXJucyBkYXRhIHRvIHNldCB0aGUgY3VycmVudCBlZGl0IHJlY29yZC5cblx0XHRcdFx0XHQkdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkID0gcmVzdWx0O1xuXHRcdFx0XHRcdC8vaWYgKCAhJHRoaXMuZWRpdFBlcm1pc3Npb25WYWxpZGF0ZSgpIHx8ICEkdGhpcy5lZGl0T3duZXJPckNoaWxkUGVybWlzc2lvblZhbGlkYXRlKCkpIHtcblx0XHRcdFx0XHQvL1x0JHRoaXMuaXNfdmlld2luZyA9IHRydWU7XG5cdFx0XHRcdFx0Ly99XG5cblx0XHRcdFx0XHQkdGhpcy5pbml0RWRpdFZpZXcoKTtcblxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdH0gKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoICF0aGlzLmVkaXRfdmlldyApIHtcblx0XHRcdFx0dGhpcy5pbml0RWRpdFZpZXdVSSggJHRoaXMudmlld0lkLCAkdGhpcy5lZGl0X3ZpZXdfdHBsICk7XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cblxuXHRnZXRTdGF0aW9uRGF0YSggaWQsIGNhbGxCYWNrICkge1xuXHRcdHZhciBmaWx0ZXIgPSB7fTtcblx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEgPSB7fTtcblx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEuaWQgPSBbaWRdO1xuXG5cdFx0dGhpcy5hcGlbJ2dldCcgKyB0aGlzLmFwaS5rZXlfbmFtZV0oIGZpbHRlciwge1xuXHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdHZhciByZXN1bHRfZGF0YSA9IHJlc3VsdC5nZXRSZXN1bHQoKTtcblxuXHRcdFx0XHRpZiAoICFyZXN1bHRfZGF0YSApIHtcblx0XHRcdFx0XHRyZXN1bHRfZGF0YSA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc3VsdF9kYXRhID0gcmVzdWx0X2RhdGFbMF07XG5cblx0XHRcdFx0Y2FsbEJhY2soIHJlc3VsdF9kYXRhICk7XG5cblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cblxuXHRidWlsZEVkaXRWaWV3VUkoKSB7XG5cdFx0c3VwZXIuYnVpbGRFZGl0Vmlld1VJKCk7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIHRhYl9tb2RlbCA9IHtcblx0XHRcdCd0YWJfc3RhdGlvbic6IHsgJ2xhYmVsJzogJC5pMThuLl8oICdTdGF0aW9uJyApIH0sXG5cdFx0XHQndGFiX2VtcGxveWVlX2NyaXRlcmlhJzogeyAnbGFiZWwnOiAkLmkxOG4uXyggJ0VtcGxveWVlIENyaXRlcmlhJyApIH0sXG5cdFx0XHQndGFiX3RpbWVfY2xvY2snOiB7ICdsYWJlbCc6ICQuaTE4bi5fKCAnVGltZUNsb2NrJyApLCAnaXNfbXVsdGlfY29sdW1uJzogdHJ1ZSB9LFxuXHRcdFx0J3RhYl9hdWRpdCc6IHRydWUsXG5cdFx0fTtcblx0XHR0aGlzLnNldFRhYk1vZGVsKCB0YWJfbW9kZWwgKTtcblxuXHRcdGlmICggIXRoaXMuZWRpdF9vbmx5X21vZGUgKSB7XG5cdFx0XHR0aGlzLm5hdmlnYXRpb24uQUNvbWJvQm94KCB7XG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJU3RhdGlvbixcblx0XHRcdFx0aWQ6IHRoaXMuc2NyaXB0X25hbWUgKyAnX25hdmlnYXRpb24nLFxuXHRcdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9zdGF0aW9uJyxcblx0XHRcdFx0bmF2aWdhdGlvbl9tb2RlOiB0cnVlLFxuXHRcdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWVcblx0XHRcdH0gKTtcblxuXHRcdFx0dGhpcy5zZXROYXZpZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0Ly9UYWIgMCBzdGFydFxuXG5cdFx0dmFyIHRhYl9zdGF0aW9uID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3N0YXRpb24nICk7XG5cblx0XHR2YXIgdGFiX3N0YXRpb25fY29sdW1uMSA9IHRhYl9zdGF0aW9uLmZpbmQoICcuZmlyc3QtY29sdW1uJyApO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXSA9IFtdO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXS5wdXNoKCB0YWJfc3RhdGlvbl9jb2x1bW4xICk7XG5cblx0XHR2YXIgZm9ybV9pdGVtX2lucHV0O1xuXHRcdHZhciB3aWRnZXRDb250YWluZXI7XG5cdFx0dmFyIGxhYmVsO1xuXG5cdFx0Ly9TdGF0dXNcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdzdGF0dXNfaWQnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMuc3RhdHVzX2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdTdGF0dXMnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3N0YXRpb25fY29sdW1uMSwgJycgKTtcblxuXHRcdC8vVHlwZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ3R5cGVfaWQnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMudHlwZV9hcnJheSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnVHlwZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc3RhdGlvbl9jb2x1bW4xICk7XG5cblx0XHQvL1N0YXRpb25cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAnc3RhdGlvbl9pZCcsIHdpZHRoOiAyNTQgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnU3RhdGlvbicgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc3RhdGlvbl9jb2x1bW4xICk7XG5cblx0XHQvL1NvdXJjZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdzb3VyY2UnLCB3aWR0aDogMjg5IH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1NvdXJjZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc3RhdGlvbl9jb2x1bW4xICk7XG5cblx0XHQvL0Rlc2NyaXB0aW9uXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2Rlc2NyaXB0aW9uJywgd2lkdGg6ICcxMDAlJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdEZXNjcmlwdGlvbicgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc3RhdGlvbl9jb2x1bW4xICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQucGFyZW50KCkud2lkdGgoICc0NSUnICk7XG5cblx0XHQvL0RlZmF1bHQgQnJhbmNoXG5cblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSUJyYW5jaCxcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9icmFuY2gnLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdicmFuY2hfaWQnXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGVmYXVsdCBCcmFuY2gnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3N0YXRpb25fY29sdW1uMSApO1xuXG5cdFx0Ly9EZWZhdWx0IERlcGFydG1lbnRcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhcGlfY2xhc3M6IFRUQVBJLkFQSURlcGFydG1lbnQsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfZGVwYXJ0bWVudCcsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ2RlcGFydG1lbnRfaWQnXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGVmYXVsdCBEZXBhcnRtZW50JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9zdGF0aW9uX2NvbHVtbjEsICcnICk7XG5cblx0XHRpZiAoICggR2xvYmFsLmdldFByb2R1Y3RFZGl0aW9uKCkgPj0gMjAgKSApIHtcblx0XHRcdC8vSm9iXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElKb2IsXG5cdFx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX2pvYicsXG5cdFx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0XHRzZXRSZWFsVmFsdWVDYWxsQmFjazogKCBmdW5jdGlvbiggdmFsICkge1xuXG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRqb2JfY29kZXIuc2V0VmFsdWUoIHZhbC5tYW51YWxfaWQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSxcblx0XHRcdFx0ZmllbGQ6ICdqb2JfaWQnXG5cdFx0XHR9ICk7XG5cblx0XHRcdHdpZGdldENvbnRhaW5lciA9ICQoICc8ZGl2IGNsYXNzPVxcJ3dpZGdldC1oLWJveFxcJz48L2Rpdj4nICk7XG5cblx0XHRcdHZhciBqb2JfY29kZXIgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRcdGpvYl9jb2Rlci5UVGV4dElucHV0KCB7IGZpZWxkOiAnam9iX3F1aWNrX3NlYXJjaCcsIGRpc2FibGVfa2V5dXBfZXZlbnQ6IHRydWUgfSApO1xuXHRcdFx0am9iX2NvZGVyLmFkZENsYXNzKCAnam9iLWNvZGVyJyApO1xuXG5cdFx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBqb2JfY29kZXIgKTtcblx0XHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGZvcm1faXRlbV9pbnB1dCApO1xuXHRcdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdEZWZhdWx0IEpvYicgKSwgW2Zvcm1faXRlbV9pbnB1dCwgam9iX2NvZGVyXSwgdGFiX3N0YXRpb25fY29sdW1uMSwgJycsIHdpZGdldENvbnRhaW5lciApO1xuXG5cdFx0XHQvLyBUYXNrXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElKb2JJdGVtLFxuXHRcdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9qb2JfaXRlbScsXG5cdFx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0XHRzZXRSZWFsVmFsdWVDYWxsQmFjazogKCBmdW5jdGlvbiggdmFsICkge1xuXG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRqb2JfaXRlbV9jb2Rlci5zZXRWYWx1ZSggdmFsLm1hbnVhbF9pZCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApLFxuXHRcdFx0XHRmaWVsZDogJ2pvYl9pdGVtX2lkJ1xuXHRcdFx0fSApO1xuXG5cdFx0XHR3aWRnZXRDb250YWluZXIgPSAkKCAnPGRpdiBjbGFzcz1cXCd3aWRnZXQtaC1ib3hcXCc+PC9kaXY+JyApO1xuXG5cdFx0XHR2YXIgam9iX2l0ZW1fY29kZXIgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRcdGpvYl9pdGVtX2NvZGVyLlRUZXh0SW5wdXQoIHsgZmllbGQ6ICdqb2JfaXRlbV9xdWlja19zZWFyY2gnLCBkaXNhYmxlX2tleXVwX2V2ZW50OiB0cnVlIH0gKTtcblx0XHRcdGpvYl9pdGVtX2NvZGVyLmFkZENsYXNzKCAnam9iLWNvZGVyJyApO1xuXG5cdFx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBqb2JfaXRlbV9jb2RlciApO1xuXHRcdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX2lucHV0ICk7XG5cdFx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0RlZmF1bHQgVGFzaycgKSwgW2Zvcm1faXRlbV9pbnB1dCwgam9iX2l0ZW1fY29kZXJdLCB0YWJfc3RhdGlvbl9jb2x1bW4xLCAnbGFzdCcsIHdpZGdldENvbnRhaW5lciApO1xuXG5cdFx0XHQvL1B1bmNoIFRhZ1xuXHRcdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXG5cdFx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJUHVuY2hUYWcsXG5cdFx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogdHJ1ZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfcHVuY2hfdGFnJyxcblx0XHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRcdGdldF9yZWFsX2RhdGFfb25fbXVsdGk6IHRydWUsXG5cdFx0XHRcdHNldFJlYWxWYWx1ZUNhbGxCYWNrOiAoICggcHVuY2hfdGFncywgZ2V0X3JlYWxfZGF0YSApID0+IHtcblx0XHRcdFx0XHRpZiAoIHB1bmNoX3RhZ3MgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldFB1bmNoVGFnUXVpY2tTZWFyY2hNYW51YWxJZHMoIHB1bmNoX3RhZ3MsIGdldF9yZWFsX2RhdGEgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSxcblx0XHRcdFx0ZmllbGQ6ICdwdW5jaF90YWdfaWQnXG5cdFx0XHR9ICk7XG5cblx0XHRcdHdpZGdldENvbnRhaW5lciA9ICQoICc8ZGl2IGNsYXNzPVxcJ3dpZGdldC1oLWJveFxcJz48L2Rpdj4nICk7XG5cblx0XHRcdHZhciBwdW5jaF90YWdfY29kZXIgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVQgKTtcblx0XHRcdHB1bmNoX3RhZ19jb2Rlci5UVGV4dElucHV0KCB7IGZpZWxkOiAncHVuY2hfdGFnX3F1aWNrX3NlYXJjaCcsIGRpc2FibGVfa2V5dXBfZXZlbnQ6IHRydWUgfSApO1xuXHRcdFx0cHVuY2hfdGFnX2NvZGVyLmFkZENsYXNzKCAnam9iLWNvZGVyJyApO1xuXG5cdFx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBwdW5jaF90YWdfY29kZXIgKTtcblx0XHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGZvcm1faXRlbV9pbnB1dCApO1xuXHRcdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdEZWZhdWx0IFB1bmNoIFRhZ3MnICksIFtmb3JtX2l0ZW1faW5wdXQsIHB1bmNoX3RhZ19jb2Rlcl0sIHRhYl9zdGF0aW9uX2NvbHVtbjEsICcnLCB3aWRnZXRDb250YWluZXIsIHRydWUgKTtcblxuXG5cdFx0fVxuXG5cdFx0Ly9UYWIgMSBzdGFydFxuXG5cdFx0dmFyIHRhYl9lbXBsb3llZV9jcml0ZXJpYSA9IHRoaXMuZWRpdF92aWV3X3RhYi5maW5kKCAnI3RhYl9lbXBsb3llZV9jcml0ZXJpYScgKTtcblx0XHR2YXIgdGFiX2VtcGxveWVlX2NyaXRlcmlhX2NvbHVtbjEgPSB0YWJfZW1wbG95ZWVfY3JpdGVyaWEuZmluZCggJy5maXJzdC1jb2x1bW4nICk7XG5cblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzFdID0gW107XG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1sxXS5wdXNoKCB0YWJfZW1wbG95ZWVfY3JpdGVyaWFfY29sdW1uMSApO1xuXG5cdFx0Ly9FbXBsb3llZSBncm91cFxuXHRcdHZhciB2X2JveCA9ICQoICc8ZGl2IGNsYXNzPVxcJ3YtYm94XFwnPjwvZGl2PicgKTtcblxuXHRcdC8vU2VsZWN0aW9uIFR5cGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICd1c2VyX2dyb3VwX3NlbGVjdGlvbl90eXBlX2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmdyb3VwX3NlbGVjdGlvbl90eXBlX2FycmF5ICk7XG5cblx0XHR2YXIgZm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dCwgJC5pMThuLl8oICdTZWxlY3Rpb24gVHlwZScgKSApO1xuXG5cdFx0dl9ib3guYXBwZW5kKCBmb3JtX2l0ZW0gKTtcblx0XHR2X2JveC5hcHBlbmQoICc8ZGl2IGNsYXNzPVxcJ2NsZWFyLWJvdGgtZGl2XFwnPjwvZGl2PicgKTtcblxuXHRcdC8vU2VsZWN0aW9uXG5cdFx0Zm9ybV9pdGVtX2lucHV0XzEgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXRfMS5BQ29tYm9Cb3goIHtcblx0XHRcdHRyZWVfbW9kZTogdHJ1ZSxcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogdHJ1ZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3RyZWVfY29sdW1uJyxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGZpZWxkOiAnZ3JvdXAnXG5cdFx0fSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dF8xLnNldFNvdXJjZURhdGEoICR0aGlzLnVzZXJfZ3JvdXBfYXJyYXkgKTtcblxuXHRcdGZvcm1faXRlbSA9IHRoaXMucHV0SW5wdXRUb0luc2lkZUZvcm1JdGVtKCBmb3JtX2l0ZW1faW5wdXRfMSwgJC5pMThuLl8oICdTZWxlY3Rpb24nICkgKTtcblxuXHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0VtcGxveWVlIEdyb3VwcycgKSwgW2Zvcm1faXRlbV9pbnB1dCwgZm9ybV9pdGVtX2lucHV0XzFdLCB0YWJfZW1wbG95ZWVfY3JpdGVyaWFfY29sdW1uMSwgJ2ZpcnN0Jywgdl9ib3gsIGZhbHNlLCB0cnVlICk7XG5cblx0XHQvL0JyYW5jaGVzXG5cdFx0dl9ib3ggPSAkKCAnPGRpdiBjbGFzcz1cXCd2LWJveFxcJz48L2Rpdj4nICk7XG5cdFx0Ly9TZWxlY3Rpb24gVHlwZVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ2JyYW5jaF9zZWxlY3Rpb25fdHlwZV9pZCcgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5icmFuY2hfc2VsZWN0aW9uX3R5cGVfYXJyYXkgKTtcblxuXHRcdGZvcm1faXRlbSA9IHRoaXMucHV0SW5wdXRUb0luc2lkZUZvcm1JdGVtKCBmb3JtX2l0ZW1faW5wdXQsICQuaTE4bi5fKCAnU2VsZWN0aW9uIFR5cGUnICkgKTtcblxuXHRcdHZfYm94LmFwcGVuZCggZm9ybV9pdGVtICk7XG5cdFx0dl9ib3guYXBwZW5kKCAnPGRpdiBjbGFzcz1cXCdjbGVhci1ib3RoLWRpdlxcJz48L2Rpdj4nICk7XG5cblx0XHQvL1NlbGVjdGlvblxuXHRcdHZhciBmb3JtX2l0ZW1faW5wdXRfMSA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dF8xLkFDb21ib0JveCgge1xuXHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElCcmFuY2gsXG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IHRydWUsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9icmFuY2gnLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdicmFuY2gnXG5cdFx0fSApO1xuXG5cdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dF8xLCAkLmkxOG4uXyggJ1NlbGVjdGlvbicgKSApO1xuXG5cdFx0dl9ib3guYXBwZW5kKCBmb3JtX2l0ZW0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnQnJhbmNoZXMnICksIFtmb3JtX2l0ZW1faW5wdXQsIGZvcm1faXRlbV9pbnB1dF8xXSwgdGFiX2VtcGxveWVlX2NyaXRlcmlhX2NvbHVtbjEsICcnLCB2X2JveCwgZmFsc2UsIHRydWUgKTtcblxuXHRcdC8vIERlcGFydG1lbnRzXG5cdFx0dl9ib3ggPSAkKCAnPGRpdiBjbGFzcz1cXCd2LWJveFxcJz48L2Rpdj4nICk7XG5cdFx0Ly8gU2VsZWN0aW9uIFR5cGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNPTUJPX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ29tYm9Cb3goIHsgZmllbGQ6ICdkZXBhcnRtZW50X3NlbGVjdGlvbl90eXBlX2lkJyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLmRlcGFydG1lbnRfc2VsZWN0aW9uX3R5cGVfYXJyYXkgKTtcblxuXHRcdGZvcm1faXRlbSA9IHRoaXMucHV0SW5wdXRUb0luc2lkZUZvcm1JdGVtKCBmb3JtX2l0ZW1faW5wdXQsICQuaTE4bi5fKCAnU2VsZWN0aW9uIFR5cGUnICkgKTtcblx0XHR2X2JveC5hcHBlbmQoIGZvcm1faXRlbSApO1xuXHRcdHZfYm94LmFwcGVuZCggJzxkaXYgY2xhc3M9XFwnY2xlYXItYm90aC1kaXZcXCc+PC9kaXY+JyApO1xuXG5cdFx0Ly9TZWxlY3Rpb25cblx0XHRmb3JtX2l0ZW1faW5wdXRfMSA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dF8xLkFDb21ib0JveCgge1xuXHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElEZXBhcnRtZW50LFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiB0cnVlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfZGVwYXJ0bWVudCcsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ2RlcGFydG1lbnQnXG5cdFx0fSApO1xuXG5cdFx0Zm9ybV9pdGVtID0gdGhpcy5wdXRJbnB1dFRvSW5zaWRlRm9ybUl0ZW0oIGZvcm1faXRlbV9pbnB1dF8xLCAkLmkxOG4uXyggJ1NlbGVjdGlvbicgKSApO1xuXG5cdFx0dl9ib3guYXBwZW5kKCBmb3JtX2l0ZW0gKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRGVwYXJ0bWVudHMnICksIFtmb3JtX2l0ZW1faW5wdXQsIGZvcm1faXRlbV9pbnB1dF8xXSwgdGFiX2VtcGxveWVlX2NyaXRlcmlhX2NvbHVtbjEsICcnLCB2X2JveCwgZmFsc2UsIHRydWUgKTtcblxuXHRcdC8vIEluY2x1ZGUgRW1wbG95ZWVzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogdHJ1ZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3VzZXInLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdpbmNsdWRlX3VzZXInXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnSW5jbHVkZSBFbXBsb3llZXMnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2VtcGxveWVlX2NyaXRlcmlhX2NvbHVtbjEgKTtcblxuXHRcdC8vIEV4Y2x1ZGUgRW1wbG95ZWVzXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogdHJ1ZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3VzZXInLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdleGNsdWRlX3VzZXInXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRXhjbHVkZSBFbXBsb3llZXMnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX2VtcGxveWVlX2NyaXRlcmlhX2NvbHVtbjEsICcnICk7XG5cblx0XHQvLyBUYWIyIHN0YXJ0XG5cdFx0dmFyIHRhYl90aW1lX2Nsb2NrID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3RpbWVfY2xvY2snICk7XG5cdFx0dmFyIHRhYl90aW1lX2Nsb2NrX2NvbHVtbjEgPSB0YWJfdGltZV9jbG9jay5maW5kKCAnLmZpcnN0LWNvbHVtbicgKTtcblxuXHRcdHRoaXMuZWRpdF92aWV3X3RhYnNbMl0gPSBbXTtcblx0XHR0aGlzLmVkaXRfdmlld190YWJzWzJdLnB1c2goIHRhYl90aW1lX2Nsb2NrX2NvbHVtbjEgKTtcblxuXHRcdC8vIFBhc3N3b3JkL0NPTU0gS2V5XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ3Bhc3N3b3JkJywgd2lkdGg6IDI1NCB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdQYXNzd29yZC9DT01NIEtleScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdGltZV9jbG9ja19jb2x1bW4xLCAnJywgbnVsbCwgdHJ1ZSApO1xuXG5cdFx0Ly8gUG9ydFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dElucHV0KCB7IGZpZWxkOiAncG9ydCcsIHdpZHRoOiAyNTQgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnUG9ydCcgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfdGltZV9jbG9ja19jb2x1bW4xLCAnJywgbnVsbCwgdHJ1ZSApO1xuXG5cdFx0Ly8gRm9yY2UgVGltZSBab25lXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAndGltZV96b25lJywgc2V0X2VtcHR5OiB0cnVlIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMudGltZV96b25lX2FycmF5ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdGb3JjZSBUaW1lIFpvbmUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3RpbWVfY2xvY2tfY29sdW1uMSApO1xuXG5cdFx0Ly8gRW5hYmxlIEF1dG9tYXRpYyBQdW5jaCBTdGF0dXNcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkNIRUNLQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDaGVja2JveCggeyBmaWVsZDogJ2VuYWJsZV9hdXRvX3B1bmNoX3N0YXR1cycgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRW5hYmxlIEF1dG9tYXRpYyBQdW5jaCBTdGF0dXMnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3RpbWVfY2xvY2tfY29sdW1uMSwgJycsIG51bGwsIHRydWUgKTtcblxuXHRcdC8vIE1hbnVhbCBDb21tYW5kXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAnbWFudWFsX2NvbW1hbmQnIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMudGltZV9jbG9ja19jb21tYW5kX2FycmF5ICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIgPSAkKCAnPGRpdiBjbGFzcz1cXCd3aWRnZXQtaC1ib3hcXCc+PC9kaXY+JyApO1xuXHRcdGxhYmVsID0gJCggJzxidXR0b24gdHlwZT1cXCdidXR0b25cXCcgY2xhc3M9XFwnIHQtYnV0dG9uIHdpZGdldC1yaWdodC1sYWJlbFxcJz4nICsgJC5pMThuLl8oICdSdW4nICkgKyAnPC9idXR0b24+JyApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX2lucHV0ICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggbGFiZWwgKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTWFudWFsIENvbW1hbmQnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3RpbWVfY2xvY2tfY29sdW1uMSwgJycsIHdpZGdldENvbnRhaW5lciwgdHJ1ZSApO1xuXG5cdFx0Ly8gRG93bmxvYWQgRnJlcXVlbmN5XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAncG9sbF9mcmVxdWVuY3knIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMucG9sbF9mcmVxdWVuY3lfYXJyYXkgKTtcblxuXHRcdHdpZGdldENvbnRhaW5lciA9ICQoICc8ZGl2IGNsYXNzPVxcJ3dpZGdldC1oLWJveFxcJz48L2Rpdj4nICk7XG5cdFx0bGFiZWwgPSAkKCAnPHNwYW4gY2xhc3M9XFwnd2lkZ2V0LXJpZ2h0LWxhYmVsXFwnPiAnICsgJC5pMThuLl8oICdMYXN0IERvd25sb2FkJyApICsgJzogJyArICcgPC9zcGFuPicgKTtcblxuXHRcdHZhciB3aWRnZXRfdGV4dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVCApO1xuXHRcdHdpZGdldF90ZXh0LlRUZXh0KCB7IGZpZWxkOiAnbGFzdF9wdXNoX2RhdGUnIH0gKTtcblxuXHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGZvcm1faXRlbV9pbnB1dCApO1xuXHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIGxhYmVsICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggd2lkZ2V0X3RleHQgKTtcblxuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRG93bmxvYWQgRnJlcXVlbmN5JyApLCBbZm9ybV9pdGVtX2lucHV0LCB3aWRnZXRfdGV4dF0sIHRhYl90aW1lX2Nsb2NrX2NvbHVtbjEsICcnLCB3aWRnZXRDb250YWluZXIgKTtcblxuXHRcdC8vIEZ1bGwgVXBsb2FkIEZyZXF1ZW5jeVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ3B1c2hfZnJlcXVlbmN5JyB9ICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LnNldFNvdXJjZURhdGEoICR0aGlzLnB1c2hfZnJlcXVlbmN5X2FycmF5ICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIgPSAkKCAnPGRpdiBjbGFzcz1cXCd3aWRnZXQtaC1ib3hcXCc+PC9kaXY+JyApO1xuXHRcdGxhYmVsID0gJCggJzxzcGFuIGNsYXNzPVxcJ3dpZGdldC1yaWdodC1sYWJlbFxcJz4gJyArICQuaTE4bi5fKCAnTGFzdCBVcGxvYWQnICkgKyAnOiAnICsgJyA8L3NwYW4+JyApO1xuXG5cdFx0d2lkZ2V0X3RleHQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLlRFWFQgKTtcblx0XHR3aWRnZXRfdGV4dC5UVGV4dCggeyBmaWVsZDogJ2xhc3RfcG9sbF9kYXRlJyB9ICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBmb3JtX2l0ZW1faW5wdXQgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBsYWJlbCApO1xuXHRcdHdpZGdldENvbnRhaW5lci5hcHBlbmQoIHdpZGdldF90ZXh0ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdGdWxsIFVwbG9hZCBGcmVxdWVuY3knICksIFtmb3JtX2l0ZW1faW5wdXQsIHdpZGdldF90ZXh0XSwgdGFiX3RpbWVfY2xvY2tfY29sdW1uMSwgJycsIHdpZGdldENvbnRhaW5lciwgdHJ1ZSApO1xuXG5cdFx0Ly8gUGFydGlhbCBVcGxvYWQgRnJlcXVlbmN5XG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DT01CT19CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuVENvbWJvQm94KCB7IGZpZWxkOiAncGFydGlhbF9wdXNoX2ZyZXF1ZW5jeScgfSApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5zZXRTb3VyY2VEYXRhKCAkdGhpcy5wdXNoX2ZyZXF1ZW5jeV9hcnJheSApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyID0gJCggJzxkaXYgY2xhc3M9XFwnd2lkZ2V0LWgtYm94XFwnPjwvZGl2PicgKTtcblx0XHRsYWJlbCA9ICQoICc8c3BhbiBjbGFzcz1cXCd3aWRnZXQtcmlnaHQtbGFiZWxcXCc+ICcgKyAkLmkxOG4uXyggJ0xhc3QgVXBsb2FkJyApICsgJzogPC9zcGFuPicgKTtcblx0XHR3aWRnZXRfdGV4dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVCApO1xuXHRcdHdpZGdldF90ZXh0LlRUZXh0KCB7IGZpZWxkOiAnbGFzdF9wYXJ0aWFsX3B1c2hfZGF0ZScgfSApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX2lucHV0ICk7XG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggbGFiZWwgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCB3aWRnZXRfdGV4dCApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnUGFydGlhbCBVcGxvYWQgRnJlcXVlbmN5JyApLCBbZm9ybV9pdGVtX2lucHV0LCB3aWRnZXRfdGV4dF0sIHRhYl90aW1lX2Nsb2NrX2NvbHVtbjEsICcnLCB3aWRnZXRDb250YWluZXIsIHRydWUgKTtcblxuXHRcdC8vIExhc3QgRG93bmxvYWRlZCBQdW5jaFxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UVGV4dCggeyBmaWVsZDogJ2xhc3RfcHVuY2hfdGltZV9zdGFtcCcgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTGFzdCBEb3dubG9hZGVkIFB1bmNoJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl90aW1lX2Nsb2NrX2NvbHVtbjEgKTtcblxuXHRcdC8vIENvbmZpZ3VyYXRpb24gTW9kZXNcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LkFDb21ib0JveCgge1xuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiB0cnVlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IHRydWUsXG5cdFx0XHRmaWVsZDogJ21vZGVfZmxhZydcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdDb25maWd1cmF0aW9uIE1vZGVzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl90aW1lX2Nsb2NrX2NvbHVtbjEsICcnLCBudWxsLCBudWxsLCB0cnVlICk7XG5cblx0XHQvLyBEZWZhdWx0IFB1bmNoIE1vZGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LkFDb21ib0JveCgge1xuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlLFxuXHRcdFx0c2V0X2VtcHR5OiB0cnVlLFxuXHRcdFx0ZmllbGQ6ICdkZWZhdWx0X21vZGVfZmxhZydcblx0XHR9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdEZWZhdWx0IFB1bmNoIE1vZGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3RpbWVfY2xvY2tfY29sdW1uMSApOyAvLywgJycsIG51bGwsIG51bGwsIHRydWUgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IGZhbHNlLFxuXHRcdFx0ZmllbGQ6ICd1c2VyX3ZhbHVlXzEnXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRmFjZSBSZWNvZ25pdGlvbiBUaHJlc2hvbGQnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3RpbWVfY2xvY2tfY29sdW1uMSApOyAvLywgJycsIG51bGwsIG51bGwsIHRydWUgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1ggKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuQUNvbWJvQm94KCB7XG5cdFx0XHRhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb246IGZhbHNlLFxuXHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRzaG93X3NlYXJjaF9pbnB1dHM6IHRydWUsXG5cdFx0XHRzZXRfZW1wdHk6IGZhbHNlLFxuXHRcdFx0ZmllbGQ6ICd1c2VyX3ZhbHVlXzInXG5cdFx0fSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRmFjZSBSZWNvZ25pdGlvbiBNYXRjaGVzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl90aW1lX2Nsb2NrX2NvbHVtbjEgKTsgLy8sICcnLCBudWxsLCBudWxsLCB0cnVlICk7XG5cblx0fVxuXG5cdGJ1aWxkU2VhcmNoRmllbGRzKCkge1xuXG5cdFx0c3VwZXIuYnVpbGRTZWFyY2hGaWVsZHMoKTtcblx0XHR0aGlzLnNlYXJjaF9maWVsZHMgPSBbXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdTdGF0dXMnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdzdGF0dXNfaWQnLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiBmYWxzZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdUeXBlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAndHlwZV9pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9vcHRpb25fY29sdW1uJyxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1N0YXRpb24nICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdzdGF0aW9uX2lkJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1NvdXJjZScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ3NvdXJjZScsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IGZhbHNlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLlRFWFRfSU5QVVRcblx0XHRcdH0gKSxcblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdEZXNjcmlwdGlvbicgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRmaWVsZDogJ2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEVYVF9JTlBVVFxuXHRcdFx0fSApLFxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0NyZWF0ZWQgQnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdjcmVhdGVkX2J5Jyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1VwZGF0ZWQgQnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICd1cGRhdGVkX2J5Jyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKVxuXHRcdF07XG5cdH1cblxuXHRnZXRQdW5jaFRhZ0ZpbHRlckRhdGEoKSB7XG5cdFx0aWYgKCAhdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkICkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdHZhciBmaWx0ZXJfZGF0YSA9IHtcblx0XHRcdHN0YXR1c19pZDogMTAsXG5cdFx0XHR1c2VyX2lkOiBUVFVVSUQubm90X2V4aXN0X2lkLFxuXHRcdFx0YnJhbmNoX2lkOiB0aGlzLmN1cnJlbnRfZWRpdF9yZWNvcmQuYnJhbmNoX2lkLFxuXHRcdFx0ZGVwYXJ0bWVudF9pZDogdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmRlcGFydG1lbnRfaWQsXG5cdFx0XHRqb2JfaWQ6IHRoaXMuY3VycmVudF9lZGl0X3JlY29yZC5qb2JfaWQsXG5cdFx0XHRqb2JfaXRlbV9pZDogdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkLmpvYl9pdGVtX2lkXG5cdFx0fTtcblxuXHRcdHJldHVybiBmaWx0ZXJfZGF0YTtcblx0fVxuXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///132\n")}}]); |