1 line
42 KiB
JavaScript
1 line
42 KiB
JavaScript
"use strict";(self.webpackChunktimetrex=self.webpackChunktimetrex||[]).push([["hr-qualification-UserSkillViewController"],{1634:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"UserSkillViewController\": () => (/* binding */ UserSkillViewController)\n/* harmony export */ });\n/* provided dependency */ var _ = __webpack_require__(9050);\n/* provided dependency */ var $ = __webpack_require__(9755);\nclass UserSkillViewController extends BaseViewController {\n\tconstructor( options = {} ) {\n\t\t_.defaults( options, {\n\t\t\tel: '#user_skill_view_container',\n\n\n\n\t\t\tproficiency_array: null,\n\t\t\tdocument_object_type_id: null,\n\t\t\tqualification_group_api: null,\n\t\t\tqualification_api: null,\n\t\t\tqualification_group_array: null,\n\t\t\tsource_type_array: null,\n\t\t\tqualification_array: null,\n\n\t\t\tsub_view_grid_autosize: true\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 = 'UserSkillEditView.html';\n\t\tthis.permission_id = 'user_skill';\n\t\tthis.viewId = 'UserSkill';\n\t\tthis.script_name = 'UserSkillView';\n\t\tthis.table_name_key = 'user_skill';\n\t\tthis.context_menu_name = $.i18n._( 'Skills' );\n\t\tthis.navigation_label = $.i18n._( 'Skill' );\n\t\tthis.api = TTAPI.APIUserSkill;\n\t\tthis.qualification_api = TTAPI.APIQualification;\n\t\tthis.qualification_group_api = TTAPI.APIQualificationGroup;\n\t\tthis.document_object_type_id = 125;\n\t\tthis.render();\n\n\t\t//call init data in parent view\n\t\tif ( !this.sub_view_mode ) {\n\t\t\tthis.buildContextMenu();\n\t\t\tthis.initData();\n\t\t}\n\t}\n\n\tshowNoResultCover( show_new_btn ) {\n\t\tsuper.showNoResultCover( ( this.sub_view_mode ) ? true : false );\n\t}\n\n\tonGridSelectRow() {\n\t\tif ( this.sub_view_mode ) {\n\t\t\tthis.buildContextMenu( true );\n\t\t\tthis.cancelOtherSubViewSelectedStatus();\n\t\t} else {\n\t\t\tthis.buildContextMenu();\n\t\t}\n\t\tthis.setDefaultMenu();\n\t}\n\n\tonGridSelectAll() {\n\t\tif ( this.sub_view_mode ) {\n\t\t\tthis.buildContextMenu( true );\n\t\t\tthis.cancelOtherSubViewSelectedStatus();\n\t\t}\n\t\tthis.setDefaultMenu();\n\t}\n\n\tcancelOtherSubViewSelectedStatus() {\n\t\tswitch ( true ) {\n\t\t\tcase typeof ( this.parent_view_controller.sub_user_education_view_controller ) !== 'undefined':\n\t\t\t\tthis.parent_view_controller.sub_user_education_view_controller.unSelectAll();\n\t\t\tcase typeof ( this.parent_view_controller.sub_user_license_view_controller ) !== 'undefined':\n\t\t\t\tthis.parent_view_controller.sub_user_license_view_controller.unSelectAll();\n\t\t\tcase typeof ( this.parent_view_controller.sub_user_membership_view_controller ) !== 'undefined':\n\t\t\t\tthis.parent_view_controller.sub_user_membership_view_controller.unSelectAll();\n\t\t\tcase typeof ( this.parent_view_controller.sub_user_language_view_controller ) !== 'undefined':\n\t\t\t\tthis.parent_view_controller.sub_user_language_view_controller.unSelectAll();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tonAddClick() {\n\n\t\tif ( this.sub_view_mode ) {\n\t\t\tthis.buildContextMenu( true );\n\t\t}\n\n\t\tsuper.onAddClick();\n\t}\n\n\tinitOptions() {\n\t\tvar $this = this;\n\n\t\tthis.initDropDownOption( 'proficiency' );\n\t\tthis.initDropDownOption( 'source_type' );\n\n\t\tthis.qualification_group_api.getQualificationGroup( '', false, false, {\n\t\t\tonResult: function( res ) {\n\t\t\t\tres = res.getResult();\n\n\t\t\t\tres = Global.buildTreeRecord( res );\n\t\t\t\t$this.qualification_group_array = res;\n\n\t\t\t\tif ( !$this.sub_view_mode && $this.basic_search_field_ui_dic['group_id'] ) {\n\t\t\t\t\t$this.basic_search_field_ui_dic['group_id'].setSourceData( res );\n\t\t\t\t\t$this.adv_search_field_ui_dic['group_id'].setSourceData( res );\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\n\t\tvar args = {};\n\t\tvar filter_data = {};\n\t\tfilter_data.type_id = [10];\n\t\tfilter_data.visibility_type_id = [10, 100]; //10=Internal Only, 100=Both\n\t\targs.filter_data = filter_data;\n\t\tthis.qualification_api.getQualification( args, {\n\t\t\tonResult: function( res ) {\n\t\t\t\tres = res.getResult();\n\n\t\t\t\t$this.qualification_array = res;\n\t\t\t\tif ( !$this.sub_view_mode && $this.basic_search_field_ui_dic['qualification_id'] ) {\n\t\t\t\t\t$this.basic_search_field_ui_dic['qualification_id'].setSourceData( res );\n\t\t\t\t\t$this.adv_search_field_ui_dic['qualification_id'].setSourceData( res );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\tonMassEditClick() {\n\n\t\tvar $this = this;\n\t\t$this.is_add = false;\n\t\t$this.is_viewing = false;\n\t\t$this.is_mass_editing = true;\n\t\tLocalCacheData.current_doing_context_action = 'mass_edit';\n\t\t$this.openEditView();\n\t\tvar filter = {};\n\t\tvar grid_selected_id_array = this.getGridSelectIdArray();\n\t\tvar grid_selected_length = grid_selected_id_array.length;\n\t\tthis.mass_edit_record_ids = [];\n\n\t\t$.each( grid_selected_id_array, function( index, value ) {\n\t\t\t$this.mass_edit_record_ids.push( value );\n\t\t} );\n\n\t\tfilter.filter_data = {};\n\t\tfilter.filter_data.id = this.mass_edit_record_ids;\n\n\t\tthis.api['getCommon' + this.api.key_name + 'Data']( filter, {\n\t\t\tonResult: function( result ) {\n\t\t\t\tvar result_data = result.getResult();\n\n\t\t\t\t$this.unique_columns = {};\n\n\t\t\t\t$this.linked_columns = {};\n\n\t\t\t\tif ( !result_data ) {\n\t\t\t\t\tresult_data = [];\n\t\t\t\t}\n\n\t\t\t\tif ( $this.sub_view_mode && $this.parent_key ) {\n\t\t\t\t\tresult_data[$this.parent_key] = $this.parent_value;\n\t\t\t\t}\n\n\t\t\t\t$this.current_edit_record = result_data;\n\t\t\t\t$this.initEditView();\n\n\t\t\t}\n\t\t} );\n\t}\n\n\tbuildEditViewUI() {\n\n\t\tsuper.buildEditViewUI();\n\n\t\tvar $this = this;\n\n\t\tvar tab_model = {\n\t\t\t'tab_skill': { 'label': $.i18n._( 'Skill' ) },\n\t\t\t'tab_attachment': true,\n\t\t\t'tab_audit': true,\n\t\t};\n\t\tthis.setTabModel( tab_model );\n\n\t\tthis.navigation.AComboBox( {\n\t\t\tapi_class: TTAPI.APIUserSkill,\n\t\t\tid: this.script_name + '_navigation',\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_user_skill',\n\t\t\tnavigation_mode: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\n\t\tthis.setNavigation();\n\n\t\t//Tab 0 start\n\n\t\tvar tab_skill = this.edit_view_tab.find( '#tab_skill' );\n\n\t\tvar tab_skill_column1 = tab_skill.find( '.first-column' );\n\n\t\tthis.edit_view_tabs[0] = [];\n\n\t\tthis.edit_view_tabs[0].push( tab_skill_column1 );\n\n\t\tvar form_item_input;\n\t\tvar widgetContainer;\n\t\tvar label;\n\n\t\t// Employee\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\tfield: 'user_id',\n\t\t\tset_empty: true,\n\t\t\tshow_search_inputs: true\n\t\t} );\n\t\tvar default_args = {};\n\t\tdefault_args.permission_section = 'user_skill';\n\t\tform_item_input.setDefaultArgs( default_args );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Employee' ), form_item_input, tab_skill_column1, '' );\n\n\t\t// Skill\n\t\tvar args = {};\n\t\tvar filter_data = {};\n\t\tfilter_data.type_id = [10];\n\t\tfilter_data.visibility_type_id = [10, 100]; //10=Internal Only, 100=Both\n\t\targs.filter_data = filter_data;\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );\n\t\tform_item_input.AComboBox( {\n\t\t\tapi_class: TTAPI.APIQualification,\n\t\t\tallow_multiple_selection: false,\n\t\t\tlayout_name: 'global_qualification',\n\t\t\tshow_search_inputs: true,\n\t\t\tset_empty: true,\n\t\t\tfield: 'qualification_id'\n\t\t} );\n\n\t\tform_item_input.setDefaultArgs( args );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Skill' ), form_item_input, tab_skill_column1 );\n\n\t\t// Proficiency\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );\n\t\tform_item_input.TComboBox( { field: 'proficiency_id', set_empty: true } );\n\t\tform_item_input.setSourceData( $this.proficiency_array );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Proficiency' ), form_item_input, tab_skill_column1 );\n\n\t\t// First Used Date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'first_used_date' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'First Used Date' ), form_item_input, tab_skill_column1 );\n\n\t\t// Last Used Date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'last_used_date' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Last Used Date' ), form_item_input, tab_skill_column1 );\n\n\t\t// Years Experience\n\t\tvar widgets = [];\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );\n\n\t\tform_item_input.TTextInput( { field: 'experience', width: 50 } );\n\n\t\twidgets.push( form_item_input );\n\n\t\twidgetContainer = $( '<div class=\"widget-h-box\"></div>' );\n\t\tlabel = $( '<span class=\\'widget-right-label\\'> ' + $.i18n._( 'Automatic' ) + '</span>' );\n\n\t\twidgetContainer.append( form_item_input );\n\t\twidgetContainer.append( label );\n\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );\n\t\tform_item_input.TCheckbox( { field: 'enable_calc_experience' } );\n\n\t\twidgets.push( form_item_input );\n\n\t\twidgetContainer.append( form_item_input );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Years Experience' ), widgets, tab_skill_column1, '', widgetContainer );\n\n\t\t// Expiry Date\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );\n\n\t\tform_item_input.TDatePicker( { field: 'expiry_date' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Expiry Date' ), form_item_input, tab_skill_column1, '', null );\n\n\t\t// Description\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TEXT_AREA );\n\t\tform_item_input.TTextArea( { field: 'description', width: '100%' } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Description' ), form_item_input, tab_skill_column1, '', null, null, true );\n\n\t\tform_item_input.parent().width( '45%' );\n\n\t\t//Tags\n\t\tform_item_input = Global.loadWidgetByName( FormItemType.TAG_INPUT );\n\n\t\tform_item_input.TTagInput( { field: 'tag', object_type_id: 251 } );\n\t\tthis.addEditFieldToColumn( $.i18n._( 'Tags' ), form_item_input, tab_skill_column1, '', null, null, true );\n\t}\n\n\tbuildSearchFields() {\n\n\t\tsuper.buildSearchFields();\n\n\t\tvar default_args = {};\n\t\tdefault_args.permission_section = 'user_skill';\n\n\t\tthis.search_fields = [\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Employee' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'user_id',\n\t\t\t\tdefault_args: default_args,\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: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Proficiency' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'proficiency_id',\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Skill' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'qualification_id',\n\t\t\t\tlayout_name: 'global_qualification',\n\t\t\t\tapi_class: TTAPI.APIQualification,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Group' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tmultiple: true,\n\t\t\t\tfield: 'group_id',\n\t\t\t\tlayout_name: 'global_tree_column',\n\t\t\t\ttree_mode: true,\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Source' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tmultiple: true,\n\t\t\t\tfield: 'source_type_id',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tlayout_name: 'global_option_column',\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Expiry Date' ),\n\t\t\t\tin_column: 1,\n\t\t\t\tfield: 'expiry_date',\n\t\t\t\ttree_mode: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.DATE_PICKER\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Tags' ),\n\t\t\t\tfield: 'tag',\n\t\t\t\tbasic_search: true,\n\t\t\t\tadv_search: true,\n\t\t\t\tin_column: 1,\n\t\t\t\tobject_type_id: 251,\n\t\t\t\tform_item_type: FormItemType.TAG_INPUT\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'First Used Date' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'first_used_date',\n\t\t\t\ttree_mode: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.DATE_PICKER\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Last Used Date' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'last_used_date',\n\t\t\t\ttree_mode: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.DATE_PICKER\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Created By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'created_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} ),\n\n\t\t\tnew SearchField( {\n\t\t\t\tlabel: $.i18n._( 'Updated By' ),\n\t\t\t\tin_column: 2,\n\t\t\t\tfield: 'updated_by',\n\t\t\t\tlayout_name: 'global_user',\n\t\t\t\tapi_class: TTAPI.APIUser,\n\t\t\t\tmultiple: true,\n\t\t\t\tbasic_search: false,\n\t\t\t\tadv_search: true,\n\t\t\t\tform_item_type: FormItemType.AWESOME_BOX\n\t\t\t} )\n\t\t];\n\t}\n\n\tsetEditViewDataDone() {\n\t\tsuper.setEditViewDataDone();\n\t\tif ( this.current_edit_record['enable_calc_experience'] ) {\n\t\t\tthis.edit_view_ui_dic['experience'].setEnabled( false );\n\t\t} else {\n\t\t\tthis.edit_view_ui_dic['experience'].setEnabled( true );\n\t\t}\n\t}\n\n\tonFormItemChange( target, doNotValidate ) {\n\t\tthis.setIsChanged( target );\n\t\tthis.setMassEditingFieldsWhenFormChange( target );\n\t\tvar key = target.getField();\n\t\tvar c_value = target.getValue();\n\n\t\tswitch ( key ) {\n\t\t\tcase 'enable_calc_experience':\n\t\t\t\tif ( c_value ) {\n\t\t\t\t\tthis.calcExperience();\n\t\t\t\t} else {\n\t\t\t\t\tthis.edit_view_ui_dic['experience'].setEnabled( true );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'last_used_date':\n\t\t\tcase 'first_used_date':\n\t\t\t\tif ( this.current_edit_record['enable_calc_experience'] ) {\n\t\t\t\t\tthis.calcExperience();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis.current_edit_record[key] = c_value;\n\n\t\tif ( !doNotValidate ) {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\tcalcExperience() {\n\t\tthis.edit_view_ui_dic['experience'].setEnabled( false );\n\t\tvar first_used_date = this.edit_view_ui_dic['first_used_date'].getValue();\n\t\tvar last_used_date = this.edit_view_ui_dic['last_used_date'].getValue();\n\n\t\tlast_used_date = last_used_date ? last_used_date : new Date().format();\n\n\t\tif ( first_used_date !== '' && last_used_date !== '' ) {\n\t\t\tvar result = this.api.calcExperience( first_used_date, last_used_date, { async: false } );\n\t\t\tif ( result ) {\n\t\t\t\tvar experience = result.getResult();\n\t\t\t\tthis.edit_view_ui_dic['experience'].setValue( experience );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.edit_view_ui_dic['experience'].setValue( 0 );\n\t\t}\n\t}\n\n\tsearchDone() {\n\t\tsuper.searchDone();\n\t\tTTPromise.resolve( 'Employee_Qualifications_Tab', 'UserSkillViewController' );\n\t}\n\n\tuniformVariable( records ) {\n\t\tif ( Global.isArray( records.user_id ) && records.user_id.length > 0 ) {\n\t\t\tlet new_records = [];\n\t\t\tfor ( let key in records.user_id ) {\n\t\t\t\tnew_records.push( Object.assign( {}, records, { user_id: records.user_id[key] } ) );\n\t\t\t}\n\t\t\treturn new_records;\n\t\t}\n\t\treturn records;\n\t}\n}\n\nUserSkillViewController.loadSubView = function( container, beforeViewLoadedFun, afterViewLoadedFun ) {\n\tGlobal.loadViewSource( 'UserSkill', 'SubUserSkillView.html', function( result ) {\n\t\tvar args = {};\n\t\tvar template = _.template( result );\n\n\t\tif ( Global.isSet( beforeViewLoadedFun ) ) {\n\t\t\tbeforeViewLoadedFun();\n\t\t}\n\t\tif ( Global.isSet( container ) ) {\n\t\t\tcontainer.html( template( args ) );\n\t\t\tif ( Global.isSet( afterViewLoadedFun ) ) {\n\t\t\t\tafterViewLoadedFun( sub_user_skill_view_controller );\n\t\t\t}\n\t\t}\n\t} );\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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S0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLFdBQVcsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsV0FBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxXQUFXLENBQUM7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsYUFBYSxnQ0FBZ0M7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixDQUFDOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9pbnRlcmZhY2UvaHRtbDUvdmlld3MvaHIvcXVhbGlmaWNhdGlvbi9Vc2VyU2tpbGxWaWV3Q29udHJvbGxlci5qcz9hMWYxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBVc2VyU2tpbGxWaWV3Q29udHJvbGxlciBleHRlbmRzIEJhc2VWaWV3Q29udHJvbGxlciB7XG5cdGNvbnN0cnVjdG9yKCBvcHRpb25zID0ge30gKSB7XG5cdFx0Xy5kZWZhdWx0cyggb3B0aW9ucywge1xuXHRcdFx0ZWw6ICcjdXNlcl9za2lsbF92aWV3X2NvbnRhaW5lcicsXG5cblxuXG5cdFx0XHRwcm9maWNpZW5jeV9hcnJheTogbnVsbCxcblx0XHRcdGRvY3VtZW50X29iamVjdF90eXBlX2lkOiBudWxsLFxuXHRcdFx0cXVhbGlmaWNhdGlvbl9ncm91cF9hcGk6IG51bGwsXG5cdFx0XHRxdWFsaWZpY2F0aW9uX2FwaTogbnVsbCxcblx0XHRcdHF1YWxpZmljYXRpb25fZ3JvdXBfYXJyYXk6IG51bGwsXG5cdFx0XHRzb3VyY2VfdHlwZV9hcnJheTogbnVsbCxcblx0XHRcdHF1YWxpZmljYXRpb25fYXJyYXk6IG51bGwsXG5cblx0XHRcdHN1Yl92aWV3X2dyaWRfYXV0b3NpemU6IHRydWVcblx0XHR9ICk7XG5cblx0XHRzdXBlciggb3B0aW9ucyApO1xuXHR9XG5cblx0aW5pdCggb3B0aW9ucyApIHtcblx0XHQvL3RoaXMuX3N1cGVyKCdpbml0aWFsaXplJywgb3B0aW9ucyApO1xuXHRcdHRoaXMuZWRpdF92aWV3X3RwbCA9ICdVc2VyU2tpbGxFZGl0Vmlldy5odG1sJztcblx0XHR0aGlzLnBlcm1pc3Npb25faWQgPSAndXNlcl9za2lsbCc7XG5cdFx0dGhpcy52aWV3SWQgPSAnVXNlclNraWxsJztcblx0XHR0aGlzLnNjcmlwdF9uYW1lID0gJ1VzZXJTa2lsbFZpZXcnO1xuXHRcdHRoaXMudGFibGVfbmFtZV9rZXkgPSAndXNlcl9za2lsbCc7XG5cdFx0dGhpcy5jb250ZXh0X21lbnVfbmFtZSA9ICQuaTE4bi5fKCAnU2tpbGxzJyApO1xuXHRcdHRoaXMubmF2aWdhdGlvbl9sYWJlbCA9ICQuaTE4bi5fKCAnU2tpbGwnICk7XG5cdFx0dGhpcy5hcGkgPSBUVEFQSS5BUElVc2VyU2tpbGw7XG5cdFx0dGhpcy5xdWFsaWZpY2F0aW9uX2FwaSA9IFRUQVBJLkFQSVF1YWxpZmljYXRpb247XG5cdFx0dGhpcy5xdWFsaWZpY2F0aW9uX2dyb3VwX2FwaSA9IFRUQVBJLkFQSVF1YWxpZmljYXRpb25Hcm91cDtcblx0XHR0aGlzLmRvY3VtZW50X29iamVjdF90eXBlX2lkID0gMTI1O1xuXHRcdHRoaXMucmVuZGVyKCk7XG5cblx0XHQvL2NhbGwgaW5pdCBkYXRhIGluIHBhcmVudCB2aWV3XG5cdFx0aWYgKCAhdGhpcy5zdWJfdmlld19tb2RlICkge1xuXHRcdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCk7XG5cdFx0XHR0aGlzLmluaXREYXRhKCk7XG5cdFx0fVxuXHR9XG5cblx0c2hvd05vUmVzdWx0Q292ZXIoIHNob3dfbmV3X2J0biApIHtcblx0XHRzdXBlci5zaG93Tm9SZXN1bHRDb3ZlciggKCB0aGlzLnN1Yl92aWV3X21vZGUgKSA/IHRydWUgOiBmYWxzZSApO1xuXHR9XG5cblx0b25HcmlkU2VsZWN0Um93KCkge1xuXHRcdGlmICggdGhpcy5zdWJfdmlld19tb2RlICkge1xuXHRcdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCB0cnVlICk7XG5cdFx0XHR0aGlzLmNhbmNlbE90aGVyU3ViVmlld1NlbGVjdGVkU3RhdHVzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYnVpbGRDb250ZXh0TWVudSgpO1xuXHRcdH1cblx0XHR0aGlzLnNldERlZmF1bHRNZW51KCk7XG5cdH1cblxuXHRvbkdyaWRTZWxlY3RBbGwoKSB7XG5cdFx0aWYgKCB0aGlzLnN1Yl92aWV3X21vZGUgKSB7XG5cdFx0XHR0aGlzLmJ1aWxkQ29udGV4dE1lbnUoIHRydWUgKTtcblx0XHRcdHRoaXMuY2FuY2VsT3RoZXJTdWJWaWV3U2VsZWN0ZWRTdGF0dXMoKTtcblx0XHR9XG5cdFx0dGhpcy5zZXREZWZhdWx0TWVudSgpO1xuXHR9XG5cblx0Y2FuY2VsT3RoZXJTdWJWaWV3U2VsZWN0ZWRTdGF0dXMoKSB7XG5cdFx0c3dpdGNoICggdHJ1ZSApIHtcblx0XHRcdGNhc2UgdHlwZW9mICggdGhpcy5wYXJlbnRfdmlld19jb250cm9sbGVyLnN1Yl91c2VyX2VkdWNhdGlvbl92aWV3X2NvbnRyb2xsZXIgKSAhPT0gJ3VuZGVmaW5lZCc6XG5cdFx0XHRcdHRoaXMucGFyZW50X3ZpZXdfY29udHJvbGxlci5zdWJfdXNlcl9lZHVjYXRpb25fdmlld19jb250cm9sbGVyLnVuU2VsZWN0QWxsKCk7XG5cdFx0XHRjYXNlIHR5cGVvZiAoIHRoaXMucGFyZW50X3ZpZXdfY29udHJvbGxlci5zdWJfdXNlcl9saWNlbnNlX3ZpZXdfY29udHJvbGxlciApICE9PSAndW5kZWZpbmVkJzpcblx0XHRcdFx0dGhpcy5wYXJlbnRfdmlld19jb250cm9sbGVyLnN1Yl91c2VyX2xpY2Vuc2Vfdmlld19jb250cm9sbGVyLnVuU2VsZWN0QWxsKCk7XG5cdFx0XHRjYXNlIHR5cGVvZiAoIHRoaXMucGFyZW50X3ZpZXdfY29udHJvbGxlci5zdWJfdXNlcl9tZW1iZXJzaGlwX3ZpZXdfY29udHJvbGxlciApICE9PSAndW5kZWZpbmVkJzpcblx0XHRcdFx0dGhpcy5wYXJlbnRfdmlld19jb250cm9sbGVyLnN1Yl91c2VyX21lbWJlcnNoaXBfdmlld19jb250cm9sbGVyLnVuU2VsZWN0QWxsKCk7XG5cdFx0XHRjYXNlIHR5cGVvZiAoIHRoaXMucGFyZW50X3ZpZXdfY29udHJvbGxlci5zdWJfdXNlcl9sYW5ndWFnZV92aWV3X2NvbnRyb2xsZXIgKSAhPT0gJ3VuZGVmaW5lZCc6XG5cdFx0XHRcdHRoaXMucGFyZW50X3ZpZXdfY29udHJvbGxlci5zdWJfdXNlcl9sYW5ndWFnZV92aWV3X2NvbnRyb2xsZXIudW5TZWxlY3RBbGwoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0b25BZGRDbGljaygpIHtcblxuXHRcdGlmICggdGhpcy5zdWJfdmlld19tb2RlICkge1xuXHRcdFx0dGhpcy5idWlsZENvbnRleHRNZW51KCB0cnVlICk7XG5cdFx0fVxuXG5cdFx0c3VwZXIub25BZGRDbGljaygpO1xuXHR9XG5cblx0aW5pdE9wdGlvbnMoKSB7XG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdHRoaXMuaW5pdERyb3BEb3duT3B0aW9uKCAncHJvZmljaWVuY3knICk7XG5cdFx0dGhpcy5pbml0RHJvcERvd25PcHRpb24oICdzb3VyY2VfdHlwZScgKTtcblxuXHRcdHRoaXMucXVhbGlmaWNhdGlvbl9ncm91cF9hcGkuZ2V0UXVhbGlmaWNhdGlvbkdyb3VwKCAnJywgZmFsc2UsIGZhbHNlLCB7XG5cdFx0XHRvblJlc3VsdDogZnVuY3Rpb24oIHJlcyApIHtcblx0XHRcdFx0cmVzID0gcmVzLmdldFJlc3VsdCgpO1xuXG5cdFx0XHRcdHJlcyA9IEdsb2JhbC5idWlsZFRyZWVSZWNvcmQoIHJlcyApO1xuXHRcdFx0XHQkdGhpcy5xdWFsaWZpY2F0aW9uX2dyb3VwX2FycmF5ID0gcmVzO1xuXG5cdFx0XHRcdGlmICggISR0aGlzLnN1Yl92aWV3X21vZGUgJiYgJHRoaXMuYmFzaWNfc2VhcmNoX2ZpZWxkX3VpX2RpY1snZ3JvdXBfaWQnXSApIHtcblx0XHRcdFx0XHQkdGhpcy5iYXNpY19zZWFyY2hfZmllbGRfdWlfZGljWydncm91cF9pZCddLnNldFNvdXJjZURhdGEoIHJlcyApO1xuXHRcdFx0XHRcdCR0aGlzLmFkdl9zZWFyY2hfZmllbGRfdWlfZGljWydncm91cF9pZCddLnNldFNvdXJjZURhdGEoIHJlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHR2YXIgYXJncyA9IHt9O1xuXHRcdHZhciBmaWx0ZXJfZGF0YSA9IHt9O1xuXHRcdGZpbHRlcl9kYXRhLnR5cGVfaWQgPSBbMTBdO1xuXHRcdGZpbHRlcl9kYXRhLnZpc2liaWxpdHlfdHlwZV9pZCA9IFsxMCwgMTAwXTsgLy8xMD1JbnRlcm5hbCBPbmx5LCAxMDA9Qm90aFxuXHRcdGFyZ3MuZmlsdGVyX2RhdGEgPSBmaWx0ZXJfZGF0YTtcblx0XHR0aGlzLnF1YWxpZmljYXRpb25fYXBpLmdldFF1YWxpZmljYXRpb24oIGFyZ3MsIHtcblx0XHRcdG9uUmVzdWx0OiBmdW5jdGlvbiggcmVzICkge1xuXHRcdFx0XHRyZXMgPSByZXMuZ2V0UmVzdWx0KCk7XG5cblx0XHRcdFx0JHRoaXMucXVhbGlmaWNhdGlvbl9hcnJheSA9IHJlcztcblx0XHRcdFx0aWYgKCAhJHRoaXMuc3ViX3ZpZXdfbW9kZSAmJiAkdGhpcy5iYXNpY19zZWFyY2hfZmllbGRfdWlfZGljWydxdWFsaWZpY2F0aW9uX2lkJ10gKSB7XG5cdFx0XHRcdFx0JHRoaXMuYmFzaWNfc2VhcmNoX2ZpZWxkX3VpX2RpY1sncXVhbGlmaWNhdGlvbl9pZCddLnNldFNvdXJjZURhdGEoIHJlcyApO1xuXHRcdFx0XHRcdCR0aGlzLmFkdl9zZWFyY2hfZmllbGRfdWlfZGljWydxdWFsaWZpY2F0aW9uX2lkJ10uc2V0U291cmNlRGF0YSggcmVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cblxuXHRvbk1hc3NFZGl0Q2xpY2soKSB7XG5cblx0XHR2YXIgJHRoaXMgPSB0aGlzO1xuXHRcdCR0aGlzLmlzX2FkZCA9IGZhbHNlO1xuXHRcdCR0aGlzLmlzX3ZpZXdpbmcgPSBmYWxzZTtcblx0XHQkdGhpcy5pc19tYXNzX2VkaXRpbmcgPSB0cnVlO1xuXHRcdExvY2FsQ2FjaGVEYXRhLmN1cnJlbnRfZG9pbmdfY29udGV4dF9hY3Rpb24gPSAnbWFzc19lZGl0Jztcblx0XHQkdGhpcy5vcGVuRWRpdFZpZXcoKTtcblx0XHR2YXIgZmlsdGVyID0ge307XG5cdFx0dmFyIGdyaWRfc2VsZWN0ZWRfaWRfYXJyYXkgPSB0aGlzLmdldEdyaWRTZWxlY3RJZEFycmF5KCk7XG5cdFx0dmFyIGdyaWRfc2VsZWN0ZWRfbGVuZ3RoID0gZ3JpZF9zZWxlY3RlZF9pZF9hcnJheS5sZW5ndGg7XG5cdFx0dGhpcy5tYXNzX2VkaXRfcmVjb3JkX2lkcyA9IFtdO1xuXG5cdFx0JC5lYWNoKCBncmlkX3NlbGVjdGVkX2lkX2FycmF5LCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0JHRoaXMubWFzc19lZGl0X3JlY29yZF9pZHMucHVzaCggdmFsdWUgKTtcblx0XHR9ICk7XG5cblx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEgPSB7fTtcblx0XHRmaWx0ZXIuZmlsdGVyX2RhdGEuaWQgPSB0aGlzLm1hc3NfZWRpdF9yZWNvcmRfaWRzO1xuXG5cdFx0dGhpcy5hcGlbJ2dldENvbW1vbicgKyB0aGlzLmFwaS5rZXlfbmFtZSArICdEYXRhJ10oIGZpbHRlciwge1xuXHRcdFx0b25SZXN1bHQ6IGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0XHRcdHZhciByZXN1bHRfZGF0YSA9IHJlc3VsdC5nZXRSZXN1bHQoKTtcblxuXHRcdFx0XHQkdGhpcy51bmlxdWVfY29sdW1ucyA9IHt9O1xuXG5cdFx0XHRcdCR0aGlzLmxpbmtlZF9jb2x1bW5zID0ge307XG5cblx0XHRcdFx0aWYgKCAhcmVzdWx0X2RhdGEgKSB7XG5cdFx0XHRcdFx0cmVzdWx0X2RhdGEgPSBbXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggJHRoaXMuc3ViX3ZpZXdfbW9kZSAmJiAkdGhpcy5wYXJlbnRfa2V5ICkge1xuXHRcdFx0XHRcdHJlc3VsdF9kYXRhWyR0aGlzLnBhcmVudF9rZXldID0gJHRoaXMucGFyZW50X3ZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHRoaXMuY3VycmVudF9lZGl0X3JlY29yZCA9IHJlc3VsdF9kYXRhO1xuXHRcdFx0XHQkdGhpcy5pbml0RWRpdFZpZXcoKTtcblxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxuXG5cdGJ1aWxkRWRpdFZpZXdVSSgpIHtcblxuXHRcdHN1cGVyLmJ1aWxkRWRpdFZpZXdVSSgpO1xuXG5cdFx0dmFyICR0aGlzID0gdGhpcztcblxuXHRcdHZhciB0YWJfbW9kZWwgPSB7XG5cdFx0XHQndGFiX3NraWxsJzogeyAnbGFiZWwnOiAkLmkxOG4uXyggJ1NraWxsJyApIH0sXG5cdFx0XHQndGFiX2F0dGFjaG1lbnQnOiB0cnVlLFxuXHRcdFx0J3RhYl9hdWRpdCc6IHRydWUsXG5cdFx0fTtcblx0XHR0aGlzLnNldFRhYk1vZGVsKCB0YWJfbW9kZWwgKTtcblxuXHRcdHRoaXMubmF2aWdhdGlvbi5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlclNraWxsLFxuXHRcdFx0aWQ6IHRoaXMuc2NyaXB0X25hbWUgKyAnX25hdmlnYXRpb24nLFxuXHRcdFx0YWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3VzZXJfc2tpbGwnLFxuXHRcdFx0bmF2aWdhdGlvbl9tb2RlOiB0cnVlLFxuXHRcdFx0c2hvd19zZWFyY2hfaW5wdXRzOiB0cnVlXG5cdFx0fSApO1xuXG5cdFx0dGhpcy5zZXROYXZpZ2F0aW9uKCk7XG5cblx0XHQvL1RhYiAwIHN0YXJ0XG5cblx0XHR2YXIgdGFiX3NraWxsID0gdGhpcy5lZGl0X3ZpZXdfdGFiLmZpbmQoICcjdGFiX3NraWxsJyApO1xuXG5cdFx0dmFyIHRhYl9za2lsbF9jb2x1bW4xID0gdGFiX3NraWxsLmZpbmQoICcuZmlyc3QtY29sdW1uJyApO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXSA9IFtdO1xuXG5cdFx0dGhpcy5lZGl0X3ZpZXdfdGFic1swXS5wdXNoKCB0YWJfc2tpbGxfY29sdW1uMSApO1xuXG5cdFx0dmFyIGZvcm1faXRlbV9pbnB1dDtcblx0XHR2YXIgd2lkZ2V0Q29udGFpbmVyO1xuXHRcdHZhciBsYWJlbDtcblxuXHRcdC8vIEVtcGxveWVlXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogdHJ1ZSxcblx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3VzZXInLFxuXHRcdFx0ZmllbGQ6ICd1c2VyX2lkJyxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZVxuXHRcdH0gKTtcblx0XHR2YXIgZGVmYXVsdF9hcmdzID0ge307XG5cdFx0ZGVmYXVsdF9hcmdzLnBlcm1pc3Npb25fc2VjdGlvbiA9ICd1c2VyX3NraWxsJztcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0RGVmYXVsdEFyZ3MoIGRlZmF1bHRfYXJncyApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRW1wbG95ZWUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3NraWxsX2NvbHVtbjEsICcnICk7XG5cblx0XHQvLyBTa2lsbFxuXHRcdHZhciBhcmdzID0ge307XG5cdFx0dmFyIGZpbHRlcl9kYXRhID0ge307XG5cdFx0ZmlsdGVyX2RhdGEudHlwZV9pZCA9IFsxMF07XG5cdFx0ZmlsdGVyX2RhdGEudmlzaWJpbGl0eV90eXBlX2lkID0gWzEwLCAxMDBdOyAvLzEwPUludGVybmFsIE9ubHksIDEwMD1Cb3RoXG5cdFx0YXJncy5maWx0ZXJfZGF0YSA9IGZpbHRlcl9kYXRhO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5BQ29tYm9Cb3goIHtcblx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJUXVhbGlmaWNhdGlvbixcblx0XHRcdGFsbG93X211bHRpcGxlX3NlbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9xdWFsaWZpY2F0aW9uJyxcblx0XHRcdHNob3dfc2VhcmNoX2lucHV0czogdHJ1ZSxcblx0XHRcdHNldF9lbXB0eTogdHJ1ZSxcblx0XHRcdGZpZWxkOiAncXVhbGlmaWNhdGlvbl9pZCdcblx0XHR9ICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0RGVmYXVsdEFyZ3MoIGFyZ3MgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1NraWxsJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9za2lsbF9jb2x1bW4xICk7XG5cblx0XHQvLyBQcm9maWNpZW5jeVxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuQ09NQk9fQk9YICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRDb21ib0JveCggeyBmaWVsZDogJ3Byb2ZpY2llbmN5X2lkJywgc2V0X2VtcHR5OiB0cnVlIH0gKTtcblx0XHRmb3JtX2l0ZW1faW5wdXQuc2V0U291cmNlRGF0YSggJHRoaXMucHJvZmljaWVuY3lfYXJyYXkgKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ1Byb2ZpY2llbmN5JyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9za2lsbF9jb2x1bW4xICk7XG5cblx0XHQvLyBGaXJzdCBVc2VkIERhdGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkRBVEVfUElDS0VSICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVERhdGVQaWNrZXIoIHsgZmllbGQ6ICdmaXJzdF91c2VkX2RhdGUnIH0gKTtcblx0XHR0aGlzLmFkZEVkaXRGaWVsZFRvQ29sdW1uKCAkLmkxOG4uXyggJ0ZpcnN0IFVzZWQgRGF0ZScgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc2tpbGxfY29sdW1uMSApO1xuXG5cdFx0Ly8gTGFzdCBVc2VkIERhdGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkRBVEVfUElDS0VSICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVERhdGVQaWNrZXIoIHsgZmllbGQ6ICdsYXN0X3VzZWRfZGF0ZScgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnTGFzdCBVc2VkIERhdGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3NraWxsX2NvbHVtbjEgKTtcblxuXHRcdC8vIFllYXJzIEV4cGVyaWVuY2Vcblx0XHR2YXIgd2lkZ2V0cyA9IFtdO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5URVhUX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRleHRJbnB1dCggeyBmaWVsZDogJ2V4cGVyaWVuY2UnLCB3aWR0aDogNTAgfSApO1xuXG5cdFx0d2lkZ2V0cy5wdXNoKCBmb3JtX2l0ZW1faW5wdXQgKTtcblxuXHRcdHdpZGdldENvbnRhaW5lciA9ICQoICc8ZGl2IGNsYXNzPVwid2lkZ2V0LWgtYm94XCI+PC9kaXY+JyApO1xuXHRcdGxhYmVsID0gJCggJzxzcGFuIGNsYXNzPVxcJ3dpZGdldC1yaWdodC1sYWJlbFxcJz4gJyArICQuaTE4bi5fKCAnQXV0b21hdGljJyApICsgJzwvc3Bhbj4nICk7XG5cblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBmb3JtX2l0ZW1faW5wdXQgKTtcblx0XHR3aWRnZXRDb250YWluZXIuYXBwZW5kKCBsYWJlbCApO1xuXG5cdFx0Zm9ybV9pdGVtX2lucHV0ID0gR2xvYmFsLmxvYWRXaWRnZXRCeU5hbWUoIEZvcm1JdGVtVHlwZS5DSEVDS0JPWCApO1xuXHRcdGZvcm1faXRlbV9pbnB1dC5UQ2hlY2tib3goIHsgZmllbGQ6ICdlbmFibGVfY2FsY19leHBlcmllbmNlJyB9ICk7XG5cblx0XHR3aWRnZXRzLnB1c2goIGZvcm1faXRlbV9pbnB1dCApO1xuXG5cdFx0d2lkZ2V0Q29udGFpbmVyLmFwcGVuZCggZm9ybV9pdGVtX2lucHV0ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdZZWFycyBFeHBlcmllbmNlJyApLCB3aWRnZXRzLCB0YWJfc2tpbGxfY29sdW1uMSwgJycsIHdpZGdldENvbnRhaW5lciApO1xuXG5cdFx0Ly8gRXhwaXJ5IERhdGVcblx0XHRmb3JtX2l0ZW1faW5wdXQgPSBHbG9iYWwubG9hZFdpZGdldEJ5TmFtZSggRm9ybUl0ZW1UeXBlLkRBVEVfUElDS0VSICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVERhdGVQaWNrZXIoIHsgZmllbGQ6ICdleHBpcnlfZGF0ZScgfSApO1xuXHRcdHRoaXMuYWRkRWRpdEZpZWxkVG9Db2x1bW4oICQuaTE4bi5fKCAnRXhwaXJ5IERhdGUnICksIGZvcm1faXRlbV9pbnB1dCwgdGFiX3NraWxsX2NvbHVtbjEsICcnLCBudWxsICk7XG5cblx0XHQvLyBEZXNjcmlwdGlvblxuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEVYVF9BUkVBICk7XG5cdFx0Zm9ybV9pdGVtX2lucHV0LlRUZXh0QXJlYSggeyBmaWVsZDogJ2Rlc2NyaXB0aW9uJywgd2lkdGg6ICcxMDAlJyB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdEZXNjcmlwdGlvbicgKSwgZm9ybV9pdGVtX2lucHV0LCB0YWJfc2tpbGxfY29sdW1uMSwgJycsIG51bGwsIG51bGwsIHRydWUgKTtcblxuXHRcdGZvcm1faXRlbV9pbnB1dC5wYXJlbnQoKS53aWR0aCggJzQ1JScgKTtcblxuXHRcdC8vVGFnc1xuXHRcdGZvcm1faXRlbV9pbnB1dCA9IEdsb2JhbC5sb2FkV2lkZ2V0QnlOYW1lKCBGb3JtSXRlbVR5cGUuVEFHX0lOUFVUICk7XG5cblx0XHRmb3JtX2l0ZW1faW5wdXQuVFRhZ0lucHV0KCB7IGZpZWxkOiAndGFnJywgb2JqZWN0X3R5cGVfaWQ6IDI1MSB9ICk7XG5cdFx0dGhpcy5hZGRFZGl0RmllbGRUb0NvbHVtbiggJC5pMThuLl8oICdUYWdzJyApLCBmb3JtX2l0ZW1faW5wdXQsIHRhYl9za2lsbF9jb2x1bW4xLCAnJywgbnVsbCwgbnVsbCwgdHJ1ZSApO1xuXHR9XG5cblx0YnVpbGRTZWFyY2hGaWVsZHMoKSB7XG5cblx0XHRzdXBlci5idWlsZFNlYXJjaEZpZWxkcygpO1xuXG5cdFx0dmFyIGRlZmF1bHRfYXJncyA9IHt9O1xuXHRcdGRlZmF1bHRfYXJncy5wZXJtaXNzaW9uX3NlY3Rpb24gPSAndXNlcl9za2lsbCc7XG5cblx0XHR0aGlzLnNlYXJjaF9maWVsZHMgPSBbXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdFbXBsb3llZScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ3VzZXJfaWQnLFxuXHRcdFx0XHRkZWZhdWx0X2FyZ3M6IGRlZmF1bHRfYXJncyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0Zm9ybV9pdGVtX3R5cGU6IEZvcm1JdGVtVHlwZS5BV0VTT01FX0JPWFxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgU2VhcmNoRmllbGQoIHtcblx0XHRcdFx0bGFiZWw6ICQuaTE4bi5fKCAnUHJvZmljaWVuY3knICksXG5cdFx0XHRcdGluX2NvbHVtbjogMSxcblx0XHRcdFx0ZmllbGQ6ICdwcm9maWNpZW5jeV9pZCcsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX29wdGlvbl9jb2x1bW4nLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdTa2lsbCcgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAxLFxuXHRcdFx0XHRmaWVsZDogJ3F1YWxpZmljYXRpb25faWQnLFxuXHRcdFx0XHRsYXlvdXRfbmFtZTogJ2dsb2JhbF9xdWFsaWZpY2F0aW9uJyxcblx0XHRcdFx0YXBpX2NsYXNzOiBUVEFQSS5BUElRdWFsaWZpY2F0aW9uLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRmb3JtX2l0ZW1fdHlwZTogRm9ybUl0ZW1UeXBlLkFXRVNPTUVfQk9YXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdHcm91cCcgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0ZmllbGQ6ICdncm91cF9pZCcsXG5cdFx0XHRcdGxheW91dF9uYW1lOiAnZ2xvYmFsX3RyZWVfY29sdW1uJyxcblx0XHRcdFx0dHJlZV9tb2RlOiB0cnVlLFxuXHRcdFx0XHRiYXNpY19zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1NvdXJjZScgKSxcblx0XHRcdFx0aW5fY29sdW1uOiAyLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZSxcblx0XHRcdFx0ZmllbGQ6ICdzb3VyY2VfdHlwZV9pZCcsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0YWR2X3NlYXJjaDogdHJ1ZSxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfb3B0aW9uX2NvbHVtbicsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0V4cGlyeSBEYXRlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdGZpZWxkOiAnZXhwaXJ5X2RhdGUnLFxuXHRcdFx0XHR0cmVlX21vZGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVJcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1RhZ3MnICksXG5cdFx0XHRcdGZpZWxkOiAndGFnJyxcblx0XHRcdFx0YmFzaWNfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRhZHZfc2VhcmNoOiB0cnVlLFxuXHRcdFx0XHRpbl9jb2x1bW46IDEsXG5cdFx0XHRcdG9iamVjdF90eXBlX2lkOiAyNTEsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuVEFHX0lOUFVUXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBTZWFyY2hGaWVsZCgge1xuXHRcdFx0XHRsYWJlbDogJC5pMThuLl8oICdGaXJzdCBVc2VkIERhdGUnICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdmaXJzdF91c2VkX2RhdGUnLFxuXHRcdFx0XHR0cmVlX21vZGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVJcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0xhc3QgVXNlZCBEYXRlJyApLFxuXHRcdFx0XHRpbl9jb2x1bW46IDIsXG5cdFx0XHRcdGZpZWxkOiAnbGFzdF91c2VkX2RhdGUnLFxuXHRcdFx0XHR0cmVlX21vZGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuREFURV9QSUNLRVJcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ0NyZWF0ZWQgQnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICdjcmVhdGVkX2J5Jyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IFNlYXJjaEZpZWxkKCB7XG5cdFx0XHRcdGxhYmVsOiAkLmkxOG4uXyggJ1VwZGF0ZWQgQnknICksXG5cdFx0XHRcdGluX2NvbHVtbjogMixcblx0XHRcdFx0ZmllbGQ6ICd1cGRhdGVkX2J5Jyxcblx0XHRcdFx0bGF5b3V0X25hbWU6ICdnbG9iYWxfdXNlcicsXG5cdFx0XHRcdGFwaV9jbGFzczogVFRBUEkuQVBJVXNlcixcblx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdGJhc2ljX3NlYXJjaDogZmFsc2UsXG5cdFx0XHRcdGFkdl9zZWFyY2g6IHRydWUsXG5cdFx0XHRcdGZvcm1faXRlbV90eXBlOiBGb3JtSXRlbVR5cGUuQVdFU09NRV9CT1hcblx0XHRcdH0gKVxuXHRcdF07XG5cdH1cblxuXHRzZXRFZGl0Vmlld0RhdGFEb25lKCkge1xuXHRcdHN1cGVyLnNldEVkaXRWaWV3RGF0YURvbmUoKTtcblx0XHRpZiAoIHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFsnZW5hYmxlX2NhbGNfZXhwZXJpZW5jZSddICkge1xuXHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydleHBlcmllbmNlJ10uc2V0RW5hYmxlZCggZmFsc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydleHBlcmllbmNlJ10uc2V0RW5hYmxlZCggdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdG9uRm9ybUl0ZW1DaGFuZ2UoIHRhcmdldCwgZG9Ob3RWYWxpZGF0ZSApIHtcblx0XHR0aGlzLnNldElzQ2hhbmdlZCggdGFyZ2V0ICk7XG5cdFx0dGhpcy5zZXRNYXNzRWRpdGluZ0ZpZWxkc1doZW5Gb3JtQ2hhbmdlKCB0YXJnZXQgKTtcblx0XHR2YXIga2V5ID0gdGFyZ2V0LmdldEZpZWxkKCk7XG5cdFx0dmFyIGNfdmFsdWUgPSB0YXJnZXQuZ2V0VmFsdWUoKTtcblxuXHRcdHN3aXRjaCAoIGtleSApIHtcblx0XHRcdGNhc2UgJ2VuYWJsZV9jYWxjX2V4cGVyaWVuY2UnOlxuXHRcdFx0XHRpZiAoIGNfdmFsdWUgKSB7XG5cdFx0XHRcdFx0dGhpcy5jYWxjRXhwZXJpZW5jZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZWRpdF92aWV3X3VpX2RpY1snZXhwZXJpZW5jZSddLnNldEVuYWJsZWQoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2xhc3RfdXNlZF9kYXRlJzpcblx0XHRcdGNhc2UgJ2ZpcnN0X3VzZWRfZGF0ZSc6XG5cdFx0XHRcdGlmICggdGhpcy5jdXJyZW50X2VkaXRfcmVjb3JkWydlbmFibGVfY2FsY19leHBlcmllbmNlJ10gKSB7XG5cdFx0XHRcdFx0dGhpcy5jYWxjRXhwZXJpZW5jZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdHRoaXMuY3VycmVudF9lZGl0X3JlY29yZFtrZXldID0gY192YWx1ZTtcblxuXHRcdGlmICggIWRvTm90VmFsaWRhdGUgKSB7XG5cdFx0XHR0aGlzLnZhbGlkYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0Y2FsY0V4cGVyaWVuY2UoKSB7XG5cdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydleHBlcmllbmNlJ10uc2V0RW5hYmxlZCggZmFsc2UgKTtcblx0XHR2YXIgZmlyc3RfdXNlZF9kYXRlID0gdGhpcy5lZGl0X3ZpZXdfdWlfZGljWydmaXJzdF91c2VkX2RhdGUnXS5nZXRWYWx1ZSgpO1xuXHRcdHZhciBsYXN0X3VzZWRfZGF0ZSA9IHRoaXMuZWRpdF92aWV3X3VpX2RpY1snbGFzdF91c2VkX2RhdGUnXS5nZXRWYWx1ZSgpO1xuXG5cdFx0bGFzdF91c2VkX2RhdGUgPSBsYXN0X3VzZWRfZGF0ZSA/IGxhc3RfdXNlZF9kYXRlIDogbmV3IERhdGUoKS5mb3JtYXQoKTtcblxuXHRcdGlmICggZmlyc3RfdXNlZF9kYXRlICE9PSAnJyAmJiBsYXN0X3VzZWRfZGF0ZSAhPT0gJycgKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gdGhpcy5hcGkuY2FsY0V4cGVyaWVuY2UoIGZpcnN0X3VzZWRfZGF0ZSwgbGFzdF91c2VkX2RhdGUsIHsgYXN5bmM6IGZhbHNlIH0gKTtcblx0XHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0XHR2YXIgZXhwZXJpZW5jZSA9IHJlc3VsdC5nZXRSZXN1bHQoKTtcblx0XHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydleHBlcmllbmNlJ10uc2V0VmFsdWUoIGV4cGVyaWVuY2UgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lZGl0X3ZpZXdfdWlfZGljWydleHBlcmllbmNlJ10uc2V0VmFsdWUoIDAgKTtcblx0XHR9XG5cdH1cblxuXHRzZWFyY2hEb25lKCkge1xuXHRcdHN1cGVyLnNlYXJjaERvbmUoKTtcblx0XHRUVFByb21pc2UucmVzb2x2ZSggJ0VtcGxveWVlX1F1YWxpZmljYXRpb25zX1RhYicsICdVc2VyU2tpbGxWaWV3Q29udHJvbGxlcicgKTtcblx0fVxuXG5cdHVuaWZvcm1WYXJpYWJsZSggcmVjb3JkcyApIHtcblx0XHRpZiAoIEdsb2JhbC5pc0FycmF5KCByZWNvcmRzLnVzZXJfaWQgKSAmJiByZWNvcmRzLnVzZXJfaWQubGVuZ3RoID4gMCApIHtcblx0XHRcdGxldCBuZXdfcmVjb3JkcyA9IFtdO1xuXHRcdFx0Zm9yICggbGV0IGtleSBpbiByZWNvcmRzLnVzZXJfaWQgKSB7XG5cdFx0XHRcdG5ld19yZWNvcmRzLnB1c2goIE9iamVjdC5hc3NpZ24oIHt9LCByZWNvcmRzLCB7IHVzZXJfaWQ6IHJlY29yZHMudXNlcl9pZFtrZXldIH0gKSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5ld19yZWNvcmRzO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVjb3Jkcztcblx0fVxufVxuXG5Vc2VyU2tpbGxWaWV3Q29udHJvbGxlci5sb2FkU3ViVmlldyA9IGZ1bmN0aW9uKCBjb250YWluZXIsIGJlZm9yZVZpZXdMb2FkZWRGdW4sIGFmdGVyVmlld0xvYWRlZEZ1biApIHtcblx0R2xvYmFsLmxvYWRWaWV3U291cmNlKCAnVXNlclNraWxsJywgJ1N1YlVzZXJTa2lsbFZpZXcuaHRtbCcsIGZ1bmN0aW9uKCByZXN1bHQgKSB7XG5cdFx0dmFyIGFyZ3MgPSB7fTtcblx0XHR2YXIgdGVtcGxhdGUgPSBfLnRlbXBsYXRlKCByZXN1bHQgKTtcblxuXHRcdGlmICggR2xvYmFsLmlzU2V0KCBiZWZvcmVWaWV3TG9hZGVkRnVuICkgKSB7XG5cdFx0XHRiZWZvcmVWaWV3TG9hZGVkRnVuKCk7XG5cdFx0fVxuXHRcdGlmICggR2xvYmFsLmlzU2V0KCBjb250YWluZXIgKSApIHtcblx0XHRcdGNvbnRhaW5lci5odG1sKCB0ZW1wbGF0ZSggYXJncyApICk7XG5cdFx0XHRpZiAoIEdsb2JhbC5pc1NldCggYWZ0ZXJWaWV3TG9hZGVkRnVuICkgKSB7XG5cdFx0XHRcdGFmdGVyVmlld0xvYWRlZEZ1biggc3ViX3VzZXJfc2tpbGxfdmlld19jb250cm9sbGVyICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1634\n")}}]); |